Після оновлення до OS X 10.6.5 (з .4) програми, здається, не шукають імена хостів у правильному порядку (відповідно до порядку обслуговування в мережевих налаштуваннях), коли підключений мій VPN.
Моя поточна настройка - це служба VPN Cisco IPSec перед службою AirPort. DNS-сервери автоматично встановлюються для з'єднання VPN (що в порядку), і DNS служби AirPort вказує на мій маршрутизатор (192.168.1.1, який вказується на сервери OpenDNS).
Коли мій VPN підключений, я хотів би, щоб пошук DNS спочатку пройшов через сервери VPN DNS, але всі мої програми (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
** редагувати **
Схоже, це все ще проблема в Леві. Я оновлюю заголовок і додаю тег.
** редагувати **
Мабуть, Лев також вніс деякі зміни в бездротовій мережі, включаючи перейменування служби AirPort на Wi-Fi. Це може спричинити проблеми зі сценарієм обходу, який я надав, якщо хтось підключається до своєї VPN через бездротове з'єднання. Лев (чомусь) тримає сервіс під назвою AirPort під кришкою. Щоб виправити це, вам потрібно перейменувати послугу Wi-Fi на щось, крім AirPort. Якщо ви хочете зберегти ім'я Wi-Fi, спочатку потрібно перейменувати його на щось інше, а потім перейменувати його на Wi-Fi.
networksetup -setdnsservers "$@"
. Мій Mac Pro має два підключення до Ethernet ("Ethernet 1" та "Ethernet 2" - це імена за замовчуванням), і тому їх треба цитувати. EDIT: навіщо це робити