连接到新网络时丢弃对 /etc/resolv.conf 的更改

连接到新网络时丢弃对 /etc/resolv.conf 的更改

我最近从 12.04 升级到 12.10,但在连接互联网时遇到了问题。

我获得了一个 IP 地址,并且能够 ping 通本地网络中的其他 LAN IP,但我无法连接到互联网,甚至无法从终端 ping 通 www.google.com。

不知何故,更改/etc/resolv.conf并重新启动resolvconf服务并重新启动是可行的,但我每次连接到新网络时都需要这样做。如何使这些更改永久生效?

有人可以建议解决这个问题吗?

答案1

根据 /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

尝试将零钱放入

/etc/resolvconf/resolv.conf.d/base 并且每 15 分钟重写一次时,它们应该被添加到 /etc/resolv.conf 中。

答案2

免责声明! 如果您的 DNS 服务器作为网络管理器的一部分进行管理,则遵循此答案可能会导致意外问题 - 虽然这将强制使用您想要的系统上方的 DNS 服务器dnsmasq和网络管理器设置中的 DNS 服务器,但它将这样做一切。此外,某些网络和/或连接可能要求你使用他们的DNS 服务器用于解析互联网上的问题。

在此处编辑/etc/resolvconf/resolv.conf.d/head并添加nameserver 1.2.3.4记录。

即使在桌面安装上,这也可以适用于 14.04。我知道这一点,是因为我bind9的笔记本电脑上有一个本地运行的 DNS 服务器(通过),用于本地区域解析(因为我做了很多虚拟机工作),因此首先需要查询我的本地 DNS。

答案3

这是一个通用程序,可以修复名称服务器信息处理中的几个已知错误。

resolvconf 是否已安装?如果已安装,请执行以下操作。

sudo dpkg-reconfigure resolvconf

如果尚未安装,请执行以下操作。

sudo apt-get install resolvconf

现在 resolvconf 已正确安装,请重新启动以便为 resolvconf 提供名称服务器信息。

如果名称服务仍然中断,并且您正在使用 NetworkManager 来管理网络,则在编辑器中打开 /etc/NetworkManager/NetworkManager.conf 并注释掉“dns=dnsmasq”行。要注释掉它,请在行开头添加一个“#”字符。

gksudo gedit /etc/NetworkManager/NetworkManager.conf

接下来进入连接编辑器,确保您使用的连接配置正确。例如,最常见的是“网络指示器 | 编辑连接... | 有线 | 有线连接 1 | 编辑... | IPv4 设置 | 方法”设置为“自动 (DHCP)”,并且未设置“附加 DNS 服务器”地址。

然后重新启动网络管理器。

sudo restart network-manager

现在确认预期的名称服务器地址出现在 /etc/resolv.conf 中。

如果您没有使用 NetworkManager 来配置接口,而是使用,ifup则根据需要编辑并在相应节中/etc/network/interfaces包含dns-nameservers和行。确保 /etc/resolvconf/resolv.conf.d/head 仅包含注释行,并且 /etc/resolvconf/resolv.conf.d/base 和 /etc/resolvconf/resolv.conf.d/tail 不存在或为空。然后是和接口。确认您添加到 /etc/network/interfaces 的名称服务器地址现在出现在 /etc/resolv.conf 中。dns-searchifaceifdownifup

如果名称服务仍然无法工作,那么很可能是本地问题:例如,DHCP 服务器配置错误。另一个已知的问题原因是第三方 VPN 客户端破坏了符号链接 /etc/resolv.conf。如果您的 LAN 看起来正常,并且您没有使用第三方网络软件,那么请针对 NetworkManager 或 resolvconf 提交错误报告,无论哪个您认为更可能是罪魁祸首。

答案4

我自己也曾为 DNS 问题苦恼过,并发过一篇问题以及解决方案,其中列出了一些可以更改 DNS 设置的方法。基本上,有两种方法 - 编辑 3 个文件中的任意一个/etc/resolvconf/resolv.conf.d/或编辑/etc/dhcp/dhclient.conf。我个人更喜欢第一种方法。

以下是我在 ubuntu 和 linux mint 系统上应用的一些方法。请自行决定是否使用。

/etc/dhcp/dhclient.conf

我先从这个开始,因为其他人已经介绍了 resolv.conf 文件。下面是该文件的一部分。查看第 18 行,其中写着prepent name server。无论您使用什么连接,它都会将您指定的 dns 添加到设置中。

1 # /sbin/dhclient 的配置文件,包含在 Debian 的

 2  #       dhcp3-client package.
 3  #
 4  # This is a sample configuration file for dhclient. See dhclient.conf's
 5  #       man page for more information about the syntax of this file
 6  #       and a more comprehensive list of the parameters understood by
 7  #       dhclient.
 8  #
 9  # Normally, if the DHCP server provides reasonable information and does
10  #       not leave anything out (like the domain name, for example), then
11  #       few changes must be made to this file, if any.
12  #

13  option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

14  #send host-name "andare.fugue.com";
15  send host-name = gethostname();
16  #send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
17  #send dhcp-lease-time 3600;
18  #supersede domain-name "fugue.com home.vix.com";
19  #prepend domain-name-servers 127.0.0.1;
20  prepend domain-name-servers 208.67.220.220;
21  request subnet-mask, broadcast-address, time-offset, routers,
22          domain-name, domain-name-servers, domain-search, host-name,
23          dhcp6.name-servers, dhcp6.domain-search,
24          netbios-name-servers, netbios-scope, interface-mtu,
25          rfc3442-classless-static-routes, ntp-servers,
26          dhcp6.fqdn, dhcp6.sntp-servers;
27  #require subnet-mask, domain-name-servers;
28  #timeout 60;
29  #retry 60;
30  #reboot 10;
31  #select-timeout 5;
32  #initial-interval 2;
33  #script "/etc/dhcp3/dhclient-script";
34  #media "-link0 -link1 -link2", "link0 link1";
35  #reject 192.33.137.209;

36  #alias {
37  #  interface "eth0";

/etc/resolvconf/resolv.conf.d/

3 中的任何一个文本都将添加到/etc/resolv.conf,所以我认为选择哪一个都无所谓。我tail个人会使用 。只需使用任何文本编辑器打开它并添加nameserver 8.8.8.8,其中 8.8.8.8 是 google 的公共 dns,但您可以使用任何您喜欢的 dns。

小提示

/etc/Network-Manager/Network-Manager.conf建议您注释掉该dns=dnsmasq行,它是网络管理器的一个插件,它会自动转到最近/最容易到达的 DNS,如果您想绕过网络的 DNS 并使用您自己的 DNS,这可能不是您想要的。

边注:resolv.conf 被重写其实很正常 - 在我的机器上每次建立新连接时它都会被重写。虽然我无法回答为什么,但我的猜测是 NetworkManager 从本地连接获取 dhcp 租约,并使用该本地连接的设置、dns 和其他内容,因此 resolv.conf 需要适应这一点。

相关内容