当前位置: 首页>前端>正文

子网连通中火狐的诡异行为

光猫(桥接模式)、单臂软路由(OpenWrt)、TPLINK 路由器接到同一交换机上,其他设备接在 TPLINK 下。主要涉及如下三个局域网段:

  • 网段 A: 192.168.0.x 是 TPLINK 下的设备, TPLINK lan 口为 192.168.0.1 。
  • 网段 B: 192.168.2.x 是 TPLINK 与软路由通信的网段,TPLINK 的 wan 口 IP 是 192.168.2.2, 软路由 lan 口 IP 是 192.168.2.1。
  • 网段 C: 192.168.1.x 是光猫了lan 口的网段,光猫 lan 口 IP 为 192.168.1.1.

网络拓扑示意如下,注意虽然软路由实际拨号连互联网时在链路层面是经过光猫的,但逻辑上这里只考虑能进入光猫管理界面的lan口,所以把光猫lan和互联网分开了。


子网连通中火狐的诡异行为,第1张
网络拓扑示意

网段 A 内设备正常上网只需要 A、B 段设置正常且软路由拨号成功即可,并不需要网段 C。但若要进入光猫的管理界面,那就必须得通过网段 C。现在想用网段 A 的设备,比如 y,IP 是 192.168.0.6 来访问光猫。直接在浏览器上输入 192.168.1.1 是打不开的,因为它们属于不同网段。y 到软路由 lan 口 .2.1 是通的,但是到不了 .1.1,这需要 .2.1 把数据【转发】到 .1.3 才行。软路由上 .2.1 是 lan 接口, .1.3 是我定义的 lan_dhcp 接口。按说只需要在软路由的【网络=>防火墙】中增加 lan_dhcp 与 lan 间的转发规则即可,见下图。

子网连通中火狐的诡异行为,第2张

然而实际上这样设置后在 y 上 ping 192.168.1.1 根本不通,用浏览器自然也是无法打开 192.168.1.1 的。注意如果是在软路由上执行 ping 192.168.1.1 是通的,在 y 上执行 ping 192.168.2.1 也是通的(这是显然的,因为 openwrt 的控制页面就是在 y 上通过 .2.1 访问的),所以问题似乎确实是出在 .2.1 到 .1.3 间的转发上了。通过在 y 上 ping 192.168.1.1 并同时在软路由上执行 tcpdump -i eth0v1 -vnn icmp 查看流量(eth0v1 是 .1.3 口的网卡)发现只有 192.168.2.2 -> 192.168.1.1 的 request,但没有 reply,说明对方没有响应。若进一步修改设置,取消 lan 到 lan_dhcp 的转发,如下图所示,则 tcpdump 根本收不到数据,连 request 都没有了。

子网连通中火狐的诡异行为,第3张

这么看来,.2.1 到 .1.3 的转发应该是成功了的,只是 .1.1 没有回应而已!为什么没有回应呢?我的理解是光猫本身的设置导致,我猜光猫的设置应该是只对同一网段(即 C 网段)的请求进行回应,而上面抓包数据显示发送请求的是 192.168.2.2,显然它与光猫不在一个网段,所以光猫没有回应,ping 不通!既然如此,只需要 nat 一下就行了。此时只需在防火墙的“NAT规则”中添加如下规则即可,然后 y 上就 ping 通了!tcpdump 中也能获取到 reply 了,不过此时得到的是 192.168.1.3 -> 192.168.1.1 的 request 和 192.168.1.1 -> 192.168.1.3 的 reply。源地址 .2.2 被替换成了 .1.3 后光猫才给回应。

子网连通中火狐的诡异行为,第4张

如果不设上面的 nat 规则的话,也可以通过选中【IP动态伪装】选项达到类似效果,也是可以 ping 通的。IP 动态伪装英文对应 MASQUERADE,其实也就是自动 nat,因为 dhcp 获取的 IP 可能会变化,如果对固定 IP 进行 nat 设置,当设备的 IP 发生变化后设置就失效了,所以需要对动态的 IP 进行自动的地址转换。在 IPV4 协议下,通常内网通过路由器上外网时路由器都要干 masq 这个活,否则内网就上不了外网。其实这里的 C 网段对于 A 网段的 y 设备来说就是外网。

子网连通中火狐的诡异行为,第5张

既然 ping 通了,按说应该正常了,可谁知道用 firefox 打开 192.168.1.1 时却无法进入光猫的管理界面,得到的确实如下两种情况。注意我实际是远程通过代理到 A 网段访问 192.168.1.1 的,在启用代理的情况下,当我在 firefox 的地址栏里输入 192.168.1.1 并回车后,它总会自动的在后面加上 /cgi-bin/luci/,此时实际与光猫是通的,但光猫上并没有 /cgi-bin/luci/ 这个路径,故总是导致 404 错误,如下图1所示。如果我把代理关掉,此时根本与 C 网段不通,这时地址栏中输入 192.168.1.1 并回车后虽然没有显式的在后面添加东西,但是实际显示的网页却依然是加了 /cgi-bin/luci/ 的效果,显示的是 OpenWrt 的 LUCI 加载页面,如下图2所示,但也仅到此为止,因为网络根本不通,再点也没有反应了。为什么会这样真是莫名其妙,即使清除了 192.168.1.1 的缓存也不管用,依然如此!

子网连通中火狐的诡异行为,第6张

于是我尝试换个浏览器,用 chrome 连 192.168.1.1(先代理到 A 网段),很顺利的就打开了光猫的管理页面!此外,我用 firefox 的隐私模式打开 192.168.1.1 也正常打开了!我又试了非隐私模式下一个全新配置的 firefox,也正常!看来应该是当前使用的 firefox 配置的问题,但具体哪里的问题就不得而知了。

就是 firefox 的这种诡异行为,使得我一开始总是以为 .2.1 到 .1.3 的转发设置有问题,然后各种尝试无果!心想子网间数据转发就这么难吗?是原理上哪里理解错了吗?亦或是默认的路由设置不对?结果都不是,真是够气人的!

最后说一下,导致一开始没有成功的原因还有另一个,那就是光猫限定了只对 192.168.1.x 的地址有反应。所以必须要做地址转换才行,要么选中【IP动态伪装】,要么手动添加 nat 规则。但如果光猫没有限制只对 192.168.1.x 进行回应而是对所有入站访问都有回应的话,那其实是不用做地址转换的,大家都用自己的真实 IP 进行交流就行了(不过 A 网段的设备出了TPLINK后已经被TPLINK做了地址转换了,都成了 .2.2 的地址了,这是没法控制的),也就是说 .2.2 和 .1.1 之间原则上是可以只经过转发而不需地址转换就能连通的


https://www.xamrdz.com/web/2nz1994301.html

相关文章: