OS X> 10.6.5 Порядок поиска DNS с VPN

13

После обновления до OS X 10.6.5 (от .4) приложения, кажется, не ищут имена хостов в правильном порядке (согласно порядку обслуживания в Предпочтениях сети), когда моя VPN подключена.

Моя текущая настройка - услуга Cisco IPSec VPN перед службой AirPort. DNS-серверы автоматически настраиваются для подключения VPN (что в порядке), а DNS службы AirPort указывает на мой маршрутизатор (192.168.1.1, который указывает на серверы OpenDNS).

Когда мой VPN подключен, я хотел бы, чтобы поиск DNS проходил сначала через DNS-серверы VPN, но все мои приложения (Firefox, Thunderbird, ssh), кажется, сначала используют мой DNS-сервер AirPort (OpenDNS).

До обновления все работало нормально.

Спасибо за любую помощь.

** редактировать **

Я наткнулся на этот пост и выполнил команды в принятом ответе. Кажется, это не помогло.

Пройдя немного поиск, я наткнулся на эту команду: scutil --dns

Вывод команды ниже. Все выглядит правильно, за исключением того, что я думаю, что резолвер № 2 должен стоять первым, а в резолвере # 1 есть поисковый домен (это, очевидно, не foobar.com, а настоящий домен VPN). Я думаю, что это была ошибка (или что-то еще) ложь. Я не указывал его вручную, и его нет на вкладке DNS для моего подключения AirPort. Когда VPN отключена, этого поискового домена нет, а решатель # 2 исчез, как и должно быть.

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

** редактировать **

Ну, пока кто-нибудь не сможет ответить на мой вопрос, я написал сценарий, чтобы помочь с обходным путем, упомянутым ниже. Он должен быть запущен после того, как вы подключили VPN, и снова запустить после того, как вы отключились (я не нашел способа запустить его автоматически). Несколько заметок:

  1. Моя учетная запись запущена с правами администратора с разблокированными сетевыми настройками, поэтому я не уверен, как этот сценарий будет справедливым ни для чего, кроме.

  2. Вам нужно установить vpn_srvc_name в скрипте для вашего, как вы уже догадались, имени службы vpn.

  3. Я уверен, что, возможно, есть более простой способ сделать это, поэтому не стесняйтесь размещать свои замечания.

Сценарий:

#!/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

** редактировать **

Похоже, что это все еще проблема в Lion. Я обновляю заголовок и добавляю тег.

** редактировать **

Очевидно, Lion также внес некоторые изменения в беспроводную связь, в том числе переименование службы AirPort в Wi-Fi. Это может вызвать проблемы с предоставленным мной обходным сценарием, если один из них подключается к их VPN через беспроводное соединение. Лев (по какой-то причине) держит службу под названием AirPort под капотом. Чтобы это исправить, вам нужно переименовать службу Wi-Fi во что-то кроме AirPort. Если вы хотите сохранить имя Wi-Fi, вы должны сначала переименовать его в другое, а затем переименовать обратно в Wi-Fi.

citrusmoose
источник
Когда вы смотрите в Системных настройках и нажимаете на сети, под VPN-соединением слева выберите продвинутый (нижний правый ядро). Теперь вы должны увидеть вкладку DNS вверху. Слева указаны IP-адреса DNS, а справа - ваш домен. Являются ли они правильными (указывая на DNS-сервер VPN)?
Эверетт
Да, они верны.
цитрусовый
Строка в set_dns_ips должна быть networksetup -setdnsservers "$@". Мой Mac Pro имеет два подключения Ethernet («Ethernet 1» и «Ethernet 2» являются именами по умолчанию), поэтому их необходимо заключать в кавычки. РЕДАКТИРОВАТЬ: зачем это делать
Крис Р. Доннелли
Ты прав, @ Крис. Я обновил скрипт. Не уверен, что вы подразумеваете под «зачем это делать».
Цитрусовый
Извините, @citrusmoose. Просто пытался сказать, почему я отредактировал комментарий; Я нажал на кнопку «Отправить», а затем понял, что не сказал, почему это нужно изменить, и не хотел выдвигать обвинения, просто отстаивая изменения без веской причины.
Крис Р. Доннелли

Ответы:

1

В моем случае запросы FQDN не были преобразованы в правильный внутренний адрес. Вместо этого они указывали на внешний адрес.

Я подключаюсь к своему Cisco ASA через IPsec. Хотя порядок правильно настроен при подключении к сети, запросы DNS не следуют порядку с момента обновления до 10.6.5.

Чтобы обойти это, я вручную назначил DNS-сервер для своего VPN-подключения к аэропорту (так как я беспроводной). После завершения VPN-подключения я удаляю добавленный вручную DNS-адрес.

KevinTM
источник
Да, это тоже мой обходной путь (но очень раздражающий). Я рад, что у кого-то еще есть эта проблема, поскольку кажется, что я был единственным. Я предполагаю, что другие могут не заметить, так как большинство поисков по внутренним доменам не удастся и вернется к правильным DNS-серверам. В моем случае, однако, есть несколько внутренних доменов, которые (по некоторым причинам) имеют записи на внешних DNS-серверах.
цитрусовый
Должен быть лучший подход, @Citrusmoose, тебе повезло с чем-то менее ручным и более надежным?
MightyE
Нет, я еще ничего не встречал.
цитрусовый
1

Чтобы остановить OS X 10.8 от создания маршрута по умолчанию к вашему VPN-соединению, откройте Internet Connect (в Приложениях). Выберите «Параметры» в меню «Подключить», затем снимите флажок «Отправить весь трафик через VPN-соединение». Нажмите ОК, и все готово.

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

В качестве пользователя root создайте / etc / ppp / ip-up и вставьте следующий код:

#!/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

Примечания:

  1. Как только вы создадите файл, сделайте chmod u+x /etc/ppp/ip-up.
  2. Переменная $ 5 - это ваш удаленный IP-адрес (ваш IP-адрес в удаленной сети).
  3. В первом операторе case измените запись 192.168.x на первые три октета вашей удаленной сети. В этом случае удаленный IP-адрес - 192.168.3.1, а удаленная сеть - 192.168.30.0/24 (удаленный VPN-блок выполняет маршрутизацию - так SAMBA будет работать без прокси-ARP).
  4. Раскомментируйте (удалите ##) из строк отладки, чтобы увидеть, что делает этот скрипт. Вывод будет записан в файл /tmp/ip-up-debug.txt. Не забудьте поставить ## обратно, когда закончите тестирование.
  5. Этот скрипт имеет опции для трех разных VPN-соединений. Просто измените записи 192.168.x на разные сетевые адреса ваших разных VPN.

Нашел здесь

Антонио
источник