Quería una 'aplicación' nativa que pueda ejecutar al iniciar sesión (y seguir ejecutándose / oculta) para habilitar el enrutamiento del túnel dividido, similar a una función de Locamatic . Quizás bifurque a Locamatic en algún momento y juegue con él. También puedo subir este AppleScript a Github. No quería meterme con un demonio como sugiere esta respuesta.
Este script asume que VPN tiene un VPN (Cisco IPSec)
nombre predeterminado y la ruta VPN es 10.10.10.1/22
> 10.10.20.10
. Será necesario cambiarlos / agregar rutas adicionales. Ejecute terminal> netstat -rn
cuando VPN esté conectado (antes de habilitar este script) para ver rutas agregadas por VPN.
Este script también genera notificaciones de estilo gruñido en el Centro de notificaciones :)
Me encontré con algunos problemas con la respuesta de Mark E. Haase , ya que mi VPN de Cisco modifica la puerta de enlace existente de una ruta a una (en0 interfaz específica) y agrega la puerta de enlace VPN como ruta, lo que requiere la eliminación de dos puertas de enlace predeterminadas y volver a agregar la puerta de enlace predeterminada originalUCSc
UGScI
UCS
UGSc
Gracias a Dios por StackExchange / google, este es mi primer AppleScript y no habría podido armarlo sin unas pocas horas de búsqueda en Google.
Sugerencias / correcciones / optimizaciones bienvenidas!
AppleScript ( GitHubGist ):
global done
set done to 0
on idle
set status to do shell script "scutil --nc status "VPN (Cisco IPSec)" | sed -n 1p"
# do shell script "scutil --nc start "VPN (Cisco IPSec)"
if status is "Connected" then
if done is not 1 then
display notification "VPN Connected, splitting tunnel"
set gateway to do shell script "( netstat -rn | awk '/default/ {if ( index($6, \"en\") > 0 ){print $2} }' ) # gets non-VPN default gateway"
do shell script "sudo route delete default" # deletes VPN-assigned global (UCS) default gateway
do shell script "sudo route delete default -ifscope en0" # deletes en0 interface-specific (UGScI) LOCAL non-vpn gateway that prevents it being re-added as global default gateway
do shell script "sudo route add default " & gateway # re-adds LOCAL non-vpn gateway (from get command above) as global default gateway
do shell script "sudo route add 10.10.10.1/22 10.10.20.10" # adds VPN route
display notification "VPN tunnel has been split"
set done to 1
end if
else
if done is not 2 then
display notification "VPN Disconnected"
set done to 2
end if
end if
return 5
end idle
guardar como una aplicación:
haga clic con el botón derecho> muestre el contenido del paquete, agregue lo siguiente a info.plist (esto oculta el ícono de la aplicación desde el dock, lo que requiere el uso de Activity Monitor o terminal> pkill -f 'Split Tunnel'
para salir de la aplicación, omita si QUIERE un ícono de dock:
<key>LSBackgroundOnly</key>
<string>1</string>
cree un nuevo routeNOPASSWD
archivo de una línea (sin extensión) usando el siguiente código EXACTAMENTE (esto puede evitar el acceso a sudo si se hace incorrectamente, google visudo
para obtener más información; esto permite que los comandos sudo en AppleScript se ejecuten SIN una solicitud de contraseña, omita si desea un mensaje de contraseña cuando la tabla de enrutamiento debe cambiarse
%admin ALL = (ALL) NOPASSWD: /sbin/route
copia este archivo a /etc/sudoers.d
ejecute los siguientes comandos en la terminal (el segundo comando solicitará la contraseña; esto permite que los sudo route
comandos en AppleScript se ejecuten SIN solicitar la contraseña, omita si se solicita una solicitud de contraseña cuando el script está cambiando la tabla de enrutamiento)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
finalmente agregue la aplicación a Preferencias del sistema> Usuarios y grupos> elementos de inicio de sesión