![VPN 扰乱 DNS 解析](https://linux22.com/image/1308699/VPN%20%E6%89%B0%E4%B9%B1%20DNS%20%E8%A7%A3%E6%9E%90.png)
使用 Kerio VPN 客户端(OS X Leopard)连接到服务器后,客户端的互联网(~网页浏览)停止工作。
经过一番搜索,问题似乎是 DNS 服务器有问题(即直接输入 IP 即可)。断开 VPN 连接后,无效 DNS 服务器消失,scutil --dns
一切恢复正常。
现在,我不明白为什么客户端上的 OS X 甚至会更改 DNS 设置——互联网应该通过不同的接口、通过默认网关进行路由,而不是通过 VPN。
问题:
- 连接 VPN 客户端通过什么机制改变“默认”DNS 服务器?
- 如何阻止 VPN 客户端更改路由/DNS 规则?这些信息存储/修改在哪里?
使用 VPN 之前:
$ scutil --dns
DNS configuration
resolver #1
nameserver[0] : 10.66.77.1 # <---- default gateway = home router; all good
order : 200000
resolver #2
domain : local
options : mdns
timeout : 2
order : 300000
...
VPN 已连接:
$ scutil --dns
DNS configuration
resolver #1
nameserver[0] : 192.168.1.1 # <--- rubbish
nameserver[1] : 192.168.2.1
order : 200000
resolver #2
domain : local
options : mdns
timeout : 2
order : 300000
...
VPN 没有出现在 中$ networksetup -listallnetworkservices
。它也没有出现在系统偏好设置的“网络”对话框中。ifconfig
报告为
kvnet0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1400
inet 192.168.2.9 netmask 0xffffff00 broadcast 192.168.2.255
ether 44:45:53:54:4f:53
编辑:进展——根据Kerio VPN 文档:
The VPN server also assigns the client an address for the primary, and
optionally also secondary DNS server and DNS domain extension. This
allows to specify remote hosts with their names.
The change of DNS configuration has such effect that all DNS queries
from the client host are sent to a DNS server in a remote private
network. Users usually do not even notice any change. Upon closing of
the VPN connection, the original DNS configuration will be recovered.
他们是如何做到这一点的?我该如何阻止他们这样做(在不关闭 VPN 的情况下切换 DNS)?
答案1
关于你的第一个问题,VPN 如何更改默认 DNS,我不知道该机制,但 OSX 通过 DynamicStore API 以及通过networksetup
和等实用程序提供对网络设置的编程访问scutil
。这苹果文档有更多关于内部如何维护设置的信息。我猜想内置或第三方定义的 VPN 会使用这些功能。
关于您的第二个问题,如何停止更改,您可以手动设置与 VPN 关联的 DNS,方法是进入“网络偏好设置”,选择 VPN 网络,进入“高级”,然后在那里插入您自己的 DNS 服务器。此外,只需通过“网络偏好设置”窗格中的设置下拉按钮更改“服务顺序”就足够了。如果 WiFi 或以太网网络在 VPN 网络之前列出,那么在某些情况下其 DNS 可能会优先。
但是,您的问题可能更微妙,您实际上希望的是将 VPN 的 DNS 服务器用于某些域名(VPN 内的资产),将普通 DNS 服务器用于互联网的其余部分。但目前情况并非如此,因为 VPN 的 DNS 服务器正在处理您的所有 DNS 查询。
如果您查阅 OSX 手册页resolver(5)
,尤其是“搜索策略”部分,您会发现 OSX 有一个内部机制,允许您定义多个 DNS 解析器,其中一些解析器服务于某些域(如 *.mycompany.com),而其他解析器服务于其他所有域。但是,这无法从“网络首选项”窗格中进行配置。
似乎您可以通过将解析器配置文件添加到 /etc/resolvers 中来部分配置这一点。但是,我不知道这些文件是否会优先于您的 VPN 安装的文件。如果没有,您的下一个最佳选择是使用 scutil 明确编辑和替换 VPN 客户端创建的 DNS 设置。如果您运行 scutil,然后执行
show State:/Network/Global/DNS
您可能会看到 VPN 客户端创建的有问题的 DNS 设置。您应该能够使用 scutil 交互命令删除或修改它们。
您还应该验证 VPN 是否没有中断通往互联网的路由。netstat -r
在启动 VPN 之前和之后使用以查看默认路由发生了什么,以便检查这一点。
答案2
通过完全重新安装(Lion OS 而不是 Leopard)已“解决”。
我仍然不知道问题是什么,但愿它安息......