Preciso me conectar via VPN pelo FortiClient para fazer meu trabalho e acessar alguns recursos com seguranca. Quando comecei a trabalhar para minha empresa em marco de 2021, me deram um M1 MacBookPro. O M1 MacBookPro e diferente dos outros porque vem com uma nova arquitetura de CPU. Anteriormente, a Apple usava uma CPU baseada em Intel, mas agora decidiu rodar o macOS com uma CPU baseada em ARM, que a Apple chamou de M1 por enquanto.

Muitos softwares nao sao compativeis com ARM. As vezes tenho problemas como "Este componente nao e compativel com sua CPU."

Quando me conectei a VPN via FortiClient v6.4.3.1325, parecia conectado, mas minha velocidade de internet ficou muito lenta. Normalmente, tenho 100MB/seg de velocidade de internet. Perguntei a meus colegas se "estao tendo problemas com a VPN e/ou velocidade da VPN?" e eles disseram "NAO!" Eles estao usando um MacBookPro um pouco mais antigo que o meu, com CPU baseada em Intel, e achei que fosse uma situacao normal porque as versoes baseadas em Intel estao ok e estaveis.

Comecei a depurar para encontrar a causa raiz e verifiquei a tabela de rotas antes de conectar a VPN.

➜  ~ netstat -rn
Routing tables

Internet: Destination Gateway Flags Netif Expire default 192.168.31.1 UGScg en0 127 127.0.0.1 UCS lo0 127.0.0.1 127.0.0.1 UH lo0 169.254 link#14 UCS en0 ! 192.168.31 link#14 UCS en0 ! 192.168.31.1/32 link#14 UCS en0 ! 192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1189 192.168.31.147/32 link#14 UCS en0 ! 192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0 192.168.31.171 b8:bc:5b:6:28:18 UHLWI en0 1165 192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 ! 224.0.0/4 link#14 UmCS en0 ! 224.0.0.251 1:0:5e:0:0:fb UHmLWI en0 239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0 255.255.255.255/32 link#14 UCS en0 !

Minha tabela de rotas parece ok. 192.168.31.1 e meu roteador wireless e a rota padrao esta configurada para ele. Esta ok.

Depois disso, conectei a VPN via FortiClient e verifiquei novamente minha tabela de rotas. 10.212.134.152 e meu endereco IP local atribuido pelo FortiClient.

➜  ~ netstat -rn
Routing tables

Internet: Destination Gateway Flags Netif Expire default link#19 UCSg ppp0 default 192.168.31.1 UGScIg en0 8.8.8.8 link#19 UHWIig ppp0 13.224.58.179 link#19 UHWIig ppp0 31.XXX.XX.XX/32 192.168.31.1 UGSc en0 34.XXX.XX.XXX link#19 UHWIig ppp0 34.XXX.XXX.xxx link#19 UHWIig ppp0 35.XXX.XXX.XX link#19 UHWIig ppp0 35.XXX.XXX.XXX link#19 UHWIig ppp0 80.80.80.80 link#19 UHW3Ig ppp0 3597 127 127.0.0.1 UCS lo0 127.0.0.1 127.0.0.1 UH lo0 169.254 link#14 UCS en0 ! 169.254.38.179 10.212.134.152 UH ppp0 192.168.31 link#14 UCS en0 ! 192.168.31.1/32 link#14 UCS en0 ! 192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1181 192.168.31.147/32 link#14 UCS en0 ! 192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0 192.168.31.171 b8:bc:5b:6:28:18 UHLWIi en0 1139 192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 ! 224.0.0/4 link#19 UmCS ppp0 224.0.0/4 link#14 UmCSI en0 ! 224.0.0.251 link#19 UHmW3I ppp0 3599 239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0 239.255.255.250 link#19 UHmW3I ppp0 3599 255.255.255.255/32 link#19 UCS ppp0 255.255.255.255/32 link#14 UCSI en0 !

Nosso servico VPN nao usa split-tunneling e link#19 OU 10.212.134.152 deve ser o proximo salto para a rota padrao junto com meu roteador wireless.

Eu excluo minha rota padrao!

Sim, decidi manipular minha tabela de rotas manualmente.

➜  ~ sudo route delete default
Password:
delete net default

Agora, o proximo salto deve ser o endereco IP local do meu FortiClient. E 10.212.134.152 no meu caso. Este endereco IP local e dinamico e muda a cada conexao, pois o DHCP atribui este endereco IP.

