我在 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
其中10.88.94.1
和8.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
由于 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)
在 Windows 和 OSX 上,相同的设置按预期工作(使用第一个 DNS 结果)。但不是在 Ubuntu 上。这是我可以在 Ubuntu 中修复的东西,以便无论“非递归”标志如何都能正确处理权威响应,或者它完全被破坏了,我无能为力吗?
您似乎期望的那种回退行为并不是 DNS 应该如何工作的一部分。resolv.conf 中的第二个名称服务器只有在第一个没有响应或出现其他类型的网络错误时才应该联系。
微软显然已经做了他们自己的事情,它肯定对你想要做的事情很有用,但不应该依赖它来设置 VPN。Microsoft 也有一个概念,即为不同的网络接口使用不同的名称解析。
如果您无法影响 VPN 配置,那么您在 Linux 上的最佳选择可能是设置您自己的名称服务器,该名称服务器决定按域将请求转发到何处。
为了使 DNS 递归适用于 Ubuntu bind9 服务器,您将确保以下行位于 DNS 服务器上的 /etc/bind/named.conf.options 中:
话虽如此,您声称您无权访问 DNS 服务器。在这种情况下,您是否考虑过更改 DNS 服务器的顺序?例如,如果您使用最后一个 DNS 条目...
并将其放在/etc/resolvconf/resolv.conf.d/head 的文件中,然后运行该
resolvconf -u
命令,该条目将自动添加到/etc/resolv.conf 的顶部。这样做是让 10.40.0.1 成为第一个使用的 DNS 服务器,然后检查 VPN 记录(假设 10.40.0.1 允许 DNS 递归)。