如何在Debian上进行端口转发/重定向?


12

我有两个问题。

问题1:我的debian机器的eth3接口的IP地址为192.168.57.28。如果有人尝试连接到192.168.57.28:1234,如何将请求重定向到另一台计算机:192.168.57.25:80?

问题2:如果我的debian机器有两个接口:eth3(带有192.168.57.28)和ppp0(带有一些动态IP),并且有人尝试通过端口1234上的ppp0连接,如何将请求重定向到192.168.57.25:80?

我已经试过了:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

但这不起作用。

Answers:


12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

第一个指定将到端口1234的所有传入tcp连接都应发送到内部计算机192.168.57.25的端口80。仅凭此规则并不能完成工作,因为iptables拒绝所有传入的连接。然后,我们接受从eth3到端口1234的传入连接,该连接通过第二条规则使用publich IP连接到Internet。我们在FORWARD链中添加第二条规则,以允许将数据包转发到192.168.57.25的端口80。

编辑: POSTROUTING已添加。

跟踪连接。否则,外部主机将看到他不知道的内部IP 192.168.57.25。

EDIT2:刚刚暗示它应该是--to-destination而不是--to (sry)


我已经尝试过您的建议,但是没有用。我可以浏览到192.168.57.25,然后网页会返回,但是浏览到192.168.57.28:1234不起作用。
DánjalSalberg Adlersson

@DánjalSalbergAdlersson更新了我的帖子(缺少一些东西。
对不起

3
我尝试了您的建议,但没有成功。然后我更改为最后一个:iptables -A POSTROUTING -t nat -j MASQUERADE,然后它起作用了!
DánjalSalberg Adlersson

8

感谢Daywalker和DánjalSalberg Adlersson。经过数小时的咒骂,使用iptables进行端口转发终于可以了。(在Debian上测试)

bash脚本

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE

为什么在POSTROUTING行中省略了“ -s 192.168.57.25”?
edwardsmarkf

还省略了“ -o eth3”
edwardsmarkf

我看到POSTROUTING行上的-s和-o似乎是可选的。关于使用SSL有什么想法吗?我在这里问了这个问题,并引用了您的脚本: superuser.com/questions/1387902/…–
edwardsmarkf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.