场景:一个简单的家庭网络。其核心包括:
- 一个 ADSL 4 端口无线路由器。充当 DHCP 服务器。(运行 dd-wrt)
- 一个运行 Samba 的 Ubuntu 服务器,作为 NAS。
- 其他基于 Linux 或 Windows 的客户端的混合。
我最大的问题是,我不再真正理解 Windows(和 Linux)如何在 TCP/IP 网络上对 SMB 共享进行名称解析。
据我所知,我在这里真正使用的唯一名称解析服务是 DNSMasq - 随无线路由器 DHCP 服务提供 - 它允许我所有 dhcp 注册的设备使用 dns 查询相互解析。
这并不理想,因为如果 dhcp 服务器重新启动,它会丢失其 DNSMasq 条目,直到各个主机 dhcp 保留到期并重新查询。
我尝试将设置变得更可靠一些,在 dhcp 服务器上添加了 .local 域后缀,并在 NAS 盒上打开了 WINS 服务器,但 NAS 盒很快就从任何 SMB/工作组枚举中消失了。我仍然可以 ping 它,并通过 ssh 连接到它,但尝试浏览它或直接导航到它(smb://server 或 smb://server.local)都会出错。
SMB 名称解析实际上是如何工作的?这样我就可以将其与我的 DHCP/DNSMasq 实验分离开来。
答案1
SMB 是一种网络文件共享协议,因此没有特定于 SMB/CIFS 共享的名称解析机制。SMB/CIFS 的名称解析取决于客户端及其配置的名称解析机制(DNS、WINS、广播等)和顺序,并且取决于您使用的是 FQDN 还是单标签名称。
在没有 DNS 或 WINS 服务器的情况下,Windows 客户端将使用 NetBIOS 广播(如果启用了 TCP 上的 NetBT)来尝试解析名称。Windows Vista、7 和 W2K8 客户端还将使用 LLMNR 进行本地名称解析。
无需了解 Windows 客户端如何以及以何种顺序解析主机名的所有细节,我建议您在内部实现更强大的 DNS 服务器,例如 Windows DNS。