如何在不导致停机的情况下更新 DNS 解析器配置?

Mik*_*.K. 5 server networking dns resolvconf

一张纸条

新问题,因为与此相关的所有其他内容似乎都已过时和/或相互矛盾。保持你的接近投票,请:)

问题

在 Ubuntu 12 和 14 Server 的库存安装中,建议似乎是您进行 DNS 更改的方式是编辑接口文件并在那里添加 dns- 选项。唯一的问题是,在担心正常运行时间的服务器上,强制应用这些更改的唯一方法似乎是使用ifdown/ifup.

我有大量的服务器要对其进行一组 DNS 更改,并且我需要整体更新它们的解析器配置,而无需以这种方式切换网络接口。我还需要确保重新启动后更改仍然有效。

问题是所有这些服务器都是用interfaces文件中的 dns- 选项构建的,这意味着如果我更改resolvconf'sheadtail文件,我将在重新启动时得到一堆重复的行。

该过程需要类似于:

  1. 完全消除解析器配置(现在到处都是)
  2. 将选项设置为新的、已知良好的值
  3. 保存这些选项,以便应用程序立即使用它们,并在重新启动后就位。

所以,回顾一下:

什么行不通

  • 编辑输入的行interfaces(需要中断以回收接口)
  • 直接编辑resolv.conf(不会生效,不会保存)
  • 编辑 resolvconfheadtail文件(不会生效,重启时会有重复的行)

实际问题

有没有办法在中断服务的情况下实现这样的更改?理想情况下,我可以强制 resolvconf 在不切换界面的情况下完成其更新过程。

Mik*_*.K. 2

如果你绝对不能resolv.conf处于不一致的状态,这就是我所做的:

  1. dns-从您的行生成的解析器的“状态”/etc/network/interfaces存储在/var/run/resolvconf/interface/(interfacename).inet- 该文件已被截断。

  2. 相同的数据(searchnameserver等,与已完成的 中的相同内容resolv.conf)被复制到/etc/resolvconf/resolv.conf.d/tailtail必须创建该文件),并添加适当的注释,以便以后出现的任何人都可以看到发生了什么。

  3. dns中的行已/etc/network/interfaces被注释掉

  4. 最后运行以从 tail 文件resolvconf -u重新生成/etc/resolv.conf

这具有以下效果:

  • 将解析器设置与网络接口解耦(如果您使用的是单个接口盒,则毫无必要地烦人)

  • 将解析器设置放入单一用途文本文件(tail文件)中

  • 使更改立即生效

  • ..并让它们在重新启动后仍然存在

  • 并重新生成系统范围/etc/resolv.confresolvconf的通知机制完好无损。

  • ...没有停机时间:D