需要 iptables 命令允许所有 WAN 发起的流量进入路由器的 LAN 端

需要 iptables 命令允许所有 WAN 发起的流量进入路由器的 LAN 端

我有三个路由器。Router0 的 WAN 接口连接到 ISP,Router1 和 Router2 的 WAN 接口连接到 Router0 的 LAN 接口(即硬接线)。因此,它看起来是这样的,包括 IP 空间分配:

(Motorola SBG6580 Cable Modem)
Router0 LAN IP: 192.168.0.1 (also the default route for both WAN connections shown next).

(Linksys E4200)
Router1 WAN IP: 192.168.0.3 
Router1 LAN IP: 192.168.1.1 (also the default route for clients on the 192.168.1.xxx subnet).

(ASUS RT-AC66U)
Router2 WAN IP: 192.168.0.4
Router2 LAN IP: 192.168.2.1 (also the default route for clients on the 192.168.2.xxx subnet).

总而言之,路由器 1 和路由器 2 的 WAN 端口各自连接到路由器 0 的 LAN 端口,并且都启用了 NAT(即进行 NATting)。

以下分别是路由器 1 和路由器 2 的路由表(即 netstat -rn):

Kernel IP routing table (Router1) ... eth0 here is the WAN interface.
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.1     *               255.255.255.255 UH        0 0          0 eth0
192.168.2.0     192.168.0.4     255.255.255.0   UG        0 0          0 eth0 <========== My Static Route Entry
192.168.1.0     *               255.255.255.0   U         0 0          0 br0
192.168.0.0     *               255.255.255.0   U         0 0          0 eth0
127.0.0.0       *               255.0.0.0       U         0 0          0 lo
default         192.168.0.1     0.0.0.0         UG        0 0          0 eth0

Kernel IP routing table (Router2) ... vlan2 here is the WAN interface.
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.1     0.0.0.0         255.255.255.255 UH        0 0          0 vlan2
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 br0
192.168.1.0     192.168.0.3     255.255.255.0   UG        0 0          0 vlan2 <========== My Static Route Entry
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 vlan2
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 vlan2

注意我在每个路由器(Router1 和 Router2)上配置的静态路由(箭头指向)。它们的目的是允许 Router1 LAN 子网上的客户端访问 Router2 LAN 子网上的客户端,反之亦然。

但它还不能完全发挥作用,因为接下来,我需要在 Router1 和 Router2 上添加“iptable”条目,以告诉它们允许所有 WAN 发起流量传递至其 LAN 端。

因此此时,使用两台有线 PC(一台连接到 Router1 的 LAN 子网,另一台连接到 Router2 的 LAN 子网),我可以验证以下 ping 是否有效:

PC1 -- 192.168.1.4: Can ping 192.168.0.4 (the WAN interface of the opposite router) and can ping 192.168.2.1 (the LAN interface of the opposite router).
PC2 -- 192.168.2.4: Can ping 192.168.0.3 (the WAN interface of the opposite router) and can ping 192.168.1.1 (the LAN interface of the opposite router).

但此时,两台 PC 都无法访问 IP 客户端里面对面路由器的 LAN 子网。如上所述,它们可以 ping 对面路由器的 WAN IP,也可以 ping 对面 LAN 子网的默认路由 IP,但无法 ping 对面 LAN 子网内部更深层的 IP 客户端。

我认为,这是因为 Router1 和 Router2 上也需要有一个 IPTABLES 条目,允许所有来自 WAN 端的流量进入 LAN 端 — 出于安全原因,这几乎从来不是路由器的默认行为。但在这种情况下,这样做是安全的,因为 Router1 和 Router2 的 WAN 接口不直接连接到 ISP 互联网。

因此,我必须想出 iptables(1)(防火墙)命令来实现这一点。我将重新阅读 Unix 手册页以回忆 iptables 语法。

但也许这里的一些已经熟悉 iptables 的人可以建议这些命令应该是什么。为了提供帮助,下面是NATRouter1 和 Router2 的 iptables 条目。它们各自需要各自的 iptables 规则,以允许所有 WAN 发起的流量到达 LAN 网络:

Router1 ...('iptables -L -t nat' 的输出):

admin@RT-AC66U:/tmp/home/root# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
VSERVER    all  --  anywhere             192.168.0.3         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  -- !192.168.0.3          anywhere            
MASQUERADE  all  --  anywhere             anywhere            MARK match 0xd001 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain VSERVER (1 references)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             anywhere            tcp dpt:webcache to:192.168.1.1:80 
DNAT       tcp  --  anywhere             anywhere            tcp dpt:8443 to:192.168.1.1:8443 
VUPNP      all  --  anywhere             anywhere            

Chain VUPNP (1 references)
target     prot opt source               destination

Router2 ...('iptables -L -t nat' 的输出):

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             192.168.2.0/24      
WANPREROUTING  all  --  anywhere         192.168.0.4

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere            
SNAT       all  --  192.168.2.0/24       192.168.2.0/24      to:192.168.2.1 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain WANPREROUTING (1 references)
target     prot opt source               destination         
DNAT       icmp --  anywhere             anywhere            to:192.168.2.1

我很感激这方面的帮助(即 iptables 命令)。如果我先找到解决方案,我当然会发布 iptables 命令。

答案1

所有设备都在进行 NAT。因此,192.168.1.0 和 192.168.2.0 不存在于其本地 LAN 之外。将两个内部路由器设置为“路由”(非 NAT)模式。祝你好运,让电缆调制解调器能够 NAT“外部”地址。

相关内容