Windows 無法自動找到 Samba 主機

在幫朋友處理 NAS 上 Samba 服務無法被 Windows 找到的問題, 現像是
0. nslookup 查出來的主機名 nas 對應的 IP 是 192.168.50.25, 正確 (DNS 運行正確)
0. 內網是 192.168.50.0/24, 但 ping nas 時卻得到 192.168.48.1
0. 檔案總管裡, 點網路後無法找名為 nas 的機器

nslookup 是通過 DNS 查詢 IP, 但 ping 時名稱解析的原理為何? 網上查了下, 大概是
0. 看 hosts 中是否有相關記錄
0. 沒有的話查詢 DNS cache
0. 沒有的話發起 DNS query
0. 還沒查到的話, 通過 NetBIOS 解析

所以問題應該是出在了 NetBIOS 這段, 嘗試查詢結果

  • Windows 下用 nbtstat -c 列出 cache, 對應到了 192.168.48.1
  • 在 nas 上 (linux 系統中) 用 nmblookup nas 查詢, 結果如下
    WARNING: The "syslog only" option is deprecated
    added interface docker0 ip=172.17.0.1 bcast=172.17.255.255 netmask=255.255.0.0
    added interface br-41ca0a8a45a7 ip=172.18.0.1 bcast=172.18.255.255 netmask=255.255.0.0
    added interface br-72abc1eed23e ip=192.168.32.1 bcast=192.168.47.255 netmask=255.255.240.0
    added interface br-80e8abc6f50e ip=192.168.48.1 bcast=192.168.63.255 netmask=255.255.240.0
    added interface bond0 ip=192.168.50.25 bcast=192.168.50.255 netmask=255.255.255.0                  
    Got a positive name query response from 192.168.50.25 ( 192.168.48.1 )
    192.168.48.1 nas<00>
    

看起來是一致的, 且從上面的結果看起來, 192.168.48.1 是 bind 在 br-80e8abc6f50e 這張網卡上的, 而非預期的 bond0 (192.168.50.25) 上, 所以應該改一下 Samba 的設定即可, 加上以下兩行

# /etc/samba/smb.conf
...
bind interfaces only = yes
interfaces = bond0
...

重新啟動 Samba, 再用 nbtstat -cnmblookup nas 查詢, 驗証結果, 然後在檔案總管中點下網路, 問題解決!

什麼! 還沒有? 那你可能是碰到了這個問題 - How to detect, enable and disable SMBv1, SMBv2, and SMBv3 in Windows and Windows Server

具體來說, 就是啟用 SMBv1 (Windows 10 預設是關閉), SMBv2, SMBv3 的支援, 命令如下 (以 Administrator 的身份運行 PowerShell 後執行下面兩個命令)

Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Set-SmbServerConfiguration -EnableSMB2Protocol $true