OS X> 10.6.5 DNS-Suchreihenfolge mit VPN

13

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:

  1. 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.

  2. Sie müssen vpn_srvc_name im Skript auf Ihren vpn-Dienstnamen setzen.

  3. 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.

Zitrus Elch
quelle
Wenn Sie in den Systemeinstellungen auf Netzwerke klicken, wählen Sie links unter VPN-Verbindung die Option Erweitert (Corener unten rechts). Oben sollte nun eine DNS-Registerkarte angezeigt werden. Auf der linken Seite befinden sich die IPs für den DNS und auf der rechten Seite wird Ihre Domain angezeigt. Sind diese korrekt (auf den VPN-DNS-Server zeigend)?
Everett
Ja, sie sind richtig.
Citrusmoose
Die Zeile in set_dns_ips sollte lauten 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
Chris R. Donnelly
Du hast recht, @chris. Ich habe das Skript aktualisiert. Nicht sicher, was Sie mit "warum dies tun" meinen.
Citrusmoose
Entschuldigung, @citrusmoose. Ich wollte nur sagen, warum ich den Kommentar bearbeitet habe. Ich drückte auf "Submit" und merkte dann, dass ich nicht sagte, warum ich das ändern sollte, und wollte nicht einfach die Änderung ohne triftigen Grund befürworten.
Chris R. Donnelly

Antworten:

1

In meinem Fall wurden FQDN-Anforderungen nicht an die richtige interne Adresse aufgelöst. Stattdessen zeigten sie auf die externe Adresse.

Ich verbinde mich über IPsec mit meinem Cisco ASA. Während die Reihenfolge in der Netzwerkverbindung korrekt eingerichtet ist, folgen die DNS-Anforderungen seit der Aktualisierung auf 10.6.5 nicht der Reihenfolge.

Um dies zu umgehen, habe ich den DNS-Server für mein VPN manuell der Flughafenverbindung zugewiesen (da ich drahtlos bin). Nachdem ich mit der VPN-Verbindung fertig bin, entferne ich die manuell hinzugefügte DNS-Adresse.

KevinTM
quelle
Ja, das ist auch mein Workaround (aber sehr ärgerlich). Ich bin froh, dass jemand anderes dieses Problem hat, anscheinend war ich der einzige. Ich nehme an, andere bemerken dies nicht, da die meisten Suchvorgänge für interne Domänen fehlschlagen und auf die richtigen DNS-Server zurückgreifen. In meinem Fall gibt es jedoch nur wenige interne Domänen, die (aus irgendeinem Grund) Einträge auf externen DNS-Servern haben.
Citrusmoose
Es muss einen besseren Ansatz geben, @Citrusmoose. Hattest du Glück mit etwas, das weniger manuell und robuster ist?
MightyE
Nein, ich bin noch auf nichts gestoßen.
Citrusmoose
1

Öffnen Sie Internet Connect (in Applications), um zu verhindern, dass OS X 10.8 eine Standardroute zu Ihrer VPN-Verbindung erstellt. Wählen Sie im Menü "Verbinden" die Option "Optionen" und deaktivieren Sie die Option "Gesamten Datenverkehr über eine VPN-Verbindung senden". Klicken Sie auf OK und Sie sind fertig.

Lesen Sie den Rest des Hinweises, um eine benutzerdefinierte Route zum Subnetz auf der anderen Seite der VPN-Verbindung zu erstellen.

Erstellen Sie als root / etc / ppp / ip-up und geben Sie den folgenden Code ein:

#!/bin/sh
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd

DEBUGFILE=/tmp/ip-up-debug.txt
## echo "1:$1 2:$2 3:$3 4:$4 5:$5 6:$6" > $DEBUGFILE
NET=`echo $5 | cut -d. -f1,2,3`
## echo $NET >> $DEBUGFILE

case $NET in 192.168.3)
     ## echo "CASE1" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.30.0 $5 255.255.255.0`
     ##echo $RESULT >> $DEBUGFILE
     ;;
     192.168.2)
     ## echo "CASE2" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.20.0 netmask 255.255.255.0 gw $5`
     ## echo $RESULT >> $DEBUGFILE
     ;;
     192.168.1)
     ## echo "CASE3" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.10.0 netmask 255.255.255.0 gw $5`
     ## echo $RESULT >> $DEBUGFILE
     ;;
     *)
     ## echo "No match" >> $DEBUGFILE
     ;;
esac

Anmerkungen:

  1. Nachdem Sie die Datei erstellt haben, führen Sie a chmod u+x /etc/ppp/ip-up.
  2. Die Variable $ 5 ist Ihre Remote-IP-Adresse (Ihre IP-Adresse im Remote-Netzwerk).
  3. Ändern Sie in der ersten case-Anweisung den Eintrag 192.168.x in die ersten drei Oktette Ihres Remotenetzwerks. In diesem Fall lautet die Remote-IP-Adresse 192.168.3.1 und das Remote-Netzwerk 192.168.30.0/24 (die Remote-VPN-Box führt das Routing durch - auf diese Weise funktioniert SAMBA, ohne dass ein Proxy-ARP erforderlich ist).
  4. Entfernen Sie die ## aus den Debug-Zeilen, um zu sehen, was dieses Skript tut. Die Ausgabe wird in die Datei /tmp/ip-up-debug.txt geschrieben. Denken Sie daran, die ## wieder einzulegen, wenn Sie mit dem Testen fertig sind.
  5. Dieses Skript bietet Optionen für drei verschiedene VPN-Verbindungen. Ändern Sie einfach die 192.168.x-Einträge in die verschiedenen Netzwerkadressen Ihrer verschiedenen VPNs.

gefunden hier

Antonio
quelle