设置手动管理/etc/resolv.conf配置文件

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配置文件。