Назад | Перейти на главную страницу

Не удается разрешить хост через VPN-соединение из Mac OS X

Преамбула

Я установил VPN-соединение со своего Macbook, и, похоже, он успешно подключается.

Однако я не могу получить доступ к своему рабочему компьютеру, потому что имя хоста не разрешается:

$ ping myusername
ping: cannot resolve myusername: Unknown host

Новый обходной путь

Попробовав все, что мог, я обнаружил, что эта команда делает мне доступными как сеть VPN, так и Интернет:

sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0

DNS-серверы компании доступны по их IP-адресам. Как мне настроить сеть использовать их для всего, что начинается с 192.168?

Старый обходной путь

Я нашел временный обходной путь, который позволяет мне получить доступ к сети через VPN, изменив два параметра:

Я поставил галочку Отправлять весь трафик через VPN-соединение:

Я вручную ввожу имя домена поиска в настройки DNS интерфейса VPN:

Выполнения этих двух шагов достаточно, чтобы мой рабочий компьютер стал доступен для проверки связи:

$ 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

Однако, поскольку я туннелировал весь трафик для прохождения через VPN, я больше не могу получить доступ к Интернету:

$ 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

Вопрос

Как мне правильно настроить сеть, чтобы она понимала, когда использовать VPN, а когда использовать обычное соединение? Мне это нужно для правильного разрешения имен серверов Windows.

Если мне нужно опубликовать какой-либо вывод команды консоли, я готов сделать это, если вы дадите мне знать, какой именно.
Любая помощь приветствуется, так как сейчас для меня это своего рода ограничитель шоу.

Спасибо!

Похоже, возникла проблема с неправильной настройкой сетевой маски OSX. Это был мой опыт использования PPTP VPN как в Snow Leopard, так и в Mountain Lion, и он поддерживается этой веткой. Вот.

Я нашел решение Вот, который включает установку правила маршрутизации для трафика ppp0.

В принципе:

$ 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

Это будет устанавливать правило маршрутизации каждый раз, когда вы подключаетесь к VPN.

Вы можете посмотреть на справочная страница преобразователя

Процитируем одно решение:

Конфигурация для конкретного клиента может быть прочитана из файла, имеющего формат, описанный на этой странице руководства. В настоящее время они находятся в системе в файле /etc/resolv.conf и в файлах в каталоге / etc / resolver. Однако конфигурации клиента не ограничиваются хранилищем файлов. Реализация стратегии мультиклиентского поиска DNS может также определять местонахождение клиентских конфигураций в других источниках данных, таких как база данных конфигурации системы. Пользователи системы DNS не должны делать никаких предположений об источнике данных конфигурации.

AFAIK вам нужно поместить файл с именем example.com в /etc/resolver с IP-адресами серверов имен для этого домена, если вам нужны специальные серверы имен для example.com - Может быть, они используют resolv.conf синтаксис, не помню. Но вы должны это понять :)

РЕДАКТИРОВАТЬ: Что касается автоматизации процесса, я почти уверен, что это выполнимо с AppleScript или Automator. Но я никогда не задумываюсь об этом, поэтому второй вопрос по этой теме может помочь.

Разрешение DNS в Mac OSX забавно. Вот быстрое решение.

  1. Поместите следующий код в имя файла 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. Замените слово «МОЙ VPN» названием своего VPN-соединения.

  3. После подключения к VPN запустите reset_dns из окна терминала

Mac OSX использует только DNS-серверы, связанные с вашим «основным» сетевым подключением. Приведенный выше код добавляет DNS-серверы вашего VPN-подключения к основному сетевому подключению (то есть обычно Wi-Fi или Ethernet), так что сначала будут использоваться ваши DNS-серверы VPN, а затем - DNS-серверы основного подключения.

Запустить reset_dns снова после отключения от VPN, чтобы удалить записи и восстановить исходную конфигурацию DNS-сервера. Однако это необязательно, так как обычно ничему не мешает просто сохранить связанные DNS-серверы.

Я была такая же проблема. Оказывается, мой домашний маршрутизатор находился в том же диапазоне IP-адресов, что и моя рабочая система. Как только я переключил свой домашний маршрутизатор на другой диапазон, я смог подключиться.