我有一个包含 3 个子网的家庭网络(我喜欢玩玩!)
我一直在努力解决一些我认为很容易的事情,但几天后我并没有更接近答案。我的网络如图所示这个图片
主子网是192.168.1.0/24,它连接到192.168.2.0/24通过带有以太网的笔记本电脑(192.168.1.2)和无线网络(192.168.2.1) 适配器。
我在跑步主机和dhcpd在带有 2 个 NIC 的笔记本电脑上(带有IP伪装) - 所以我用它作为 WiFi 热点。那里的设置工作正常(已经有一段时间了)。我最近添加了一个wifi路由器,它连接到192.168.1.0/24通过 WAN 连接器以太网链路 (192.168.1.10),在192.168.3.0/24子网范围。
主子网连接到 Linux 盒子(192.168.1.1),它充当内部网络的互联网网关路由器(带有IP伪装用于往返公共互联网的数据包)。
如果我是在Linux 盒子(路由器)我可以 ping 通192.168.1.2也192.168.2.2(在路由表中添加条目以到达192.168.2.0/24子网):
ip route add 192.168.2.0/24 via 192.168.1.2
我的目标是到达手机(192.168.2.2)从笔记本电脑(192.168.3.2)无线连接到wifi路由器,而wifi路由器又连接到192.168.1.0/24子网。
这就是出问题的地方。我认为数据包源自192.168.3.2- 目的地是192.168.2.2- 将被发送至192.168.1.1(无线路由器的默认网关),并且由于192.168.1.1可以平192.168.2.2,我认为这会起作用(因为上面提到的路由条目)。
Linux 路由器上启用了 IP 转发(192.168.1.1)以及在笔记本电脑上充当 WiFi 热点。我在这里尝试做的事情是否可能,或者我是否缺少一些基本概念?
- 路由表
Routing table for 192.168.1.1:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 10 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.2.0 192.168.1.25 255.255.255.0 UG 0 0 0 eth1
Routing table for 192.168.1.2:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
谢谢你们!
答案1
在这里,我必须承认一个非常盲目的疏忽,并回答我自己的问题(至少是让我绊倒的部分!)
我有一个脚本开始和停止我的 Linux 路由器设置(设置防火墙规则、启用 IP 转发和伪装等),并在停止命令。中的其中一行停止部分是:
iptables -P FORWARD DROP
这将FORWARD
策略设置为DROP
- 有效地终止数据包转发,因此是我所有问题的原因!最后就像添加一样简单
ip route add 192.168.2.0/24 via 192.168.1.2
路由到 Linux 路由器上的路由表。来自不同子网的数据包被正确转发到192.168.1.1,如果需要的话,它们会从那里进一步转发,通过192.168.1.25子网的 GW192.168.2.0/24
感谢武特尔和用户2999479谁的答案让我进一步挖掘自己的设置:)
答案2
正如您在 Gateway Linux 盒子上所做的那样,您可以在 Wifi 路由器上添加路由吗(那是什么品牌/型号的路由器?)?
根据经验,我注意到不同的 IP 堆栈处理某些 IP 服务(例如 DHCP、伪装和转发)的方式存在差异。还可能值得注意的是 192.168.1.1 和 192.168.3.2 上的操作系统和 TCP/IP 版本,以帮助进一步排除故障。
答案3
造成麻烦的是 192.168.1.2 上的伪装。 ping 数据包可能到达 192.168.2.2,但返回的 pong 被伪装,因此不会被 192.168.1.1 接收。
无论如何,没有必要在 192.168.1.2 上进行伪装 (NAT)。如果您正确设置了路由,192.168.2.0/24 流量应该能够按原样到达您的整个内部网络。当 192.168.2.2 想要访问互联网时,在 192.168.1.1 上执行伪装就足够了(如果配置正确,并且在 192.168.1.1 上正确设置了到 192.168.2.0/24 和 192.168.3.0/24 的路由)。
您也将无法 ping 192.168.3.2,除非您可以告诉您的 wifi 路由器不要执行伪装。