在具有多个 IP 的 Linux 机器上,我在将特权端口重定向到绑定到特定 IP 的服务器正在监听的非特权端口时遇到问题。
将此规则添加到 iptables 以将传入流量从端口 80 重定向到 8080:
iptables --table nat --append PREROUTING --protocol tcp --dport 80 \
--jump REDIRECT --to-ports 8080
然后启动netcat监听所有IP,端口8080:
nc -l 0.0.0.0 8080
然后从另一台机器向80端口发送一个数据包:
echo foo | nc 10.0.0.39:80
echo foo | nc 10.0.0.39:8080
这两个数据包都已收到。现在来谈谈奇怪的事情。当您让 netcat 监听特定 IP 时,它看不到重定向的数据包。
nc -l 10.0.0.39 8080
现在发送到端口 80 的数据包未被接收;仅接收端口 8080 上的数据包。区别显然在于服务器如何绑定监听端口——0.0.0.0 可以工作,但特定 IP 则不可以。
问题不在于 netcat,因为 nginx(我在这里进行基于 IP 的虚拟主机)也有同样的问题。
我尝试通过指定目标地址是 10.0.0.39 来扩展 iptables 规则,但这仍然不起作用。
答案1
重定向,或者透明地伪装成远离客户端应用程序的东西?如果你想要透明度,那么类似这样的方法可能会有效
iptables -A PREROUTING -t nat -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.39:8080
iptables -A OUTPUT -t nat -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.39:8080