Setelah memperbarui ke OS X 10.6.5 (dari .4), aplikasi tampaknya tidak mencari nama host dalam urutan yang benar (sesuai dengan urutan layanan di Preferensi Jaringan) ketika VPN saya terhubung.
Pengaturan saya saat ini adalah layanan Cisco IPSec VPN di depan layanan AirPort. Server DNS secara otomatis diatur untuk koneksi VPN (yang OK), dan DNS layanan AirPort menunjuk ke router saya (192.168.1.1, yang diarahkan ke server OpenDNS).
Ketika VPN saya terhubung, saya ingin agar pencarian DNS melalui server DNS VPN terlebih dahulu, tetapi semua aplikasi saya (Firefox, Thunderbird, ssh) tampaknya menggunakan server DNS AirPort saya terlebih dahulu (OpenDNS).
Ini berfungsi dengan baik sebelum pembaruan.
Terima kasih atas bantuannya.
** sunting **
Saya menemukan posting ini , dan menjalankan perintah dalam jawaban yang diterima. Tapi sepertinya itu tidak membantu.
Setelah mencari sedikit lebih banyak, saya menemukan perintah ini: scutil --dns
Output dari perintah di bawah ini. Semuanya terlihat benar, kecuali saya pikir resolver # 2 harus didahulukan, dan ada domain pencarian di resolver # 1 (itu jelas bukan foobar.com, tetapi domain VPN yang sebenarnya). Saya pikir ini adalah kebohongan bug (atau apa pun itu). Saya tidak menentukannya secara manual, dan itu tidak ada di tab DNS untuk koneksi AirPort saya. Ketika VPN terputus, domain pencarian itu tidak ada di sana, dan resolver # 2 hilang, sebagaimana mestinya.
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
** sunting **
Baiklah, sampai seseorang dapat menjawab pertanyaan saya, saya telah menulis sebuah skrip untuk membantu menyelesaikannya di bawah ini. Itu harus dijalankan setelah Anda menghubungkan VPN Anda, dan jalankan lagi setelah Anda terputus (saya belum menemukan cara untuk menjalankannya secara otomatis). Beberapa catatan:
Akun saya dijalankan sebagai Admin dengan Preferensi Jaringan tidak dikunci, jadi saya tidak yakin bagaimana skrip ini adil dalam hal apa pun kecuali.
Anda perlu mengatur vpn_srvc_name dalam skrip ke nama layanan Anda, Anda dapat menebaknya, vpn.
Saya yakin mungkin ada cara yang lebih mudah untuk melakukan ini, jadi jangan ragu untuk mengirim komentar Anda.
Naskah:
#!/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
** sunting **
Sepertinya ini masih menjadi masalah di Lion juga. Saya memperbarui judul dan menambahkan tag.
** sunting **
Rupanya Lion juga membawa beberapa perubahan nirkabel, termasuk mengganti nama layanan AirPort ke Wi-Fi. Ini dapat menyebabkan masalah dengan skrip penyelesaian yang saya berikan jika ada yang terhubung ke VPN mereka melalui koneksi nirkabel. Lion (karena alasan tertentu) menyimpan layanan bernama AirPort di bawah tenda. Untuk memperbaikinya, Anda perlu mengubah nama layanan Wi-Fi Anda menjadi sesuatu selain AirPort. Jika Anda ingin menyimpan nama Wi-Fi, Anda harus mengganti namanya menjadi sesuatu yang berbeda terlebih dahulu, kemudian ganti namanya kembali ke Wi-Fi.
networksetup -setdnsservers "$@"
. Mac Pro saya memiliki dua koneksi Ethernet ("Ethernet 1" dan "Ethernet 2" adalah nama standarnya) sehingga harus dikutip. EDIT: mengapa melakukan ini