Iptables:在同一个桥接网络内从一个主机转发到另一个主机的端口

时间:2014-10-21 14:18:08

标签: linux networking iptables

我有这样一个网络:

Internet <===> Modem/Router <--------->  Switch
           1.2.3.4    192.168.1.1/24     |  |  |
                                         |  |  |
                                   +-----+  |  +------+
                                   |        |         |
                                  PC 2      |        PC 3
                          192.168.1.3/24    |       192.168.1.4/24
                                            |
                                           PC 1
                                       192.168.1.2/24
                                           /|\
                                           WLAN
                                          / | \
                                    PC W1 PC W2 PC W3 
                                     192.168.1.X/24 (X>10)

调制解调器/路由器也充当DHCP服务器。在公共IP 1.2.3.4上发送的任何请求都将重定向到内部网络上的192.168.1.2。调制解调器/路由器属于ISP,我无法访问/配置它。 PC 1是一个linux盒子:eth0和wlan0被桥接(被奴役到br0,地址为192.168.1.2); hostapd在PC 1上运行,与PC WX共享互联网连接。我想将连接到PC 1上的某些端口重定向到同一网络上的PC,例如:

1.2.3.4:2222 > 192.168.1.2:2222 -> 192.168.1.3:22
1.2.3.4:3333 > 192.168.1.2:3333 -> 192.168.1.4:25

我尝试使用iptables并启用ip_forward

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 192.168.1.2 -p tcp --dport 2222 -j DNAT --to 192.168.1.3:22
iptables -t nat -A POSTROUTING -d 192.168.1.3 -p tcp --dport 22 -j SNAT --to-source 192.168.1.2

等其他端口,但它没有工作。我发现通过WLAN连接到任何其他PC的重定向工作正常。似乎,使用iptables PREROUTING规则与桥接器一起,一旦数据包从一侧进入桥接器(eth0),它只能流向另一侧(wlan0),但不能出去扔掉相同的输入界面。当桥接器被禁用时,上述布置工作正常,但我不想将PC 1用作路由器而仅用作AP。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您建议的规则应该进行微调。虽然iptables&#39;手册页,您必须指定协议作为匹配的第一个参数,如下所示:

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.2 --dport 2222 -j DNAT --to 192.168.1.3:22
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.3 --dport 22 -j SNAT --to-source 192.168.1.2

请注意,第二条规则不是必需的,因为第一条规则会触发iptables自动处理回复。

如果仍然无法正常工作,请尝试在通过echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables遍历网桥时禁用iptables调用并重新启动计算机。