我在树莓派上运行 Arch Linux。
突然:
- 我无法 ping 到某个网站。
- 我无法从浏览器访问网站。
我还有两台计算机(都运行 Arch Linux)连接到 Internet,我可以在其中 ping 和使用 Internet。此外,/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
我有一个有效的 Internet 连接。怎么了?
虽然我的另一台 x86_64 PC 都运行 Arch Linux 从来没有遇到过问题,但到目前为止,在运行 NetworkManager 时,这经常发生在 Arch Linux ARM 上。
问题就好像你连上了wifi,但是你ping不通,不能上网,但是你可以访问本地网络上的所有电脑,甚至可以使用远程桌面共享软件。
当您的 ping 或浏览器尝试解析主机时,很有可能出现问题。我可以想到3个解决方案:
解决方案 1
我相信这是数千个运行 Archlinux ARM 并使用 NetworkManger 的 Raspberry Pi 系统的问题。
在我的情况下, /etc/resolv.conf 是一个损坏的符号链接到
../run/systemd/resolve/stub-resolv.conf
.NetworkManager 无法填充符号链接,并且 /etc/resolv.conf 为空。我们必须:
/etc/NetworkManager/conf.d/dns.conf
包含以下内容的文件:如果不遵循解决方案 2,这应该可以解决问题。
解决方案 2
如果上述方法没有为您解决问题,您可以通过以下方式临时填充 /etc/resolv.conf:
之所以可行,是因为可能有些东西弄乱了
/etc/resolv.conf
文件。上面的命令应该会覆盖内容,但同样,您应该查看导致问题的原因。解决方案 3
如果你不能得到你的
/etc/resolv.conf
支持,只需创建一个新的/etc/resolv.conf
(如果存在空的旧链接或符号链接,则删除)并粘贴代码:请注意,在第一行中,您还可以使用路由器的 IP 地址,例如(
nameserver 192.168.43.1
在我的情况下)这将使其他系统可以在同一网络上 ping 通。像这样生成解析不是一个好主意,但是我在使用 NetworkManager 的自动生成解析时遇到了麻烦。即使在我的 PC 上,Systemd-resolvd 也会生成错误的。有点奇怪,这里我用的是google的primary dns和cloudflare的primary dns,你可以用8.8.8.8搭配8.8.4.4或者1.1.1.1搭配1.0.0.1。
尽管该步骤有效,但您可能希望在 NetworkManager 重新启动时停止覆盖文件:
将此条目添加到
/etc/NetworkManager/NetworkManager.conf
他们为我在 Raspberry Pi 3 模型 B 上的安装工作。希望这对你也有用。
我刚刚遇到了相同效果的问题。检查时间是否设置正确。DNSSEC 似乎默认启用并由于“过期”证书而阻止请求。
与此相关的其他一些问题可以用
journalctl -u systemd-resolved -b -0
.我在运行 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 失败:有点僵局:DNS 不工作是因为时间不对,时间不对是因为 DNS 不工作。
试图手动设置时间,我发出
但这产生了一个错误:
为了解决这个问题,我暂时(呵呵^^)禁用了时间同步
再次调用
timedatectl set-time
,这次成功了。之后,我重新激活了时间同步,
timedatectl set-ntp 1
并确保timedatectl timesync-status
现在使用该同步有效:此外,现在在 DNS 成功的情况下工作正常
ping
。curl
想在 Goswami 的解决方案列表中再添加一个。
在我的运行 Debian 10 的小型便携式服务器上,我面临着 DNSSEC 和 NTP 之间的鸡与蛋的问题。有时它们会在很长一段时间内保持断电状态并且实际上失去了时间感,而周围的世界正在发生变化,所以我不能只是创建静态修补程序配置。同时,他们必须在通电时自行上网,因为我没有物理访问权限。我决定首先通过更正时间来打破循环,到目前为止,这种方法似乎足够可靠。
解决方案 4
获取可靠且值得信赖的NTP 服务器的可靠IP 地址列表。让我们使用这个,例如:https ://tf.nist.gov/tf-cgi/servers.cgi 。以下是那里的一些样本:
由于我
chronyd
用于时间同步,我只是将这些 IP 地址添加到其配置中:(注意:这也适用于ntpd
配置,通常在 中找到/etc/ntp.conf
)添加行:
现在,chrony 会遍历所有指定的地址,直到它能够连接并获取时间。从那时起,其他一切都开始正常工作。
我的大型机上有一个脚本,它会定期检查列表中的所有 IP 是否都处于活动状态,并通知它们中的任何一个是否脱机,因此我可以在必要时更新远程配置,而服务器处于联机状态并且并非所有 NTP 服务器都已过期。
可能最好的做法是为两端(DNS 和 NTP)设置备用配置。
这个问题在 Arch Linux Arm 和 Raspberry Pi 4 上仍然继续发生。我使用 systemd-networkd 而不是 NetworkManager,因此上述解决方案之一不适用。我的 NTP 系统时间也正确同步。默认情况下禁用 DNSSEC。
就我而言,WAN 主机名正在解析,但 LAN 主机名没有,我遇到了同样的
Name or service not known
错误。我的解决方案是通过编辑使用经典 DNS 而不是 LLMNR
/etc/systemd/resolved.conf
:重新启动服务以应用更改: