Ich wollte eine native 'App', die ich bei der Anmeldung ausführen kann (und die ausgeführt wird / ausgeblendet bleibt ), um das Routing für geteilte Tunnel zu aktivieren, ähnlich einer Funktion von Locamatic . Vielleicht gabel ich Locamatic irgendwann und spiele damit. Ich kann dieses AppleScript auch auf Github hochladen. Ich wollte mich nicht mit einem Daemon anlegen, wie diese Antwort nahelegt.
In diesem Skript wird davon ausgegangen, dass VPN den Standardnamen VPN (Cisco IPSec)
und die VPN-Route 10.10.10.1/22
> hat 10.10.20.10
. Diese müssen geändert / zusätzliche Routen hinzugefügt werden. Führen Sie terminal> aus, netstat -rn
wenn eine VPN-Verbindung besteht (bevor Sie dieses Skript aktivieren), um VPN-hinzugefügte Routen anzuzeigen.
Dieses Skript generiert auch Benachrichtigungen im Growl-Stil im Notification Center :)
Ich hatte einige Probleme mit der Antwort von Mark E. Haase , als mein Cisco VPN das vorhandene Gateway von einer auf eine (für die en0-Schnittstelle spezifische) Route änderte und das VPN-Gateway als Route hinzufügte , wodurch zwei Standardgateways gelöscht und erneut hinzugefügt werden mussten das ursprüngliche Standard-GatewayUCSc
UGScI
UCS
UGSc
Gott sei Dank für StackExchange / google, dies ist mein erstes AppleScript und ich hätte es ohne ein paar Stunden Googeln nicht zusammenstellen können.
Vorschläge / Korrekturen / Optimierungen erwünscht!
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
als app speichern:
Rechtsklick> Paketinhalt anzeigen, Folgendes zu info.plist hinzufügen (dies verbirgt das App-Symbol vor dem Dock, was die Verwendung von Activity Monitor oder Terminal erforderlich macht> pkill -f 'Split Tunnel'
um die App zu beenden, weglassen, wenn Sie ein Dock-Symbol möchten:
<key>LSBackgroundOnly</key>
<string>1</string>
Erstellen Sie eine neue einzeilige routeNOPASSWD
Datei (ohne Erweiterung) mit dem folgenden Code GENAU (dies kann den Sudo-Zugriff verhindern, wenn dies nicht korrekt ausgeführt wird. visudo
Weitere Informationen finden Sie bei Google. Dadurch können die Sudo-Befehle im AppleScript OHNE Kennworteingabeaufforderung ausgeführt werden. Lassen Sie sie aus, wenn Sie möchten eine Passwortabfrage, wenn die Routing-Tabelle geändert werden muss):
%admin ALL = (ALL) NOPASSWD: /sbin/route
Kopieren Sie diese Datei nach /etc/sudoers.d
Führen Sie die folgenden Befehle im Terminal aus (der zweite Befehl sudo route
fordert zur Eingabe eines Kennworts auf - dies ermöglicht, dass die Befehle im AppleScript OHNE Aufforderung zur Kennworteingabe ausgeführt werden. Lassen Sie dies aus, wenn eine Kennwortaufforderung gewünscht wird, wenn das Skript die Routingtabelle ändert.)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
Fügen Sie die App schließlich zu Systemeinstellungen> Benutzer und Gruppen> Anmeldeelemente hinzu