用于两个 wifi 网络的数据包路由的 IPTables

用于两个 wifi 网络的数据包路由的 IPTables

我们目前正在设置一个系统,其中使用 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)

我们需要路由的协议:

  1. 从 PC 通过 SSH 连接到任何 192.170.1.xx 设备
  2. 从 PC 通过端口 1234/4321 到任何 192.170.1.xx 设备的 TCP
  3. 从 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 地址。

相关内容