SMB 访问 \\Data-Server-1 故障诊断报告
- 日期:2026年2月26日 --- 2月27日
- 受影响主机:本机(192.168.1.14,Windows),接口"以太网 2"
- 目标服务器:Data-Server-1(192.168.1.9,NAS)
- 解决方式:重启 Data-Server-1
1. 问题现象
- 本机无法通过
\\Data-Server-1访问 NAS 共享,连接挂起无响应。 - 局域网内其它计算机访问同一 NAS 正常。
- 本机此前可以正常访问,某次重启后出现故障。
- 本机可以正常访问另一台服务器
\\Data-Server-2(映射为 Z: 盘)。
2. 诊断过程
2.1 网络连通性检查
Ping 和 TCP 端口均正常,但注意到名称解析到了 IPv6 链路本地地址。
powershell
ping Data-Server-1 -n 2
# → 成功,解析到 fe80::265e:beff:fe68:1a82%14(IPv6),延迟 <1ms
Test-NetConnection -ComputerName Data-Server-1 -Port 445
# → TcpTestSucceeded: True
2.2 名称解析检查
DNS 查询失败,名称通过 mDNS 解析,IPv6 地址排在 IPv4 前面。
powershell
nslookup Data-Server-1
# → *** UnKnown can't find Data-Server-1: Server failed(DNS 服务器 192.168.1.5 无此记录)
Resolve-DnsName Data-Server-1
# → 通过 mDNS (.local) 解析成功,返回 AAAA fe80::265e:beff:fe68:1a82 和 A 192.168.1.9
Resolve-DnsName Data-Server-1.local
# → 同上
[System.Net.Dns]::GetHostAddresses("Data-Server-1")
# → InterNetworkV6 - fe80::265e:beff:fe68:1a82%14(排在前)
# → InterNetwork - 192.168.1.9
Select-String -Path "C:\Windows\System32\drivers\etc\hosts" -Pattern "Data-Server"
# → 无匹配(hosts 文件中无此条目)
2.3 地址选择策略检查
IPv6 优先级 (40) > IPv4 优先级 (35),系统会优先选择 IPv6 地址。
powershell
netsh interface ipv6 show prefixpolicies
# → 优先级 40 ::/0 (IPv6 通用)
# → 优先级 35 ::ffff:0:0/96 (IPv4 映射)
2.4 本机 SMB 服务与配置检查
所有服务正常运行,配置无异常。
powershell
sc.exe query lanmanworkstation
# → STATE: 4 RUNNING
sc.exe query mrxsmb20
# → STATE: 4 RUNNING
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol
# → EnableSMB1Protocol: False, EnableSMB2Protocol: True
Get-SmbClientConfiguration | Select-Object EnableInsecureGuestLogons, RequireSecuritySignature, EnableSecuritySignature, EncryptionCiphers
# → EnableInsecureGuestLogons: True
# → RequireSecuritySignature: False
# → EnableSecuritySignature: True
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" | Select-Object RequireSecuritySignature, EnableSecuritySignature, AllowInsecureGuestAuth
# → RequireSecuritySignature: 0, EnableSecuritySignature: 1
Get-NetFirewallRule -DisplayName "*SMB*" | Where-Object { $_.Enabled -eq 'True' }
# → 5 条规则,全部 Action=Allow,地址范围=Any(IPv4/IPv6 不区分)
Get-NetIPAddress -InterfaceAlias "以太网 2"
# → fe80::b453:3757:d53e:e3f4%14 (IPv6) / 192.168.1.14/24 (IPv4)
net use
# → Z: \\Data-Server-2\个人数据 OK(其他连接正常)
2.5 关键对比测试:IPv4 vs 主机名
IPv4 直连成功,主机名(走 IPv6)超时。定位到 IPv6 是问题所在。
powershell
# IPv4 地址直连 --- 成功
$job = Start-Job { net use \\192.168.1.9\IPC$ 2>&1 }
$done = Wait-Job $job -Timeout 10
Receive-Job $job # → "The command completed successfully."
# 主机名连接(系统选择 IPv6)--- 超时
$job = Start-Job { net use \\Data-Server-1\IPC$ 2>&1 }
$done = Wait-Job $job -Timeout 10
if (-not $done) { "TIMEOUT" } # → "TIMEOUT"
# IPv4 地址列出共享 --- 成功
net view \\192.168.1.9
# → 个人数据, 公开发布, 公用软件, 组会PPT
2.6 IPv6 深层验证:TCP 通但 SMB 协议层无响应
TCP 连接到 NAS 的 IPv6 地址完全正常,但在该连接上 NAS 不响应 SMB 请求。
powershell
# IPv6 TCP 端口连通性 --- 成功
Test-NetConnection -ComputerName "fe80::265e:beff:fe68:1a82%14" -Port 445
# → TcpTestSucceeded: True
# 用 .NET Socket 建立 IPv6 TCP 连接 --- 成功
$socket = New-Object System.Net.Sockets.Socket(
[System.Net.Sockets.AddressFamily]::InterNetworkV6,
[System.Net.Sockets.SocketType]::Stream,
[System.Net.Sockets.ProtocolType]::Tcp)
$ip = [System.Net.IPAddress]::Parse("fe80::265e:beff:fe68:1a82")
$ip.ScopeId = 14
$ep = New-Object System.Net.IPEndPoint($ip, 445)
$socket.Connect($ep)
# → Connected: True
# 在 IPv6 TCP 连接上发送 SMB2 Negotiate 请求 --- NAS 无响应
$negReq = [byte[]]@(
0x00,0x00,0x00,0x66, # NetBIOS header
0xFE,0x53,0x4D,0x42, # SMB2 magic
0x40,0x00,0x00,0x00,0x00,0x00, # Header
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, # Negotiate
0x24,0x00,0x02,0x00,0x01,0x00,0x00,0x00,
0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x02,0x10,0x02)
$socket.Send($negReq) | Out-Null
$buf = New-Object byte[] 256
$socket.ReceiveTimeout = 5000
$socket.Receive($buf)
# → 异常:连接方在一段时间后没有正确答复,或连接的主机没有反应(超时)
$socket.Close()
3. 根因
NAS 在 IPv6 上 TCP 层接受连接(445 端口开放),但 SMB 服务不处理 IPv6 上的请求 (不回复 SMB2 Negotiate),导致连接静默超时。Windows SMB 客户端在 TCP 连接成功后不会回退到 IPv4,整个连接卡死。
mDNS 返回 IPv6(优先)+ IPv4 → 系统选择 IPv6 →
TCP 握手成功 → SMB Negotiate 发出 → NAS 不响应 → 无限等待
4. 解决
重启 Data-Server-1 后问题解决。 NAS 的 SMB 服务恢复了对 IPv6 连接的正常处理。