我正在使用 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
问题是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)
nslookup
、dig
和host
都可以正确到达 DNS 服务器,但 OS X 的其余部分则不能(我知道它们具有独立的解析机制,不依赖于 OS X 的其余部分)。我已经使用 Wireshark 确认,由nslookup
et. al. 发送的 DNS 数据包出去了tap0
,而由其他程序(例如ping
)发送的 DNS 数据包出去了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...
答案1
遇到同样的问题时,我发现运行scselect
命令new-location-name
设置为与当前使用的相同,重置了网络设置,并且 DNS 开始通过 VPN 工作。
同时scutil
结果保持不变(即,它显示if_index
设置到以太网接口)。
首先运行scselect
不带参数的程序来了解当前使用的位置的 GUID,然后再次以预期位置作为参数。