cit*_*ose 13 dns vpn osx-snow-leopard osx-lion macos
更新到 OS X 10.6.5(从 .4 开始)后,当我的 VPN 连接时,应用程序似乎没有以正确的顺序(根据网络首选项中的服务顺序)查找主机名。
我当前的设置是在 AirPort 服务前面的 Cisco IPSec VPN 服务。为 VPN 连接自动设置 DNS 服务器(这没问题),AirPort 服务 DNS 指向我的路由器(192.168.1.1,指向 OpenDNS 服务器)。
当我的 VPN 连接时,我希望 DNS 查找首先通过 VPN DNS 服务器,但我的所有应用程序(Firefox、Thunderbird、ssh)似乎都首先使用我的 AirPort DNS 服务器(OpenDNS)。
这在更新之前工作得很好。
谢谢你的帮助。
**编辑**
我遇到了这篇文章,并在接受的答案中运行了命令。虽然它似乎没有帮助。
搜索了一些之后,我遇到了这个命令: scutil --dns
命令的输出如下。一切看起来都是正确的,除了我认为解析器 #2 应该先出现,并且解析器 #1 中有一个搜索域(它显然不是 foobar.com,而是真正的 VPN 域)。我认为这是错误(或任何错误)的谎言。我没有手动指定它,而且它不在我的 AirPort 连接的 DNS 选项卡上。当 VPN 断开连接时,该搜索域不存在,并且解析器 #2 也没有了,因为它应该是。
resolver #1
search domain[0] : foobar.com
nameserver[0] : 192.168.1.1
order : 200000
resolver #2
domain : foobar.com
nameserver[0] : 172.30.50.100
nameserver[1] : 172.30.50.80
order : 100200
resolver #3
domain : local
options : mdns
timeout : 2
order : 300000
resolver #4
domain : 254.169.in-addr.arpa
options : mdns
timeout : 2
order : 300200
resolver #5
domain : 8.e.f.ip6.arpa
options : mdns
timeout : 2
order : 300400
resolver #6
domain : 9.e.f.ip6.arpa
options : mdns
timeout : 2
order : 300600
resolver #7
domain : a.e.f.ip6.arpa
options : mdns
timeout : 2
order : 300800
resolver #8
domain : b.e.f.ip6.arpa
options : mdns
timeout : 2
order : 301000
Run Code Online (Sandbox Code Playgroud)
**编辑**
好吧,在有人能够回答我的问题之前,我已经编写了一个脚本来帮助解决下面提到的解决方法。它应该在您连接 VPN 后运行,并在您断开连接后再次运行(我还没有找到自动运行它的方法)。一些注意事项:
我的帐户以管理员身份运行,网络首选项已解锁,因此我不确定此脚本在任何情况下如何公平。
您需要将脚本中的 vpn_srvc_name 设置为您猜对了的 vpn 服务名称。
我相信可能有更简单的方法可以做到这一点,所以请随时发表您的评论。
剧本:
#!/bin/bash
function get_pri_srvc_id ()
{
cat <<EOF | scutil | \
grep 'PrimaryService' | \
awk -F': ' '{print $2}'
show State:/Network/Global/IPv4
EOF
}
function get_srvc_name ()
{
cat <<EOF | scutil | \
grep 'UserDefinedName' | \
awk -F': ' '{print $2}'
show Setup:/Network/Service/$1
EOF
}
function get_srvc_ids ()
{
cat <<EOF | scutil | \
sed -nEe '
/ServiceOrder/ {
:ids
n
/[0-9]+ :/ {
s/ *[0-9]+ : ([0-9A-Z-]+) */\1/p
b ids
}
}'
show Setup:/Network/Global/IPv4
EOF
}
function get_srvc_id_by_name ()
{
local srvc_ids=$(get_srvc_ids)
for srvc_id in $srvc_ids
do
local srvc_name=$(get_srvc_name "$srvc_id")
if [[ "$srvc_name" == "$1" ]]
then
echo $srvc_id
return
fi
done
}
function get_dns_ips ()
{
local srvc_id=$(get_srvc_id_by_name "$1")
cat <<EOF | scutil | \
sed -nEe '
/ServerAddresses/ {
:ips
n
/[0-9]+ :/ {
s/ *[0-9]+ : ([0-9.]+) */\1/p
b ips
}
}'
show $2:/Network/Service/$srvc_id/DNS
EOF
}
function set_dns_ips ()
{
networksetup -setdnsservers "$@"
}
vpn_srvc_name='NAME OF VPN SERVICE'
ip_file='/tmp/setup_dns_ips'
pri_srvc_id=$(get_pri_srvc_id)
pri_srvc_name=$(get_srvc_name "$pri_srvc_id")
if [[ ! -e "$ip_file" ]]
then
setup_dns_ips=$(get_dns_ips "$pri_srvc_name" "Setup")
state_dns_ips=$(get_dns_ips "$pri_srvc_name" "State")
vpn_ips=$(get_dns_ips "$vpn_srvc_name" "State")
set_dns_ips "$pri_srvc_name" $vpn_ips $setup_dns_ips $state_dns_ips
if [[ -z "$setup_dns_ips" ]]
then
setup_dns_ips="Empty"
fi
echo $setup_dns_ips >$ip_file
else
setup_dns_ips=$(cat $ip_file)
set_dns_ips "$pri_srvc_name" $setup_dns_ips
rm $ip_file
fi
Run Code Online (Sandbox Code Playgroud)
**编辑**
看起来这在 Lion 中仍然是一个问题。我正在更新标题并添加标签。
**编辑**
显然 Lion 还带来了一些无线变化,包括将 AirPort 服务重命名为 Wi-Fi。如果通过无线连接连接到他们的 VPN,这可能会导致我提供的解决方法脚本出现问题。Lion(出于某种原因)将名为 AirPort 的服务保留在引擎盖下。要修复它,您需要将 Wi-Fi 服务重命名为 AirPort 以外的其他名称。如果您想保留 Wi-Fi 名称,您必须先将其重命名为不同的名称,然后再将其重命名回 Wi-Fi。
小智 1
就我而言,FQDN 请求未解析为正确的内部地址。相反,他们指向外部地址。
我通过 IPsec 连接到我的 Cisco ASA。虽然网络连接中的顺序设置正确,但自更新到 10.6.5 以来,DNS 请求不遵循该顺序。
为了解决这个问题,我手动将 VPN 的 DNS 服务器分配到机场连接(因为我是无线网络)。完成 VPN 连接后,我删除了手动添加的 DNS 地址。
| 归档时间: |
|
| 查看次数: |
11240 次 |
| 最近记录: |