资源管理器里的“网络”页面只显示在本地网段广播过自己的设备,而经过路由的隧道不会承载这些通告。这就是为什么服务器明明完全可达,用户面前的窗口却空空如也。带名称的 UNC 路径根本不依赖发现,解决办法是让名称能解析、端口能应答。空窗口是层次不对的症状,而不是共享坏了。

发现与可达不是一回事

Windows 通过为广播域设计的协议找到附近的机器,再把找到的结果当作便利列表呈现。那份列表里的任何内容都不是 SMB 文件访问所必需的。只要客户端知道服务器名称并能连到 TCP 445,无论这台机器是否出现在“网络”里,它都能打开共享。

两层各自独立失败,所以“我看不到”和“我打不开”值得分别测试。看列表说明的是发现;打开路径说明的是服务。

先给服务器命名,再映射共享

在 DNS 中发布文件服务器,填入它在对端持有的地址,并把客户端站点指向能为该区域作答的解析器。完全限定名称可以避免依赖本地后缀搜索列表——短名称在一个站点可用、在另一个站点失效,通常就是这个原因。

如果环境使用 Active Directory,名称解析也是身份验证的一部分:客户端必须能连到域控制器以完成 Kerberos,时钟偏差过大会让票据交换失败。这属于另一类问题,看起来却像凭据错误。重新输入密码之前,先测试域控制器。

LayerWhat it needsSymptom when missing
Name resolutionA DNS answer for the server namePath cannot be found, ping by IP still works
TransportTCP 445 open in both directionsConnection times out or is refused
AuthenticationA reachable domain controller and correct clockAccess is denied after the port connects
AuthorizationShare permission and filesystem permissionThe share opens but the folder is inaccessible

双向路由与过滤

站点到站点隧道需要本地路由表里有远端前缀、远端表里有本地前缀,并且两端防火墙都要放行到达的流量。单向配置会得到一条能建立却永不回应的连接,用户会称之为共享很慢。先看隧道自身的计数器。如果数据包只出不回,就去查回程路由或远端过滤。

在 WireGuard 中,对端的允许 IP 与操作系统路由必须与该设计保持一致。隧道只负责传输数据包;它既不提供 DNS 记录,也不提供共享权限,两端都是如此。

把防火墙规则建立在真正会发起连接的源网段上,并把例外记录下来。如果设计在路径上某处做了地址转换,规则就必须使用转换后的源地址,而原始客户端地址在日志里就看不到了。

先认证,再映射驱动器

用命令而不是资源管理器窗口逐层往下排查:

Resolve-DnsName -Name files.corp.example -Type A
Test-NetConnection -ComputerName files.corp.example -Port 445
net use Z: \\files.corp.example\Projects /persistent:no

第二条命令证明的是 TCP 通路,而不是读取权限。第三条才是真正检验身份验证与授权的地方,那里失败应当让你去查共享与文件系统权限,而不是回到路由器。

保持 SMB 签名与现有身份验证策略不变。对于显式路径,重新启用 SMB1 或把发现广播翻过隧道都没有必要,TCP 445 也应留在私有路径上,而不是放在面向互联网的转发上。给用户一个指向已批准名称的托管快捷方式或映射驱动器,空的“网络”页面就不再重要了。

相关文章