Je voulais une application native que je puisse exécuter à l'ouverture de session (et continuer à s'exécuter / masquée) pour activer le routage Split Tunnel, similaire à une fonction de Locamatic . Peut-être que je bifurquerai à un moment donné Locamatic et que je jouerai avec. Je peux aussi télécharger ce AppleScript sur Github. Je ne voulais pas jouer avec un démon comme le suggère cette réponse.
Ce script suppose que VPN a un VPN (Cisco IPSec)
nom par défaut et que l'itinéraire VPN est 10.10.10.1/22
> 10.10.20.10
. Celles-ci devront être changées / des itinéraires supplémentaires ajoutés. Exécutez le terminal> netstat -rn
lorsque le VPN est connecté (avant d'activer ce script) pour voir les itinéraires ajoutés au VPN.
Ce script génère également des notifications de style Growl dans le Centre de notifications :)
Je suis tombé sur quelques problèmes avec Mark E. Haase de réponse que mes modifie VPN Cisco la passerelle existante d'un UCSc
à un UGScI
itinéraire (spécifique d'interface en0) et ajoute la passerelle VPN comme UCS
itinéraire, ce qui nécessite la suppression de deux passerelles par défaut et rajoutant la UGSc
passerelle par défaut d' origine
Dieu merci pour StackExchange / google, il s’agit de mon premier AppleScript et je n’aurais pas pu le mettre en place sans quelques heures de recherche sur Google.
Suggestions / corrections / optimisations bienvenues!
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
enregistrer en tant qu'application:
clic droit> afficher le contenu du paquet, ajouter ce qui suit à info.plist (cela masque l'icône de l'application du dock, nécessitant l'utilisation d'Activity Monitor ou d'un terminal> pkill -f 'Split Tunnel'
pour quitter l'application, omettez si vous VOULEZ une icône de dock:
<key>LSBackgroundOnly</key>
<string>1</string>
créez un nouveau routeNOPASSWD
fichier d' une ligne (sans extension) en utilisant EXACTEMENT le code suivant (cela peut empêcher un accès sudo s'il est mal effectué, google visudo
pour plus d'informations - ceci permet aux commandes sudo du AppleScript de s'exécuter SANS invite de mot de passe, omettre si vous VOULEZ une invite de mot de passe lorsque la table de routage doit être modifiée):
%admin ALL = (ALL) NOPASSWD: /sbin/route
copier ce fichier dans /etc/sudoers.d
lancez les commandes suivantes dans le terminal (la deuxième commande demandera le mot de passe - ceci permet aux sudo route
commandes du script AppleScript de s'exécuter SANS invite de mot de passe; omettre si une invite de mot de passe est souhaitée lorsque le script modifie la table de routage)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
Enfin, ajoutez l'application dans Préférences système> Utilisateurs et groupes> Éléments de connexion.