群晖SMB——本地设备名已在使用中
发现问题
今天我打开某网站,选择上传文件后当前网页和浏览器就无法点击了,用ctrl+w
测试了好几次都如此。打开电脑的资源管理器,瞥见我通过 smb 添加的 nas 连接已经断开,点击则提示“本地设备名已在使用中 此连接尚未还原”。
于是我猜测可能是昨天上传文件选择的是 nas 中的一个目录,现在无法访问 nas,导致网页和浏览器假死。删除该映射后,再尝试添加,搜索不到局域网共享的设备了。
排查问题
在必应一搜,有各种不同的解决办法。Windows 的共享服务开着,启用网络发现正常,重启LanmanWorkstation
不行,重启电脑也不行,于是我打开了 deepseek。
”本地设备名已在使用当中”通常意味着:
- Windows尝试用一个你已经用过的名称(比如
\\NAS
)去建立连接,但之前的连接会话因为某种原因没有完全释放,导致冲突。- 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
和nslookup
默认解析的是 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。
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 的映射服务了。
结语
看来确实是我不该添加域名劫持?不!我不服气!添加劫持的是一个公网域名,而不是 mDNS 提供的私网域名(nas.lan),凭什么影响到私网呢?
为此,我又一次添加了该劫持,在浏览器控制台里看到劫持没有生效,重启路由器后,在控制台可以看到,在局域网访问该公网域名确实会解析到内网 IP 地址了。
点开 Windows 资源管理,尝试添加 nas 的共享网络文件夹,没问题!说明确实不是域名劫持的问题。
但是!即便 nas 的网卡里有路由器分配的有状态地址,局域网内通过浏览器访问该地址也是超时,而ping
和 SMB 映射却没有任何问题。
所以这次故障仅仅只是路由器固件的一个 bug 吗?