Resposta editada
(Re) aprimorei quase a resposta aprimorada de todos os outros (@elmart, @ user26312, eu mesmo). As edições não devem ser necessárias no script:
#!/bin/bash
default_line=$(netstat -rn |grep default)
gateway=$(echo $default_line | awk '{print $2}')
interface=$(echo $default_line | awk '{print $6}')
echo $gateway
echo $interface
scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF
route delete default
route delete -ifscope $interface default
route add -ifscope $interface default $gateway
route add -net 0.0.0.0 -interface $interface
Faça com que o arquivo que você colocou seja executável e execute (após conectar-se à VPN) com o sudo. Antes que o script faça alterações, ele analisa sua rota padrão atual e, portanto, conhece seu gateway e interface atuais.
Resposta antiga
Não é uma solução completa, você deverá executar as seguintes ações de alto nível após cada configuração de conexão VPN:
- Teremos que definir a interface do túnel para
ppp0
- Refazer rotas padrão (porque 1. define implicitamente o gateway padrão errado, o túnel dividido ainda deve funcionar corretamente a seguir)
Crie um arquivo com o nome, scutil-forti
por exemplo
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
Refaça as rotas do gateway, então crie outro arquivo, routes-forti
com (observe as linhas com configurações específicas para sua rede):
sudo route delete default
sudo route delete -ifscope en0 default # This line depends on your interface
sudo route add -ifscope en0 default 192.168.2.252 # This depends on your normal local gateway.
sudo route add -net 0.0.0.0 -interface en0
agora execute,
$ cat scutil-forti |sudo scutil ; bash routes-forti
State:/Network/Service/forticlientsslvpn/IPv4
chave está lá para começar quando o túnel da VPN estiver em execução e será excluído quando o túnel da VPN for excluído. As rotas não são realmente diferentes do que deveriam ser.Reescrevi a solução da @ hbogert em um script único mais gerenciável:
Isso pressupõe que você esteja usando a interface en0 e o gateway padrão 192.168.1.1. Caso contrário, substitua aqueles pelos seus valores correspondentes. Se você não os conhece, digite
route get www.google.com
para obtê-los. Então:chmod u+x fix-vpn
).sudo fix-vpn
) logo após conectar-se ao vpn.Eu tentei e funciona. Como eu disse, isso é apenas um retrabalho de uma solução anterior. Acabei de postá-lo como uma resposta separada porque não tinha espaço suficiente em um comentário.
BTW, eu também pensei que isso poderia ser incluído em um
/etc/ppp/ip-up
script para que seja executado automaticamente ao conectar. Mas, por alguma razão, não funciona dessa maneira. Se alguém puder explicar / melhorar isso, por favor.fonte
Consegui usar uma versão mais antiga do Forticlient e confirmei que funciona!
Aqui está o link para ele na minha caixa de depósito:
https://www.dropbox.com/s/p43ssvp0gusmzeq/forticlientsslvpn_macosx_4.0.2297.dmg?dl=0
fonte
ATUALIZAÇÃO: o download e a instalação da versão mais recente e oficial 5.4.1 para Mac OS X corrigem todos os problemas no Mac OS X El Capitan.
Conforme descrito no fórum fortinet, deve-se baixar a versão mais recente (ainda não publicada) do FortiClient para corrigir os problemas no Mac OS X El Capitan:
https://www.dropbox.com/sh/cb0j4pxw1f8nq84/AABHzZW1bpx1VjzYAmiK00S9a?dl=0
Essa foi a solução mais fácil para mim.
fonte
Melhorando um pouco a resposta do @ elmart (eu acho).
Dessa forma, o script não precisa ser editado (e alterar as interfaces não deve ser um problema).
xargs
é usado para remover o espaço em branco.Também adicionei (embora não saiba se isso é uma melhoria):
No início do script, para lembrar as pessoas de usarem o sudo.
fonte
route get
comando para eliminar a dependência do DNS.$ netstat -rn
para obter o gateway e a interface.Peguei o script de hbogert e o envolvi no Applescript para mim e para outro funcionário, está disponível aqui: https://www.dropbox.com/s/lh0hsqdesk3i0n7/Execute-Post-VPN-Connection.app.zip?dl=0
Simplesmente conecte-se à VPN, execute o aplicativo e digite sua senha de administrador (necessária para o sudo). NOTA: DEVE SER SALVO EM / Aplicativos /
fonte
Resolvi o problema redefinindo as configurações de DNS para usar os servidores DNS do Google antes dos fornecidos pelo FortiClient. Infelizmente, isso deve ser feito após cada nova conexão.
Detalhes sobre isso podem ser encontrados aqui .
fonte
Na minha versão atual do OS X (Sierra 10.12.6) e FortiClient 5.6.1, parece que se os ServerAddresses tiverem mais de 2 endereços, a chamada "set" não persistirá em nada (se você "receber", nada terá sido) Atualizada). Para contornar isso, decidi manter apenas o primeiro endereço DNS do FortiClient e mesclar com o meu endereço DNS público (8.8.8.8).
Além disso, sugiro executar automaticamente o script bash no FortiClient connect: isso pode ser feito exportando o script de configuração do FortiClient e reimportando-o
Guia completo abaixo:
1 / Crie o seguinte script bash e armazene-o em algum lugar (no meu caso, ele estava dentro
~/bashscripts/update-forticlient-dns.sh
) e não se esqueça de substituí-lo<FIRST IP ADDRESS FOR FORTICLIENT DNS>
pelo resultadoscutil --dns | grep "nameserver\[0\]"
enquanto sua conexão FortiClient estiver ativa2 / Execute o FortiClient, vá em Preferências > Geral e clique no botão Backup , que exportará sua configuração do FortiClient para um arquivo
3 / Neste arquivo, localize e edite o nó / forticlient_configuration / vpn / sslvpn / connections / connection [name = "YOUR CONNECTION"] / on_connect / script / script e chame seu script dentro dele:
4 / Volte para o console FortiClient, clique no cadeado no canto inferior esquerdo, vá para Preferências > Geral e clique no botão Restaurar : localize seu arquivo de configuração atualizado e pronto , sua configuração de DNS será atualizada rapidamente sempre que você conectar-se à VPN.
fonte