全部產品
Search
文件中心

Alibaba Cloud Linux:設定手動管理/etc/resolv.conf設定檔

更新時間:Aug 31, 2024

Alibaba Cloud Linux 3中,網路管理服務NetworkManager和systemd-resolved通過讀取/etc/resolv.conf設定檔實現網域名稱到IP地址的解析。預設由NetworkManager服務自動管理此設定檔,systemd-resolved唯讀取而不更新此設定檔。如果您需要在/etc/resolv.conf中自訂DNS配置,則必須禁用NetworkManager自動管理該設定檔。本文將介紹兩種網路管理服務對該設定檔的管理原則,以及如何設定手動管理該設定檔。

網路管理服務對/etc/resolv.conf的管理原則

在Alibaba Cloud Linux 3中/etc/resolv.conf為檔案,非軟連結,NetworkManager和systemd-resolved網路管理服務對該設定檔的管理原則如下:

  • NetworkManager

    • 建立設定檔策略:系統初次開機後,主網卡正常啟動並擷取IP地址後NetworkManager會自動建立/etc/resolv.conf檔案。

    • 更新設定檔策略:在網卡裝置狀態,IP地址,路由,DNS,主機名稱等發生變更時,NetworkManager會更新/etc/resolv.conf檔案。

  • systemd-resolved

    • 作為/etc/resolv.conf檔案的消費者,唯讀取而不更新此設定檔。

在其他Linux發行版中,/etc/resolv.conf的檔案類型可能為檔案或軟連結,有關兩種網路管理服務對該檔案在不同檔案類型時的管理原則如下:

網路管理服務對/etc/resolv.conf檔案的管理原則介紹

  • NetworkManager服務管理原則:

    • 如果/etc/resolv.conf是連結到NetworkManager內部檔案/run/NetworkManager/resolv.conf的軟連結,NetworkManager會更新該軟連結,否則NetworkManager不會更新該檔案。

    • 如果/etc/resolv.conf為檔案,或者不存在,NetworkManager會建立並管理該檔案。

  • systemd-resolved服務管理原則:

    • 如果/etc/resolv.conf是指向/run/systemd/resolve/resolv.conf的軟連結,則該檔案由systemd-resolved服務進行管理。

    • 如果/etc/resolv.conf沒有指向/run/systemd/resolve/resolv.conf的軟連結,則該檔案由其他服務進行管理,此時systemd-resolved作為/etc/resolv.conf的消費者,只從該檔案讀取資訊,不更新該檔案。

設定手動管理/etc/resolv.conf設定檔

在Alibaba Cloud Linux 3 中,如果您需要在/etc/resolv.conf中自訂DNS配置,則需要禁用NetworkManager自動管理該檔案,具體操作步驟如下:

  1. 建立並開啟設定檔。

    sudo vim /etc/NetworkManager/conf.d/90-dns-none.conf
  2. i進入編輯模式,在設定檔中新增如下配置項。

    [main]
    dns=none
  3. Esc鍵,輸入:wq,按Enter鍵儲存並關閉檔案。

  4. 重新載入設定檔。

    sudo systemctl reload NetworkManager
重要

如果系統啟動後未自動建立/etc/resolv.conf設定檔,則系統無法使用此設定檔中定義的DNS伺服器完成DNS解析,關於此問題,請參見系統啟動後未自動建立/etc/resolv.conf設定檔問題排查定位

恢複自動管理/etc/resolv.conf設定檔

完成設定手動管理/etc/resolv.conf後,NetworkManager服務將不再自動管理該檔案,如需NetworkManager服務重新管理該檔案,只需刪除或注釋步驟2中添加的配置內容並執行步驟4重新載入設定檔。

常見問題

系統啟動後未自動建立/etc/resolv.conf設定檔問題排查定位

可能原因:NetworkManager服務啟動失敗,導致未成功建立/etc/resolv.conf設定檔。

排查定位:您可以通過查看NetworkManager服務狀態及日誌進行問題排查定位。

  1. 查看NetworkManager服務狀態。

    sudo systemctl status NetworkManager

    回顯資訊如下,代表NetworkManager服務正在運行。

    image

    如果為其他狀態,請查看NetworkManager服務日誌進行問題定位。

  2. 查看NetworkManager服務開機記錄。

    sudo journalctl -u NetworkManager -b

    結合日誌中的相關報錯完成問題處理後,您可以運行如下命令啟動NetworkManager服務。

    sudo systemctl start NetworkManager

    服務啟動成功後會自動建立/etc/resolv.conf設定檔。