客户端报告已连接、隧道也正常,但办公室的文件服务器却像是从厨房某个角落回应的。两端通常都使用 192.168.1.0/24,因为消费级路由器出厂就是这样,而任何路由都无法解决同时存在于两侧的歧义。故障看起来像是隧道坏了或服务器坏了,其实两者都不是。在改动任何配置之前,先判断你遇到的是哪一种冲突,因为类型不同,解法也不同,而且只有一种与路由有关。

直连路由胜过你推送的任何路由

只要直连路由覆盖了某个地址,主机就认为它是本地地址。在自身接口为 192.168.1.20/24 的笔记本上,192.168.1.50 这个地址属于邻居,所以数据包从家庭接口发出,永远不会进入隧道。

为办公室前缀推送路由毫无作用,因为该前缀已经作为直连网络存在。操作系统会继续按直连条目应答,而且在询问隧道之前就会先查它。你可以亲眼看到顺序:ip route get 192.168.1.50 显示的是家庭接口,而不是隧道。远端同样存在这个问题,因为办公室路由器也认为笔记本的家庭网段属于自己。

显而易见之外的静默冲突

并非每种情况都是路由决策。家庭 DHCP 租约可能恰好落到办公室服务器持有的地址上,于是客户端在和自己通信,而隧道什么也没传。

名称也会以同样的方式冲突。两台机器共用同一个计算机名,即使每个数据包都路由正确,基于名称的工具也会失效;而当本地机器已经占用了该名称时,指向办公室地址的 hosts 条目就会失败,因为本地解析优先。请重命名本地机器,或改用完全限定名,而不是修改 hosts。

虚拟机管理程序带来第三种情况。仅主机适配器通常位于 192.168.56.0/24 上,可能与某个没人记得仍在使用的企业网段冲突。

重新编号你自己这一侧

重新编号能消除歧义,而不是绕开它;在家庭办公室里,这一侧正是你自己能掌控的。挑一个不会出现在别处的网段,并在改动路由器之前,列出所有使用静态地址的设备。

10.0.0.0/8 和 172.16.0.0/12 是常见的候选。固件的默认值 192.168.0.0/24 和 192.168.1.0/24,正是应当保留的。

给办公室重新编号几乎不可能,而家庭重新编号要花一个晚上重新插好打印机和插座。即便如此,它也比在公司每台笔记本上重复一次变通方案更便宜。

公布一个不会冲突的网段

在办公室网段必须保留的地方,让隧道这一侧更难发生冲突。把客户端地址池切成小前缀,而不是借用整个 /24,可以得到具体路由,而不是宽泛路由。

如果网关能够转换,就把办公室子网发布在一个别名网段下,这样客户端的目标地址就不会落入它自己的 LAN。站点到站点的设计可以为每个站点分配自己的别名,从而让两个编号完全相同的客户仍可区分。

转换并非免费。它必须在两个方向上运行,并同时覆盖源地址和目的地址,而把地址写进自身负载的应用程序会完全无视它。因此,当重新编号不可行、客户端数量又很少时,它就是答案。

根据你能改变的东西来选择

家里只有一两台笔记本:给家庭 LAN 重新编号。无法重新编号的托管办公室:在网关上做别名转换。多个客户站点重复编号:为每个站点规划一次别名。如果只有基于名称的工具失效,就把它当作名称冲突,而不是路由故障。

无论选哪种,都要用一个只存在于远端的地址来验证。对自己的路由器做连通性测试,并不能说明是哪个网络回了话。

相关文章