有人拿端口扫描结果去应对 VPN 问题时,三个问题会混在一起:是否有东西可达、那是不是你以为的服务、以及它是否会接受你的身份。扫描器回答第一个,对第二个只含糊其辞。第三个它完全回答不了,因为接受凭据并不是传输探测所做的事。读输出之前先确定你在问哪个问题。

工具并没有错;它回答的是一个比桌上问题更窄的问题。

打开的套接字只是一个关于套接字的事实

一次成功的 TCP 连接只说明有东西接受了那个端点。它不能证明监听者就是预想的 VPN 服务,不能证明所出示的证书与你期望的名字相符,也不能证明 TLS 校验会通过。同一主机名上的网关管理页面是完全不同的服务,它对隧道毫无说明。把结果当作可达性事实,仅此而已。

探测真正有用之处在于排除。如果你所在的位置没有任何东西接受连接,握手就不可能成功,这就把排查范围先收窄到可达性。

UDP 的沉默有几种解释

UDP 协议可以合理地忽略未经认证的数据包,所以没有回应并不是判决。它可能意味着路径上的过滤、关闭的端点,或者服务在收到有效内容之前故意保持沉默。把沉默读成端口关闭,会让人去查防火墙规则,而真正的故障在配置文件里。下任何结论之前,先从另一个网络重做探测。

这种模糊性是协议本身的属性,不是工具的缺陷。报告结果时要把这一点讲清楚,因为自信的错误答案比不确定的正确回答更糟。

信任判断仍然由你来做

打开的端口并不执行信任判断,所以扫描结果不是关闭证书校验的理由。那项校验的存在是为了回答你是否到达了预想的对端,而扫描器并没有回答这一点。身份与认证请使用运营方真实的配置文件和客户端,然后让校验设置保持原样。

如果扫描说端口打开而握手失败,失败中有意思的部分在握手里,不在扫描里。

先测交换,再测路由

认证成功之后,分别检查接下来的阶段:数据关联、已安装的路由,以及应用访问。每个阶段都可能在上一阶段看起来正常时失败,而且各有各的证据。把客户端与监听端的日志同窄范围抓包或计数器相互对照,能得到反复扫描永远不会给出的路径诊断。比较不同网络时保持配置文件和端点不变,并记录协商停在哪一步。

也要让诊断范围保持在授权之内。探测不属于你的系统不是排障手法,无论工具对结果说了什么。

扫描回答的是可达性。认证需要凭据,路由需要数据包。扫描器可以报告端口打开,而服务拒绝每一次登录;也可以报告端口关闭,而有效会话能从另一个网络正常工作。把结果当作关于一条路径的一次观察,然后分别测试凭据和回程路由。

相关文章