为什么 GCP 会覆盖我的 /etc/resolv.conf 文件以及如何避免这种情况?

为什么 GCP 会覆盖我的 /etc/resolv.conf 文件以及如何避免这种情况?

在 Google Cloud Platform 上,/etc/resolv.conf每次我执行此操作sudo systemctl restart NetworkManager.service或重新启动机器时,文件都会被覆盖。

有没有“正确”的方法来避免这种情况?或者我应该在启动时编写一个脚本来覆盖它?

答案1

全球 DNS 的选项resolv.conf每 24 小时更新一次,具体如下:这个官方文档也可以通过以下方式修改值编辑 DHCP 策略

对于 Debian 10,步骤如下:

  1. 编辑“/etc/dhcp/dhclient.conf”

  2. 取消注释“supersede domain name”行,并修改其值:supersede domain-name“asdf.v1.com”;

    注意:supersede 将仅使用您提供的详细信息,prepend 将首先使用您的值,然后使用服务器提供的值,append 将首先使用服务器提供的值,然后使用您的自定义值。

  3. 保存文件

  4. 使用命令“sudo dhclient -v -r”重新启动 DHCP 客户端

请记住,这些步骤可能不适用于其他发行版,请确保在执行之前备份并检查这些步骤。

答案2

您可以NetworkManager通过更改文件来告诉不要修改某些 /etc/resolv.conf 条目/etc/NetworkManager/NetworkManager.conf

例如,GCP 使用元数据服务器 IP 地址 169.254.169.254 作为默认名称服务器。您可以nameserver按照以下步骤覆盖 resolv.conf 的条目 -

  1. 在 /etc/NetworkManager/NetworkManager.conf 文件中添加dns=none如下条目 -
 [main]
 #plugins=ifcfg-rh
 dns=none
  1. 重新启动 NetworkManager 服务
sudo systemctl restart NetworkManager.service
  1. /etc/resolv.conf使用您的自定义名称服务器进行修改
nameserver 127.0.0.1

进行这些更改后,重新启动 NetworkManger 不应覆盖您的自定义条目。

答案3

根据 Håkan Lindqvist 的评论,我使用了第 29.2 段中的符号链接

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/manually-configuring-the-etc-resolv-conf-file_configuring-and-managing-networking

/etc/resolv.conf如果是符号链接,NetworkManager 不会自动更新 DNS 配置。本节介绍如何使用/etc/resolv.conf符号链接替换包含 DNS 配置的替代文件。

  1. 创建一个文件,例如/etc/resolv.conf.manually-configured,并将您环境的 DNS 配置添加到其中。使用与原始 中相同的参数和语法/etc/resolv.conf

  2. 删除/etc/resolv.conf文件:

    # rm /etc/resolv.conf
    
  3. 创建一个名为的符号链接/etc/resolv.conf,指向/etc/resolv.conf.manually-configured

    # ln -s /etc/resolv.conf.manually-configured /etc/resolv.conf
    

相关内容