Nie można rozpoznać hosta za pośrednictwem połączenia VPN z Mac OS X [zamknięte]


10

Preambuła

Skonfigurowałem połączenie VPN z mojego Macbooka i wydaje się, że łączy się ono pomyślnie.

działająca sieć VPN

Nie mogę jednak uzyskać dostępu do mojego komputera służbowego, ponieważ nazwa hosta nie została rozwiązana:

$ ping myusername
ping: cannot resolve myusername: Unknown host

Nowe obejście

Po wypróbowaniu wszystkiego, co mogłem, stwierdziłem, że to polecenie udostępnia mi zarówno sieć VPN, jak i Internet:

sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0

Firmowe serwery DNS są dostępne po ich adresach IP. Jak skonfigurować sieć, aby używała ich do wszystkiego, co zaczyna się od 192.168?

Stare obejście

Znalazłem tymczasowe obejście, które pozwala mi uzyskać dostęp do sieci przez VPN, modyfikując dwie opcje:

Zaznaczam pole wyboru Wyślij cały ruch przez połączenie VPN :

Opcje VPN

Ręcznie wpisuję Szukaj nazwy domeny w ustawieniach DNS interfejsu VPN:

wprowadzanie nazwy domeny w opcjach VPN

Wykonanie tych dwóch kroków wystarczy, aby mój działający komputer był dostępny do pingowania:

$ 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

Ponieważ jednak tunelowałem cały ruch, aby przejść przez VPN, nie mogę już uzyskać dostępu do Internetu:

$ 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

Pytanie

Jak prawidłowo skonfigurować sieć, aby wiedziała, kiedy przejść przez VPN, a kiedy normalne połączenie? Potrzebuję go do poprawnego rozpoznania nazw serwerów Windows.

Jeśli muszę opublikować dane wyjściowe polecenia konsoli, jestem gotów to zrobić, jeśli dasz mi znać, które dokładnie.
Każda pomoc jest bardzo ceniona, ponieważ jest to dla mnie rodzaj przystanku pokazowego.

Dzięki!


Jaka jest twoja maska ​​podsieci VPN? Jeśli jest to 255.255.255.0, nie możesz połączyć się z serwerem dns 192.168.10.x, ponieważ twoja podsieć to 192.168.7.x.
hsmiths

ifconfigWyjście dla ppp0jest, flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1396 inet 192.168.7.232 --> 192.168.7.117 netmask 0xffffff00więc myślę, że to 255.255.255.0. Jak to zmienić? Dzięki.
Dan

@shsmith, zobacz sekcję Nowe obejście. Miałeś rację. Serwery DNS były niedostępne. Kiedyś routeje udostępniałem, ponieważ nie znalazłem sposobu na zmianę maski sieci. Jak oznaczyć je jako „DNS dla wszystkiego, co związane z 192.168”?
Dan

Nie wiem, jaki serwer VPN masz na zdalnym końcu, ale myślę, że właśnie tam powinieneś spróbować rozwiązać problem. Wygląda na to, że VPN jest podzielonym tunelem, co oznacza, że ​​zarówno dostęp do końca VPN odbywa się przez VPN, ale inny dostęp (Internet) odbywa się za pośrednictwem zwykłej bramy. Serwer VPN należy skonfigurować tak, aby określał serwery nazw i domeny, dla których powinny być używane. Również twoje pytanie dotyczące oznaczania serwerów DNS, które mają być używane do kwerend związanych z 192.168. Jest niewłaściwe - to część nazwy domeny, którą należy „zaznaczyć”, aby można ją było używać z wewnętrznym serwerem DNS, a nie z adresem IP.
barryj

@barryj, wielkie dzięki za wkład. Zapytam administratorów, ale myślę, że tylko ja mam ten problem, więc nie chcę tracić czasu, jeśli mogę to zrobić sam. Jeśli chodzi o DNS, chcę korzystać z VPN tylko w celu uzyskania dostępu do innych komputerów w sieci Windows, np. Mojego komputera działającego pod kontrolą RDC, serwera bazy danych do programowania itp.
Dan

Odpowiedzi:


3

Możesz zajrzeć na stronę resolvera

Cytując jedno rozwiązanie:

Konfigurację konkretnego klienta można odczytać z pliku o formacie opisanym na tej stronie podręcznika. Są one obecnie zlokalizowane przez system w pliku /etc/resolv.conf oraz w plikach znajdujących się w katalogu / etc / resolver. Jednak konfiguracje klienta nie ograniczają się do przechowywania plików. Implementacja strategii wyszukiwania wielu klientów DNS może również lokalizować konfiguracje klientów w innych źródłach danych, takich jak Baza danych konfiguracji systemu. Użytkownicy systemu DNS nie powinni przyjmować żadnych założeń dotyczących źródła danych konfiguracyjnych.

AFAIK trzeba umieścić plik o nazwie example.comw /etc/resolverz adresów IP z serwerów nazw dla tej domeny, jeśli chcesz specjalne serwery nazw dla example.com- Może być ich użyć resolv.confskładni, nie mogę sobie przypomnieć. Ale powinieneś być w stanie to rozgryźć :)

EDYCJA: Jeśli chodzi o automatyzację procesu, jestem prawie pewien, że jest to wykonalne za pomocą AppleScript lub Automator. Ale nigdy się nad tym nie zastanawiałem, więc drugie pytanie na ten temat może pomóc.


Dzięki! Działało dobrze. Składnia pliku w / etc / resolver jest podobna do resolv.conf, np. „Nameserver 1.2.3.4” dla mnie wyszedł z pudełka.
Per Lundberg,

3

Wygląda na to, że występuje problem z nieprawidłowym ustawieniem maski sieci w OSX. Takie było moje doświadczenie w korzystaniu z PPTP VPN zarówno w systemie Snow Leopard, jak i Mountain Lion i jest obsługiwane przez ten wątek tutaj .

Znalazłem tutaj rozwiązanie , które polega na ustawieniu reguły routingu dla ruchu ppp0.

Gruntownie:

$ 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

Spowoduje to ustawienie reguły routingu przy każdym połączeniu z VPN.


2

Rozdzielczość DNS w systemie Mac OSX jest śmieszna. Oto szybka poprawka.

  1. Umieść następujący kod w nazwie pliku 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. Zamień słowo „MY VPN” na nazwę swojego połączenia VPN.

  3. Po połączeniu z VPN uruchom reset_dnsz okna terminala

Mac OSX korzysta tylko z serwerów DNS powiązanych z podstawowym połączeniem sieciowym. Powyższy kod dodaje serwery DNS połączenia VPN do Podstawowego połączenia sieciowego (tj. Zwykle Wi-Fi lub Ethernet), dzięki czemu najpierw zostaną użyte serwery DNS VPN, a następnie serwery DNS połączenia podstawowego.

reset_dnsPonownie uruchom polecenie po rozłączeniu z siecią VPN, aby usunąć wpisy i przywrócić oryginalną konfigurację serwera DNS. Jest to jednak opcjonalne, ponieważ zwykle nic nie szkodzi utrzymaniu serwerów DNS w czystości.


0

Miałem ten sam problem. Okazało się, że mój domowy router miał ten sam zakres adresów IP co mój system pracy. Po zmianie domowego routera na inny zakres mogłem się połączyć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.