Agora, como minha tabela de rotas se parece? A rota padrao nao deveria estar la...

➜  ~ netstat -rn
Routing tables

Internet: Destination Gateway Flags Netif Expire default 192.168.31.1 UGScIg en0 31.XXX.XX.XX/32 192.168.31.1 UGSc en0 127 127.0.0.1 UCS lo0 127.0.0.1 127.0.0.1 UH lo0 169.254 link#14 UCS en0 ! 169.254.38.179 10.212.134.152 UH ppp0 192.168.31 link#14 UCS en0 ! 192.168.31.1/32 link#14 UCS en0 ! 192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1178 192.168.31.147/32 link#14 UCS en0 ! 192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0 192.168.31.171 b8:bc:5b:6:28:18 UHLWIi en0 586 192.168.31.222 c:2c:54:e4:67:81 UHLWI en0 1156 192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 ! 224.0.0/4 link#19 UmCS ppp0 224.0.0/4 link#14 UmCSI en0 ! 224.0.0.251 link#19 UHmW3I ppp0 3589 239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0 239.255.255.250 link#19 UHmW3I ppp0 3588 255.255.255.255/32 link#19 UCS ppp0 255.255.255.255/32 link#14 UCSI en0 !

link#19 desapareceu da rota padrao. Otimo! E agora, nao consigo acessar a internet. Como rota padrao, meu roteador wireless ainda esta na tabela de rotas, mas o FortiClient o usa para manter-se conectado a VPN. Sim, ainda estou conectado a internet, mas nao tenho um proximo salto.

➜  ~ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
ping: sendto: No route to host
ping: sendto: No route to host
Request timeout for icmp_seq 0
ping: sendto: No route to host
Request timeout for icmp_seq 1
ping: sendto: No route to host
Request timeout for icmp_seq 2

— 8.8.8.8 ping statistics — 4 packets transmitted, 0 packets received, 100.0% packet loss

Vamos adicionar uma nova rota padrao...

➜  ~ sudo route add default 10.212.134.152
add net default: gateway 10.212.134.152

Agora, consigo pingar 8.8.8.8 apos adicionar uma nova rota padrao.

➜  ~ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=114 time=99.007 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=98.277 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=103.634 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=104.365 ms

— 8.8.8.8 ping statistics — 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 98.277/101.321/104.365/2.704 ms

Verificacao cruzada

Verifiquei a tabela de rotas pela ultima vez para ver qual e a diferenca apos excluir e adicionar a rota padrao.

➜  ~ netstat -rn
Routing tables

Internet: Destination Gateway Flags Netif Expire default 10.212.134.152 UGScg ppp0 default 192.168.31.1 UGScIg en0 31.145.77.18/32 192.168.31.1 UGSc en0 127 127.0.0.1 UCS lo0 127.0.0.1 127.0.0.1 UH lo0 169.254 link#14 UCS en0 ! 169.254.38.179 10.212.134.152 UH ppp0 192.168.31 link#14 UCS en0 ! 192.168.31.1/32 link#14 UCS en0 ! 192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1179 192.168.31.147/32 link#14 UCS en0 ! 192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0 192.168.31.171 b8:bc:5b:6:28:18 UHLWI en0 1146 192.168.31.222 c:2c:54:e4:67:81 UHLWI en0 1163 192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 ! 224.0.0/4 link#19 UmCS ppp0 224.0.0/4 link#14 UmCSI en0 ! 224.0.0.251 link#19 UHmW3I ppp0 3582 239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0 239.255.255.250 link#19 UHmW3I ppp0 3557 255.255.255.255/32 link#19 UCS ppp0 255.255.255.255/32 link#14 UCSI en0 !

Agora, tudo esta rodando perfeitamente. Minha conexao VPN esta estavel e rapida!

Bonus

Preciso excluir e adicionar uma nova rota padrao quando preciso conectar a VPN e todos os dias preciso conectar. Nao quero excluir e adicionar uma nova rota manualmente e escrevi um pequeno script bash para esta rotina.

Voce pode salvar o script no caminho /usr/local/bin/ com sudo vim. Depois disso, nao esqueca de adicionar permissoes chmod ao script.

#!/bin/bash

FortiIP=$(netstat -rn | grep “10.212.134” | awk ‘{print $2}’)

sudo route delete default sudo route add default $FortiIP

Se voce leu desde o inicio, devo dizer obrigado! : )