为什么resolv.conf中的127.0.0.1会导致DNS解析出现问题?

Ale*_*lke 6 virtualbox networking dns

[更新和更新二:根据答案之一,在问题的末尾查看我笨拙而正确的解决方案]

当我的resolv.conf文件包含 127.0.0.1 IP 地址时,我的 DNS 查找速度非常慢,实际上,许多名称根本没有得到解析,因为它(当然)超时了。

我在这里找到了一个看似有效答案的问题:

DNS 查找速度极慢

除了我可以看到 dnsmasq 工具正在为 IP 范围 192.168.122.2 到 192.168.122.254 运行。这看起来像VirtualBox和qemu使用的IP,所以我想象如果我关闭dnsmasq,从虚拟系统访问互联网会失败!

缓慢和/或超时是否还有其他原因?(注意,出现问题时,问题在所有stackoverflow网站(包括askubuntu)上的用户图片等特定系统上更为突出。)

在这一点上,我从resolv.conf文件中删除了 IP并在我浏览时绕过了问题,但我认为这不是最好的解决方案(当然,每次重新启动时都会在那里重新安装 IP!)我想要一个这个问题的更永久的解决方案仍然允许我按预期运行虚拟系统。

PS 我不运行网络管理器。


的内容 /etc/network/interfaces

请注意,我在 eth1(即 eth1:0)上添加第二个 IP 之前遇到了问题。

# 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
Run Code Online (Sandbox Code Playgroud)

启动后的内容/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
Run Code Online (Sandbox Code Playgroud)

更新:

我自己不写答案,因为我在这里经常使用另一个答案来解决我的问题,尽管这确实不是我想要做的,但这是目前最简单的解决方案。resolvconf下面作者引用的错误,在这里找到:

https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/933723

明确指出,如果您想使用 bind9,您将在resolv.conf文件中获得命名空间 127.0.0.1 。没有选择。(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
Run Code Online (Sandbox Code Playgroud)

换句话说,我仍然得到 127.0.0.1,这是此时的罪魁祸首。但我也完全失去了其他两个名称服务器,即使它们在我的 eth1 接口中明确指定。话虽如此,查看/run/resolvconf/interface/目录,我看到一个eth1.netlo.named文件。将lo.named被复制到resolv.conf,但不是eth1.net。我不知道这些文件是如何创建然后复制到的,resolv.conf但这就是resolvconf...

无论如何,bug中提到了两个解决方案:

(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 Code Online (Sandbox Code Playgroud)

更新二:

好的!重新启动摆脱了/run/resolvconf/interface目录中的 lo.named 文件。那一定是因为 bind 知道创建它 if RESOLVCONF=yes,但它不删除它 if RESOLVCONF=no。但是,重新启动会解决这个问题,因为该/run目录是一个 RAM 磁盘。

如果没有那个文件,/etc/resolv.conf它的设置正是我所期望的,这是nameserverseth1/etc/network/interface前面显示的定义中定义的列表。

所以......这是一个大混乱,因为有很多因素,在某些情况下需要重新启动!

jdt*_*ood 4

1:向 /etc/network/interfaces 添加dns-nameservers 选项 dns-search

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
Run Code Online (Sandbox Code Playgroud)

2:dns-从 .txt 中的文件中删除所有选项/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
Run Code Online (Sandbox Code Playgroud)

4:查看/etc/resolv.conf。nameserver 127.0.0.1DNS 查询的回复是否仍然延迟?如果是这样,那么找出这条nameserver 127.0.0.1线是从哪里来的。正在注册侦听地址 127.0.0.1,而无需在 127.0.0.1 启动本地名称服务器。(i) 一种可能性是bind9 软件包。如果您没有运行本地 BIND 名称服务器,则清除 bind9 包 ( sudo apt-get purge bind9)。如果您运行的 BIND 名称服务器不提供常规 Internet 名称服务,则编辑 /etc/default/bind9 并设置RESOLVCONF=no,然后重新启动名称服务器。请参阅: https: //bugs.launchpad.net/ubuntu/+source/bind9/+bug/933723 (ii) 另一种可能性是您的系统上有 dnsmasq 或类似软件包的残余。清除那个包。还要清除网络管理器,因为您不使用它。

5:重新启动并查看情况是否有所改善,然后在此处报告。