我正在创建一个运行 Linux 的小型设备,上面有一个 Web 服务器。我希望它能即插即用,连接到网络并使用抽象名称进行访问。
是否可以仅使用主机名来访问设备?
答案1
在某些网络上 – 是的。但在日常 TCP/IP 网络上,主机名必须可以转换为 IP 地址,否则客户端将不知道要连接什么。
不过,目前有几种用于本地名称查找的协议:
Windows 传统上使用NetBIOS 名称服务用于使用 UDP 广播解析同一 LAN 中其他计算机的主机名。您的服务器需要运行
nmbd
Samba 的组件可通过 NetBIOS 发现。(2023:NetBIOS 于 2013 年退出历史舞台,目前普遍认为已经彻底过时。)
最近的 Windows 版本也支持法律硕士,它与 mDNS 类似,但功能较少且需要 IPv6。在 Linux 上,
systemd-resolved
将拥有 LLMNR 客户端。不知道其他操作系统。可能不值得考虑。(2023:LLMNR 已经退出历史舞台,甚至在 Windows 上也被 mDNS 取代。)
Windows 10 的最新版本也支持 mDNS。
OS X 使用移动DNS(“多播 DNS”),有时也称为 Bonjour,用于相同目的。(请注意,mDNS 通常不会像 NetBIOS 那样解析裸主机名;相反,它仅限于域
.local
。)对于 mDNS,您的服务器将需要avahi-daemon
。较新的 Windows 10.19xx 内置了 mDNS 支持(但已禁用)。如果安装了 Bonjour(通常作为 iTunes 的一部分),较旧的 Windows 可以解析 mDNS 名称,如果启用了“Windows 文件共享”或类似服务,OS X 应该支持 NetBIOS。
(2023:Windows 现在默认提供 mDNS。)
面向桌面的 Linux 系统通常预配置了 NetBIOS 和 mDNS 解析器。(也就是说,它们同时运行
nmbd
和avahi-daemon
,以及 中的相关 glibc NSS 模块/etc/nsswitch.conf
。)(2023:默认情况下不再使用 NetBIOS,只有有时使用 mDNS 和/或 LLMNR。)
最后,大多数“家用路由器”都维护着本地 DNS 域(
.lan
,,.home
等)根据收到的主机名来自 DHCP 请求由局域网内的计算机发送。根据您的服务器使用情况,dhcpcd
需要“hostname
”选项,而dhclient
使用“send host-name = gethostname()
”。(2023 年:一点都没变。)