我将几台机器升级到 Debian Buster,到目前为止一切都很顺利——尽管在运行时apt upgrade
遇到apt full-upgrade
了
Temporary failure in name resolution
.这是可以修复的,只是过程中的一个问题,在执行一步操作时不会发生apt dist-upgrade
。然而,尽管已完全升级,一台机器仍显示此行为。我明白了
~# LANG=C ping google.com
ping: google.com: Temporary failure in name resolution
当我添加 google.com 时,/etc/hosts
一切都很好。我的/etc/nsswitch
样子
~# cat /etc/nsswitch.conf
passwd: files systemd
group: files systemd
shadow: files
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
我/etc/resolv.conf
现在指向 google 域名服务器,并且该服务器是可 ping 通的
~# cat /etc/resolv.conf
nameserver 8.8.8.8
~# ping -c1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=22.8 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.800/22.800/22.800/0.000 ms
systemd-resolved
处于非活动状态,如果我正确解释了我的内容,则不应成为问题/etc/nsswitch
。
难道我还漏掉了另一点吗?
答案1
安装nslookup
让我找到了问题的根源:resolv.conf
根本无法解析。我将原始文件中的内容复制到新文件中,一切正常。相同的内容,相同的权限。但diff
显示出没有差异的地方。显然有一些不可见的字符破坏了文件,因为它比文件大了 1 个字节
/etc# diff resolv.conf.odd resolv.conf.dem
1c1
< nameserver 8.8.8.8
---
> nameserver 8.8.8.8
/etc# cat resolv.conf.odd && cat resolv.conf.dem
nameserver 8.8.8.8
nameserver 8.8.8.8
/etc# ls -l resolv.conf.*|cut -d' ' -f5,9
19 resolv.conf.dem
20 resolv.conf.odd
更新:正如 cas 幸运地指出的那样,这是\r
造成混乱的尾随,与 Buster 更新本身无关。一位同事推送了带有错误换行的文件
$ hd resolv.conf.odd
00000000 6e 61 6d 65 73 65 72 76 65 72 20 38 2e 38 2e 38 |nameserver 8.8.8|
00000010 2e 38 0d 0a |.8..|
答案2
这是一个解决方案该问题的一个版本具有(几乎?)相同的症状。
简而言之:
就我而言,我使用的是 systemd-networkd,并且名称解析不起作用。此外,/etc/resolv.conf 的名称服务器与我们的 DHCP 服务器返回的名称服务器不同(尽管它们是可访问的)。
这就是我所做的:
sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/stub-resolv.conf /etc/resolv.conf
sudo systemctl start systemd-resolved.service
注意:我不知道 systemctl 命令是否是“永久的”。我怀疑需要采取一些措施才能在启动时启动该服务。我对 Linux 相对缺乏经验,以上内容让我到达了我需要的地方。