Я хотел собственное «приложение», которое я мог бы запустить при входе в систему (и продолжать работать / скрыто), чтобы включить маршрутизацию Split Tunnel, аналогично функции Locamatic , Возможно, в какой-то момент я раскошелюсь на Locamatic и поиграюсь с ним. Я также могу загрузить этот AppleScript в Github. Я не хотел связываться с демоном, как этот ответ подсказывает.
Этот сценарий предполагает, что VPN имеет значение по умолчанию VPN (Cisco IPSec)
имя и VPN-маршрут 10.10.10.1/22
& GT; 10.10.20.10
, Их нужно будет изменить / добавить дополнительные маршруты. Запустите терминал & gt; netstat -rn
когда VPN подключен (до включения этого скрипта), чтобы увидеть VPN-добавленные маршруты.
Этот скрипт также генерирует уведомления в стиле рычания в Центре уведомлений :)
Я столкнулся с некоторыми проблемами с Марк Э. Хаас «s ответ как мой Cisco VPN изменяет существующий шлюз от UCSc
к UGScI
(специфичный для интерфейса en0) и добавляет шлюз VPN как UCS
маршрут, требующий удаления двух шлюзов по умолчанию и добавления обратно оригинал UGSc
шлюз по умолчанию
Слава Богу, StackExchange / google, это мой первый AppleScript, и я бы не смог собрать его без нескольких часов поиска в Google.
Предложения / исправления / оптимизации приветствуются!
AppleScript ( GitHub Gist ):
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
сохранить как приложение:
щелкните правой кнопкой мыши & gt; показать содержимое пакета, добавьте в info.plist следующее (это скрывает значок приложения от дока, что требует использования Activity Monitor или терминала & gt; pkill -f 'Split Tunnel'
чтобы выйти из приложения, пропустите, если вы хотите значок док-станции:
<key>LSBackgroundOnly</key>
<string>1</string>
создать новую однострочную routeNOPASSWD
файл (без расширения), используя следующий код точно (это может помешать доступу sudo, если сделано неправильно, Google visudo
для получения дополнительной информации - это позволяет командам sudo в AppleScript запускать БЕЗ запроса пароля, пропустите, если вы хотите запросить пароль, когда необходимо изменить таблицу маршрутизации):
%admin ALL = (ALL) NOPASSWD: /sbin/route
скопируйте этот файл в /etc/sudoers.d
выполните следующие команды в терминале (вторая команда запросит пароль - это позволяет sudo route
команды в AppleScript для запуска БЕЗ запроса пароля, пропустите, если запрос пароля требуется, когда скрипт изменяет таблицу маршрутизации)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
наконец, добавьте приложение в системные настройки & gt; Пользователи и группы & gt; элементы входа