Po aktualizacji do OS X 10.6.5 (od .4) aplikacje nie wydają się wyszukiwać nazw hostów we właściwej kolejności (zgodnie z zamówieniem usługi w Preferencjach sieciowych), gdy moja sieć VPN jest podłączona.
Moja obecna konfiguracja to usługa Cisco IPSec VPN przed usługą AirPort. Serwery DNS są automatycznie konfigurowane do połączenia VPN (co jest OK), a DNS usługi AirPort wskazuje mój router (192.168.1.1, który wskazuje serwery OpenDNS).
Kiedy moja sieć VPN jest połączona, chciałbym, aby wyszukiwania DNS najpierw przechodziły przez serwery VPN VPN, ale wydaje się, że wszystkie moje aplikacje (Firefox, Thunderbird, ssh) najpierw korzystają z mojego serwera AirPort DNS (OpenDNS).
To działało dobrze przed aktualizacją.
Dziękuję za wszelką pomoc.
** edycja **
Natrafiłem na ten post i uruchomiłem polecenia w przyjętej odpowiedzi. To jednak nie pomogło.
Po dokładniejszych poszukiwaniach natrafiłem na to polecenie: scutil --dns
Dane wyjściowe polecenia znajdują się poniżej. Wszystko wygląda poprawnie, chyba że myślę, że resolver # 2 powinien być na pierwszym miejscu, i jest domena wyszukiwania w resolver # 1 (oczywiście nie jest to foobar.com, ale prawdziwa domena VPN). Myślę, że to były błędy (lub cokolwiek to jest) kłamstwa. Nie podałem go ręcznie i nie ma go na karcie DNS mojego połączenia AirPort. Po rozłączeniu VPN ta domena wyszukiwania nie istnieje, a resolvera nr 2 zniknął, tak jak powinien.
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
** edycja **
Cóż, dopóki ktoś nie będzie w stanie odpowiedzieć na moje pytanie, napisałem skrypt, który pomoże w rozwiązaniu problemu wymienionym poniżej. Powinien zostać uruchomiony po podłączeniu VPN i uruchomiony ponownie po rozłączeniu (nie znalazłem sposobu, aby uruchomić go automatycznie). Kilka uwag:
Moje konto jest uruchomione jako administrator z odblokowanymi Preferencjami sieci, więc nie jestem pewien, jak ten skrypt działałby uczciwie na niczym innym.
Musisz ustawić w skrypcie nazwę vpn_srvc_name, tak jak się domyślałeś, nazwę usługi VPN.
Jestem pewien, że jest to prawdopodobnie łatwiejszy sposób, więc opublikuj swoje uwagi.
Scenariusz:
#!/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
** edycja **
Wygląda na to, że wciąż jest to problem w Lionie. Aktualizuję tytuł i dodaję tag.
** edycja **
Najwyraźniej Lion wprowadził także kilka zmian w łączności bezprzewodowej, w tym zmianę nazwy usługi AirPort na Wi-Fi. Może to powodować problemy ze skryptem obejścia, który podałem, jeśli łączy się on z VPN przez połączenie bezprzewodowe. Lion (z jakiegoś powodu) utrzymuje usługę o nazwie AirPort pod maską. Aby to naprawić, musisz zmienić nazwę usługi Wi-Fi na inną niż AirPort. Jeśli chcesz zachować nazwę Wi-Fi, musisz najpierw zmienić jej nazwę na inną, a następnie zmienić nazwę z powrotem na Wi-Fi.
networksetup -setdnsservers "$@"
. Mój Mac Pro ma dwa połączenia Ethernet („Ethernet 1” i „Ethernet 2” to nazwy domyślne), dlatego należy je zacytować. EDYCJA: po co to robić