我想build立一个TCP DNAT从127.0.0.1,端口4242到11.22.33.44,在Linux 3.x端口5353(目前3.2.52,但我可以升级,如果需要)。
它看起来像简单的DNAT规则设置不起作用, telnet 127.0.0.1 4242在Trying 127.0.0.1...挂起一分钟,然后超时。 也许是因为内核丢弃了返回的数据包(比如SYN + ACK),因为它认为是火星。 我不需要解释为什么简单的解决scheme不起作用,我需要一个解决scheme,即使它很复杂(例如它涉及创build可能的规则)。
我可以从127.0.0.0/8networking之外的另一个本地IP地址build立一个通常的DNAT,但现在我需要127.0.0.1作为目的地址。 我知道我可以设置一个用户级的端口转发过程,但是现在我需要一个可以使用iptables设置的解决scheme,而不需要帮助程序。
我一个小时在Google上search。 有人问了很多次,但我找不到任何有效的解决办法。
还有关于DNAT到127.0.0.1的许多问题,但我不需要,我需要相反的。
请注意,单个iptables -j REDIRECT规则将不起作用,因为我需要将传出数据包的IP地址从127.0.0.1更改为11.22.33.44, -j REDIRECT无法更改IP地址。
这是你需要的东西吗? iptables端口redirect不适用于本地主机
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 443 -j REDIRECT --to-ports 8080
阿德里安
这适用于我,将stream量从localhost:8081路由到172.17.0.1:80 ,其中172.17.0.1是一个名为docker0的网桥接口。
sysctl -w net.ipv4.conf.docker0.route_localnet=1 iptables -t nat -A OUTPUT -o lo -p tcp -m tcp --dport 8081 -j DNAT --to-destination 172.17.0.1:80 iptables -t nat -A POSTROUTING -o docker0 -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
难题的一个关键部分是MASQUERADE规则。
更多的启发: