隧道已经建立,客户端拿到了地址,而 NAS 完全不响应。这同一个症状背后藏着三种互不相关的故障,先测哪一步,决定了修复要花多久。地址排在最前,因为重叠的子网可能把你的请求送到陌生设备。回程路径排第二,因为没有回应的请求和一个被关闭的服务看起来完全一样。服务与权限放在最后,而且要等前两项都确认之后再查。

三种都表现为无法访问的故障

地址选择、回程路由和服务授权会产生同一条用户可见的消息:什么都没发生。它们的证据、责任方和修复方式各不相同,所以把它们区分开就是全部工作。一次失败的 ping 本身说明不了什么,而一个成功的 TCP 拒绝其实是好消息。

ObservationMost likely conclusion
Route to the NAS address leaves the wrong interfaceOverlapping or missing private route
Request visible on the server, no reply seenReturn path, gateway forwarding or translation
TCP connection refused rather than droppedReachable host, service not listening or filtered
TCP works, login or file access failsShare permission, account or protocol version

把这张表当作检查顺序,而不是原因清单。一旦出现拒绝,地址和回程路径就已经被证明可用,因此每一行都在约束下一行。在检查路由选了哪个接口之前,先在防火墙规则里耗掉二十分钟,是最常见的丢下午的方式。从上往下做,遇到第一行匹配就停下。

条件一:这个地址是对的设备吗?

记下 NAS 的子网和 VPN 分配给客户端的范围,再把两者与笔记本当前所在的网络对照。本文中 NAS 位于 10.40.7.25,VPN 池是 10.40.9.0/24,它们是同一站点规划里两个独立的私有网段;使用 192.168.0.0/24 或 10.0.0.0/24 的家庭,撞上其中一个的概率要高得多。

当本地网络与 NAS 网络重叠时,客户端会把那部分流量发往自己的网关,可能到达一台恰好同地址的无关设备。在向任何会应答的东西输入凭据之前,先确认路径。

ip -4 route get 10.40.7.25
traceroute -n -m 5 10.40.7.25

第一条命令给出内核会使用的接口和网关,第二条显示真正有回应的前几跳。如果两者不一致,要相信路由查询,因为数据包走的就是那条路。跳数列表停在 NAS 前一跳,同样是一个发现,而不是失败。查询解析到物理网卡而不是隧道,就到此为止。

条件二:回应能回来吗?

客户端需要到 NAS 的路由,NAS 所在网络需要到 VPN 池的回程路径。网关转发、防火墙规则和有意为之的地址转换,各自都会影响这一对。strongSwan 关于转发的说明 说明了网关后方私有子网在回程路由与地址转换上的取舍。

当请求到达而回应从另一个网关出去时,改 DNS 修不好这种不对称。两端同时抓包一次就能判定,也能看出转换是否改写了 NAS 回应的源地址。管理员要对这条边界负责:只放行所需的服务和 VPN 客户端网段,并记录选的是路由还是转换。

条件三:服务在不在,允不允许?

管理页面和文件共享服务是同一台机器上的不同端点,一个能接受连接,另一个却被主机防火墙、服务配置或共享权限挡住。已经用拒绝回应的设备,等于证明了前两个条件,第三个就被大大缩小了。

用真正需要文件的账户去测,而不是安装时的管理员账户,因为管理员权限修不好缺失的路由,路由也授不出共享权限。名称同样算在内:在家发现 NAS 名字往往依赖本地组播,而经过路由的隧道不携带组播,所以请试厂商文档里的私有主机名或直接试地址,把命名和访问分开。

从 NAS 网络之外测试,然后再慢慢扩大范围

在同一局域网里做的测试会掩盖远端路径上所有不完整的地方,所以第一次成功的远程尝试值得写进变更记录。用只通过隧道到达 NAS 的客户端做检查,并保留每次尝试的原始错误文本。

nc -vz 10.40.7.25 445
smbclient -L 10.40.7.25 -U guest

路径通了以后,传一个无害文件,确认你真正需要的读或写行为。如果大文件传输卡住而小文件能过,剩下的问题是包大小处理或连接稳定性,而不是地址。

不要为了让一个说不清的故障绕过检查,就把文件共享或管理端口发布到公网。修好私有路径,让 NAS 软件保持在受支持的版本,并在依赖这份备份之前,测试通过它做过的备份能否恢复。

相关文章