每次由于域不存在(例如)我应该收到错误时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
?
答案1
这是 DNS。搜索域名设置导致此问题:
$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0
search localhost
路由器欺骗 Ubuntu 使用搜索域扩展名称,该搜索域受到以下方面的特殊对待:systemd-已解决因此破坏了预期的行为:
主机名“localhost”和“localhost.localdomain”(以及任何以“.localhost”结尾的主机名或“.localhost.localdomain”)解析为 IP 地址 127.0.0.1 和 ::1。
解决方案 A:重新配置路由器发送更合适的搜索域
解决方案 B:禁用自动 DNS 配置例如,在 NetworkManager 中,如果问题仅限于一个,您可以仅针对 Ipv4 或 IPv6 禁用它。文本配置格式中的相应选项是ignore-auto-dns
。
# /etc/NetworkManager/system-connections/WLAN
# ..
[ipv6]
ignore-auto-dns=true
# ..
没有解决方案:编辑 /etc/dhcp/dhclient.conf(此配置不能取代 IPv6 路由器通告 DNSSL)