重启后,Google Cloud Compute 不断更改我的 /etc/hosts 文件

重启后,Google Cloud Compute 不断更改我的 /etc/hosts 文件

我一直在使用 webmin/virtualmin(网络托管和电子邮件)、Vestacp(仅托管)和 ISPconfig(仅托管)控制面板试用 3 个 google 云计算实例。

ISPConfig 实例有一个静态外部 IP 地址,但是此阶段其他 2 个是 dhcp。

所有 3 个实例都使用动态分配的内部 IP 地址,尽管在 6 个月的测试、重新启动、删除和重新部署中我还没有看到任何这些 IP 地址发生变化。每当我删除一个实例时,都会使用相同的内部 IP 序列(即,下一个最低的未分配可用数字被重新添加为内部 IP 地址)。

我在强制 Google Cloud 停止更改我的 /etc/hosts 文件中的主机名 -f 配置时遇到了一些问题。

应该读作

127.0.0.1 localhost.localdomain localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.x.x.x server1.foo.com.au server1

(其中 x 是我的内部 IP 地址,“foo”是我的域名)

但是,在我的任何 3 个实例上,只要我重新启动实例,谷歌云就会在下次重新启动时再次添加自己的代码。即默认情况下,谷歌云会不断更改文件以读取相同的 2 行“# 由谷歌添加”,如下所示

127.0.0.1 localhost.localdomain localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.x.x.x server1.foo.com.au server1
10.x.x.x server1.c.bar.internal server1 # Added by Google
169.254.169.254 metadata.google.internal # Added by Google

(其中 x 是我的内部 IP 地址,“foo”是我的实际域名,“bar”是我的 Google 云项目 ID)

这确实给我带来了麻烦,我不知道哪种方法才是最好的解决方法。

-我是否从 google cloud DNS API 中执行此操作? -在 google cloud 网络设置中设置静态内部 ip 地址? -设置一个脚本,继续检查此文件的更改并立即替换 google cloud 尝试进行的任何更改? -或者我是否需要更改主机文件最后一行的元数据信息,使其没有“...metadata.google.internal #由 Google 添加”行?

目前上面的选项 1 不起作用。一旦我启用 DNS API 然后尝试输入它,我就会从我的谷歌云控制台中收到“加载失败”错误。这真是太麻烦了!!!(我已经向谷歌发送了支持请求……谁知道要多久才能得到答复)

答案1

贫民窟选项可能不起作用:sudo chattr +i /etc/hosts

执行man chattr详细信息,但是这会使文件“(i)mmutable”,这意味着即使 root 也无法更改它(当然,除非 root 先更改它chattr -i /etc/hosts)。

如上所述,你可以使用以下命令撤消此操作sudo chattr -i /etc/hosts

为什么会发生这种情况:我猜你有一个进程(可能是 dhcpcd 或类似的东西)从某个来源获取主机信息,然后更新各种文件,包括 /etc/hosts(也可能是 /etc/resolv.conf,这就是我最终使用 chattr 的原因)。解决问题的正确方法是找出哪个进程正在执行此操作,然后配置它执行正确的操作。您也可以在该进程完成文件损坏后执行“cp /etc/hosts.correct /etc/hosts”,但您必须在启动过程中足够晚地执行此操作,以免发生这种情况该过程已完成。

答案2

在 GCP/Ubuntu(至少是 Xenial)上,/etc/hosts可以通过 DHCP(客户端)退出钩子来操纵主机名:

/etc/dhcp/dhclient-exit-hooks.d/google_set_hostname

gce-compute-image-packages它由GCE 图像上的默认包安装。

您可以对其进行破解(exit 0)或删除它;请务必在软件包升级时小心,它可以根据 apt/dpkg 设置再次覆盖钩子。

相关内容