如何在 Ubuntu 中正确配置 DNS 使用?没有 RA 标志的权威答案被忽略

gri*_*yvp 5 dhcp ubuntu vpn

我在 Virtualbox 中安装了来自官方网站的最新干净的 Ubuntu 14.04.1 64 位。我使用 vpnc 连接到 VPN 网络,该网络使用 DHCP 设置 2 个 DNS 服务器:

user@virtual:~$ 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 10.88.94.1
nameserver 8.8.8.8
nameserver 10.40.0.1
Run Code Online (Sandbox Code Playgroud)

where10.88.94.18.8.8.8由 vpn dhcp10.40.0.1返回,由 lan dhcp 返回。vpn dhcp 返回的第一个 DNS 服务器被配置为一些内部名称的权威、非递归名称服务器。

问题是 - Ubuntu 以某种方式忽略权威标志并丢弃有效响应,因为它是非递归的:

user@virtual:~$ nslookup
> video.something.com
;; Got recursion not available from 10.88.94.1, trying next server
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   video.something.com
Address: 180.112.94.1
Run Code Online (Sandbox Code Playgroud)

由于 tcpdump 清楚地显示来自第一个 DNS 服务器的答案设置了“权威”标志,但不知何故它被忽略了(第二个响应中的“*”代表“权威”,“-”代表“非递归”):

13:23:44.505098 IP 10.40.130.209.44159 > 10.88.94.1.domain: 63790+ A? video.something.com. (32)
13:23:44.506285 IP 10.88.94.1.domain > 10.40.130.209.44159: 63790*- 1/0/0 A 10.88.94.12 (48)
13:23:44.506390 IP 10.40.130.209.45437 > 8.8.8.8.domain: 63790+ A? video.something.com. (32)
13:23:44.608414 IP 8.8.8.8.domain > 10.40.130.209.45437: 63790 1/0/0 A 180.112.94.1 (48)
Run Code Online (Sandbox Code Playgroud)

在 Windows 和 OSX 上,相同的设置按预期工作(使用第一个 DNS 结果)。但不是在 Ubuntu 上。无论“非递归”标志如何,我都可以在 Ubuntu 中修复它以便正确处理权威响应,或者它完全损坏了,我无能为力吗?

mc0*_*c0e 4

您似乎期望的那种后备行为并不是 DNS 应该如何工作的一部分。仅当第一个名称服务器未响应或存在其他类型的网络错误时,才应联系 resolv.conf 中的第二个名称服务器。

微软显然已经做了他们自己的事情,它当然对你想做的事情很有用,但不应该依赖它来设置 VPN。微软还有一个想法,即针对不同的网络接口使用不同的名称解析。

如果您无法影响 VPN 配置,那么在 Linux 上最好的选择可能是设置您自己的名称服务器,该服务器决定按域将请求转发到哪里。