Eu queria um 'aplicativo' nativo que eu possa executar no logon (e continuar executando / oculto) para ativar o roteamento do Split Tunnel, semelhante a uma função da Locamatic . Talvez eu bata na Locamatic em algum momento e brinque com ela. Também posso enviar este AppleScript para o Github. Eu não queria mexer com um daemon, como esta resposta sugere.
Este script assume que a VPN tem VPN (Cisco IPSec)
nome padrão e a rota da VPN é 10.10.10.1/22
> 10.10.20.10
. Isso precisará ser alterado / rotas adicionais adicionadas. Execute o terminal> netstat -rn
quando a VPN estiver conectada (antes de ativar este script) para ver as rotas adicionadas à VPN.
Esse script também gera notificações no estilo de rosnado no Notification Center :)
Encontrei alguns problemas com a resposta de Mark E. Haase , pois minha VPN da Cisco modifica o gateway existente de uma rota para (en0 específica da interface) e adiciona o gateway da VPN como uma rota, exigindo a exclusão de dois gateways padrão e a adição de volta. o gateway padrão originalUCSc
UGScI
UCS
UGSc
Graças a Deus pelo StackExchange / google, este é o meu primeiro AppleScript e eu não seria capaz de montá-lo sem algumas horas de pesquisa no Google.
Sugestões / correções / otimizações são bem-vindas!
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
salvar como um aplicativo:
clique com o botão direito do mouse em> mostrar o conteúdo do pacote, adicione o seguinte a info.plist (isso oculta o ícone do aplicativo da dock, exigindo o uso do Activity Monitor ou do terminal> pkill -f 'Split Tunnel'
para sair do aplicativo, omita se você QUER um ícone de dock:
<key>LSBackgroundOnly</key>
<string>1</string>
crie um novo routeNOPASSWD
arquivo de uma linha (sem extensão) usando o código a seguir EXATAMENTE (isso pode impedir o acesso ao sudo se for feito incorretamente, procure visudo
mais informações no google - isso permite que os comandos sudo no AppleScript sejam executados SEM um prompt de senha, omita se você QUER um prompt de senha quando a tabela de roteamento precisar ser alterada):
%admin ALL = (ALL) NOPASSWD: /sbin/route
copie este arquivo para /etc/sudoers.d
execute os seguintes comandos no terminal (o segundo comando solicitará a senha - isso permite que os sudo route
comandos no AppleScript sejam executados SEM solicitar a senha, omita se um prompt de senha for desejado quando o script estiver alterando a tabela de roteamento)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
finalmente, adicione o aplicativo a Prefs do sistema> Usuários e grupos> itens de login