DNS 不起作用,/etc/resolv.conf 未被覆盖。为什么?

DNS 不起作用,/etc/resolv.conf 未被覆盖。为什么?

我在网络管理器连接中的服务器中有以下配置:

/etc/NetworkManager/system-connections/wired-connection

[connection]
id=wired-connection
uuid=0c501f08acc5497cb7...
type=8023ethernet

[8023ethernet]

[ipv4]
method=manual
dns=8.8.8.8;
address1=192.168.1.250/24,192.168.1.1

[ipv6]
method=auto
ip6privacy=0

/etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=true

但是我的文件/etc/resolv.conf(符号链接)没有被网络管理器覆盖。如果我手动将行添加nameserver 8.8.8.8到文件中,它会很好地工作,但这只是一个临时解决方案。如果我在 Kubuntu 界面中打开 IP 配置,我会看到 DNS 字段为空。

我也尝试过这个命令,但是没有用 dpkg-reconfigure resolvconf

我原来的配置文件的路径是/run/resolvconf/resolv.conf

我发现这个文件属于旧配置/etc/resolvconf/resolv.conf.d/original

nameserver 213.60.205.175
nameserver 213.60.205.174
nameserver 212.51.33.110

我应该删除或编辑此文件以使其正常工作吗?

我只能远程访问服务器,因此我想确保它能正常工作。如果不行,我可以断开连接

提前致谢

更新 03/08/15. 输出/usr/share/resolvconf/dump-debug-info

###### Start of debugging information for resolvconf ######
### ls -l /etc/resolvconf
total 16
-rw-r--r-- 1 root root  172 dic 13  2012 interface-order
drwxr-xr-x 2 root root 4096 jul  8 18:33 resolv.conf.d
drwxr-xr-x 2 root root 4096 jul  8 18:33 update.d
drwxr-xr-x 2 root root 4096 jul  8 19:11 update-libc.d
### cat /etc/resolvconf/interface-order
# interface-order(5)
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
hso*
em+([0-9])?(_+([0-9]))*
p+([0-9])p+([0-9])?(_+([0-9]))*
eth*
ath*
wlan*
ppp*
*
### ls -l /etc/resolvconf/resolv.conf.d
total 8
-rw-r--r-- 1 root root   0 dic 13  2012 base
-rw-r--r-- 1 root root 151 dic 13  2012 head
-rw-r--r-- 1 root root  77 jul  8 18:21 original
-rw-r--r-- 1 root root   0 jul  8 18:26 tail
### cat /etc/resolvconf/resolv.conf.d/base
### cat /etc/resolvconf/resolv.conf.d/head
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
### cat /etc/resolvconf/resolv.conf.d/original
nameserver 213.60.205.175
nameserver 213.60.205.174
nameserver 212.51.33.110
### cat /etc/resolvconf/resolv.conf.d/tail
### ls -l /etc/resolvconf/run
ls: no se puede acceder a /etc/resolvconf/run: No existe el archivo o el directorio
### ls -l /run/resolvconf
total 4
-rw-r--r-- 1 root root   0 jul 29 10:10 enable-updates
drwxr-xr-x 2 root root  40 jul 29 10:10 interface
-rw-r--r-- 1 root root 151 ago  3 09:40 resolv.conf
### cat /run/resolvconf/enable-updates
### cat /run/resolvconf/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
### ls -l /run/resolvconf/interface
total 0
### ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 29 jul 24 12:59 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
### lsattr /etc/resolv.conf
lsattr: La operación no está soportada Mientras se leían las banderas en /etc/resolv.conf
### cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
### cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=true
###### End of debugging information for resolvconf ######

顺便说一下,我正在使用 Kubuntu 14.04

答案1

dnsmasq 可执行二进制文件包含在 dnsmasq-base 包中。

dns=dnsmasq在 NetworkManager.conf 中取消注释时,NetworkManager 会运行 dnsmasq 实例作为本地转发名称服务器。

dnsmasq软件包包含支持独立于 NetworkManager 运行 dnsmasq 实例的配置文件。后者 dnsmasq 实例由 /etc/dnsmasq.conf 配置。

网络接口配置程序使用该resolvconf实用程序来管理名称服务器信息。根据提供的信息,它会写入文件 /run/resolvconf/resolv.conf,该文件旨在用于配置 libc 解析器。通过创建从 /etc/resolv.conf 到 /run/resolvconf/resolv.conf 的符号链接,该文件在此角色中被激活。

NetworkManager 和 ifup 将名称服务器信息发送到 resolvconf。通常,/etc/resolv.conf 是 /run/resolvconf/resolv.conf 的符号链接,一切正常。

如果dns=dnsmasq在 NetworkManager.conf 中未注释掉,NetworkManager 会向 resolvconf 提供在 resolv.conf 中出现的名称服务器地址 127.0.1.1;NetworkManager 的从属 dnsmasq 进程在地址 127.0.1.1 处监听,并将查询转发到 NetworkManager 已配置为了解或已通过 DHCP 获知的地址上的外部名称服务器。

提问者的第一句话是:

But my file /etc/resolv.conf (symbolic link) is not overwritten by the Network Manager. 

这表明存在配置错误。/etc/resolv.conf 应该是 /run/resolvconf/resolv.conf 的符号链接,当配置或取消配置某些网络接口时,resolvconf 应该更新后者。鉴于dns=dnsmasqNetworkManager.conf 中的内容,nameserverresolv.conf 中的行应该是nameserver 127.0.1.1,除非您正在运行 dnsmasq 的服务器实例,在这种情况下它可能是nameserver 127.0.0.1,从而指示 libc 解析器使用在 127.0.0.1 上侦听的 dnsmasq 的服务器实例。

提问者的后续问题是:

[...] /etc/resolvconf/resolv.conf.d/original [...]
Should I remove or edit this file to make it work?

此文件 ( original) 只是安装 resolvconf 软件包时 /etc/resolv.conf 的副本,通常不起作用。resolvconf 软件包会保留此文件,以防软件包被卸载,然后将此original文件放回 /etc/resolv.conf。在某些情况下,/etc/resolvconf/resolv.conf.d/tail 是指向 的符号链接,original但这是非标准的,如果您的系统也是如此,那么您应该将 /etc/resolvconf/resolv.conf.d/tail 更改为空文件或指向 的符号链接/dev/null

答案2

看起来您正在使用dnsmasq一个缓存 DNS 服务器。

如果您想添加 DNS 服务器,您可以执行此命令:

echo nameserver X.X.X.X | sudo resolvconf -a IFACE.PROGNAME
sudo service dnsmasq restart 

其中 IFACE.PROGNAME 是您使用的网络的名称(eth0、eth1、wlan0……)

对于永久更改,您可以使用以下命令创建 /etc/resolv.dnsmasq.conf

nameserver  8.8.8.8

并编辑 /etc/dnsmasq.conf 并设置:

resolv-file=/etc/resolv.dnsmasq.conf

另一个解决方案是,通过注释该行来禁用 dnsmasq

dns=dnsmasq

在文件 /etc/NetworkManager/NetworkManager.conf 中。并使用 /etc/resolv.conf 文件。

答案3

对我有用的是启用 resolvconf 服务:

sudo systemctl enable resolvconf
sudo reboot

问题是安装了一些 VPN 垃圾后,resolvconf 没有在启动时启动。

相关内容