问题描述
在更新/etc/network/interfaces
之后,我将如何获得/etc/resolv.conf
更新?我尝试了(以root身份)resolver -u
,service networking restart
但他们没有工作。我还修复了resolv.conf
的符号链接,并再次尝试了resolver -u
。最后在挫败中,我重新启动,它通过重建/etc/resolv.conf
来解决问题。
Ubuntu 12.04,64位服务器,安装了所有最新的修补程序。
示例/etc/network/interfaces
:
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameservers 192.168.3.45 192.168.8.10
最佳解决方案
service networking restart
并不总是down-upping所有接口的可靠方式。
resolvconf -u
命令仅从resolvconf自己的数据库更新resolv.conf
。您需要更新数据库。
要更新数据库,必须使用-a
或-d
选项调用resolvconf。当你运行ifup或ifdown时,发生在幕后。所以,通常,与对/etc/network/interfaces
的任何其他更改一样,要激活对dns- *选项的更改,必须对有问题的接口进行ifdown,并再次进行ifup。或者你可以重新启动。
如果您希望在不降低if接口的情况下对接口进行更改(可能是因为您正在远程管理计算机并恰好通过该接口进行连接,则natch),则可以通过直接从命令行运行resolvconf来获得相同的结果。这需要更多关于resolvconf语义的知识。假设相关的/e /n /i节是
iface IIII FFFF static
address ...
...
dns-nameservers X.X.X.X Y.Y.Y.Y
dns-search SSSS
其中FFFF是地址族(“inet”或”inet6”)。
要激活这些dns- *选项,可以按如下方式运行resolvconf(是的,将字符串中的换行符传送给resolvconf)。
echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF
对于问题中给出的节,这将是以下内容。
echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet
有关更多信息,请参阅resolvconf(8)手册页和resolvconf软件包的README文件(/usr/share/doc/resolvconf/README.gz)。
次佳解决方案
虽然默认情况下没有安装联机帮助页,但通过更新脚本选项记录它,只需运行:
sudo resolvconf -u
第三种解决方案
对于那些远程管理您的服务器,您可以:
-
更新
/etc/network/interfaces
中的dns-nameservers
行 -
# ifdown eth01; ifup eth01
请注意,这必须在一行上划分; (linux命令行分隔符)。你甚至不应该失去目前的连接。例外是在接口文件中输入错字。如果发生这种情况ifup
将失败,您将不得不有物理访问或另一个ethxx
连接。
第四种方案
service resolvconf restart
将无需大惊小怪地重新生成/etc/resolv.conf
文件。