如何在Debian上做端口转发/redirect?

我有两个问题。

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

问题2:如果我的debian机器有两个接口:eth3和192.168.57.28,ppp0和一些dynamicIP,有人试图通过端口1234上的ppp0连接,我该如何将请求redirect到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 

但它不起作用。

 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端口。 这个规则本身并不能完成这个工作,因为iptables拒绝所有传入的连接。 然后我们接受从eth3连接到端口1234的连接到第二个规则的publich IP连接到Internet。 我们在FORWARD链中添加第二条规则,允许将数据包转发到192.168.57.25的端口80。

编辑: POSTROUTING添加。

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

编辑2:刚刚得到的提示,它应该是 – 到目的地而不是 – (sry)

感谢Daywalker和DánjalSalberg Adlersson。 经过数小时的宣誓,iptables的端口转发终于正常工作。 (在Debian上testing)

的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