После обновления до 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, и снова запустить после того, как вы отключились (я не нашел способа запустить его автоматически). Несколько заметок:
Моя учетная запись запущена с правами администратора с разблокированными сетевыми настройками, поэтому я не уверен, как этот сценарий будет справедливым ни для чего, кроме.
Вам нужно установить vpn_srvc_name в скрипте для вашего, как вы уже догадались, имени службы vpn.
Я уверен, что, возможно, есть более простой способ сделать это, поэтому не стесняйтесь размещать свои замечания.
Сценарий:
#!/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.
networksetup -setdnsservers "$@"
. Мой Mac Pro имеет два подключения Ethernet («Ethernet 1» и «Ethernet 2» являются именами по умолчанию), поэтому их необходимо заключать в кавычки. РЕДАКТИРОВАТЬ: зачем это делать