Como obter trabalho forticlient no OSX El Capitan

10

O software de VPN forticlient é borked, ao usar o horizonte dividido, desde o OSX El Capitan. O problema é que as solicitações de DNS são enviadas na interface primária normal para o DNS do túnel VPN.

Como conseguimos que as solicitações de DNS sejam enviadas pela interface correta (por exemplo, túnel VPN)

    
por hbogert 13.10.2015 / 20:50

8 respostas

11

Resposta Editada

(Re) melhorou apenas sobre a resposta melhorada 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 o arquivo que você colocou, execute e execute (depois de conectar-se à VPN) com o sudo. Antes do script fazer qualquer alteração, ele verifica sua rota padrão atual e, portanto, conhece seu gateway e sua interface atuais.

Resposta antiga

Não é uma solução completa, você terá que fazer as seguintes duas coisas de alto nível após cada configuração de conexão VPN:

  1. Teremos que configurar a interface do túnel para ppp0
  2. Refazer rotas padrão (porque 1. define implicitamente o gateway padrão incorreto, o túnel dividido ainda deve funcionar corretamente daqui em diante)

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

Refazer rotas de gateway, portanto, crie outro arquivo, routes-forti , com (lembre-se das 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
    
por 13.10.2015 / 21:02
8

Eu refiz a solução do @hbogert em um script único mais gerenciável:

#!/bin/bash

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 en0 default
route add -ifscope en0 default 192.168.1.1
route add -net 0.0.0.0 -interface en0

Isso supondo que você esteja usando a interface en0 e o gateway padrão 192.168.1.1. Se não, substitua-os por seus valores correspondentes. Se você não os conhece, digite route get www.google.com para obtê-los. Então:

  • Coloque isso em um arquivo (por exemplo, 'fix-vpn') em algum lugar do caminho.
  • Conceder permissões de execução ( chmod u+x fix-vpn ).
  • Execute-o com sudo ( sudo fix-vpn ) logo após conectar-se à vpn.

Eu tentei e funciona. Como eu disse, isso é apenas uma reformulação de uma solução anterior. Eu acabei de postar isso como uma resposta separada, porque eu não tinha espaço suficiente em um comentário.

BTW, também achei que isso poderia ser incluído em um script /etc/ppp/ip-up para que seja executado automaticamente ao se conectar. Mas por algum motivo, não funciona assim. Se alguém puder explicar / melhorar isso, por favor, faça.

    
por 15.10.2015 / 10:37
4

Consegui usar uma versão anterior do Forticlient e confirmei que funciona!

Aqui está o link para ele na minha caixa de depósito:

link

    
por 15.10.2015 / 22:45
1

UPDATE: Baixar e instalar a versão mais recente e oficial 5.4.1 para Mac OS X corrige todos os problemas no Mac OS X El Capitan.

Conforme descrito no fórum do fortinet , é necessário fazer o download do mais novo (ainda que não publicado) versão do FortiClient para corrigir os problemas no Mac OS X El Capitan:

link

Essa foi a solução mais fácil para mim.

    
por 28.06.2016 / 16:46
0

Melhorando a resposta do @ elmart um pouco (eu acho).

#!/bin/bash
scutil <<EOF
d.init
get State:/Network/Service/forticlientsslvpn/IPv4
d.add InterfaceName ppp0
set State:/Network/Service/forticlientsslvpn/IPv4
EOF
ROUTE_OUT=$(route get www.google.com)
GATEWAY=$(echo "${ROUTE_OUT}"|grep gateway|cut -d':' -f2|xargs)
INTERFACE=$(echo "${ROUTE_OUT}"|grep interface|cut -d':' -f2|xargs)

echo "Fixing $INTERFACE with gateway $GATEWAY"

route delete default
route delete -ifscope $INTEFACE default
route add -ifscope $INTERFACE default $GATEWAY
route add -net 0.0.0.0 -interface $INTERFACE

Dessa forma, o script não precisa ser editado (e a mudança de interfaces não deve ser um problema). xargs é usado para remover os espaços em branco.

Eu também adicionei (embora não saiba se isso é uma melhoria):

rootcheck () {
  if [ $(id -u) != "0" ]
    then
      echo "We need sudo permissions to run this script"
      sudo "$0" "$@"  # Modified as suggested below.
      exit $?
  fi
}

rootcheck "$@"

Até o início do script para lembrar as pessoas de usar o sudo.

    
por 27.10.2015 / 00:16
0

Eu peguei o script do hbogert e o empacotei no Applescript para mim e para outro funcionário, está disponível aqui: link

Basta conectar-se à VPN, depois executar o aplicativo e digitar sua senha de administrador (necessária para o sudo). NOTA: DEVE SER SALVO EM / Applications /

    
por 10.02.2016 / 19:01
0

Eu resolvi o problema para mim, reconfigurando as configurações de DNS para usar os servidores DNS do Google antes dos fornecidos pelo FortiClient. Infelizmente, isso tem que ser feito após cada reconexão.

#!/bin/bash
scutil <<EOF
d.init
d.add ServerAddresses 8.8.8.8 8.8.4.4 <IP ADDRESSES FOR DNS FROM FORTICLIENT>
set State:/Network/Service/forticlientsslvpn/DNS
quit
EOF

Detalhes sobre isso podem ser encontrados aqui .

    
por 16.05.2016 / 12:43
0

Na minha versão atual do OS X (Sierra 10.12.6) & FortiClient 5.6.1 parece que se ServerAddresses tem mais de 2 endereços, então a chamada "set" não persiste nada (se você "get", nada será atualizado). Para solucionar isso, decidi manter apenas o primeiro endereço DNS do FortiClient e mesclá-lo com o meu endereço DNS público (8.8.8.8).

Além disso, sugiro que execute automaticamente o script bash no FortiClient connect: isso pode ser feito exportando o script de configuração do FortiClient e importando-o novamente

Guia completo abaixo:

1 / Crie o seguinte script bash e armazene-o em algum lugar (no meu caso, foi em ~/bashscripts/update-forticlient-dns.sh ) e não se esqueça de substituir o <FIRST IP ADDRESS FOR FORTICLIENT DNS> pelo resultado de scutil --dns | grep "nameserver\[0\]" enquanto sua conexão FortiClient estiver ativa

#!/bin/bash

ROOT_PASSWORD=$1

# Uncomment this if you want to log everything happening during this script execution into a dedicated log file
# exec >/tmp/forticlient-log 2>&1

# Ensuring we did a sudo correctly once
# Because we cannot both use a pipe and an stdin redirection at the same time
# (or at least, my bash knowledge is not wide enough for that :-))
echo "$ROOT_PASSWORD" | sudo -S ls /dev/null
sudo scutil <<EOF
get State:/Network/Service/forticlientsslvpn/DNS
d.add ServerAddresses 8.8.8.8 <FIRST IP ADDRESS FOR FORTICLIENT DNS>
set State:/Network/Service/forticlientsslvpn/DNS
quit
EOF

2 / Execute o FortiClient, depois vá para Preferências > Geral e clique no botão Backup que exportará sua configuração do FortiClient para um arquivo

3 / Neste arquivo, localize & edite o nó / config forexlient_configuration / vpn / sslvpn / connections / connection [name="YOUR CONNECTION"] / on_connect / script / script e chame seu script dentro dele:

<on_connect>
   <script>
      <os>mac</os>
      <script>/Users/fcamblor/bashscripts/update-forticlient-dns.sh "your_secret_root_password_here"</script>
    </script>
</on_connect>

4 / Volte para o console do FortiClient, clique no cadeado no canto inferior esquerdo e vá para Preferências > Geral e clique no botão Restaurar : localize o arquivo de configuração atualizado e pronto, sua configuração de DNS será atualizada imediatamente toda vez que você se conectar à VPN.

    
por 15.05.2018 / 12:52