我试图做一些简单的TCP端口转发
[root @ wcmisdlin02〜]#cat / proc / sys / net / ipv4 / ip_forward 0 [root @ wcmisdlin02〜]#/ bin / echo 1> / proc / sys / net / ipv4 / ip_forward [root @ wcmisdlin02〜]#cat / proc / sys / net / ipv4 / ip_forward 1 [root @ wcmisdlin02〜]#iptables --list 连锁input(政策接受) 目标人select源目的地 RH-Firewall-1-INPUT全部在任何地方 连锁FORWARD(政策接受) 目标人select源目的地 RH-Firewall-1-INPUT全部在任何地方 链式输出(策略ACCEPT) 目标人select源目的地 连锁RH-Firewall-1-INPUT(2参考) 目标人select源目的地 随时随地接受 接受ICMP - 任何地方任何地方icmp 接受ESP - 在任何地方 接受啊 - 任何地方的任何地方 接受udp - 任何地方224.0.0.251 udp dpt:mdns 接受udp - 任何地方udp dpt:ipp 接受tcp - 随处任何地方tcp dpt:ipp 接受所有 - 任何地方任何地方的状态 相关成立 接受TCP - 任何地方任何地方状态新 tcp dpt:mysql 接受TCP - 任何地方任何地方状态新 tcp dpt:ssh 接受TCP - 任何地方任何地方状态新 tcp dpt:http 接受TCP - 任何地方任何地方状态新 tcp dpt:ftp 接受TCP - 任何地方任何地方状态新 tcp dpt:https 全部拒收 - 任何地方 拒绝 - 与icmp主机禁止 [root @ wcmisdlin02〜]#iptables --table nat --append PREROUTING --proto tcp --dport 80 - jump DNAT - 到10.52.208.223:80 [root @ wcmisdlin02〜]#iptables --table nat --list PREROUTING 连锁PREROUTING(政策接受) 目标人select源目的地 DNAT tcp - 在任何地方tcp dpt:http:10.52.208.223:80 [root @ wcmisdlin02〜]#curl --verbose http://10.52.208.221:80 *关于连接()到10.52.208.221端口80 *尝试10.52.208.221 ...连接被拒绝 *无法连接到主机 *closures连接#0 curl:(7)无法连接到主机 [root @ wcmisdlin02〜]#
您正在将stream量发送到10.52.208.221。 鉴于你张贴的configuration,你的问题是networking服务器,而不是防火墙。 你的规则看起来是正确的。 FORWARD和INPUT被redirect到RH-Firewall-1-INPUT,您的第一条规则是允许所有stream量。 正如其他人指出的那样,你可以允许eth1上的所有stream量,而世界实际上是以eth0进入的。 次要的,你必须将stream量转换回世界
iptables --table nat --append POSTROUTING --proto tcp --dport 80 --jump MASQUERADE -o OUT_INTERFACE
来自路由器的stream量不会碰到input或转发链,而是会将输出链转到networking服务器。 该子网中的其他系统也将直接进入networking服务器。 但是,世界各地的系统将遍布INPUT / FORWARD链,需要SNAT以及DNAT,因此世界似乎是一台机器。 您仍然无法从您的networking中进行testing。 您必须从Web服务器的相反接口进行testing。 给我你的IP地址,我会指出你正确的configuration。
拒绝连接意味着至less有一台主机正在接受TCP数据包,但没有服务正在侦听该端口。 当从不同的IP连接到10.52.208.221:80和10.52.208.223时会发生什么?
我现在不能testing它,但是我已经看到了一些情况,从IP地址表设置的主机连接到NAT的IP地址不起作用。 我不确定这是否是这种情况,因为您没有明确定义应用规则的接口,但是我已经看到一些情况,在这些情况下,Linux将IP连接到“本地”并使用回送接口并跳过iptables。
无论如何,你可以从盒子外面试试吗?