在 Google Cloud Platform 上,/etc/resolv.conf
每次我执行此操作sudo systemctl restart NetworkManager.service
或重新启动机器时,文件都会被覆盖。
有没有“正确”的方法来避免这种情况?或者我应该在启动时编写一个脚本来覆盖它?
答案1
全球 DNS 的选项resolv.conf
每 24 小时更新一次,具体如下:这个官方文档也可以通过以下方式修改值编辑 DHCP 策略。
对于 Debian 10,步骤如下:
编辑“/etc/dhcp/dhclient.conf”
取消注释“supersede domain name”行,并修改其值:supersede domain-name“asdf.v1.com”;
注意:supersede 将仅使用您提供的详细信息,prepend 将首先使用您的值,然后使用服务器提供的值,append 将首先使用服务器提供的值,然后使用您的自定义值。
保存文件
使用命令“sudo dhclient -v -r”重新启动 DHCP 客户端
请记住,这些步骤可能不适用于其他发行版,请确保在执行之前备份并检查这些步骤。
答案2
您可以NetworkManager
通过更改文件来告诉不要修改某些 /etc/resolv.conf 条目/etc/NetworkManager/NetworkManager.conf
。
例如,GCP 使用元数据服务器 IP 地址 169.254.169.254 作为默认名称服务器。您可以nameserver
按照以下步骤覆盖 resolv.conf 的条目 -
- 在 /etc/NetworkManager/NetworkManager.conf 文件中添加
dns=none
如下条目 -
[main]
#plugins=ifcfg-rh
dns=none
- 重新启动 NetworkManager 服务
sudo systemctl restart NetworkManager.service
/etc/resolv.conf
使用您的自定义名称服务器进行修改
nameserver 127.0.0.1
进行这些更改后,重新启动 NetworkManger 不应覆盖您的自定义条目。
答案3
根据 Håkan Lindqvist 的评论,我使用了第 29.2 段中的符号链接
/etc/resolv.conf
如果是符号链接,NetworkManager 不会自动更新 DNS 配置。本节介绍如何使用/etc/resolv.conf
符号链接替换包含 DNS 配置的替代文件。
创建一个文件,例如
/etc/resolv.conf.manually-configured
,并将您环境的 DNS 配置添加到其中。使用与原始 中相同的参数和语法/etc/resolv.conf
。删除
/etc/resolv.conf
文件:# rm /etc/resolv.conf
创建一个名为的符号链接
/etc/resolv.conf
,指向/etc/resolv.conf.manually-configured
:# ln -s /etc/resolv.conf.manually-configured /etc/resolv.conf