Volevo un'app nativa che potessi eseguire all'accesso (e continuare a correre / nascosta) per abilitare il routing Split Tunnel, simile a una funzione di Locamatic . Forse a un certo punto forcherò Locamatic e ci giocherò. Potrei anche caricare questo AppleScript su Github. Non volevo scherzare con un demone come suggerisce questa risposta.
Questo script presuppone che VPN abbia un VPN (Cisco IPSec)
nome predefinito e che il percorso VPN sia 10.10.10.1/22
> 10.10.20.10
. Questi dovranno essere cambiati / percorsi aggiuntivi aggiunti. Esegui terminale> netstat -rn
quando la VPN è connessa (prima di abilitare questo script) per vedere i percorsi aggiunti dalla VPN.
Questo script genera anche notifiche in stile ringhio nel Centro notifiche :)
Ho riscontrato alcuni problemi con la risposta di Mark E. Haase mentre la mia VPN Cisco modifica il gateway esistente da una a una route (specifica dell'interfaccia en0) e aggiunge il gateway VPN come route, richiedendo l'eliminazione di due gateway predefiniti e l'aggiunta di nuovo il gateway predefinito originaleUCSc
UGScI
UCS
UGSc
Grazie al cielo per StackExchange / google, questo è il mio primo AppleScript e non sarei stato in grado di metterlo insieme senza qualche ora di ricerca su Google.
Suggerimenti / correzioni / ottimizzazioni sono benvenuti!
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
salva come app:
fare clic con il tasto destro> mostra il contenuto del pacchetto, aggiungere quanto segue a info.plist (ciò nasconde l'icona dell'app dal dock, richiedendo l'uso di Activity Monitor o terminale> pkill -f 'Split Tunnel'
per uscire dall'app, omettere se si desidera un'icona dock:
<key>LSBackgroundOnly</key>
<string>1</string>
crea un nuovo routeNOPASSWD
file di una riga (senza estensione) usando ESATTAMENTE il seguente codice (questo può impedire l'accesso a sudo se fatto in modo errato, google visudo
per maggiori informazioni - questo consente ai comandi sudo in AppleScript di eseguire SENZA una richiesta di password, ometti se vuoi una richiesta di password quando è necessario modificare la tabella di routing):
%admin ALL = (ALL) NOPASSWD: /sbin/route
copia questo file in /etc/sudoers.d
eseguire i seguenti comandi nel terminale (il secondo comando richiederà la password - ciò consente ai sudo route
comandi in AppleScript di eseguire SENZA richiesta di password, omettere se si desidera una richiesta di password quando lo script modifica la tabella di routing)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
infine aggiungi l'app a Preferenze di sistema> Utenti e gruppi> elementi di accesso