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.8.94.1和8.8.8.8由vpn dhcp返回,而10.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上的最佳选择可能是设置自己的名称服务器,该服务器决定将域请求转发到何处.
精彩评论