更改 /etc/network/interfaces 后,如何让 resolvconf 重新生成 resolv.conf?

nul*_*ull 109 server dns resolv.conf

/etc/network/interfaces使用与以下非常相似的内容进行更新后,我该如何/etc/resolv.conf进行更新?我尝试过(以 root 身份)resolver -uservice networking restart但没有奏效。我还修复了符号链接resolv.confresolver -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
Run Code Online (Sandbox Code Playgroud)

jdt*_*ood 120

service networking restart 并不总是使所有接口向下向上的可靠方法。

resolvconf -u命令仅从resolv.confresolvconf 自己的数据库更新。您需要更新数据库。

要更新数据库,您必须使用-a-d选项调用 resolvconf 。当您运行 ifup 或 ifdown 时,这会在幕后发生。因此,通常,与对 的任何其他更改一样/etc/network/interfaces,要激活对 dns-* 选项的更改,您必须关闭有问题的界面并再次打开它。或者你可以重新启动。

如果您想在不使用 ifdownupping 的情况下更改接口(可能是因为您正在远程管理机器并且碰巧通过该接口连接,natch)那么您可以通过直接从命令行运行 resolvconf 来获得相同的结果。这需要对 resolvconf 的语义有更多的了解。假设相关的 /e/n/i 节是

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS
Run Code Online (Sandbox Code Playgroud)

其中 FFFF 是地址族(“inet”或“inet6”)。

要激活这些 dns-* 选项,请按如下方式运行 resolvconf(是的,字符串中的换行符通过管道传输到 resolvconf)。

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF
Run Code Online (Sandbox Code Playgroud)

对于问题中给出的节,这将是以下内容。

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 resolvconf(8) 手册页和 resolvconf 包 README 文件 (/usr/share/doc/resolvconf/README.gz)。

  • 如果你不应该做“服务网络重启”,我建议你不要把它放在这个问题的第一行吗?在匆忙寻找解决方案时,我做的第一件事就是复制粘贴我看到的第一个命令。 (13认同)
  • 这个答案来自开发`resolvconf`的人自己:) (11认同)
  • @RobinWinslow +1 让我开心 (5认同)
  • 要重新启动/重新读取 `/etc/network/interfaces`,你可以这样做: `ifdown eth0 && ifup eth0` ; 它甚至可以在远程 ssh 会话中工作。 (2认同)

小智 31

尽管默认情况下未安装联机帮助页,但它通过更新脚本选项进行了记录,只需运行:

sudo resolvconf -u
Run Code Online (Sandbox Code Playgroud)

  • 在 ubuntu 20.04 上对我不起作用我的 /etc/resolv.conf 仍未更新 (2认同)

小智 7

对于远程管理服务器的人,您可以:

  1. 更新dns-nameservers/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

请注意,这必须在一行上,以 ; (linux 命令行分隔符)。您甚至不应该失去当前的连接。例外是在接口文件中打错了字。如果发生这种情况ifup将失败,您将不得不进行物理访问或其他ethxx连接。