[更新和更新 II:请参阅问题末尾基于其中一个答案的尴尬和适当的解决方案]
当我的文件包含 127.0.0.1 IP 地址时,我的 DNS 查找速度非常慢resolv.conf
,实际上,许多名称根本无法解析,因为它(肯定)超时了。
我发现了以下一个问题,其答案看似有效:
但我可以看到 dnsmasq 工具正在为 192.168.122.2 至 192.168.122.254 范围内的 IP 运行。这看起来像 VirtualBox 和 qemu 使用的 IP,所以我可以想象,如果我关闭 dnsmasq,从虚拟系统访问互联网将会失败!
是否还有其他原因导致速度慢和/或超时?(请注意,当问题发生时,问题在特定系统(例如所有 stackoverflow 网站(包括 askubuntu)上的用户图片)上更为突出。)
此时,我从resolv.conf
文件中删除了 IP,这样就可以在浏览时绕过该问题,但我不认为这是最好的解决方案(当然,每次重启时都会重新安装该 IP!)我希望有一个更永久的解决方案来解决这个问题,同时仍然允许我按预期运行虚拟系统。
PS 我没有运行网络管理器。
内容/etc/network/interfaces
请注意,我在 eth1 上添加第二个 IP(即 eth1:0)之前遇到了这个问题。
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth1
iface eth1 inet static
address 162.226.130.121
netmask 255.255.255.248
network 162.226.130.120
broadcast 162.226.130.127
gateway 162.226.130.126
auto eth1:0
iface eth1:0 inet static
name Local network
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
# bridge for virtual box
auto br0
iface br0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
bridge_ports eth3
bridge_stp off
bridge_maxwait 0
bridge_fd 0
启动后的内容/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
nameserver 127.0.0.1
search m2osw.com
nameserver 192.168.122.1
nameserver 206.13.31.12
nameserver 206.13.28.12
更新:
我没有自己写答案,因为我非常使用这里的另一个答案来解决我的问题,虽然这真的不是我想要做的,但这是目前最简单的解决方案。作者resolvconf
在下面引用的错误,在这里找到:
https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/933723
明确指出,如果您想使用 bind9,您将在文件中获取命名空间 127.0.0.1 resolv.conf
。别无选择。(RESOLVCONF=no
似乎什么也没做,不过我可能会在重启后得到惊喜,我很快就会这样做!)
附注:如果我将/etc/resolvconf/resolv.conf.d/tail
软链接指向/dev/null
(如下所述),那么我会得到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
nameserver 127.0.0.1
换句话说,我仍然得到 127.0.0.1,这是此时的罪魁祸首。但我也完全失去了其他两个名称服务器,即使它们在我的 eth1 接口中明确指定。话虽如此,在目录中查看/run/resolvconf/interface/
,我看到一个eth1.net
和lo.named
文件。lo.named
复制到resolv.conf
,但没有eth1.net
。我不知道这些文件是如何创建然后复制到的,resolv.conf
但这就是所使用的动态resolvconf
...
无论如何,错误中提到了两种解决方案:
(1)删除/etc/resolv.conf
软链接,用一个包含你想要的内容的纯文件替换它。这可能对你有用,但我认为保留默认的动态文件是最好的。
(2) 更改 bind9 设置,以便 BIND 可以响应这些本地 DNS 请求。有趣的是,现在名称将缓存在您的计算机上。所以这并非全是坏事。话虽如此,我并不太想向nameserver
所有域名开放我的域名……但这样做有效,我不必破坏动态 r esolv.conf
。
为了以防万一,这里有一个绑定的示例设置,以使该功能能够正常工作:
options {
[...]
forwarders {
// Google DNSes
8.8.8.8;
8.8.4.4;
};
[...]
};
更新二:
好的!重启删除了/run/resolvconf/interface
目录中的 lo.named 文件。这肯定是因为 bind 知道在 时创建它RESOLVCONF=yes
,但在 时不会删除它RESOLVCONF=no
。但是,重启可以解决这个问题,因为该/run
目录是一个 RAM 磁盘。
如果没有该文件,那么/etc/resolv.conf
设置的设置将与我期望的完全一致,即如前所述nameservers
在我的eth1
定义中找到的列表/etc/network/interface
。
所以......这是一个大麻烦,因为有很多因素,而且在某些情况下需要重新启动!
答案1
1:添加dns-nameservers
和 dns-search
/etc/network/interfaces 选项。
auto eth1
iface eth1 inet static
address 162.226.130.121
netmask 255.255.255.0
gateway 162.226.130.126
dns-nameservers 8.8.8.8 162.226.130.126
dns-search m2osw.com
2:dns-
从 中的文件中删除所有选项/etc/resolvconf/resolv.conf.d/
。resolv.conf 包含nameserver
之后的选项nameserver 127.0.0.1
表明存在此类冗余。如果 /etc/resolvconf/resolv.conf.d/tail 是符号链接,请将其设为 的符号链接/dev/null
。
3:关闭 eth1。
sudo ifdown eth1
sudo ifup eth1
4:查看 /etc/resolv.conf。它还nameserver 127.0.0.1
在那里吗?对 DNS 查询的回复是否仍然延迟?如果是,则找出该nameserver 127.0.0.1
行来自哪里。有些东西正在注册监听地址 127.0.0.1,但没有在 127.0.0.1 启动本地名称服务器。(i)一种可能性是 bind9 包。如果您没有运行本地 BIND 名称服务器,则清除 bind9 包(sudo apt-get purge bind9
)。如果您正在运行不提供通用 Internet 名称服务的 BIND 名称服务器,则编辑 /etc/default/bind9 并设置RESOLVCONF=no
,然后重新启动名称服务器。参见:https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/933723(ii) 另一种可能性是您的系统中残留有 dnsmasq 或类似软件包。请清除该软件包。此外,请清除 network-manager,因为您不再使用它。
5:重新启动并查看情况是否有所改善,然后在此报告。
答案2
使用具有环回地址(例如 127.0.0.1)的 DNS 服务器会导致问题:
所有其他具有较低优先级的 DNS 服务器都将被忽略resolvconf
。
DNS 服务器的优先级由定义 DNS 服务器的网络接口定义。
参见/etc/resolvconf/interface-order
和man 5 interface-order
。
幸运的是,有一个环境变量可以改变这种行为:
TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS
看man 8 resolvconf
如果放
TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no
并/etc/default/resolvconf
重新启动resolvconf
服务,所有其他 DNS 服务器将显示在/etc/resolv.conf
。
答案3
如果您使用静态 IP 声明填充 /etc/network/interfaces,那么您还负责声明 DNS 名称服务器地址。我建议:
auto eth1
iface eth1 inet static
address 162.226.130.121
netmask 255.255.255.0
gateway 162.226.130.126 #Isn't the gateway actually xx.1??
dns-nameservers 8.8.8.8 162.226.130.126 #or any others you prefer.
我认为您可以保留 resolv.conf,以便系统根据需要重写它。