Após a atualização para o OS X 10.6.5 (de .4), os aplicativos não parecem procurar nomes de host na ordem correta (de acordo com a ordem de serviço em Preferências de Rede) quando minha VPN está conectada.
Minha configuração atual é um serviço Cisco IPSec VPN na frente de um serviço AirPort. Os servidores DNS são configurados automaticamente para a conexão VPN (o que é bom) e o DNS do serviço AirPort está apontando para o meu roteador (192.168.1.1, apontado para os servidores OpenDNS).
Quando minha VPN está conectada, eu gostaria que as pesquisas de DNS passassem primeiro pelos servidores DNS da VPN, mas todos os meus aplicativos (Firefox, Thunderbird, ssh) parecem estar usando meu servidor DNS do AirPort primeiro (OpenDNS).
Isso estava funcionando muito bem antes da atualização.
Obrigado por qualquer ajuda.
** editar **
Me deparei com este post e executei os comandos na resposta aceita. Não pareceu ajudar, no entanto.
Depois de pesquisar um pouco mais, deparei-me com este comando: scutil --dns
A saída do comando está abaixo. Tudo parece correto, exceto que eu acho que o resolvedor nº 2 deve vir primeiro, e há um domínio de pesquisa no resolvedor nº 1 (obviamente não é foobar.com, mas o domínio VPN real). Eu acho que esse é o problema (ou o que quer que seja) mentiras. Não o especifiquei manualmente e não está na guia DNS da minha conexão AirPort. Quando a VPN é desconectada, esse domínio de pesquisa não existe e o resolvedor nº 2 desaparece, como deveria ser.
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
** editar **
Bem, até que alguém possa responder à minha pergunta, escrevi um script para ajudar na solução alternativa mencionada abaixo. Ele deve ser executado depois que você conectar sua VPN e executar novamente depois que você se desconectar (não encontrei uma maneira de executá-lo automaticamente). Algumas notas:
Minha conta é executada como um administrador com as preferências de rede desbloqueadas, por isso não tenho certeza de como esse script seria justo em nada.
Você precisa definir vpn_srvc_name no script como seu, você adivinhou, nome do serviço vpn.
Tenho certeza de que provavelmente existe uma maneira mais fácil de fazer isso, fique à vontade para postar seus comentários.
O script:
#!/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
** editar **
Parece que isso ainda é um problema no Lion também. Estou atualizando o título e adicionando uma tag.
** editar **
Aparentemente, o Lion também trouxe algumas mudanças sem fio, incluindo renomear o serviço AirPort para Wi-Fi. Isso pode causar problemas com o script da solução alternativa que forneci se alguém se conectar à VPN por uma conexão sem fio. Lion (por algum motivo) mantém o serviço chamado AirPort embaixo do capô. Para corrigi-lo, você precisa renomear seu serviço Wi-Fi para algo diferente do AirPort. Se você deseja manter o nome do Wi-Fi, renomeie-o para algo diferente primeiro e depois renomeie-o novamente para Wi-Fi.
networksetup -setdnsservers "$@"
. O meu Mac Pro possui duas conexões Ethernet ("Ethernet 1" e "Ethernet 2" são os nomes padrão) e, portanto, devem ser citadas. EDIT: por que fazer isso