我见过的配置 ( /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-search
和dns-domain
。它似乎遵循的唯一行是dns-nameservers
来自 IPv4 配置的行eth0
。
配置 DNS 服务器的正确方法是什么?
关于为什么它应该成为每个相应iface
节的一部分的进一步间接证据。引用自man 8 resolvconf
:
该
ifup(8)
程序可用于根据 中的设置配置网络接口/etc/network/interfaces(5)
。要在配置接口时ifup
推送名称服务器信息,请将行添加到中的 相关节。要添加名称服务器地址,请添加以 开头的行。resolvconf
dns-
iface
/etc/network/interfaces
dns-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 上使用它们。