Después de actualizar a OS X 10.6.5 (desde .4), las aplicaciones no parecen buscar nombres de host en el orden correcto (de acuerdo con el orden de servicio en las Preferencias de red) cuando mi VPN está conectada.
Mi configuración actual es un servicio VPN IPSec de Cisco frente a un servicio AirPort. Los servidores DNS se configuran automáticamente para la conexión VPN (lo cual está bien), y el servicio AirPort DNS apunta a mi enrutador (192.168.1.1, que apunta a los servidores OpenDNS).
Cuando mi VPN está conectada, me gustaría que las búsquedas de DNS pasen primero por los servidores DNS de VPN, pero todas mis aplicaciones (Firefox, Thunderbird, ssh) parecen estar usando primero mi servidor DNS AirPort (OpenDNS).
Esto funcionaba bien antes de la actualización.
Gracias por cualquier ayuda.
** editar **
Encontré esta publicación y ejecuté los comandos en la respuesta aceptada. Sin embargo, no pareció ayudar.
Después de buscar un poco más, me encontré con este comando: scutil --dns
El resultado del comando está debajo. Todo parece correcto, excepto que creo que el resolutor # 2 debería ser lo primero, y hay un dominio de búsqueda en el resolutor # 1 (obviamente no es foobar.com, sino el dominio VPN real). Creo que esto es donde se encuentra el error (o lo que sea). No lo especifiqué manualmente, y no está en la pestaña DNS para mi conexión AirPort. Cuando se desconecta la VPN, ese dominio de búsqueda no está allí, y el resolutor # 2 desaparece, como debería 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 **
Bueno, hasta que alguien pueda responder mi pregunta, he escrito un script para ayudar con la solución mencionada a continuación. Debe ejecutarse después de haber conectado su VPN, y volver a ejecutarse después de desconectarse (no he encontrado una manera de ejecutarlo automáticamente). Algunas notas
Mi cuenta se ejecuta como administrador con las preferencias de red desbloqueadas, por lo que no estoy seguro de cómo este script sería justo en otra cosa que no sea.
Debe establecer vpn_srvc_name en el script para su, lo adivinó, nombre de servicio vpn.
Estoy seguro de que probablemente haya una manera más fácil de hacerlo, así que siéntase libre de publicar sus comentarios.
La secuencia de comandos:
#!/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 esto sigue siendo un problema en Lion también. Estoy actualizando el título y agregando una etiqueta.
** editar **
Aparentemente, Lion también trajo algunos cambios inalámbricos, incluido el cambio de nombre del servicio AirPort a Wi-Fi. Esto puede causar problemas con el script de solución que proporcioné si uno se conecta a su VPN a través de una conexión inalámbrica. Lion (por alguna razón) mantiene el servicio llamado AirPort debajo del capó. Para solucionarlo, debe cambiar el nombre de su servicio Wi-Fi a otro que no sea AirPort. Si desea mantener el nombre de Wi-Fi, primero debe cambiarle el nombre a algo diferente y luego cambiarlo a Wi-Fi.
networksetup -setdnsservers "$@"
. Mi Mac Pro tiene dos conexiones Ethernet ("Ethernet 1" y "Ethernet 2" son los nombres predeterminados), por lo que deben indicarse entre comillas. EDITAR: por qué hacer esto