Arch-Linux

ping 顯示“名稱或服務未知”

  • September 22, 2021

我在樹莓派上執行 Arch Linux。

突然:

  1. 我無法 ping 到某個網站。
  2. 我無法從瀏覽器訪問網站。

我還有兩台電腦(都執行 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 為空。我們必須:

  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 的自動生成解析時遇到了麻煩。即使在我的 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

[main]
dns=none
systemd-resolved=false

他們為我在 Raspberry Pi 3 模型 B 上的安裝工作。希望這對你也有用。

引用自:https://unix.stackexchange.com/questions/518266