![在 Mac 上通过 Cisco AnyConnect VPN 重新排序或“优先” DNS 服务器](https://linux22.com/image/1566739/%E5%9C%A8%20Mac%20%E4%B8%8A%E9%80%9A%E8%BF%87%20Cisco%20AnyConnect%20VPN%20%E9%87%8D%E6%96%B0%E6%8E%92%E5%BA%8F%E6%88%96%E2%80%9C%E4%BC%98%E5%85%88%E2%80%9D%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我的 Mac (10.13.6) 上安装了 Cisco AnyConnect,DNS 解析可以正常用于我们的内部主机名。输出scutil
看起来不错:
2015MBP:~ craig$ scutil --dns
DNS configuration
resolver #1
search domain[0] : dns1.mycompany.com
search domain[1] : dns2.mycompany.com
search domain[2] : hsd1.ma.comcast.net
nameserver[0] : 10.xx.xx.xx (<-- AN INTERNAL COMPANY IP)
nameserver[1] : 10.xx.xx.xx (<-- AN INTERNAL COMPANY IP)
flags : Request A records, Request AAAA records
reach : 0x00000002 (Reachable)
order : 1
resolver #2
domain : local
options : mdns
timeout : 5
flags : Request A records, Request AAAA records
reach : 0x00000000 (Not Reachable)
order : 300000
resolver #3
domain : 254.169.in-addr.arpa
options : mdns
timeout : 5
flags : Request A records, Request AAAA records
reach : 0x00000000 (Not Reachable)
order : 300200
resolver #4
domain : 8.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records, Request AAAA records
reach : 0x00000000 (Not Reachable)
order : 300400
resolver #5
domain : 9.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records, Request AAAA records
reach : 0x00000000 (Not Reachable)
order : 300600
resolver #6
domain : a.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records, Request AAAA records
reach : 0x00000000 (Not Reachable)
order : 300800
resolver #7
domain : b.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records, Request AAAA records
reach : 0x00000000 (Not Reachable)
order : 301000
DNS configuration (for scoped queries)
resolver #1
search domain[0] : hsd1.ma.comcast.net
nameserver[0] : 192.168.1.1
if_index : 5 (en0)
flags : Scoped, Request A records, Request AAAA records
reach : 0x00020002 (Reachable,Directly Reachable Address)
然而,我注意到它正在使用公司 DNS 来做一些它不需要的事情:
2015MBP:~ craig$ nslookup apple.com
Server: 10.xx.xx.xx. (<-- SAME COMPANY IP FROM ABOVE)
Address: 10.xx.xx.xx#53
Non-authoritative answer:
Name: apple.com
Address: 17.178.96.59
Name: apple.com
Address: 17.142.160.59
Name: apple.com
Address: 17.172.224.47
有没有办法告诉 macOS 优先使用我的 ISP 进行主机名解析,并且仅在第一次失败的查找时才回退到 VPN DNS?
答案1
我意识到这并不能准确回答您关于如何在 anyconnect 上修复它的问题,但我能够通过使用 openconnect 实现您想要的结果。如果您知道需要通过 VPN 路由的地址/范围,您可以手动添加这些静态路由以通过 VPN 接口,包括 DNS 服务器@工作。然后,一旦您设置了路由,您就可以在主接口的 DNS 设置中将工作 DNS 服务器添加为非主选项。只有在主 DNS 上找不到结果时,才会查询工作中的辅助/三级/四级/等 DNS 服务器。如果您已正确设置路由,则 DNS 查询将自动通过 VPN 路由,以及其余与工作相关的流量。
但是,如果您使用任何具有拆分 DNS 的应用程序,这可能会给您带来麻烦,因此请注意这一点。
我想你可以通过删除默认路由(由 anyconnect 设置的路由,而不是你的网络适配器 1 的默认路由)或更改 VPN 连接上的 DNS 服务器设置来使用 anyconnect 来实现这一点,但问题是 anyconnect 每次重新连接时都会更改你的设置。使用 openconnect,我能够通过 VPN 适配器设置持久路由,只要 VPN 启动,它就会工作。
如果您需要更多信息,请告诉我,我可以编辑答案。
答案2
这些设置通常在 ASA 本身上配置。您可以指定是否希望所有 DNS 查询都通过 VPN 隧道发送,或者将它们拆分到 VPN 隧道和物理接口之间。我不知道可以在客户端计算机(您的 MAC)上使用任何设置来强制 DNS 解析首先通过本地 DNS,然后回退到通过 VPN 客户端提供的 DNS 服务器。
答案3
其他人似乎在使用不同的 VPN 客户端时也遇到了同样的问题。以下是一些答案https://apple.stackexchange.com/questions/73076/mac-os-x-mountain-lion-dns-resolving-uses-wrong-order-on-vpn-via-dial-up-conne 这可能会有帮助。
答案4
我发现此方法非常有效,可以“修复” AnyConnect DNS 客户端配置以使用我的本地路由器(192.168.1.1)作为 DNS 服务器:
#!/bin/sh
sudo scutil <<EOF
get State:/Network/Service/com.cisco.anyconnect/DNS
d.show
d.remove ServerAddresses
d.add ServerAddresses * 192.168.1.1
d.show
set State:/Network/Service/com.cisco.anyconnect/DNS
EOF