-
Docker
-
Caso sua distribuição não utilize o Gnome, instale os seguintes pacotes:
sudo apt install gir1.2-vte-2.91 gir1.2-webkit2-4.1
-
Copie o arquivo
svpn
para algum local em disco (ou simplesmente clone este repositório). -
Crie o arquivo
~/.local/share/applications/vpn.desktop
com o seguinte conteúdo:🔴 Ajuste o campo
Exec
abaixo com o caminho do arquivo svpn e com o host correto da VPN[Desktop Entry] Type=Application Name=openfortivpn GenericName=vpn Icon=network-vpn StartupWMClass=svpn Categories=Settings Exec=/path/para/o/arquivo/svpn --host host_do_servidor_da_vpn.com.br
Depois de salvar o arquivo .desktop
, o lançador aparecerá automaticamente no menu do Gnome, na guia Atividades e no dash de aplicativos (busque por openfortivpn).
Basta adicionar aos favoritos para facilitar a localização.
E só! 🤓
Por que utilizar uma imagem Docker?
O suporte à autenticação com cookies via linha de comando só foi adicionado na versão 1.18.0 do openfortivpn, que ainda não está disponível nos repositórios das distribuições. Para evitar a cerimônia de build e instalação, optou-se por utilizar um container Docker.
Por que utilizar --network=host?
Para a VPN funcionar, o openfortivpn
cria uma interface ppp
e adiciona
rotas IP estáticas à tabela de roteamento do kernel. Por exemplo, ele pode
rotear todas as conexões com destino a 172.16.0.0/12 para a interface ppp0
.
Se não utilizássemos --network=host
, essas rotas só funcionariam dentro do
próprio container.
Por que o container precisa da capacidade NET_ADMIN
?
A capability NET_ADMIN
é um requisito do driver ppp
(é por esse motivo que o openfortivpn exige o sudo
pra rodar fora do container).
Por que preciso montar o /etc/resolv.conf dentro do container?
Além de criar uma interface ppp
e adicionar rotas IP, o openfortivpn
também precisa configurar o DNS para que o cliente possa acessar os domínios
da rede sob a VPN.
Como utilizar minha própria imagem?
Clone este repositório e construa a imagem:
docker build -t localhost/saml-vpn:latest .
No arquivo .desktop
de inicialização, ajuste o campo Exec
passando
o parâmetro --image=localhost/saml-vpn:latest
.
Como faço para executar um script antes e após a conexão ser estabelecida?
Como o pppd
está rodando dentro do container, os scripts em /etc/pppd
não serão executados no host. Uma alternativa é utilizar regras do udev
:
# /etc/udev/rules.d/99-meus-scripts-up-down.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="ppp0", RUN+="/bin/touch /var/log/openfortivpn.start"
ACTION=="remove", SUBSYSTEM=="net", KERNEL=="ppp0", RUN+="/bin/touch /var/log/openfortivpn.end"