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

10

Преамбула

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

рабочий VPN

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

$ 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-соединение :

Варианты VPN

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

ввод доменного имени в настройках 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.

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

Спасибо!

Дэн
источник
Какова ваша маска подсети VPN? Если это 255.255.255.0, вы не можете получить доступ к DNS-серверу 192.168.10.x, потому что ваша подсеть - 192.168.7.x.
hsmiths
ifconfigвыход для ppp0это flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1396 inet 192.168.7.232 --> 192.168.7.117 netmask 0xffffff00так , я думаю , это 255.255.255.0. Как я могу изменить это? Спасибо.
Дан
@shsmith, пожалуйста, смотрите раздел Новый обходной путь. Вы были правы. DNS-серверы не были доступны. Я routeделал их доступными, потому что не нашел способа изменить маску сети. Как пометить их как «DNS для всего, что связано с 192.168»?
Дан
Я не знаю, какой у вас VPN-сервер на удаленном конце, но я думаю, что именно здесь вы должны искать решение проблемы. Похоже, что VPN представляет собой установку с разделенным туннелем. Это означает, что как доступ к концу VPN осуществляется через VPN, так и другой доступ (Интернет) осуществляется через ваш обычный шлюз. Сервер VPN должен быть настроен на указание серверов имен и доменов, для которых они должны использоваться. Кроме того, ваш вопрос о маркировке DNS-серверов, которые будут использоваться для запросов, относящихся к 192.168, является неправильным - это часть доменного имени, которую необходимо «пометить» для использования с внутренним DNS-сервером, а не IP.
Барры
@ barryj, большое спасибо за ваш вклад. Я спрошу администраторов, но я думаю, что я единственный, кто столкнулся с этой проблемой, поэтому я не хочу тратить их время, если смогу сделать это самостоятельно. Что касается DNS, я только хочу использовать VPN для доступа к другим компьютерам в сети Windows, например , мой рабочий компьютер RDC, сервер базы данных для развития и т.д.
Dan

Ответы:

3

Возможно, вы захотите взглянуть на справочную страницу

Чтобы процитировать одно решение:

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

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

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

Мартин М.
источник
Спасибо! Работал нормально. Синтаксис файла в / etc / resolver похож на resolv.conf, например, «nameserver 1.2.3.4», разработанный для меня из коробки.
За Лундберг
3

Кажется, есть проблема с 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.

декан
источник
2

Разрешение 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-серверами.

parleer
источник
0

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

user174089
источник