Après la mise à jour vers OS X 10.6.5 (à partir de .4), les applications ne semblent pas rechercher les noms d'hôte dans le bon ordre (selon l'ordre de service dans les préférences réseau) lorsque mon VPN est connecté.
Ma configuration actuelle est un service VPN Cisco IPSec devant un service AirPort. Les serveurs DNS sont automatiquement configurés pour la connexion VPN (ce qui est OK), et le service DNS AirPort pointe vers mon routeur (192.168.1.1, qui pointe vers les serveurs OpenDNS).
Lorsque mon VPN est connecté, je voudrais que les recherches DNS passent d'abord par les serveurs DNS VPN, mais toutes mes applications (Firefox, Thunderbird, ssh) semblent utiliser d'abord mon serveur DNS AirPort (OpenDNS).
Cela fonctionnait très bien avant la mise à jour.
Merci pour toute aide.
** modifier **
Je suis tombé sur ce message et j'ai exécuté les commandes dans la réponse acceptée. Cela n'a pas semblé aider cependant.
Après avoir cherché un peu plus, je suis tombé sur cette commande: scutil --dns
La sortie de la commande est ci-dessous. Tout semble correct, sauf que je pense que le résolveur # 2 devrait venir en premier, et qu'il y a un domaine de recherche dans le résolveur # 1 (ce n'est évidemment pas foobar.com, mais le vrai domaine VPN). Je pense que c'est là que réside le bug (ou quoi que ce soit). Je ne l'ai pas spécifié manuellement et ce n'est pas dans l'onglet DNS de ma connexion AirPort. Lorsque le VPN est déconnecté, ce domaine de recherche n'est pas là et le résolveur # 2 est parti, comme il se doit.
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
** modifier **
Eh bien, jusqu'à ce que quelqu'un puisse répondre à ma question, j'ai écrit un script pour vous aider avec la solution de contournement mentionnée ci-dessous. Il devrait être exécuté après avoir connecté votre VPN, et exécuté à nouveau après vous être déconnecté (je n'ai pas trouvé de moyen de l'exécuter automatiquement). Quelques notes:
Mon compte est exécuté en tant qu'administrateur avec les préférences réseau déverrouillées, donc je ne sais pas comment ce script se comporterait sur autre chose que.
Vous devez définir vpn_srvc_name dans le script sur votre nom de service vpn, vous l'aurez deviné.
Je suis sûr qu'il existe probablement un moyen plus simple de procéder, alors n'hésitez pas à poster vos remarques.
Le 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
** modifier **
Il semble que cela soit également un problème dans Lion. Je mets à jour le titre et j'ajoute une balise.
** modifier **
Apparemment, Lion a également apporté quelques modifications sans fil, notamment en renommant le service AirPort en Wi-Fi. Cela peut entraîner des problèmes avec le script de contournement que j'ai fourni si l'on se connecte à leur VPN via une connexion sans fil. Lion (pour une raison quelconque) conserve le service nommé AirPort sous le capot. Pour y remédier, vous devez renommer votre service Wi-Fi en autre chose qu'AirPort. Si vous souhaitez conserver le nom Wi-Fi, vous devez d'abord le renommer en quelque chose de différent, puis le renommer en Wi-Fi.
networksetup -setdnsservers "$@"
. Mon Mac Pro a deux connexions Ethernet ("Ethernet 1" et "Ethernet 2" sont les noms par défaut) et ils doivent donc être cités. EDIT: pourquoi faire