一张纸条
新问题,因为关于这个问题的其他一切都似乎已经过时和/或相互矛盾。请保持投票 :)
问题
在 Ubuntu 12 和 14 Server 的常规安装中,目前的建议似乎是,更改 DNS 的方式是编辑接口文件并在其中添加 dns- 选项。唯一的问题是,在服务器上,正常运行时间是一个问题,似乎强制应用这些更改的唯一方法是使用 反弹受影响的网络接口ifdown/ifup
。
我需要对大量服务器进行一系列 DNS 更改,并且需要批量更新它们的解析器配置,而无需以这种方式切换网络接口。我还需要确保更改在重启后仍然有效。
问题是所有这些服务器都是用文件中的 dns- 选项构建的interfaces
,这意味着如果我更改resolvconf
或head
文件tail
,则重新启动时会出现一堆重复的行。
该过程需要类似于:
- 彻底消除解析器配置(目前它无处不在)
- 将选项设置为新的、已知的良好值
- 保存这些选项,以便应用程序可以立即使用它们,并且它们在重新启动后仍然有效。
总结一下:
什么行不通
- 编辑行
interfaces
(需要停机来回收界面) - 直接编辑 resolv.conf(不会生效,不会保存)
- 编辑 resolvconf
head
或tail
文件(不会生效,重启时会有重复的行)
实际问题
有没有办法实现这样的改变,没有中断服务?理想情况下,我可以强制 resolvconf 完成其更新过程,而无需切换界面。
答案1
如果你绝对不能resolv.conf
处于不一致的状态,那么我做了以下事情:
dns-
从您的行生成的解析器的“状态”/etc/network/interfaces
存储在/var/run/resolvconf/interface/(interfacename).inet
- 此文件已被截断。将相同的数据(
search
,,nameserver
等等,与已完成的中的相同内容resolv.conf
)复制到/etc/resolvconf/resolv.conf.d/tail
(tail
必须创建的文件)中,并添加适当的注释,以便后来的任何人都可以看到发生了什么。dns
中的行被/etc/network/interfaces
注释掉了最后运行从尾部文件
resolvconf -u
重新生成/etc/resolv.conf
其效果是:
将解析器设置与网络接口分离(如果您使用单个接口盒,则这会产生不必要的烦恼)
将解析器设置放在单一用途的文本文件(
tail
文件)中使更改立即生效
..并让它们在重启后继续存在
并重新生成整个系统
/etc/resolv.conf
,保持resolvconf
通知机制完好。...无停机时间 :D