如何在Ubuntu 12.04上编辑/etc/resolv.conf
我有两个通过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提供的两个名称服务器地址中的一个怎么办?
在Ubuntu 12.04及更高版本中,/ /etc/resolv.conf
由resolvconf实用程序动态生成。 (实际上,resolvconf生成/run/resolvconf/resolv.conf
和/etc/resolv.conf
是一个符号链接。这是默认配置;它也可以在/etc/resolv.conf
使用静态文件运行但是这是非标准的。)名称服务器信息(名称服务器地址和搜索域名)由接口配置器( ifup
, NetworkManager
, dhclient
等)通过resolvconf注册。 根据已注册的内容,resolvconf会生成最新的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,您必须在/etc/default/bind9
设置RESOLVCONF=yes
,以使其使用resolvconf注册地址127.0.0.1
。 - 其次,resolvconf默认在任何环回地址(如
127.0.0.1
之后截断名称服务器列表。 要禁用此行为,请创建包含TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no
行的文件/etc/default/resolvconf
。 -
第三,默认情况下,resolvconf在三个项目之后截断名称服务器列表。 包含更多地址没有意义,因为glibc解析器在前三个之后忽略任何地址。 要使resolvconf在两个地址之后截断列表,您必须编辑脚本
/etc/resolvconf/update.d/libc
以替换此行[ "$N" = 3 ] && return 0
通过以下一个。
[ "$N" = 2 ] && return 0
它适用于我的祖父,它适用于我的父亲,它适用于我。
rm /etc/resolv.conf vi /etc/resolv.conf search yourdomain.com nameserver 8.8.8.8 nameserver 8.8.4.4
编辑:
rm
删除标准符号链接。
vi
在其位置创建一个实际文件。
当我安装12.04时,这篇文章给了我很多帮助: http : //www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/
有关记录,官方resolvconf文档在http://anonscm.debian.org/gitweb/?p=resolvconf/resolvconf.git;a=blob;f=README;hb=HEAD
“编辑”就像使用像api一样的resolvconf命令行一样简单。
例如
echo nameserver 8.8.8.8 | resolvconf -a eth0.goog
在这里。 是一个分隔符,接口后面的部分是该接口的配置名称。
如果要删除此名称服务器,只需命名接口和配置,然后使用-d删除
resolvconf -d eth0.goog
在服务器/云场景中,这就是您所需要的。 对于移动设备,您需要参考文档。