我们目前正在设置一个系统,其中使用 Linux 计算机 (debian) 作为 WiFi 控制和路由器。 Linux 计算机通过 WiFi(wlan0 和 wlan1)连接到两个 WiFi 网络(我们称之为 A 和 B)。然后,PC 通过以太网连接到 Linux 盒子,以允许它访问两个 WiFi 网络上的任何设备。查看 ASCII 艺术图像
WiFi A (192.170.1.xx)
/
/
PC (192.168.2.xx) ----- (192.168.2.1) Linux (192.170.1.253)
\
\
WiFi B (192.170.1.xx)
我们需要路由的协议:
- 从 PC 通过 SSH 连接到任何 192.170.1.xx 设备
- 从 PC 通过端口 1234/4321 到任何 192.170.1.xx 设备的 TCP
- 从 PC PING 到任何 192.170.1.xx 设备
问题涉及如何设置 IPTables
- PC 的网关设置为 192.168.2.1,因此 PC 发送到 192.170.1.xx 的任何数据包都会被路由到 Linux 盒子吗?
这是我认为应该有效的(尚未测试)。您能否指出这是正确的还是我的逻辑存在根本性错误?
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan 1-m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
答案1
注意:Wifi A 和 B 必须位于不同的子网中,否则 Linux 系统会报错。
我假设 eth0 用于 PC,那么您可以使用此规则来实现您想要的 ssh 和 tcp 端口:
iptables -t filter -A FORWARD -i eth0 -o <Interface> -d <Des subnet> -p tcp --dport <Des Port> -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
要允许 ping,您可以使用:
iptables -t filter -A FORWARD -i eth0 -o <Interface> -d <Des subnet> -p icmp --icmp-type 8 -j ACCEPT
答案2
由于您似乎对 Wifi A 和 WiFi B 使用相同的地址范围,并且 Linux 盒子在该范围内只有一个地址,我认为您需要桥接两个 WLAN 接口(即将它们视为单个网络),在这种情况下您的 iptables 规则需要引用桥接口。
看这个问题有关在桥接网络上配置过滤的一些想法。或者,如果您为每个 wifi 网络分配了不同的子网 192.170.1.xx,那么 Linux 盒子在每个子网上将需要 1 个 IP 地址,而不是您指定的单个 192.170.1.253 地址。