问题描述
在 /etc/network/interfaces
中编辑 dns-nameservers
后,如何告诉 resolvconf(8)
在不重新启动网络的情况下读取新值? (导致服务中断)
-u
选项似乎不起作用,它只是更新回相同的值。
最佳答案
你是对的,“resolvconf -u”不足以激活你所做的更改。该命令仅从 resolvconf 的数据库更新 resolv.conf,而您需要更新数据库。
假设有问题的接口是 eth0。假设在 /etc/network/interfaces 中有一个如下所示的节。
iface eth0 inet static
[...]
dns-nameservers 1.1.1.1 2.2.2.2
现在更改 “dns-nameservers” 行。要激活此更改,请执行以下操作(请注意 && 避免破坏可能打开的 ssh 连接)
ifdown eth0 && ifup eth0
或重新启动。
次佳答案
我最近两次遇到这个问题。
第一次,我执行了 sudo ifdown eth0
,这当然终止了我的 ssh 连接并使机器忽略其 NIC。哎哟。我必须通过服务器上的 IPMI 接口进入才能再次获得控制权。
第二次,我从之前的错误中吸取了教训,并做了 sudo ifdown eth0 ; sudo ifup eth0
。当然,ssh 窗口死掉了,但是机器很快响应了新的 ssh 连接,并且我的 DNS 修改生效了。我在第二台服务器上做了同样的事情,但这次我在 ssh 窗口中输入任何内容之前等待。窗口保持打开状态,DNS 更改已应用。惊人的。
关键是使用 shell 的分号运算符,以便两个命令都在一行上。这样,在接口关闭时就已经输入了恢复接口的命令。我想我可以编写一个脚本并执行它,但这似乎更容易。
更新:还有另一种方法可以做到这一点。您还可以一步重新启动 Ubuntu 网络服务: sudo /etc/init.d/networking restart
或 sudo service network-interface restart INTERFACE=eth0
。感谢 JFA 的启发。