Host kann nicht über VPN-Verbindung unter Mac OS X aufgelöst werden [geschlossen]

10

Die Einleitung

Ich habe eine VPN-Verbindung von meinem Macbook aus eingerichtet und es scheint eine erfolgreiche Verbindung herzustellen.

funktionierendes VPN

Ich kann jedoch nicht auf meinen Arbeitscomputer zugreifen, da der Hostname nicht aufgelöst wird:

$ ping myusername
ping: cannot resolve myusername: Unknown host

Die neue Problemumgehung

Nachdem ich alles versucht hatte, stellte ich fest, dass dieser Befehl mir sowohl das VPN-Netzwerk als auch das Internet zur Verfügung stellt:

sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0

Auf die DNS-Server des Unternehmens kann über ihre IP-Adresse zugegriffen werden. Wie konfiguriere ich das Netzwerk so , dass sie für alles verwendet werden, was ab 192.168 beginnt?

Die alte Problemumgehung

Ich habe eine vorübergehende Problemumgehung gefunden, mit der ich über VPN auf das Netzwerk zugreifen kann, indem ich zwei Optionen ändere:

Ich setze ein Häkchen in Alle Datenverkehr über VPN-Verbindung senden :

VPN-Optionen

Ich gebe den Namen der Suchdomäne manuell in die DNS-Einstellungen der VPN-Schnittstelle ein:

Eingabe des Domainnamens in die VPN-Optionen

Das Ausführen dieser beiden Schritte reicht aus, um meinen funktionierenden Computer pingbar zu machen:

$ nslookup myusername
Server:     192.168.10.16
Address:    192.168.10.16#53

Name:   myusername.universe.mycompany
Address: 192.168.11.56

$ ping myusername
PING myusername.universe.mycompany (192.168.11.56): 56 data bytes
64 bytes from 192.168.11.56: icmp_seq=0 ttl=126 time=126.164 ms

Da ich jedoch den gesamten Datenverkehr über VPN getunnelt habe, kann ich nicht mehr auf das Internet zugreifen:

$ ping google.com
PING google.com (74.125.232.48): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1

Die Frage

Wie richte ich das Netzwerk richtig ein, damit es versteht, wann VPN verwendet werden muss und wann die normale Verbindung verwendet werden muss? Ich brauche es, um Windows-Servernamen korrekt aufzulösen.

Wenn ich eine Konsolenbefehlsausgabe veröffentlichen muss, bin ich dazu bereit, wenn Sie mir genau mitteilen, welche.
Jede Hilfe wird sehr geschätzt, da dies für mich jetzt eine Art Show-Stopper ist.

Vielen Dank!

Dan
quelle
Was ist Ihre VPN-Subnetzmaske? Wenn es 255.255.255.0 ist, können Sie den DNS-Server 192.168.10.x nicht erreichen, da Ihr Subnetz 192.168.7.x ist.
Schmiede
ifconfigAusgabe für ppp0ist flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1396 inet 192.168.7.232 --> 192.168.7.117 netmask 0xffffff00so, ich denke, es ist 255.255.255.0. Wie ändere ich es? Vielen Dank.
Dan
@shsmith, siehe Abschnitt Neue Problemumgehung. Sie hatten Recht, auf DNS-Server war nicht zugegriffen. Ich habe sie immer routezur Verfügung gestellt, weil ich keine Möglichkeit gefunden habe, die Netzmaske zu ändern. Wie markiere ich diese als "DNS für alles, was mit 192.168 zu tun hat"?
Dan
Ich weiß nicht, welchen VPN-Server Sie auf der Remote-Seite haben, aber ich denke, dort sollten Sie versuchen, das Problem zu beheben. Es sieht so aus, als ob das VPN ein Split-Tunnel-Setup ist, was bedeutet, dass sowohl der Zugriff auf das VPN-Ende über VPN erfolgt als auch der andere (Internet-) Zugriff über Ihr normales Gateway. Der VPN-Server sollte so konfiguriert sein, dass er die Nameserver und die Domäne (n) angibt, für die diese verwendet werden sollen. Außerdem ist Ihre Frage zum Markieren von DNS-Servern, die für 192.168-bezogene Abfragen verwendet werden sollen, falsch herum - es ist der Domainnamen-Teil, der für die Verwendung mit dem internen DNS-Server und nicht mit der IP-Adresse "markiert" werden muss.
Barryj
@barryj, vielen Dank für Ihre Eingabe. Ich werde Administratoren fragen, aber ich denke, ich bin der einzige mit diesem Problem, deshalb möchte ich mir nicht die Zeit nehmen, wenn ich das alleine schaffen kann. Was DNS betrifft, möchte ich nur VPN verwenden, um auf andere Computer im Windows-Netzwerk zuzugreifen, z. B. meinen Arbeitscomputer für RDC, Datenbankserver für die Entwicklung usw.
Dan

