解析“.local”名称(仅限 mDNS)

Cir*_*exe 7 linux dns mdns

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

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

我还想要什么:

\n\n
    \n
  • 我管理的机器也可以解析host到与 相同的地址host.local
  • \n
\n\n

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

\n\n
    \n
  1. 输入:mDNS 不尊重这一点search local,因为它被认为是\xe2\x80\x9ccausing issues\xe2\x80\x9d。我可以使用我所有机器上的选项重新编译。/etc/resolv.conf--enable-search-domains

  2. \n
  3. 在所有网络机器中写入静态/etc/hosts文件。这就是我目前所做的。但是,它使配置变得分布式,这是我想避免的(这些文件最终不同步)。

  4. \n
  5. 在网络上设置 DNS 服务器。然而,提供互联网接入的路由器不支持 DNS(这几乎是换另一家公司的一个很好的理由),所以我需要在 Raspberry 上设置它。这也带来了分布式配置的问题:Raspberry 上的静态 DNS 信息最终会与 mDNS 信息不同步,因此hosthost.local可能会令人困惑地指向两个不同的 IP 地址......

  6. \n
\n\n

所以,我的问题是:

\n\n
    \n
  • 该选项带来的 \xe2\x80\x9cproblems\xe2\x80\x9d 是什么--enable-search-domains?(我看到的唯一一个是它允许 LAN 上的任何人设置不合格的主机名,但是 1. 除了我已经控制的主机名之外,我不会使用不合格的主机名,并且 2. LAN 访问已被限制为无论如何,值得信赖的同行)。

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

  • \n
\n

小智 5

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。


use*_*686 2

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

相反,可以对 nss-mdns 进行修补,以在尝试查找它们之前专门附加到无点名称,而不是使用 resolv.conf 域。.local