OS X 中的 VPN DNS 配置错误

use*_*577 5 networking dns vpn openvpn macos

我正在使用 TunnelBlick 连接到带有 OS X 10.9.2 的 VPN (OpenVPN)。我可以验证和传递流量,但从 VPN 注入的 DNS 条目不起作用。

这是scutil --dns(解析器 #1 是 Tunnelblick 注入的正确 DNS 服务器)的输出

resolver #1
  search domain[0] : XXXXX.net
  nameserver[0] : 10.10.0.15
  if_index : 5 (en1)
  flags    : Request A records
  reach    : Reachable
Run Code Online (Sandbox Code Playgroud)

问题是if_index应该tap0和不是en1。来自ifconfig

en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether e4:ce:8f:1b:42:cc
    inet6 fe80::e6ce:8fff:fe1b:42cc%en1 prefixlen 64 scopeid 0x5
    inet 10.0.1.2 netmask 0xffffff00 broadcast 10.0.1.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    status: active

tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 0a:83:8d:37:dc:b9
    inet 10.10.0.100 netmask 0xffff0000 broadcast 10.10.255.255
    open (pid 4997)
Run Code Online (Sandbox Code Playgroud)

nslookup, dig, 和host所有都可以正确访问 DNS 服务器,但 OS X 的其余部分不能(我知道这些具有独立的解析机制,不依赖于 OS X 的其余部分)。我已经与 Wireshark 确认,nslookupet发送的 DNS 数据包。阿尔。出去tap0,其他程序发送的 DNS 数据包(例如ping)出去eth0,当然永远不会到达目的地。有没有可能scutil在发送数据包之前实际上不查看路由表?如果是这样,我如何编辑 scutil 条目以更正if_index?

Tunnelblick 是配置下拉列表set nameserver,我的 server.conf 的相关部分如下所示。由于我正确获取了 DNS 信息,因此我认为问题出在 OS X 及其 scutil 设置上。

...etc..

server-bridge 10.10.0.15 255.255.0.0 10.10.0.100 10.10.0.200

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
push "dhcp-option DNS 10.10.0.15"
push "dhcp-option DOMAIN wattsworth.net"

...etc...
Run Code Online (Sandbox Code Playgroud)

tec*_*raf 0

与同样的问题作斗争,我发现运行设置scselectnew-location-name与当前使用的命令相同的命令确实重置了网络设置,并且 DNS 开始通过 VPN 工作。

同时scutil结果保持不变(即它显示了if_index以太网接口的设置)。

首先scselect不带任何参数运行以了解当前使用位置的 GUID,然后再次使用预期位置作为参数。