隧道已连上,网络正常,分离隧道几个月前就已启用,可桌边的打印机依旧显示离线。这种组合并不矛盾,因为分离隧道只做路由决策,并不承诺可达性。打印队列与纸张之间隔着三重机制,它们在托盘的图标上看起来一模一样。先查地址,再查路由,最后查过滤器。

从队列背后的地址查起

读取打印队列里保存的地址或主机名,再与打印机在自身网络屏幕上显示的地址对照。队列若仍指向旧地址,表现和路由故障完全相同,仅凭症状很难区分二者。先把两个值都取到,再动手修改其中任何一个。其中一个通常已经过期,而过期的那个往往就是队列。

基于主机名的队列会把名称解析加进路径,这是与路由相互独立的机制。如果主机名在隧道内解析成别的结果,队列就会连到另一台机器,或者什么都连不上。在测试期间改用数字地址,就能排除这个变量。

把这组值写下来,因为后续排查靠的是比对,而不是猜测。

该地址的路由是如何选出的

假设打印机在 192.168.1.50,而办公网络也使用 192.168.1.0/24。覆盖该子网的隧道路由现在可能与通往你公寓里打印机的那条直连路由竞争,更具体的那条会胜出。把端口改成同一个数字地址并不能消除这种歧义,因为歧义出在路由表里。

安装默认路由的 VPN 配置会接管一切,本地链路前缀就只能经由隧道到达。分离隧道配置则改为安装企业前缀,通常能恢复本地路径。要检查真正为打印机地址选中的路由,而不是产生这条路由的设置名称。

把路由表和选中的路由放在一起看,因为表里列出的是候选,查询结果才是胜出者。

Get-Printer | Select-Object Name, PortName, DriverName
Get-PrinterPort -Name 'IP_192.168.1.50' | Select-Object PrinterHostAddress
route print -4 | Select-String '192.168.1'

地址可用时,发现为什么反而失败

局域网里的打印机自动发现依赖组播 DNS 或更旧的广播协议,二者都被限制在单个链路内。路由器默认不转发这种组播,而 VPN 本身就是一台路由器。改用基于地址的队列,只修好了“发现”这一个环节坏掉的情况,这正是这个变通办法常被误当成运气的原因。

两者的区别很容易记录:如果地址在打印端口上有响应,但打印机从不出现在“添加打印机”列表里,问题就在发现范围。如果两者都不通,问题就在路由或过滤器。两次测试、两个不同的负责人,中间不需要重装任何驱动。

直接测试地址,而不是等列表自己填满。下面的命令做的正是这件事。

Test-NetConnection 192.168.1.50 -Port 9100
nslookup 192.168.1.50
ping -c 2 192.168.1.50

客户端的本地访问过滤器又加了什么

终端客户端可以在路由表之外单独过滤本地流量。这个设置常被称为本地网络访问,它能在隧道连接期间阻断发往本地网段的流量,即使路由查询看起来完全正确。这是策略层,任何路由编辑都改不动它。

在受管设备上,应该问管理员这条配置的意图,而不是自己拨开关。过滤器通常之所以存在,是因为有人认定已连接的机器不该访问咖啡店的网络,而那是个合理的决定。

要了解当前生效的策略,去读客户端自己的状态或日志,因为界面常把它藏在摘要行后面。那条日志通常会写明作出决定的规则。

用一个很小的任务验证路径

当地址、路由和过滤器都指向打印机后,在隧道保持连接的情况下,向同一个队列发送一份短文档。比起断开之后才测试的驱动重装,这更贴近原始故障。让任务保持平淡,因为你验证的是路径而不是设备。

然后在断开隧道的情况下重复一次,以确认你修好的正是原先能用的那条路径。这个对比是“改动确实有用”的唯一证据。

Test-NetConnection 192.168.1.50 -Port 9100
Get-PrintJob -PrinterName 'Front Desk'
Get-NetRoute -DestinationPrefix 192.168.1.0/24

如果在两种状态下都能打印,说明队列、路由和过滤器已经一致,故障消失。如果只有断开时才能打印,说明隧道仍在截获打印机地址,或者过滤器仍在拦截,下一步该查路由,而不是再换一个驱动。记录你改的是三层中的哪一层,同样的工单下个月就不会再开。

相关文章