我有这样一个网络:
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。
有人可以帮助我吗?
答案 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调用并重新启动计算机。