连接 VPN 后打印机离线?检查路由表
全隧道 VPN 可能压过通往打印机的路由。四项检查找出获胜路由,添加一条狭窄的主机路由,并在重新连接后保留它。
笔记本电脑接入公司 VPN 后,两米外的打印机停止响应。打印机本身没有任何变化,本地网络也没有断开。变化的是路由表:隧道适配器现在拥有一条覆盖打印机地址的路径,于是这些数据包从 VPN 出去,抵达一个根本不知道你所在扁平网络在哪里的网关。按顺序完成下面四项检查,并在第一项失败处停下。
第一步:证明打印机在局域网上仍然可达
在改动路由之前,先确认设备对不使用 VPN 的访问仍有响应。让同一 Wi-Fi 上的手机打开打印机的网页,或从扁平网络上的另一台机器 ping 该地址。如果打印机在那里也不响应,VPN 只是巧合,问题出在打印机、它的 Wi-Fi 关联或接入点上的客户端隔离。
如果除这台笔记本之外处处都能响应,那就是笔记本本地的路由或名称解析问题,下一步会告诉你是哪一种。
第二步:找出 Windows 实际选择的路由
不要从上往下读表再猜。直接问 Windows 它为你关心的确切地址选择了哪条记录,同时取回接口索引。
Find-NetRoute -RemoteIPAddress 192.168.1.50
route print -4
tracert -d 192.168.1.50
Find-NetRoute 会打印获胜路由及其接口,而其余一切都依赖这两个事实。route print -4 显示周围的记录,其中包括全隧道客户端安装的两条半默认路由:0.0.0.0/1 与 128.0.0.0/1,二者合起来覆盖整个 IPv4 空间,却从不替换 0.0.0.0/0。/1 比 /0 更长,但你的 192.168.1.0/24 更长,所以缺失的局域网路由比隧道本身的声明更重要。
两条规则决定答案。最长匹配前缀先胜出;前缀相同的记录中,总度量更低者胜出,总度量由路由度量和接口度量合成。如果被选中的接口是隧道,继续。如果是物理适配器而流量仍然失败,请停在这里:你的问题是名称解析或打印机自己的访问列表,而不是 VPN 路由。
第三步:添加一条点名网关和接口的最窄路由
修复办法就是一条记录,把打印机地址指向本地适配器上的本地路由器。在提升权限的命令提示符中运行,并替换成你刚读到的值。
route add 192.168.1.50 mask 255.255.255.255 192.168.1.1 if 12 -p
if 的值是物理适配器的接口索引。省略它正是命令看似成功却毫无变化的最常见原因,因为当两个适配器都能到达同一个下一跳时,Windows 有权选择你不想要的那个。-p 标志让该记录持久化,于是它能挺过重启,而不是随会话消亡。
对单个设备,优先用主机路由,而不是覆盖整个 192.168.1.0/24 的路由。子网路由比任务所需更宽,一旦公司侧也使用同一前缀就会冲突:一个前缀出现两个主人,哪条记录胜出就决定你实际能到达哪个网络。
反过来说,如果你为了保护局域网而在 VPN 连接上清除了默认网关选项,远程私有前缀也会停止解析。用同样的方式通过 VPN 接口为它们添加路由,否则隧道就成了一条什么都不承载的链路。
第四步:让例外在下一次连接后依然有效
许多公司客户端在每次连接时都会重装整套路由,并同时重新计算接口度量,所以昨天还能用的路由今天可能被压过。重新连接后,对打印机重跑 Find-NetRoute,并检查接口是否仍与物理适配器一致。如果记录消失了,说明有东西在删除它;持久路由挡不住会清扫路由表的代理。在 VPN 连接后重新添加路由的计划任务就是常见的变通办法,而它也正是当适配器索引在扩展坞或驱动更新后发生变化时会失效的办法。
单独盯住 IPv6。只声明 IPv4 默认路由的客户端可能把 IPv6 默认路由留在物理适配器上,于是可通过 IPv6 访问的打印机在 IPv4 失败时仍能工作,或者相反。在断定路由表无辜之前,用 ping -4 和 ping -6 测一下。
本地捷径的代价
任何绕过隧道的路由都是隧道承诺上的一个洞。发往该地址的流量不再经过公司网关,也就意味着对它没有检查、没有日志、没有策略执行。在受管设备上,这可能不是偏好而是合规问题,所以手动添加之前先问清楚是否存在官方的拆分隧道例外。把自己的路由保持得和任务一样窄、和情况允许的一样短暂。
如果改动后打印机有响应,不要认定修复已生效,而要在下一次重新连接后重跑这四项检查。如果仍无响应,请在连接前后各抓取一次 Find-NetRoute 的输出;两者的差别会告诉你客户端是删除了记录,还是只是重新排了序。