每次由于域不存在(例如could not resolve host
)而应该收到错误时,我都会收到有关连接到环回地址的错误:
$ curl -4 -v https://nonexist.invalid
Trying 127.0.0.1...
该问题仅在建立无线连接约 2 秒后才开始出现。短时间内,一切都按预期工作。
我正在使用systemd-resolved
并且 dns 似乎正在工作:
$ readlink /etc/resolv.conf
../run/systemd/resolve/stub-resolve.conf
$ dig +short A example.com
192.0.2.1
$ dig +short A nonexist.invalid
$ systemd-resolve -t A nonexist.invalid
nonexist.invalid: resolve call failed: No appropriate name servers or networks for name found
如果名称解析看起来不错,为什么程序似乎仍将名称解析为127.0.0.1
?
是DNS。搜索域设置导致此:
路由器欺骗 Ubuntu 扩展名称,其搜索域接受systemd-resolved 的特殊处理,因此破坏了预期行为:
解决方案A:重新配置路由器发送更合适的搜索域
解决方案 B:禁用自动 DNS 配置,例如在 NetworkManager 中,如果问题仅限于一个,您可以仅为 IPv4 或 IPv6 禁用它。文本配置格式中对应的选项是
ignore-auto-dns
.不是解决方案:编辑 /etc/dhcp/dhclient.conf(此配置不能取代 IPv6 路由器广告 DNSSL)