这似乎是仅在 18.10 或 19.04 中开始的行为差异。
虽然avahi-resolve --name my.subdomain.local
返回一个有效的 IP 地址并且正在工作,但它在此之外不起作用,ping
即curl
或chrome
。
名称解析仍然适用于subdomain.local
. *.subdomain.local
这似乎与被解析为 mDNS CNAME的事实有关。
内容nsswitch.conf
passwd: compat systemd
group: compat systemd
shadow: compat
gshadow: files
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
内容/etc/resolv.conf
nameserver 127.0.0.53
options edns0
以下在 Ubuntu 19.10 上对我有用:
然后,
/etc/nsswitch.conf
以 root 身份编辑并更改:至
这种行为是由于 nss-mdns 中的两个标签限制启发式。其他此类限制是:
上述解决方案改编自 github issue #64。
设置 DNS 的方法有很多,但使用 systemd 进行标准 Ubuntu 安装时,我发现除非我还安装 libnss-resolve 软件包,否则会出现间歇性故障。这个包唯一要做的就是改变 /etc/nsswitch.conf 文件中的“hosts”行——在 dns 条目之前添加“resolve [!UNAVAIL=return]”。例如
请参阅错误1727237 systemd-resolved is not find a domain , 1805027 systemd-resolved can't resolve Comcast mail server addresses和1804487 systemd-resolved 在答案超过 512 字节且禁用 EDNS 时出现问题
使这些名称解析失败难以追踪的原因在于,它们仅在特定条件下发生,即回退到 UDB 的结果限制为 512 字节。这个问题与 nsswitch.conf hosts 行的关系更难弄清楚,但在 bug 中提到了添加 libnss-resolve 包的建议,它修复了我所有偶尔出现的问题。
此“修复”将应用于发现机器,但不再适用于 Ubuntu 20.04。无论是否安装了 libnss-resolve,都不再解析短名称,除非直接传递给 dig 中的路由器。从好的方面来说,如果没有 libnss-resolve 包(默认情况下未安装),我不会再看到名称解析错误。