VPN 下无法访问 NAS:地址、回程路径还是服务?
私有隧道需要到 NAS 的路由、回程路径和被允许的服务。在修改凭据之前,先判断这三者中哪一个失效了。
隧道已经建立,客户端拿到了地址,而 NAS 完全不响应。这同一个症状背后藏着三种互不相关的故障,先测哪一步,决定了修复要花多久。地址排在最前,因为重叠的子网可能把你的请求送到陌生设备。回程路径排第二,因为没有回应的请求和一个被关闭的服务看起来完全一样。服务与权限放在最后,而且要等前两项都确认之后再查。
三种都表现为无法访问的故障
地址选择、回程路由和服务授权会产生同一条用户可见的消息:什么都没发生。它们的证据、责任方和修复方式各不相同,所以把它们区分开就是全部工作。一次失败的 ping 本身说明不了什么,而一个成功的 TCP 拒绝其实是好消息。
| Observation | Most likely conclusion |
|---|---|
| Route to the NAS address leaves the wrong interface | Overlapping or missing private route |
| Request visible on the server, no reply seen | Return path, gateway forwarding or translation |
| TCP connection refused rather than dropped | Reachable host, service not listening or filtered |
| TCP works, login or file access fails | Share 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 软件保持在受支持的版本,并在依赖这份备份之前,测试通过它做过的备份能否恢复。