En MacOS, ¿cómo puedo pasar por alto una VPN para un sitio específico usando su nombre de host?

0

Estoy configurando una VPN IKEv2 en macOS 10.12.3. Está funcionando, pero me gustaría configurar sitios web específicos para evitar la VPN.

Soy consciente de un método que usa el comando route para agregar una ruta estática, pero que solo funciona para una dirección IP específica. Si el sitio al que me estoy conectando cambia su IP (que es una posibilidad distinta), entonces su tráfico comenzará a pasar por la VPN nuevamente.

¿Cómo puedo omitir la VPN usando el nombre de host del sitio? p.ej. cualquier solicitud a www.somewebsite.com no usará la VPN, independientemente de la dirección IP que se resuelva en www.somewebsite.com?

    
pregunta GuyGizmo 26.03.2017 - 05:57

1 respuesta

1

La forma más sencilla de crear una ruta estática y persistente a un host es crear un script addroute.sh (root: wheel 755) en / usr / local / bin. Reemplace el nombre de host y la puerta de enlace.

#!/bin/bash

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

y cargue el script con un demonio de inicio usr.addroute.plist (root: wheel 644) en / 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>

Cárgalo con: sudo launchctl load /Library/LaunchDaemon/usr.addroute.plist .

Si todo funciona, elimine las claves / cadenas estándar * de la lista y los archivos relacionados en / tmp.

La línea sleep 10 es un enfoque de martillo - una ruta solo se puede agregar después de un cierto punto en el tiempo: la red debe estar lista para la interfaz específica - y se puede reemplazar con algo más elegante descrito en esta respuesta aquí .

Dependiendo de las VPN o las capacidades de DNS de su entorno predeterminado, es posible que también tenga que agregar una ruta para un servidor DNS (por ejemplo, 8.8.8.8 de Google) y modificar el comando de excavación a dig @8.8.8.8 +short example.com .

Si reinicia raramente su host y las IP de los hosts remotos cambian a menudo, use el siguiente script (que probablemente se pueda mejorar):

#!/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

y 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>

Se necesita un archivo proxy adicional:

sudo touch /usr/local/bin/addroute 

Ajuste el Intervalo de inicio (en segundos) en su lista según sea necesario e ingrese el nombre de host y la IP de la puerta de enlace en el script de shell.

La primera rutina if agrega una ruta a un host remoto después de iniciar su host y - más tarde - una nueva ruta si cambia la IP del host remoto. La segunda rutina if elimina una ruta obsoleta.

    
respondido por el klanomath 30.03.2017 - 23:31

Lea otras preguntas en las etiquetas