我有两个通过 DHCP 配置的网络接口。因此,/etc/resolv.conf
会填充来自 DHCP 服务器的信息。
我如何编辑此文件?
我知道如果我添加prepend domain-name-servers 127.0.0.1
到/etc/dhcp/dhclient.conf
我可以获得的nameserver 127.0.0.1
第一行(也是唯一一行)/etc/resolv.conf
。
如果我想要 127.0.0.1 以及仅通过 DHCP 提供的两个名称服务器地址中的一个,该怎么办?
答案1
在 Ubuntu 12.04 及更高版本中,/etc/resolv.conf
由 resolvconf 实用程序动态生成。(实际上,resolvconf 生成/run/resolvconf/resolv.conf
并/etc/resolv.conf
指向该符号链接。这是默认配置;也可以使用静态文件运行,但这不是标准配置。)名称服务器信息(名称服务器地址/etc/resolv.conf
和搜索域名)由接口配置程序(、、等)向 resolvconf 注册ifup
。根据已注册的内容,resolvconf 生成最新文件。NetworkManager
dhclient
resolv.conf
因此,您无法直接编辑该resolv.conf
文件。如果您想控制最终结果,resolv.conf
则必须配置 resolvconf 实用程序。请参阅 resolvconf 文档了解更多信息。
对于“如果我想要 127.0.0.1 并且只想要通过 DHCP 提供的两个名称服务器地址中的一个怎么办?”这一具体问题,答案是:
- 首先,不是添加
prepend domain-name-servers 127.0.0.1
到/etc/dhcp/dhclient.conf
。正确的协议是,当本地名称服务器准备好提供本地名称服务时,它们会向 resolvconf 注册其本地监听地址;当它们这样做时,DHCP 客户端无需这样做。默认情况下,Dnsmasq 会做正确的事情。对于 BIND 9,您必须进行设置RESOLVCONF=yes
以使其向 resolvconf/etc/default/bind9
注册地址。127.0.0.1
- 其次,resolvconf 默认会截断任何环回地址(如)之后的名称服务器列表
127.0.0.1
。要禁用此行为,请创建一个/etc/default/resolvconf
包含以下行的文件TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no
。 第三,resolvconf 默认在三个项目后截断名称服务器列表。包含更多地址毫无意义,因为 glibc 解析器会忽略前三个地址之后的任何地址。要使 resolvconf 在两个地址后截断列表,您必须编辑脚本
/etc/resolvconf/update.d/libc
以替换此行[ "$N" = 3 ] && return 0
通过以下一个。
[ "$N" = 2 ] && return 0
答案2
它对我祖父有用,对我父亲有用,对我也有用。
rm /etc/resolv.conf
vi /etc/resolv.conf
search yourdomain.com
nameserver 8.8.8.8
nameserver 8.8.4.4
编辑:
rm
删除标准符号链接。
vi
在其位置创建一个实际文件。
答案3
当我安装 12.04 时,这段文字对我帮助很大:http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/
答案4
作为记录,官方的 resolvconf 文档在这里http://anonscm.debian.org/gitweb/?p=resolvconf/resolvconf.git;a=blob;f=README;hb=HEAD
“编辑”就像使用 resolvconf 命令行一样简单,就像使用 api 一样。
例如
echo nameserver 8.8.8.8 | resolvconf -a eth0.goog
这里的 . 是分隔符,接口后的部分是该接口的配置名称。
如果要删除此名称服务器,只需命名接口和配置,然后使用 -d 删除
resolvconf -d eth0.goog
在服务器/云场景中,这就是您所需要的。对于移动设备,您需要参考文档。