解析 `.local` 名称(仅限 mDNS)

解析 `.local` 名称(仅限 mDNS)

我有一个使用 mDNS 设置的家庭网络,其中包含各种系统(包括始终开启的 Raspberry Pi)。我的机器正在运行 avahi 守护程序,因此当前情况是:

  • 网络上的每个人都可以解析host.local名称。

我另外想要的是:

  • 我管理的机器也可以解析host为相同的地址host.local

我想到三种方法可以做到这一点:

  1. 普京:search local/etc/resolv.confmDNS 不支持该功能因为它被认为“造成了问题”。我可以--enable-search-domains在所有的机器上使用这些选项重新编译。

  2. 在所有网络机器上写入静态/etc/hosts文件。这是我目前所做的。但是,它使配置分布式,我想避免这种情况(这些文件最终失去同步)。

  3. 在网络上设置 DNS 服务器。但是,提供 Internet 访问的路由器不提供 DNS(这几乎是更换其他公司的好理由),因此我需要在 Raspberry 上设置它。这也带来了分布式配置的问题:Raspberry 上的静态 DNS 信息最终会与 mDNS 信息不同步,因此可能会令人host困惑host.local地指向两个不同的 IP 地址……

所以,我的问题是:

  • 该选项带来的“问题”是什么--enable-search-domains?(我看到的唯一问题是,它允许 LAN 上的任何人设置不合格的主机名,但是 1. 除了我已经控制的主机名之外,我不会使用不合格的主机名,并且 2. LAN 访问已经限制为受信任的对等方)。

  • 我是否错过了其他第四个选项?(例如,设置一个 DNS 服务器 + 一个 crontab 并定期向其提供一些avahi-browse命令的输出?)

答案1

mdns 不附加 .local 或搜索域的原因是 mdns 中没有 NXDOMAIN 或类似的概念。

因此,如果 mdns 无法在任何缓存中找到解析,它必须发送多播查询并等待查看是否有任何响应。此超时时间足够长,足以“导致问题”。

以下内容并未回答该问题,但推测了一些解决部分问题的可能实施方式。

我希望的是明确地将 .local 附加到主机名,而不在 nss 链的末尾添加任何点。例如

主机:文件 mdns4_minimal [NOTFOUND=return] dns mdns_append

也许还可以指定“仅缓存”mdns 解析。也许可以使用这样的 nsswitch

主机:文件 mdns4_minimal [NOTFOUND=return] mdns_append_cacheonly dns mdns_append

我设想 mdns_append 尝试附加和不附加 .local 两种情况。

答案2

我怀疑这个选项“不推荐”,因为它在实践中几乎没用:几乎所有其他 mDNS 实现都使用.local仅有的,因此尝试查找您从 DHCP 获得的任何域在大多数情况下都只会带来额外的延迟。还有安全问题在实际的 mDNS 规范中提到。

相反,nss-mdns 可以修补为具体来说.local在尝试查找它们之前附加到无点名称,而不是使用 resolv.conf 域。

相关内容