La manera más simple para crear una estática y persistente de la ruta a un host es la creación de una secuencia de comandos addroute.sh (de la root:rueda 755) en /usr/local/bin. Reemplazar el nombre de host y la puerta de enlace, aunque.
#!/bin/bash
sleep 10
route -n add -host $(dig +short example.com) 192.168.0.1
y cargar la secuencia de comandos con el lanzamiento de un demonio usr.addroute.plist (root:rueda 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>
Carga con: sudo launchctl load /Library/LaunchDaemon/usr.addroute.plist
.
Si todo funciona, retire el Estándar de* teclas/cadenas en el plist y los relacionados con los archivos en /tmp.
El sleep 10
línea es una maza de enfoque - una ruta sólo puede ser añadido después de un cierto punto en el tiempo: la red tiene que ser para la interfaz específica y puede ser reemplazado con algo más elegante descritos en esta respuesta aquí.
Dependiendo de la VPN o de su entorno por defecto DNS de capacidades también puede que tenga que agregar una ruta para un servidor DNS (por ejemplo, los de Google 8.8.8.8) y modificar el comando dig a dig @8.8.8.8 +short example.com
.
Si reiniciar el host rara vez y los hosts remotos' IPs cambian con frecuencia, utilice la siguiente secuencia de comandos (que puede ser mejorado probablemente):
#!/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>
Un proxy adicionales de archivo que se necesita:
sudo touch /usr/local/bin/addroute
Por favor, ajuste el StartInterval (en segundos) en su plist como necesaria e introduzca un adecuado nombre de host y la IP de puerta de enlace en la secuencia de comandos de shell.
El primer if
rutina agrega una ruta a un host remoto después de arrancar su anfitrión y - más tarde - una nueva ruta si la IP del host remoto cambios. El segundo if
rutina quita obsoleta en la ruta.