4

FortiClient VPN no Linux sem depender do FortiClient

Quem trabalha com infraestrutura, redes ou ambientes corporativos provavelmente já precisou acessar uma VPN baseada em FortiGate.

No Windows, normalmente o caminho é instalar o FortiClient. No Linux, porém, dependendo da configuração utilizada pelo FortiGate, a situação pode ser bem menos simples, principalmente quando a autenticação envolve IKEv2 + PSK + EAP-MSCHAPv2.

Foi a partir desse problema que desenvolvi o projeto FortiClient VPN - DTIC.

🔗 Repositório:
https://github.com/Miranda3000-CPU/forti-ikev2-linux

O que o projeto faz?

A aplicação fornece uma interface gráfica para estabelecer uma conexão VPN IKEv2 com FortiGate utilizando:

  • IKEv2
  • PSK (Pre-Shared Key)
  • EAP-MSCHAPv2
  • strongSwan como motor VPN
  • Debian/Ubuntu
  • Interface gráfica para configuração e conexão
  • Diagnóstico de problemas de conexão

A principal ideia é não implementar novamente o protocolo VPN na aplicação.

O projeto utiliza o strongSwan como motor e fica responsável pela configuração, gerenciamento da conexão e apresentação das informações para o usuário.

Por que não utilizar simplesmente o IKEv2 nativo do Windows?

Existe uma particularidade importante.

Em determinadas configurações, o FortiGate pode utilizar PSK para autenticação do gateway + EAP-MSCHAPv2 para autenticação do usuário.

O cliente IKEv2 nativo do Windows possui limitações nesse cenário, enquanto o strongSwan consegue trabalhar com essa combinação.

Por isso o projeto utiliza o mesmo motor de VPN nos diferentes ambientes.

No Linux

No Debian e Ubuntu, o projeto pode ser instalado através de um pacote .deb.

A instalação pode ser feita diretamente pela release:

sudo apt install ./forticlient-vpn_<versão>_all.deb

Também é possível compilar o pacote a partir do código-fonte.

O projeto mantém a versão centralizada no arquivo VERSION, e o processo de build utiliza essa informação para manter os artefatos sincronizados.

Diagnóstico também é parte do projeto

Um dos problemas que mais me incomodou durante o desenvolvimento foi diferenciar:

"A VPN não conecta"

de:

"O pacote IKEv2 nem sequer está chegando ao FortiGate"

Essas situações são completamente diferentes.

Por isso o projeto possui mecanismos de diagnóstico e logs do aplicativo e do motor strongSwan.

No Windows, por exemplo, o diagnóstico pode gerar um arquivo .zip contendo informações relevantes para investigação da falha.

Também é possível analisar o charon.log, que é onde o strongSwan registra os eventos do IKE.

Alguns erros são particularmente úteis:

AUTHENTICATION_FAILED
NO_PROPOSAL_CHOSEN
ID_MISMATCH
TS_UNACCEPTABLE

Cada um aponta para uma classe diferente de problema.

UDP 500 e 4500

Outro ponto importante durante o troubleshooting é entender que IKEv2 utiliza UDP, principalmente:

UDP/500
UDP/4500

Por isso, testar simplesmente:

TCP/500
TCP/4500

não é uma forma adequada de verificar se uma VPN IKEv2 está funcionando.

Um timeout TCP nessas portas não significa necessariamente que o FortiGate está inacessível.

No Windows, por exemplo, o projeto utiliza pktmon para ajudar a verificar se existe tráfego IKE chegando e retornando:

pktmon start --capture --comp nics --pkt-size 0 --file-name C:\Temp\ike.etl

# realizar a conexão pela aplicação

pktmon stop
pktmon etl2txt C:\Temp\ike.etl -o C:\Temp\ike.txt

Select-String "500|4500" C:\Temp\ike.txt

Isso ajuda a separar problemas de aplicação, autenticação e criptografia de problemas de rota, firewall ou ACL.

E o Windows?

O projeto também possui código experimental para Windows.

Nesse ambiente, o strongSwan é utilizado como motor, enquanto a aplicação fornece a interface gráfica e o gerenciamento da conexão.

Existem algumas particularidades no Windows, principalmente relacionadas ao serviço IKEEXT, instalação do IP virtual e funcionamento do backend de rede do strongSwan.

Por esse motivo, o instalador Windows ainda é tratado como experimental e não é distribuído nas releases públicas.

Segurança das credenciais

As credenciais são armazenadas localmente.

No Windows, o projeto utiliza DPAPI.

No Linux, o arquivo de credenciais é protegido com permissão 0600.

As credenciais não são enviadas para nenhum serviço externo. Elas são utilizadas pelo próprio cliente para autenticação no gateway VPN configurado pelo usuário.

O projeto é um FortiClient?

Não.

Esse ponto é importante.

O objetivo não é reproduzir o FortiClient ou substituir todas as suas funcionalidades.

A proposta é fornecer um cliente focado em VPN IKEv2 para ambientes FortiGate, utilizando o strongSwan como implementação do protocolo.

O nome do projeto é uma referência ao problema que ele resolve e ao ambiente onde foi desenvolvido.

Por que publiquei?

Porque esse tipo de problema parece simples até você realmente precisar investigar uma conexão VPN que não estabelece.

Quando existem várias camadas envolvidas:

Aplicação
   ↓
strongSwan
   ↓
IKEv2
   ↓
UDP 500/4500
   ↓
Firewall / NAT / Rota
   ↓
FortiGate
   ↓
Autenticação EAP

um simples "VPN não conecta" não diz praticamente nada sobre onde está o problema.

A ideia do projeto é justamente tornar essa cadeia mais transparente e facilitar tanto a utilização quanto o diagnóstico.

Código aberto

O projeto está disponível no GitHub:

https://github.com/Miranda3000-CPU/forti-ikev2-linux

Quem utiliza Debian/Ubuntu e precisa trabalhar com FortiGate + IKEv2 pode testar a solução, analisar o código, abrir issues e contribuir com melhorias.

Feedbacks sobre compatibilidade com diferentes configurações de FortiGate, distribuições Linux e cenários de rede são especialmente bem-vindos.

Carregando publicação patrocinada...
1

Meus 2 cents,

Parabens pela iniciativa !

A configuracao de VPNs IPSEC, uma vez que voce pega o macete, eh tranquilo - o duro eh chegar neste ponto.

Teu projeto com certeza vai ajudar quem esta implementando este tipo de conectividade pela primeira vez, e eh bem util no mercado coorporativo (p.ex. telecom)

Repositorio devidamente starreado e forkeado, obrigado por compartilhar !

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS