发现问题

今天我打开某网站,选择上传文件后当前网页和浏览器就无法点击了,用ctrl+w测试了好几次都如此。打开电脑的资源管理器,瞥见我通过 smb 添加的 nas 连接已经断开,点击则提示“本地设备名已在使用中 此连接尚未还原”。

于是我猜测可能是昨天上传文件选择的是 nas 中的一个目录,现在无法访问 nas,导致网页和浏览器假死。删除该映射后,再尝试添加,搜索不到局域网共享的设备了。

找不到nas了

排查问题

在必应一搜,有各种不同的解决办法。Windows 的共享服务开着,启用网络发现正常,重启LanmanWorkstation不行,重启电脑也不行,于是我打开了 deepseek。

”本地设备名已在使用当中”通常意味着:

  1. Windows尝试用一个你已经用过的名称(比如\\NAS)去建立连接,但之前的连接会话因为某种原因没有完全释放,导致冲突。
  2. Windows的网络发现功能暂时失灵,无法正确找到网络上的设备。

“搜索不到NAS了”则说明问题可能更偏向于网络发现层面。

PING

在 AI 的建议下,我尝试ping 我的 nas。

结论:直接ping nas 的局域网 IP 没有丢包,并且在 Windows 资源管理器中通过 IP 地址添加映射可以正常连接到 nas。

ping nas 的“局域网名称即 mynas 或 mynas.lan”(mDNS)则显示:

C:\Users\LonelyGod>ping lonelygodnas.lan
正在 Ping mynas.lan [240e:330:96f6:****::26d] 具有 32 字节的数据:
无法访问目标主机。
无法访问目标主机。
无法访问目标主机。
无法访问目标主机。

240e:330:96f6:****::26d 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失)

这就很令人迷惑了,为什么使用pingnslookup默认解析的是 IPv6 地址呢?

MTU?

我使用 ipv6 测试网站进行测试,发现有一个前所未有的报错,但手机测试没有该报错:

测试显示你的 IPv6 可能存在 MTU 问题,这会导致 IPv6 网站加载缓慢(或失败)

于是我以为真的是电脑上的 MTU 问题,AI 也给出了可能的原因,比如代理软件或游戏加速器可能会修改 TCP/IP 参数,包括 MTU。

为了确认电脑上是否存在 MTU 有无问题,我尝试 ping -6 -l 1500 test6.ustc.edu.cn,即强制使用 IPv6,发送 1500 字节的数据包并且不分段去 ping一个纯 IPv6 的链接,结果丢包率为 20%。将数据包改成宽带 IPv4 默认的 1492 后,丢包率为 0。

测试IPv6不同数据包大小的连通率

mDNS缓存?

正当我以为就是 MTU 配置的问题时,我又查看了一下ping我的 nas 时并非是连接超时,而是无法访问目标主机啊!

于是我登陆 nas 查看网卡的 IPv6 地址,发现和电脑上解析的地址并不一致。

我使用ipconfig /flushdns清除缓存,没用,因为这玩意只是清除传统的 DNS 缓存。但对mDNS(.local.lan域名的解析)缓存无效。

根据 AI 的建议,使用net stop "DNS Client"无效,提示:这项服务无法接受请求的“暂停”、“继续”或“停止”操作。

使用nbtstat -R无效,显示 NBT 远程缓存名称表的成功清除和预加载。但电脑解析到的 IPv6 地址依然没变。

使用netsh interface ipv6 reset无效。

IPv6 的有状态和无状态

我查看路由器上给设备分配的 DHCPv6 租约,确实就是240e:330:96fc:****::26d/128呀,说明电脑获取到的 IPv6 并非缓存。nas 中只有一个 SLAAC 无状态地址,路由器作为上级 DNS 给电脑的却是 DHCPv6 有状态地址——但是 nas 没有使用这个有状态地址。

这真是一个令人头大的问题,以前折腾家里的 H3C 路由器时就为有状态和无状态、路由通告等折磨得不行。

AI 给出的解决办法之一便是禁用 DHCPv6,仅使用 SLAAC。考虑到此前我在路由器上绑定了群晖 DDNS 解析的域名劫持为本地的 IPv4 地址,虽然发现无法正常连接 nas 的 smb 后,我又删除了该劫持,但是没有重启路由器。

重启路由器之后,路由器端显示了给 nas 的 DHCPv6 租约,nas 里也有了这个无状态地址,Windows 资源管理器中也能找到 nas 的映射服务了。

可以找到nas了

结语

看来确实是我不该添加域名劫持?不!我不服气!添加劫持的是一个公网域名,而不是 mDNS 提供的私网域名(nas.lan),凭什么影响到私网呢?

为此,我又一次添加了该劫持,在浏览器控制台里看到劫持没有生效,重启路由器后,在控制台可以看到,在局域网访问该公网域名确实会解析到内网 IP 地址了。

点开 Windows 资源管理,尝试添加 nas 的共享网络文件夹,没问题!说明确实不是域名劫持的问题。

但是!即便 nas 的网卡里有路由器分配的有状态地址,局域网内通过浏览器访问该地址也是超时,而ping和 SMB 映射却没有任何问题。

所以这次故障仅仅只是路由器固件的一个 bug 吗?