我有 2 个家用路由器,想允许(某些)设备跨子网通信。
- ROUTER#1(ASUS RT-AC87U),子网 192.168.1.0/24,作为连接 ISP 的主路由器
- 路由器#2(NETGEAR WGR614 v7),子网 192.168.2.0/24,将其 WAN 端口连接到路由器#1 LAN 端口
[INTERNET] -> [WAN] ROUTER#1 [LAN] -> [WAN] ROUTER#2 [LAN] -> PC#2
如何允许直接连接到 ROUTER#1 的设备与 ROUTER#2 上的设备通信(通过 ROUTER#2 子网上的 IP),但反之则不行?
例如,假设 PC#1 (192.168.1.217) 连接到 ROUTER#1 LAN,则访问 PC#2 (192.168.2.10) 连接到 ROUTER#2 的 LAN 端口。作为测试,我尝试通过以下方式访问托管在 PC#2 端口 80 上的虚拟 Web 服务器http://192.168.2.10/index.html或 ping 192.168.2.10。
如果我在 ROUTER#2 的端口 80 上配置端口转发以转发到 PC#2(192.168.2.10),并通过 ROUTER#1 子网(192.168.1.5)上的 ROUTER#2 IP 访问它,它可以按预期工作,但这不是目标。
ROUTER#1 需要保留与 ISP 连接的主路由器。此外,ROUTER#2 需要提供自己的子网和 DHCP。
ROUTER#1 允许我配置静态路由、防火墙 (iptable)。ROUTER#2 的配置限制更多,允许我启用/禁用 SPI 防火墙并配置静态路由。我搜索过,但找不到 ROUTER#2 上对 NAT 的任何控制。
仅供参考:我是网络方面的新手,但我正在努力在过程中学习。
设置摘要
路由器#1(华硕 RT-AC87U)
- WAN 端口连接到 ISP 调制解调器
- 路由器#2(192.168.1.5)连接到LAN端口
- PC#1(192.168.1.217)连接到 LAN 端口
- 为路由器#2保留IP(192.168.1.5)
- 通过 192.168.1.5 接口 br0 转发 192.168.2.0/24 的静态路由条目
- 如果 br0,iptables FORWARD 链上的条目将接受 src 192.168.1.0/24 dst 192.168.2.0/24
路由器#2(NETGEAR WGR614 v7)
- WAN 口连接到 ROUTER#1 LAN 口
- PC#2(IP:192.168.2.10)连接到路由器#2 LAN 端口(在端口 80 上运行虚拟 Web 服务器)
- 端口转发绑定 80:80 dst 192.168.2.10
- SPI 防火墙已禁用
- 启用互联网端口上的 ping 响应
从 PC#1
- 可以 ping 通 192.168.1.5 上的路由器#2
- 无法 ping 通 192.168.2.1 上的路由器#2
- 无法 ping 192.168.2.10 上的 PC#2
- 无法访问 192.168.2.10:80 上的 Web 服务器
设置详情
路由器 #1 (华硕 RT-AC87U)
广域网
- (PPPoE 至 ISP)
局域网
- IP地址:192.168.1.1
- 子网掩码:255.255.255.0
- DNS 服务器:1.1.1.1
DHCP 服务器
- IP 池起始:192.168.1.200
- IP 池结束:192.168.1.254
- 手动分配:192.168.1.5 至路由器 #2
LAN 路由 - 静态路由
- 网络/主机 IP:192.168.2.0
- 网络掩码:255.255.255.0
- 网关:192.168.1.5
- 度量:1
- 接口:LAN(br0)
路由表
Destination Gateway Genmask Flags Metric Ref Use Iface
(...)
169.254.39.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.2.0 192.168.1.5 255.255.255.0 UG 1 0 0 br0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
(...)
iptables 转发
Chain FORWARD (policy ACCEPT)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- tun21 * 0.0.0.0/0 0.0.0.0/0
2 6558 363K TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS clamp to PMTU
3 60 3120 ACCEPT all -- br0 br0 192.168.1.0/24 192.168.2.0/24
4 0 0 SECURITY all -- ppp0 * 0.0.0.0/0 0.0.0.0/0
路由器 #2 (NETGEAR WGR614 v7)
广域网 (静态 IP)
- IP地址:192.168.1.5
- IP 子网掩码:255.255.255.0
- 网关 IP 地址:192.168.1.1
局域网
- IP地址:192.168.2.1
- 子网掩码:255.255.255.0
- DNS 服务器:192.168.1.1
DHCP 服务器
- IP 池起始:192.168.2.10
- IP 池结束:192.168.2.20
答案1
如何允许直接连接到 ROUTER#1 的设备与 ROUTER#2 上的设备通信(通过 ROUTER#2 子网上的 IP),但反之则不行?
在这种情况下,您不需要 – ROUTER#2 的功能不足以实现这一点。您需要能够配置“SPI防火墙”根据您的描述允许和阻止数据包。
(“SPI” 基本上只是意味着它有一条--state established -j ACCEPT
规则,因此它允许回复数据包进入,但不允许新连接进入。不幸的是,在您的情况下,它与您要求的方向相反。)
路由配置在这里不会有帮助,因为路由器#2 已经有到路由器#1 网络的路由(因为它的 WAN 接口实际上是该网络的一部分),并且你有点需要该路由,以便路由器#2 能够将回复数据包传送到路由器#1 网络上的授权 PC;如果它有回复路由,那么它也有一个“新”数据包的路由。
我搜索过,但未能找到对 ROUTER#2 上的 NAT 的任何控制。
理论上这不是问题;这样的控制只会禁用方向 #2→#1 的 NAT(并且你不希望任何数据包朝那个方向走反正)。 那里是默认情况下,#1→#2 没有 NAT(只有“端口转发”规则);很可能是防火墙丢弃了入站数据包。