解决方案1

解决方案1

我在 Raspberry Pi 上运行 Arch Linux。

突然:

  1. 我无法 ping 通网站。
  2. 我无法从浏览器访问网站。

我还有两台计算机(均运行 Arch Linux)连接到互联网,我可以 ping 并使用互联网。此外,/etc/resolv.conf在其他计算机上也是相同的:

nameserver 10.230.252.252
nameserver 203.147.88.2
nameserver 8.8.8.8
search domain.name

我可以使用VNC。我也可以 ping 到 8.8.8.8。当尝试在 Chromium 上访问 DuckDuckGo 时,我得到:

This site can’t be reached
duckduckgo.com’s server IP address could not be found.
DNS_PROBE_FINISHED_NXDOMAIN

我有有效的互联网连接。怎么了?

答案1

虽然我的另一台运行 Arch Linux 的 x86_64 PC 从未遇到过问题,但迄今为止,在使用 Arch Linux ARM 运行 NetworkManager 时,这种情况经常发生。

问题就好像你连接了wifi,但无法ping通或使用互联网,但可以访问本地网络上的所有计算机,甚至可以使用远程桌面共享软件。

当您的 ping 或浏览器尝试解析主机时,很有可能出现问题。我能想到3种解决方案:

解决方案1

我相信这是数千个运行 Archlinux ARM 并使用 NetworkManger 的 Raspberry Pi 系统上的问题。

就我而言, /etc/resolv.conf 是一个损坏的符号链接../run/systemd/resolve/stub-resolv.conf

NetworkManager 无法填充符号链接,并且 /etc/resolv.conf 为空。我们必须:

  1. 删除损坏的符号链接:
# rm /etc/resolv.conf
  1. 创建一个/etc/NetworkManager/conf.d/dns.conf包含以下内容的文件:
[main]
dns=none
main.systemd-resolved=false
  1. 重新启动网络管理器:
sudo systemctl restart NetworkManager

如果没有遵循解决方案 2,这应该可以解决问题。


解决方案2

如果上述方法未能解决您的问题,您可以通过以下方式临时填充 /etc/resolv.conf:

sudo systemctl restart systemd-resolved && sudo systemctl stop systemd-resolved

这样做的原因是因为可能有什么东西弄乱了文件/etc/resolv.conf。上面的命令应该覆盖内容,但同样,您应该查看导致问题的原因。


解决方案3

如果您无法恢复/etc/resolv.conf,只需创建一个新的/etc/resolv.conf(如果存在空的旧链接或符号链接,则删除)并粘贴代码:

search domain.name
nameserver 8.8.8.8
nameserver 1.1.1.1
nameserver 1.0.0.1

请注意,在第一行中,您还可以使用路由器的 IP 地址,例如(nameserver 192.168.43.1在我的例子中),这将使同一网络上的其他系统可 ping 通。像这样生成解析并不是一个好主意,但我在 NetworkManager 自动生成的解析中遇到了麻烦。 Systemd-resolvd 也会生成错误的,即使在我的电脑上也是如此。

有点奇怪,这里我使用google的主dns和cloudflare的主dns,你可以使用8.8.8.8与8.8.4.4或1.1.1.1与1.0.0.1。


尽管该步骤有效,但您可能希望阻止 NetworkManager 在重新启动时覆盖该文件:

将此条目添加到/etc/NetworkManager/NetworkManager.conf

[main]
dns=none
systemd-resolved=false

他们适用于我在 Raspberry Pi 3 B 型上的安装。希望这也适合您。

答案2

我刚刚遇到了同样效果的问题。检查时间设置是否正确。 DNSSEC 似乎默认启用,并由于“过期”证书而阻止请求。

与此相关的一些其他问题可以通过 来诊断journalctl -u systemd-resolved -b -0

答案3

我在运行 Arch Linux 的 Raspberry Pi 4 上遇到了这个问题。

症状是没有 DNS,从而产生ping错误消息。

我打电话发现date时间严重不对劲,大约是两天前。

我确定时间同步正在进行,systemctl status systemd-timesyncd但从输出中注意到timedatectl timesync-status该服务没有 NTP 服务器的 IP 地址(它说Server: Null)。

使用jaku255 的提示检查后journalctl -u systemd-resolved -b -0,我发现时间同步不起作用,因为 DNS 失败:

对于问题 ntp.org IN DS 的 DNSSEC 验证失败:签名已过期

这有点僵局:DNS 不工作是因为时间错误,时间错误是因为 DNS 不工作。

尝试手动设置时间,我发出了

timedatectl set-time "2020-02-29 10:51:55"

但这产生了一个错误:

设置时间失败:自动时间同步已启用

为了解决这个问题,我暂时(呵呵^^)禁用了时间同步

timedatectl set-ntp 0

然后再次调用timedatectl set-time,这次成功了。

之后,我重新激活了时间同步timedatectl set-ntp 1并确保使用timedatectl timesync-status该同步现在可以正常工作:

服务器:212.69.166.153(0.arch.pool.ntp.org)

另外,现在 DNS 成功,工作正常pingcurl

答案4

此问题在 Arch Linux Arm 和 Raspberry Pi 4 上仍然继续发生。我使用 systemd-networkd 而不是 NetworkManager,因此上述解决方案之一不适用。我的 NTP 系统时间也正确同步。默认情况下禁用 DNSSEC。

就我而言,WAN 主机名已解析,但 LAN 主机名未解析,并且我遇到了相同的Name or service not known错误。

我的解决方案是通过编辑使用经典 DNS 而不是 LLMNR /etc/systemd/resolved.conf

[Resolve]
...
LLMNR=no
...
ResolveUnicastSingleLabel=yes

重新启动服务以应用更改:

sudo systemctl restart systemd-networkd
sudo systemctl restart systemd-resolved

相关内容