86 votes

Comment recharger la table de routage par défaut de Mac OSX sans redémarrage ?

Salutations,

J'utilise vpnc pour un client VPN. Je fais également des choses délicates avec route pour m'assurer que je peux toujours accéder à mon réseau local, etc. etc. (les détails ici ne sont pas très importants).

Parfois, la table de routage est tellement détraquée que j'obtiens ping: sendto: Network is unreachable pour les urls qui devraient autrement être résolues.

Actuellement, si je redémarre Mac OS X, tout revient à la normale. Ce que j'aimerais faire, c'est réinitialiser les tables de routage à leur valeur "par défaut" (c'est-à-dire celle qui est définie au démarrage). sans un redémarrage complet du système.

Je pense que l'étape 1 est route flush (pour supprimer toutes les routes). Et l'étape 2 doit recharger toutes les routes par défaut.

Une idée sur la manière de procéder ? (par exemple, quelle est l'étape 2 ?)

EDIT Aussi, je remarque qu'un autre symptôme est traceroute échoue également sur l'adresse en question. Par exemple :

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

80voto

cavver Points 987

Vous devez purger les routes . Utilisez route -n flush plusieurs fois . Ensuite, ajoutez vos routes avec route add.

25voto

Sean Points 331

J'ai rencontré ce problème en utilisant un serveur OpenVPN domestique et en m'y connectant à l'aide de l'application Tunnelblick sur Mac.

Ce qui se passait de mon côté, c'est qu'une route avec l'IP de mon domicile comme destination et une passerelle incorrecte restait après la déconnexion du VPN. La suppression de cette route a résolu le problème.

$ sudo route -n delete the.good.dns.name

Exemple : Je suis à l'école et après un nouveau démarrage de l'ordinateur, je me connecte à un réseau sans fil. Je me connecte à mon serveur OpenVPN domestique avec Tunnelblick.

$ netstat -nr
Destination                   Gateway
....
[home-ip]/32                  [school-default-gateway-1] ....
....

Je me déconnecte du serveur VPN. Je change de réseau sans fil. Cela change ma passerelle par défaut.

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [school-default-gateway-1] ...
...
$ ping [home-ip]
PING [home-ip]: 56 data bytes
ping: sendto: Network is unreachable
ping: sendto: Network is unreachable
Request timeout for icmp_seq 0
...

Je ne peux en aucun cas me connecter à mon réseau domestique (VPN, ping, quoi que ce soit) après que cela se soit produit. Si je supprime simplement la route :

$ sudo route -n delete [home-ip]
delete net [home-ip]
$ ping [home-ip]
PING [home-ip]: 56 data bytes
64 bytes from [home-ip]: icmp_seq=1 ttl=56 time=13.111 ms

Cela fonctionne bien.

Il pourrait y avoir un problème avec la façon dont le serveur/client OpenVPN est configuré qui laisse cela (et je serais intéressé de trouver ce que c'est), mais j'ai installé un script de Tunnelblick post-disconnect qui automatise cette suppression de route.

19voto

user22367 Points 79

Tout d'abord, vous avez besoin d'une route pour votre interface réseau. Si le VPN est déconnecté, il suffit de mettre votre interface réseau hors service puis de la remettre en service avec ifconfig. Utilisez ensuite la commande route pour créer votre GW par défaut. Donc quelque chose comme :

ifconfig en0 down

ifconfig en0 up

route add <ip address> default

8voto

zopieux Points 101

Je rencontrais le même problème que @Sean (j'utilise également OS X), en ce sens que lorsque je passais du réseau domestique au réseau professionnel, la route par défaut n'était pas supprimée.

Pour être complet, lorsque je me connecte à mon VPN à la maison et que j'exécute la commande suivante, il affiche la passerelle par défaut comme ci-dessous

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [work-default-gateway-1]

Et quand je me déconnectais, la passerelle [home-ip] était toujours là. Lorsque je me connectais à mon réseau professionnel, je ne pouvais pas me connecter à Internet du tout et je rencontrais le même problème qu'OP.

$ traceroute the.good.dns.name    
$ traceroute: bind: Can't assign requested address

Je devrais alors supprimer manuellement l'itinéraire avec

$ sudo route -n delete [home-ip]

Initialement, j'ai mis le "route -n delete" dans une post-disconnect.sh script, mais c'était un peu brouillon alors à la place j'ai trouvé ce lien

https://code.google.com/p/tunnelblick/issues/detail?id=177

Apparemment, la raison est due à la définition de l'élément suivant dans mon fichier .ovpn fichier

user nobody
group nogroup

Cela signifie que la route est configurée en tant que root, mais lorsque la connexion est coupée, l'utilisateur n'est plus root, et la route ne peut donc pas être supprimée.

En commentant ces 2 lignes dans mon .ovpn a réglé le problème, sans avoir à utiliser un fichier post-disconnect.sh .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X