Chciałem mieć natywną „aplikację”, którą mogę uruchomić przy logowaniu (i nadal działać / ukryć), aby włączyć routing Split Tunnel, podobny do funkcji Locamatic . Być może kiedyś rozwidlę Locamatic i będę się nim bawić. Mogę również przesłać ten AppleScript do Github. Nie chciałem zadzierać z demonem, jak sugeruje ta odpowiedź.
Ten skrypt zakłada, że VPN ma domyślną VPN (Cisco IPSec)
nazwę, a trasa VPN to 10.10.10.1/22
> 10.10.20.10
. Będą musiały zostać zmienione / dodane dodatkowe trasy. Uruchom terminal> netstat -rn
po podłączeniu VPN (przed włączeniem tego skryptu), aby zobaczyć trasy dodane przez VPN.
Ten skrypt generuje również powiadomienia w stylu warczenia w Centrum powiadomień :)
Wpadłem na pewne problemy z Mark E. Haase „s odpowiedzi jako mój modyfikuje Cisco VPN istniejącej bramy od A UCSc
do UGScI
(en0 interfejsu określonej trasie) i dodaje bramą VPN jako UCS
trasy, konieczność usunięcia dwóch bram domyślnych oraz dodawanie plecy oryginalna UGSc
brama domyślna
Dzięki Bogu za StackExchange / google, to jest mój pierwszy AppleScript i nie byłbym w stanie go złożyć bez kilku godzin googlingu.
Sugestie / poprawki / optymalizacje mile widziane!
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
zapisz jako aplikację:
kliknij prawym przyciskiem myszy> pokaż zawartość pakietu, dodaj następujące informacje do info.plist (ukrywa to ikonę aplikacji przed dokiem, co wymaga użycia Monitora aktywności lub terminala>, pkill -f 'Split Tunnel'
aby zamknąć aplikację, pomiń, jeśli CHCESZ ikonę stacji dokującej:
<key>LSBackgroundOnly</key>
<string>1</string>
utwórz nowy routeNOPASSWD
plik jednowierszowy (bez rozszerzenia) DOKŁADNIE (może to uniemożliwić dostęp do sudo, jeśli zostanie wykonane nieprawidłowo, google, visudo
aby uzyskać więcej informacji - pozwala to na uruchamianie poleceń sudo w AppleScript BEZ monitu o hasło, pomiń, jeśli CHCESZ monit o hasło, kiedy należy zmienić tabelę routingu):
%admin ALL = (ALL) NOPASSWD: /sbin/route
skopiuj ten plik do /etc/sudoers.d
uruchom następujące polecenia w terminalu (drugie polecenie wyświetli monit o hasło - pozwala to sudo route
na uruchamianie poleceń w AppleScript BEZ pytania o hasło, pomiń, jeśli monit o hasło jest wymagany, gdy skrypt zmienia tablicę routingu)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
na koniec dodaj aplikację do Prefektów systemu> Użytkownicy i grupy> elementy logowania