OS X 10.6.5(.4から)に更新した後、VPNが接続されていると、アプリケーションは(ネットワーク環境設定のサービス順序に従って)正しい順序でホスト名を検索していないようです。
現在の設定は、AirMacサービスの前にあるCisco IPSec VPNサービスです。DNSサーバーはVPN接続用に自動的にセットアップされ(これは問題ありません)、AirMacサービスのDNSはルーター(OpenDNSサーバーを指す192.168.1.1)を指します。
VPNが接続されている場合、DNSルックアップが最初にVPN DNSサーバーを通過するようにしますが、すべてのアプリケーション(Firefox、Thunderbird、ssh)は最初にAirMac DNSサーバー(OpenDNS)を使用しているようです。
これは、更新前は正常に機能していました。
助けてくれてありがとう。
** 編集 **
私はこの投稿に出会い、受け入れられた答えでコマンドを実行しました。しかし、それは役に立たなかったようです。
もう少し検索した後、このコマンドに遭遇しました:scutil --dns
コマンドからの出力は次のとおりです。リゾルバ#2が最初に来ると思うことを除いて、すべてが正しく見えます。リゾルバ#1に検索ドメインがあります(明らかにfoobar.comではなく、実際のVPNドメインです)。これはバグ(またはそれが何であれ)の嘘だったと思います。手動で指定しなかったので、AirMac接続の[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
** 編集 **
誰かが私の質問に答えることができるまで、私はスクリプトを書き、以下で説明する回避策を支援しました。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
** 編集 **
これはまだLionの問題でもあるようです。タイトルを更新し、タグを追加しています。
** 編集 **
どうやらライオンは、AirMacサービスの名前をWi-Fiに変更するなど、いくつかのワイヤレスの変更も行ったようです。これにより、ワイヤレス接続を介してVPNに接続する場合に提供した回避策スクリプトで問題が発生する可能性があります。Lionは(何らかの理由で)AirPortという名前のサービスをボンネットの下に置いています。修正するには、Wi-Fiサービスの名前をAirMac以外のものに変更する必要があります。Wi-Fi名を保持する場合は、最初に別の名前に変更してから、Wi-Fiに戻す必要があります。
networksetup -setdnsservers "$@"
。私のMac Proには2つのイーサネット接続(「イーサネット1」と「イーサネット2」がデフォルト名です)があるため、引用符で囲む必要があります。編集:これを行う理由