家里和办公室都用 192.168.1.x:现在怎么办
当家里和办公室共用 192.168.1.0/24 时,登录成功,流量却到了错误的设备。重编你拥有的一侧,或者取得一个经过转换的子网。
依次做四项检查:域名解析到哪个地址、本地网络使用哪个前缀、内核为该目的地选择了哪条路由、远端由什么来应答。VPN 登录不在其中,因为无论哪张网络胜出,登录都会完成。按顺序检查,重叠会在第二步而不是第四步显现出来。
登录成功只说明隧道已经建立,并不说明某个具体地址指向哪里。
一个地址,两台机器
主机会根据目的地址,从路由表和策略规则中选择一条路径。没有任何东西告诉它,发往 192.168.1.20 这一跳的请求是给办公室服务器而不是隔壁房间的设备的。当两张网络处于同一个私有网段时,最具体的路由获胜,其余一切取决于重连时恰好装入了哪条记录。地址本身不携带这种区分。
ip route get 192.168.1.20
该查询会给出内核选择的接口和下一跳,这就是清单里的第二项检查。在做其他任何事情之前,先比较本地和远端前缀。如果本地局域网是 192.168.1.0/24,远端站点也是 192.168.1.0/24,那么重叠就是结论,任何客户端选项都修不好它。
重编你控制的一侧
家用路由器通常更容易改动。选一个与你实际使用的远端网络不冲突的网段,并注意 10.x.x.x 也不是自动空闲的,很多站点都在用它。要为变更做计划:DHCP 租约、保留地址、打印队列,以及任何写死地址的设备都需要处理。在你能够不依赖 VPN 恢复路由器的时段里完成重编。
先检查远端前缀清单,而不是事后才查。选择与另一个办公站点冲突的新网段,只会付出更多工夫换来同样的问题。
当两侧都无法更改时
如果两张网络都无法重编,剩下的选择在服务器一侧。网关可以使用基于策略的 NAT 或双向变体,把远端网络转换成一个不同的子网供 VPN 客户端使用,这样客户端看到的就是唯一地址。这属于网关设计,而不是每台桌面客户端都提供的开关;它会改变用户输入的地址以及必须匹配的名称。从论坛抄来的路由无法区分两个相同的目标。
私有地址段仍然是私有的;问题在于重复使用,而不在网段本身。
证明是哪台机器应答的
openssl s_client -connect 192.168.1.20:443 -servername office.example 2>/dev/null | openssl x509 -noout -subject
任何改动之后,把办公室资源和本地设备放在一起测试。如果本该是办公室服务器的位置由一台熟悉的家里设备应答,或者 TLS 证书写错了主机名,就停下来,在继续之前先确认目的地。从那个地址收到应答,并不能证明是哪台机器发出的。检查证书主体是当时少数可靠的信号之一。
不要用你无法控制的任意公网地址替换办公室的私有地址。那等于用一个更糟、更难解释的路由与归属问题去换掉重叠。
记录本地前缀、远端前缀,以及解决它的那次改动。下一次重叠看起来会不一样,但会遵循同样的模式。