Ubuntu:如何为 resolvconf 正确配置 /etc/network/interfaces 中的 DNS 服务器?

Ubuntu:如何为 resolvconf 正确配置 /etc/network/interfaces 中的 DNS 服务器?

我见过的配置 ( /etc/network/interfaces) 的所有示例都表明您配置了一个接口,然后在下面给出了dns-*诸如以下的行:

auto eth0
iface eth0 inet static
        ...
        dns-nameservers 127.0.0.2
        dns-search example.com my.example.com

现在我知道 DNS 协议独立于传输机制。因此,在线路上添加 IPv6 地址本身不应该是错误的dns-nameservers

但是,由于我还要为 IPv6 配置接口,因此dns-nameservers在此处添加以下行是有意义的:

iface eth0 inet6 static
        ...
        dns-nameservers ::2
        dns-search example.com my.example.com

...或者做到了?因为resolvconf创建时/etc/resolv.conf它会忽略所有 IPv6 DNS 服务器。它似乎也忽略了dns-searchdns-domain。它似乎遵循的唯一行是dns-nameservers来自 IPv4 配置的行eth0

配置 DNS 服务器的正确方法是什么?


关于为什么它应该成为每个相应iface节的一部分的进一步间接证据。引用自man 8 resolvconf:

ifup(8) 程序可用于根据 中的设置配置网络接口/etc/network/interfaces(5)。要在配置接口时ifup推送名称服务器信息,请将行添加到中的 相关节。要添加名称服务器地址,请添加以 开头的行。resolvconfdns-iface/etc/network/interfacesdns-nameservers

答案1

iface eth0 inet static将 dns-* 选项放在stanza 或stanza中是正确的iface eth0 inet6 static。当这些选项所属的逻辑接口定义变为活动状态时,这些选项也将变为活动状态。

我刚刚在我自己的 Ubuntu 15.04 机器上测试了这个,我通常使用 DHCP 配置该机器。我禁用了 NetworkManager 并编辑了 /etc/network/interfaces,使其看起来像这样:

iface eth0 inet static
        address 192.168.178.22
        netmask 255.255.255.0
        dns-nameservers 8.8.8.8
        dns-search foo

iface eth0 inet6 static
        address fe80::390:f5ff:fef7:96b9/64
        dns-nameservers ::2
        dns-search bar

然后我做了

$ sudo ifup eth0

结果:

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:90:f5:f7:96:b9  
      inet addr:192.168.178.22  Bcast:192.168.178.255  Mask:255.255.255.0
      inet6 addr: fe80::390:f5ff:fef7:96b9/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:2114609 errors:0 dropped:1 overruns:0 frame:0
      TX packets:1757693 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:2033346950 (2.0 GB)  TX bytes:1318685445 (1.3 GB)
      Interrupt:20 Memory:f7e00000-f7e20000 

$ 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
nameserver ::2
nameserver 8.8.8.8
search bar foo

请注意,两个节中的地址、dns-nameservers 和 dns-search 选项现在均处于活动状态。

[2015 年 5 月 30 日更新]

答案2

在我运行 Ubuntu 16.04.2 LTS 的 RPi 上,我的发现如下:

注意:我卸载了 NetworkManager,只留下 resolvconf 来做它的事情。 (这是一个固定服务器,因此网络方面的情况不会发生太大变化。)

如果我只在一个接口(主要的有线接口)上有 dns-search 和 dns-nameserver 行,但在另一个接口(wlan0)上没有,然后在重新启动时,大约 95% 的时间我的 /etc/resolv.conf 文件将为空。

例如,当我的接口文件如下所示:

# The primary network interface
auto enxb827ebbfedcf
iface enxb827ebbfedcf inet static
    address 192.168.1.16
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-search summer.co.uk summer.vpn
    dns-nameserver 192.168.1.16 
    dns-nameserver 192.168.1.1

# end stanza with clear line+

# The loopback network interface
auto lo
iface lo inet loopback

auto wlan0 
iface wlan0 inet static
    address 192.168.1.17
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1 
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

然后重新启动后,我的 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

然而,在一两次重新启动后,我注意到它确实有我想要的,例如

# 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 192.168.1.16
nameserver 192.168.1.1
search summer.co.uk summer.vpn

解决方案 当我为两个接口(有线和 wlan0)提供 dns-search 和 dns-nameserver 线路时,​​每次重新启动时一切都正常(到目前为止)

即以下接口文件对我有用:

# The primary network interface
auto enxb827ebbfedcf
iface enxb827ebbfedcf inet static
    address 192.168.1.16
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-search summer.co.uk summer.vpn
    dns-nameserver 192.168.1.16 
    dns-nameserver 192.168.1.1

# end stanza with clear line+

# The loopback network interface
auto lo
iface lo inet loopback

auto wlan0 
iface wlan0 inet static
    address 192.168.1.17
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-search summer.co.uk summer.vpn
    dns-nameserver 192.168.1.16 
    dns-nameserver 192.168.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

并在每次重新启动后给我以下正确的 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 192.168.1.16
nameserver 192.168.1.1
search summer.co.uk summer.vpn

我认为这个重复的配置是正常的,尽管有些多余。

结论:如果接口(lo0 除外)缺少 dns-search 和 dns-nameserver 信息,则 resolvconf 不会在 resolv.conf 文件中放置任何内容。 (就好像 ifup 第二次处理了 wlan0 接口,然后 ifup 擦除了 resolv.conf 等。)

我不确定这是否是一个错误,但我感觉不对。

答案3

您想在 /etc/network/interfaces 上使用 IPv6 DNS 服务器...只需将您的 IPv6 DNS 命名器条目放在特定的网络接口上,如下所示:

dns-nameservers 2001:4860:4860::8844 2001:4860:4860::8888. 

如需将 IPv6 dnsnamesers 永久添加到 resolv.conf,请使用我在下面添加的相同链接,并通过填充您自己的 IPv6 DNS 命名器来编辑 resolvconf 基本文件:

nameserver 2001:4860:4860::8844
nameserver 2001:4860:4860::8888 

要使用 IPv6 配置 /etc/network/interfaces,请使用本指南http://www.bytelinux.com/configure-permanent-static-ip-address-alias-interfaces-debian-based-systems/并将 IPv4 替换为 IPv6,如下所示: auto eth0

iface eth0 inet6 static
        address 2800:210:0:1::3
        netmask 64
        gateway 2800:210:0:1::1
        dns-nameservers 2001:4860:4860::8844 

答案4

为什么不按照我之前的答案中的链接建议编辑 resolvconf 基本文件,直接在 /etc/resolv.conf 系统范围文件上实现这些 IPv6 DNS 名称服务器,并且仍然继续使用网络接口文件?您可以在 /etc/resolv.conf 中添加一组 DNS IPv6 名称服务器,如果您想对特定 NIC 使用其他 IPv6 名称服务器,则仅在 /etc/network/interfaces 上使用它们。

相关内容