Nach der Aktualisierung auf OS X 10.6.5 (von .4) scheinen Anwendungen die Hostnamen nicht in der richtigen Reihenfolge (gemäß der Dienstreihenfolge in den Netzwerkeinstellungen) nachzuschlagen, wenn mein VPN verbunden ist.
Mein aktuelles Setup ist ein Cisco IPSec VPN-Dienst vor einem AirPort-Dienst. Die DNS-Server werden automatisch für die VPN-Verbindung eingerichtet (was in Ordnung ist), und der AirPort-Dienst-DNS verweist auf meinen Router (192.168.1.1, der auf OpenDNS-Server verweist).
Wenn mein VPN verbunden ist, möchte ich, dass DNS-Lookups zuerst die VPN-DNS-Server durchlaufen, aber alle meine Anwendungen (Firefox, Thunderbird, ssh) scheinen zuerst meinen AirPort-DNS-Server (OpenDNS) zu verwenden.
Dies funktionierte einwandfrei vor dem Update.
Danke für jede Hilfe.
** bearbeiten **
Ich bin auf diesen Beitrag gestoßen und habe die Befehle in der akzeptierten Antwort ausgeführt. Es schien jedoch nicht zu helfen.
Nachdem ich ein bisschen weiter gesucht hatte, stieß ich auf diesen Befehl: scutil --dns
Die Ausgabe des Befehls ist unten. Alles sieht korrekt aus, außer ich denke, Resolver Nr. 2 sollte an erster Stelle stehen, und es gibt eine Suchdomäne in Resolver Nr. 1 (es ist offensichtlich nicht foobar.com, sondern die echte VPN-Domäne). Ich denke, das war der Bug (oder was auch immer es ist) liegt. Ich habe es nicht manuell angegeben und es befindet sich nicht auf der Registerkarte DNS für meine AirPort-Verbindung. Wenn die VPN-Verbindung getrennt ist, ist diese Suchdomäne nicht vorhanden, und der Resolver Nr. 2 ist nicht mehr vorhanden, wie es sein sollte.
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
** bearbeiten **
Nun, bis jemand in der Lage ist, meine Frage zu beantworten, habe ich ein Skript geschrieben, um die unten erwähnte Problemumgehung zu unterstützen. Es sollte ausgeführt werden, nachdem Sie Ihr VPN verbunden haben, und erneut ausgeführt werden, nachdem Sie die Verbindung getrennt haben (ich habe keine Möglichkeit gefunden, es automatisch auszuführen). Ein paar Anmerkungen:
Mein Konto wird als Administrator mit freigeschalteten Netzwerkeinstellungen ausgeführt, daher bin ich mir nicht sicher, wie dieses Skript für alles andere als geeignet ist.
Sie müssen vpn_srvc_name im Skript auf Ihren vpn-Dienstnamen setzen.
Ich bin sicher, es gibt wahrscheinlich einen einfacheren Weg, also zögern Sie nicht, Ihre Anmerkungen zu posten.
Das Drehbuch:
#!/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
** bearbeiten **
Es sieht so aus, als wäre dies auch in Lion noch ein Problem. Ich aktualisiere den Titel und füge ein Tag hinzu.
** bearbeiten **
Anscheinend hat Lion auch einige drahtlose Änderungen vorgenommen, darunter die Umbenennung des AirPort-Dienstes in Wi-Fi. Dies kann zu Problemen mit dem von mir bereitgestellten Problemumgehungsskript führen, wenn eine Verbindung zu ihrem VPN über eine drahtlose Verbindung hergestellt wird. Lion behält (aus irgendeinem Grund) den Dienst namens AirPort unter der Haube. Um dies zu beheben, müssen Sie Ihren Wi-Fi-Dienst in einen anderen Dienst als AirPort umbenennen. Wenn Sie den WLAN-Namen beibehalten möchten, müssen Sie ihn zuerst in einen anderen Namen und dann wieder in WLAN umbenennen.
networksetup -setdnsservers "$@"
. Mein Mac Pro verfügt über zwei Ethernet-Verbindungen ("Ethernet 1" und "Ethernet 2" sind die Standardnamen) und müssen daher in Anführungszeichen gesetzt werden. BEARBEITEN: warum dies zu tun