3 votes

Sous MacOS, comment puis-je contourner un VPN pour un site spécifique en utilisant son nom d'hôte ?

Je suis en train de mettre en place un VPN IKEv2 sous MacOS 10.12.3. Cela fonctionne, mais j'aimerais configurer des sites Web spécifiques pour qu'ils contournent le VPN.

J'ai connaissance d'une méthode utilisant le route pour ajouter une route statique, mais cela ne fonctionne que pour une adresse IP spécifique. Si le site auquel je me connecte change d'IP (ce qui est tout à fait possible), son trafic recommencera à passer par le VPN.

Comment puis-je contourner le VPN en utilisant le nom d'hôte du site ? Par exemple, toute requête vers www.somewebsite.com sera no utiliser le VPN, quelle que soit l'adresse IP vers laquelle www.somewebsite.com se résout ?

4voto

klanomath Points 63400

La façon la plus simple de créer une route statique et persistante vers un hôte est de créer un script. addroute.sh (Root:wheel 755) dans /usr/local/bin. Remplacez le nom de l'hôte et la passerelle.

#!/bin/bash

sleep 10
route -n add -host $(dig +short example.com) 192.168.0.1

et charger le script avec un démon de lancement usr.addroute.plist (Racine:roue 644) dans /Library/LaunchDaemon/ :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>usr.addroute</string>
        <key>ProgramArguments</key>
            <array>
                <string>/bin/sh</string>
                <string>-c</string>
                <string>/usr/local/bin/addroute.sh</string>
            </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/usr.addroute.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/usr.addroute.out</string>
</dict>
</plist>

Chargez-le avec : sudo launchctl load /Library/LaunchDaemon/usr.addroute.plist .

Si tout fonctionne, supprimez les clés/chaînes Standard* dans le plist et les fichiers associés dans /tmp.

El sleep 10 est une approche brutale - une route ne peut être ajoutée qu'après un certain temps : le réseau doit être en place pour l'interface spécifique - et peut être remplacée par quelque chose de plus élégant décrit dans cette réponse. aquí .


En fonction des capacités DNS du VPN ou de votre environnement par défaut, vous devrez peut-être ajouter une route pour un serveur DNS (par exemple, le 8.8.8.8 de Google) et modifier la commande dig de la manière suivante dig @8.8.8.8 +short example.com .


Si vous redémarrez rarement votre hôte et que les IP des hôtes distants changent souvent, utilisez le script suivant (qui peut probablement être amélioré) :

#!/bin/bash

sleep 10

Hostname=hostname
GateWay=gateway_IP
IPHost=$(dig +short $Hostname)
RouteExist=$(netstat -nr -f inet | grep $IPHost | wc -l)
NewRoute=$(netstat -nr -f inet | grep $IPHost | awk '{print $1}')
OldHost=$(cat /usr/local/bin/addroute)

if [ $RouteExist -eq 0 ]
then
    route -n add -host $IPHost $GateWay
    RouteExist=1
    NewRoute=$(netstat -nr -f inet | grep $IPHost | awk '{print $1}')
    echo $NewRoute > /usr/local/bin/addroute 
fi

if [ $IPHost != $OldHost ]

then
    route -n delete -host $OldHost $GateWay
    NewRoute=$(netstat -nr -f inet | grep $IPHost | awk '{print $1}')
    echo $NewRoute > /usr/local/bin/addroute  
fi

et plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>usr.addroute</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>-c</string>
        <string>/usr/local/bin/addroute.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/usr.addroute.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/usr.addroute.out</string>
    <key>StartInterval</key>
    <integer>60</integer>
</dict>
</plist>

Un fichier proxy supplémentaire est nécessaire :

sudo touch /usr/local/bin/addroute 

Veuillez ajuster le StartInterval (en secondes) dans votre plist comme requis et entrez un nom d'hôte et une IP de passerelle appropriés dans le shell script.

Le premier if ajoute une route vers un hôte distant après le démarrage de votre hôte. et - plus tard - une nouvelle route si l'IP de l'hôte distant change. La deuxième if supprime une route périmée.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X