如何在 Ubuntu 20.04 上永久更改 DNS 伺服器

在 Ubuntu 20.04 上更改 DNS 並不像編輯一些設定然後祈禱好運那麼簡單。有時,即使你設定了新的 DNS 伺服器,預設 DNS 伺服器仍然會保留,尤其是在網路管理員重設或其他服務覆蓋你的設定的情況下。重新啟動或網路重新啟動後 DNS 變更復原的情況很常見,這非常煩人。所以,如果你想要一個更永久的解決方案——確保你的自訂 DNS 在更新、重新啟動或網路切換後仍然有效——你需要更深入地研究。

本指南將介紹一種在系統層級設定 DNS 的實用方法,雖然略顯複雜,但效果卻不盡如人意,進而提升 DNS 的彈性。當然,了解具體操作至關重要,因為如果不小心,修改系統檔案可能會導致系統崩潰。但最終,這種方法可以節省時間,避免不必要的麻煩,尤其是在您目前的 DNS 方法不斷重置或不穩定的情況下。

如何修復 DNS 設定以使其在 Ubuntu 20.04 上保留

使用 Netplan 永久設定 DNS

Ubuntu 20.04 預設使用Netplan管理網路配置。這裡的技巧是直接在 Netplan YAML 檔案中覆蓋 DNS 設置,這樣無論發生什麼情況,DNS 設定都能保持不變。這種方法非常可靠,因為它不依賴舊版 NetworkManager 的怪癖——它是系統級控制。

在某些設定中,您會在/etc/netplan/01-netcfg.yaml或 類似的檔案中找到您的配置。請使用nano或 之類的文字編輯器開啟該文件vim

sudo nano /etc/netplan/01-netcfg.yaml

如果你看到類似這樣的內容:

network: version: 2 renderer: NetworkManager ethernets: enp3s0: dhcp4: yes

將其變更為在您的介面下包含 DNS 伺服器,如下所示:

network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] 

基本上,您可以關閉該介面上的 DHCP(如果已啟用),然後直接指定 DNS 伺服器。這樣,它就不會被 DHCP 更新或網路管理員重新載入所覆寫。

儲存檔案(Ctrl + O在 nano 中,然後Enter,然後Ctrl + X退出)並套用設定:

sudo netplan apply

注意:請務必將其替換enp3s0為實際的介面名稱。您可以使用 來檢查您的網路介面ip link

預計它會立即生效,或者有時重啟一下會有幫助——因為 Linux 確實有點怪。在某些設定下,如果完全停用該介面的 DHCP,然後手動指定 DNS,DNS 會更穩定。這更像是一種「發射後不管」的方法。

或者,在 systemd-resolved 中覆蓋 DNS

另一種更直接的方法是調整systemd-resolved。它是 Ubuntu 20.04 中的預設 DNS 解析器,您也可以在這裡設定持久性 DNS 伺服器。

編輯/etc/systemd/resolved.conf文件:

sudo nano /etc/systemd/resolved.conf

取消註解或新增如下行:

[Resolve] DNS=8.8.8.8 8.8.4.4 FallbackDNS=1.1.1.1 1.0.0.1 # Might also want to set DNSStubListener=no to avoid conflicts if you're using stub listener 

儲存後重啟服務:

sudo systemctl restart systemd-resolved

此方法在系統解析器層級更新 DNS 伺服器,即使重新啟動和網路重置也能持續更新 — — 比依賴 GUI 或 DHCP 要好得多。

如果您想驗證它是否正常運作,請執行systemd-resolve --status並檢查列出的 DNS 伺服器。

額外提示:記住 /etc/hosts 和 /etc/resolv.conf

有時,您的 DNS 問題是由於 中的快取或衝突設定造成的/etc/resolv.conf。在 Ubuntu 20.04 上,通常resolv.conf符號連結到/run/systemd/resolve/stub-resolv.conf。如果您要覆寫 DNS,請確保連結指向您的首選設定;如果您使用的是自訂解析器,請停用存根。

可以透過以下方式檢查:

ls -l /etc/resolv.conf

如果符號連結指向stub-resolv.conf,並且您在其他地方管理 DNS,則可能需要停用存根偵聽器或刪除符號連結 – 但這進入了更高級的領域。

額外提示和故障排除

  • 每當您調整 DNS 時,最好刷新 DNS 快取以確保:sudo systemd-resolve --flush-caches。如果內容沒有更新,可能會有所幫助。
  • 有時,在更改配置後重新啟動網路或重新啟動系統會有所幫助。當然,這是因為 Linux 不得不讓這些操作變得比必要的更難。
  • 如果您使用 VPN 或其他網路工具,它們可能會覆蓋您的 DNS 設置,因此請仔細檢查您的新 DNS 是否實際上正在使用中。

包起來

擺弄 netplan 檔案或 systemd-resolved conf 可能看起來有點晦澀難懂,但一旦設定好,實際上非常可靠。它可以確保您在重新啟動或網路重設後不會遺失 DNS 自訂設定。雖然這需要更多手動操作,但總比每次都費力地透過 GUI 重新配置要好。

概括

  • 如果您想要持久的系統範圍設置,請編輯 /etc/netplan/*.yaml 以包含您的 DNS
  • 或調整 /etc/systemd/resolved.conf 並重新啟動 systemd-resolved 以獲得更乾淨、系統管理的修復
  • 在應用之前,請務必仔細檢查介面名稱並確保配置正確
  • 如果設定沒有立即生效,請記得刷新 DNS 快取並重新啟動網絡

希望這能有所幫助