根据https://cloud.google.com/compute/docs/internal-dns
我在末尾添加了这个,/etc/dhcp/dhclient.conf
以便在 resolv.conf 上有一个自定义名称服务器
prepend domain-name-servers x.x.x.x;
service networking restart
在resolv.conf 文件中填充自定义名称服务器之后。
问题是几个小时后(大约 12 个小时),有时会更多(我找不到确切的时间)dhcp 租约从 resolv.conf 中删除名称服务器
这是发生该事件时的系统日志输出:
normal syslog output
...
dhclient[30756]: DHCPREQUEST of 10.207.0.40 on eth1 to 169.254.169.254 port 67
dhclient[30756]: DHCPACK of 10.207.0.40 from 169.254.169.254
liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="11655" x-info="http://www.rsyslog.com"] exiting on signal 15.
systemd[1]: Stopping System Logging Service...
systemd[1]: Stopped System Logging Service.
systemd[1]: Starting System Logging Service...
dhclient[30756]: bound to 10.207.0.40 -- renewal in 35134 seconds.
liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="26725" x-info="http://www.rsyslog.com"] start
systemd[1]: Started System Logging Service.
...
normal syslog output
我不知道为什么 syslog 停止并再次启动......
对于写入 resolv.conf 文件的内容有什么想法吗?
答案1
文件 resolv.conf 被反复覆盖的原因是您的实例上的 DHCP 租约已过期。文档 [1] 中写道:
每次实例的 24 小时 DHCP 租约到期时,手动编辑 resolv.conf 将导致其恢复为默认 DHCP。在使用区域 DNS 的实例上,DHCP 租约每小时到期一次。为了在 resolv.conf 文件中进行静态修改,多个 Linux 发行版允许将项目添加到 DHCP 策略的前面或后面。
24 小时租约不是 SLO,因此这可能会更早发生。
由于您处于云环境中,因此您可以resolv.conf
通过在云 DNS 上进行一些配置来实现编辑的相同行为:
A)如果要覆盖 DNS 以使用 ON PREM DNS,可以创建“DNS 服务器策略”[2] [3] [4]
B)如果您想使用自己的绑定(在您的项目内部)创建内部区域,则可以使用 Cloud DNS 私有区域 [5]
在云环境中,覆盖永远不是一个好主意resolv.conf
。
[1]https://cloud.google.com/compute/docs/internal-dns#resolv.conf
[2]https://cloud.google.com/dns/docs/overview#dns-server-policy
[4]https://cloud.google.com/dns/docs/best-practices-dns#best_practices_for_private_zones
[5]https://cloud.google.com/dns/zones/#creating_private_zones