OS X> 10.6.5 Ordre de recherche DNS avec VPN


13

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:

  1. 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.

  2. Vous devez définir vpn_srvc_name dans le script sur votre nom de service vpn, vous l'aurez deviné.

  3. 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.


Lorsque vous regardez dans les Préférences Système et cliquez sur les réseaux, sous la connexion VPN sur le côté gauche, sélectionnez avancé (corener en bas à droite). Vous devriez maintenant voir un onglet DNS en haut. À gauche, les adresses IP du DNS et à droite, votre domaine. Sont-ils corrects (pointant vers le serveur DNS VPN)?
Everett

Oui, ils sont corrects.
citrusmoose

La ligne dans set_dns_ips devrait être 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
Chris R. Donnelly

Tu as raison, @chris. J'ai mis à jour le script. Je ne sais pas ce que vous entendez par «pourquoi faire cela».
citrusmoose

Désolé, @citrusmoose. J'essayais juste de dire pourquoi j'ai édité le commentaire; J'ai cliqué sur soumettre puis j'ai réalisé que je n'avais pas dit pourquoi changer cela et que je ne voulais pas me contenter de préconiser le changement sans une bonne raison.
Chris R. Donnelly

Réponses:


1

Dans mon cas, les requêtes FQDN n'étaient pas résolues à la bonne adresse interne. Au lieu de cela, ils pointaient vers l'adresse externe.

Je me connecte à mon Cisco ASA via IPsec. Bien que la commande soit correctement configurée dans la connexion réseau, les requêtes DNS ne suivent pas la commande depuis la mise à jour vers 10.6.5.

Pour contourner ce problème, j'ai affecté manuellement le serveur DNS pour mon VPN à la connexion Airport (car je suis sans fil). Une fois la connexion VPN terminée, je supprime l'adresse DNS ajoutée manuellement.


Oui, c'est aussi ma solution de contournement (mais très ennuyeux). Je suis content que quelqu'un d'autre ait ce problème, car il semble que j'étais le seul. Je suppose que d'autres ne le remarqueront peut-être pas, car la plupart des recherches de domaines internes échoueront et retomberont sur les bons serveurs DNS. Dans mon cas cependant, il y a peu de domaines internes qui (pour une raison quelconque) ont des entrées dans des serveurs DNS externes.
citrusmoose

Il doit y avoir une meilleure approche que celle-ci, @Citrusmoose, avez-vous eu de la chance avec quelque chose de moins manuel et plus robuste?
MightyE

Non, je n'ai encore rien rencontré.
citrusmoose

1

Pour empêcher OS X 10.8 de créer un itinéraire par défaut vers votre connexion VPN, ouvrez Internet Connect (dans Applications). Choisissez Options dans le menu Connexion, puis décochez l'option "Envoyer tout le trafic via une connexion VPN". Cliquez sur OK et vous avez terminé.

Pour créer un itinéraire personnalisé vers le sous-réseau de l'autre côté de la connexion VPN, lisez le reste de l'astuce ...

En tant que root, créez / etc / ppp / ip-up et insérez le code suivant:

#!/bin/sh
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd

DEBUGFILE=/tmp/ip-up-debug.txt
## echo "1:$1 2:$2 3:$3 4:$4 5:$5 6:$6" > $DEBUGFILE
NET=`echo $5 | cut -d. -f1,2,3`
## echo $NET >> $DEBUGFILE

case $NET in 192.168.3)
     ## echo "CASE1" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.30.0 $5 255.255.255.0`
     ##echo $RESULT >> $DEBUGFILE
     ;;
     192.168.2)
     ## echo "CASE2" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.20.0 netmask 255.255.255.0 gw $5`
     ## echo $RESULT >> $DEBUGFILE
     ;;
     192.168.1)
     ## echo "CASE3" >> $DEBUGFILE
     RESULT=`/sbin/route add -net 192.168.10.0 netmask 255.255.255.0 gw $5`
     ## echo $RESULT >> $DEBUGFILE
     ;;
     *)
     ## echo "No match" >> $DEBUGFILE
     ;;
esac

Remarques:

  1. Une fois le fichier créé, effectuez une chmod u+x /etc/ppp/ip-up .
  2. La variable $ 5 est votre adresse IP distante (votre adresse IP sur le réseau distant).
  3. Dans la première déclaration de cas, remplacez l'entrée 192.168.x par les trois premiers octets de votre réseau distant. Dans ce cas, l'adresse IP distante est 192.168.3.1 et le réseau distant est 192.168.30.0/24 (la boîte VPN distante fait le routage - c'est ainsi que SAMBA fonctionnera sans avoir besoin de proxy ARP).
  4. Décommentez (supprimez les ##) des lignes de débogage pour voir ce que fait ce script. La sortie sera écrite dans le fichier /tmp/ip-up-debug.txt. N'oubliez pas de remettre les ## lorsque vous avez terminé les tests.
  5. Ce script propose des options pour trois connexions VPN différentes. Modifiez simplement les entrées 192.168.x en différentes adresses réseau de vos différents VPN.

Trouvé ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.