Antworten:

3

Vielleicht möchten Sie sich die Resolver-Manpage ansehen

Um eine Lösung zu zitieren:

Die Konfiguration für einen bestimmten Client kann aus einer Datei mit dem in dieser Manpage beschriebenen Format gelesen werden. Diese befinden sich derzeit vom System in der Datei /etc/resolv.conf und in den Dateien im Verzeichnis / etc / resolver. Client-Konfigurationen sind jedoch nicht auf die Dateispeicherung beschränkt. Die Implementierung der DNS-Multi-Client-Suchstrategie kann auch Client-Konfigurationen in anderen Datenquellen wie der Systemkonfigurationsdatenbank lokalisieren. Benutzer des DNS-Systems sollten keine Annahmen über die Quelle der Konfigurationsdaten treffen.

AFAIK müssen Sie eine Datei mit dem Namen setzen example.comin /etc/resolvermit den IP - Adressen der Name - Server für die Domäne , wenn Sie für spezielle Nameserver wollen example.com- Könnten sie benutzen , resolv.confSyntax, ich kann mich nicht erinnern. Aber du solltest das herausfinden können :)

BEARBEITEN: Was die Automatisierung des Prozesses angeht, bin ich mir ziemlich sicher, dass dies mit AppleScript oder Automator möglich ist. Aber ich habe mich nie darum gekümmert, so dass eine zweite Frage zu diesem Thema helfen könnte.

Martin M.
quelle
Vielen Dank! Hat gut funktioniert. Die Syntax für die Datei in / etc / resolver ist wie in resolv.conf, z. B. "Nameserver 1.2.3.4" hat für mich sofort funktioniert.
Per Lundberg
3

Es scheint ein Problem mit der falschen Einstellung der Netzmaske durch OSX zu geben. Dies war meine Erfahrung mit einem PPTP-VPN in Snow Leopard und Mountain Lion und wird von diesem Thread hier unterstützt .

Ich habe hier eine Lösung gefunden , bei der eine Routing-Regel für ppp0-Verkehr festgelegt wird.

Grundsätzlich:

$ sudo <your_text_editor_of_choice> /etc/ppp/ip-up

    #!/bin/sh
    /sbin/route add -net 192.168 -interface ppp0

$ sudo chmod 755 /etc/ppp/ip-up

Dadurch wird die Routing-Regel jedes Mal festgelegt, wenn Sie eine Verbindung zum VPN herstellen.

Dean
quelle
2

Mac OSX DNS-Auflösungen sind lustig. Hier ist die schnelle Lösung.

  1. Fügen Sie den folgenden Code in einen Dateinamen ein reset_dns.

    #!/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='MY VPN'
    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")
      setup_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "Setup")
      state_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "State")
    
      echo "set_dns_ips $pri_srvc_name $setup_vpn_ips $state_vpn_ips $setup_dns_ips $state_dns_ips"
      set_dns_ips "$pri_srvc_name" $setup_vpn_ips $state_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)
    
      echo "set_dns_ips $pri_srvc_name $setup_dns_ips"
      set_dns_ips "$pri_srvc_name" $setup_dns_ips
    
      rm $ip_file
    fi
    
  2. Ersetzen Sie das Wort "MEIN VPN" durch den Namen Ihrer VPN-Verbindung.

  3. Sobald Sie mit Ihrem VPN verbunden sind, führen Sie es reset_dnsüber ein Terminalfenster aus

Mac OSX verwendet nur DNS-Server, die Ihrer primären Netzwerkverbindung zugeordnet sind. Mit dem obigen Code werden die DNS-Server Ihrer VPN-Verbindung zur primären Netzwerkverbindung (dh normalerweise Wi-Fi oder Ethernet) hinzugefügt, sodass zuerst Ihre VPN-DNS-Server und dann Ihre DNS-Server mit primärer Verbindung verwendet werden.

Führen Sie den reset_dnsBefehl erneut aus, nachdem Sie die Verbindung zu Ihrem VPN getrennt haben, um die Einträge zu entfernen und die ursprüngliche DNS-Serverkonfiguration wiederherzustellen. Dies ist jedoch optional, da es normalerweise nichts schadet, nur die DNS-Server zugeordnet zu halten.

Parleer
quelle
0

Ich hatte das gleiche Problem. Es stellte sich heraus, dass sich mein Heimrouter im selben IP-Bereich befand wie mein Arbeitssystem. Nachdem ich meinen Heimrouter auf einen anderen Bereich umgestellt hatte, konnte ich eine Verbindung herstellen.

user174089
quelle