VPN (Virtual Private Network ou Rede Virtual Privada) é um termo técnico que ganhou muita popularidade nos últimos anos principalmente devido a ascensão do trabalho remoto, permitindo que funcionários pudessem trabalhar de outras localidades utilizando os recursos e políticas de segurança de suas empresas, e também devido às políticas e leis que regem o mundo, neste caso, usando uma VPN para driblar algum bloqueio ou acessar algum serviço proibido em determinado país.
Neste post resolvi escrever sobre a WireGuard, uma solução de VPN desenvolvida pelo pesquisador de segurança e desenvolvedor de software Jason A. Donenfeld e lançada em 2016, com o objetivo de ser simples e eficiente, como as baseadas em IPSec. A solução rapidamente ganhou destaque no mundo da tecnologia por ser rápida, segura e muito simples quando comparada a outras bastante populares como a VPN-SSL, OpenVPN e até mesmo a L2TP/IPSec (confira a tabela comparativa entre as soluções no final deste post). A WireGuard, que opera totalmente em cima do protocolo UDP, foi inicialmente lançada para o Linux, tornando-se posteriormente compatível com várias plataformas, incluindo Windows, macOS, iOS e Android. Em 2020, com sua inclusão no Kernel Linux 5.6, a WireGuard solidificou ainda mais sua aceitação e popularização.
Abaixo, vamos configurar uma VPN WireGuard utilizando um outro equipamento conhecido por ser robusto, simples e muito leve, o Mikrotik Routerboard.
Pré-requisitos para execução deste tutorial: conhecimento geral em redes de computadores, compreensão do conceito de LAN / WAN / VPN, conhecimento dos protocolos TCP/IP e suas portas, compreensão do conceito de firewall e compreensão de chaves de criptografia.
Ambiente de rede
O ambiente utilizado neste laboratório está resumido no diagrama abaixo, que também pode ser utilizado para compreender melhor o funcionamento da VPN e como ela pode ser aplicada:
NAT/DMZ: Para o correto funcionamento deste ambiente é preciso direcionar a porta utilizada na VPN para o Mikrotik no modem/router da operadora ou, caso seja o seu caso, no Firewall principal da rede. Esta configuração não será detalhada neste tutorial pois é bastante variável, de acordo com o seu link de Internet e ambiente WAN.
Mikrotik + WireGuard
O Mikrotik utilizado neste ambiente usa o Router OS na versão 7.16. Para sua configuração, utilizamos o Winbox versão 3.41. Estando o Mikrotik devidamente conectado à rede WAN (Internet), à rede LAN (local) e com o acesso realizado, proceda com as seguintes configurações:
- Configuração da (interface) WireGuard
Interfaces / New / Wireguard
Name: wireguard1
Listen Port: 13231 (ou qualquer outra desejada)
Outras configs: default
Apply e Ok.
- Atribuição de IP para a WireGuard
IP / Addresses
New Address
Address: 172.16.0.1/24 (ou qualquer outro desejado)
Interface: wireguard1
Comment: Wireguard VPN IP Address
- Regras de Firewall para liberação e encaminhamento do tráfego
IP / Firewall
Add Rule 0 (allow WireGuard)
Chain: input
Protocol: 17 (UDP)
Dst Port: 13231
Action: accept
Add Rule 1 (allow WireGuard traffic)
Chain: input
Src Address: 172.16.0.1/24
Action: accept
Sobre as políticas de acesso à rede (ACL): as regras de firewall acima são necessárias para o correto funcionamento da VPN, mas, as regras abaixo, estão relacionadas com as políticas de acesso da rede, ou seja, elas devem estar de acordo com a sua real necessidade. Note que no diagrama, esta configuração permite que a VPN acesse somente parte da LAN (VLAN1) já que a outra parte da rede, em vermelho, está isolada (VLAN2). Para que este acesso (VLAN2) fosse possível, outras configurações de firewall seriam necessárias.
Add Rule 2 (allow forward WireGuard to LAN)
Chain: forward
Src Address: 172.16.0.0/24
Dst Address: 192.168.0.0/24
Action: accept
Add Rule 3 (allow forward LAN to WireGuard)
Chain: forward
Src Address: 192.168.0.0/24
Dst Address: 172.16.0.0/24
Action: accept
IP / Firewall / NAT
Add Rule 0 (WireGuard NAT / Masquerade)
Chain: srcnat
Src Address: 172.16.0.0/24
Action: masquerade
- Adicionando os Peers (clientes) à WireGuard
WireGuard / Peers / Add
Para o cadastro de novos clientes você precisará criar um peer para cada um, inserindo as chaves criptográficas e um endereço IP correspondente. A geração destas chaves pode ser feita diretamente pelo aplicativo cliente ou pelo site Wireguardconfig.com, como foi o caso do exemplo utilizado neste post.
Você pode usar um random seed sugerido pela ferramenta, porém, é preciso se atentar as configurações de rede, como o Listen Port e o CIDR (IP Address) inserido na criação da WireGuard (passos acima), além de informar o(s) Client Allowed IPs (quais redes este cliente poderá acessar – caso tenha liberação no Firewall) e qual é o Endpoint de conexão, ou seja, o endereço público da WireGuard VPN, que pode ser um endereço IP ou um domínio (DNS).
Após a inserção das configurações no Wireguardconfig.com você deverá clicar em Generate Config. A ferramenta vai gerar as chaves para os clientes e, inclusive, uma configuração completa para o Servidor, mas que não utilizaremos, já que criamos a WireGuard em passos anteriores. Vamos utilizar a apenas as Chaves Públicas e Privadas dos Peers (clientes).
Inserindo um novo Peer
Volte ao Mikrotik e acesse a função WireGuard / Peers / Add.
Name: Peer1
Interface: wireguard1
Allowed Address: 172.16.0.10/32 (Aqui é necessário informar o endereço IP específico de cada cliente da VPN, por isso o /32)
Public Key: insira a chave pública gerada para o Client 1
Este processo, de cadastro de novos peers, deve ser repetido para cada cliente, variando o nome do Peer, a Chave Pública do Cliente e o Endereço IP que deverá ser atribuído a ele.
Confira este exemplo para melhor compreensão do conceito de chaves:Wireguardconfig 2 – Client Example
Confira abaixo a configuração de dois clientes (peers) no Mikrotik. Note que as Chaves Públicas de cada cliente, assim como seu endereço IP, são diferentes.
- Configurando os clientes (Peers)
Após instalar o WireGuard Client em seus clientes (Windows e Linux, por exemplo), utilize a configuração semelhante a exibida no exemplo acima, alterando a PublicKey do WireGuard Server, que pode ser copiada na configuração da WireGuard, como ilustrado acima, na imagem Mikrotik Router OS 1 – WireGuard Config.
O arquivo do cliente deve ficar semelhante a esse:
[Interface] Address = 172.16.0.2/24 ListenPort = 13321 PrivateKey = 4NUz+XPDQR+TmDVi/cV1nC0L5CpdBwAEi2fS1l5JHUc= [Peer] PublicKey = 2xMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= AllowedIPs = 172.16.0.0/24, 192.168.0.1/24 Endpoint = vpn.meudominio.com.br:13231
Comentários adicionais da configuração do cliente:
[Interface]
PrivateKey = A Chave Privada do Cliente, gerada pelo Wireguardconfig
Address = O endereço IP que o cliente deve utilizar para se conectar a Wireguard VPN e que foi informado na criação do peer, ex: 172.16.0.2/24
[Peer]
PublicKey = A Chave Pública do WireGuard Server, gerada na criação da interface no Mikrotik
AllowedIps = Redes que podem se conectar a Wireguard, ex: 172.16.0.0/24 e outras
Endpoint = Endereço WAN do Mikrotik + porta Wireguard, ex: 200.10.20.30:13231, ou, endereço DNS, ex: vpn.meudominio.com.br:13231
- Instalando o WireGuard no Linux Ubuntu
Para instalar o WireGuard no Linux Ubuntu, siga com os comandos abaixo:
Instala o WireGuard: sudo apt install wireguard
Edita o arquivo de configuração: sudo nano /etc/wireguard/wg0.conf
Adicione as configurações do cliente no arquivo, como por exemplo:
[Interface] Address = 172.16.0.3/24 ListenPort = 13321 PrivateKey = kKlhOihkB4eXk1ipUyiq7QvW7zrdTLw4iuOWdW7yckk= [Peer] PublicKey = 2xMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= AllowedIPs = 172.16.0.0/24, 192.168.0.1/24 Endpoint = vpn.meudominio.com.br:13231
Ajusta as permissões do arquivo de configuração: sudo chmod 600 /etc/wireguard/wg0.conf
Inicia a interface WireGuard: sudo wg-quick up wg0
*No Linux Ubuntu a conexão com a WireGuard é exibida na barra de tarefas, como pode ser observado na imagem abaixo.
Desliga a interface Wireguard: sudo wg-quick down wg0
Comandos adicionais do client Linux:
Habilita a inicialização automática da interface WireGuard: sudo systemctl enable wg-quick@wg0
Para gerar a chave privada do cliente: wg genkey | sudo tee /etc/wireguard/privatekey
Para gerar a chave pública, baseada na chave privada: sudo cat /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Para visualizar as chaves: cat /etc/wireguard/privatekey
ou cat /etc/wireguard/publickey
Comparativo da WireGuard com OpenVPN, VPN-SSL e L2TP/IPsec
Característica | WireGuard | OpenVPN | VPN-SSL | L2TP/IPsec |
---|---|---|---|---|
Criptografia | ChaCha20, Poly1305, Curve25519 | OpenSSL (AES, RSA, etc.) | SSL/TLS (AES, RSA) | IPsec (AES, 3DES) |
Segurança | Sólida e moderna | Sólida | Sólida (dependente do TLS) | Alta (complexa de configurar) |
Performance | Muito alta | Moderada | Moderada | Boa (maior latência que WireGuard) |
Latência | Baixa | Moderada | Moderada | Alta (especialmente em redes móveis) |
Exigência de recursos | Muito leve | Mais pesado (devido ao OpenSSL) | Moderado | Moderado |
Facilidade de Configuração e manutenção | Simples (menos variáveis) | Moderada | Moderada (depende do fornecedor) | ModeradaComplexa (devido ao IPSec) |
Multiplataforma | Sim | Sim | Sim | Sim |
Precisa de apoio com essa ou outras tecnologias?
Se você precisa implantar uma VPN, modernizar ou aumentar a segurança da sua infraestrutura de TI, entre em contato com a SoftSell, que há mais de 40 anos participa do crescimento de empresas dos mais variados portes e segmentos, através de soluções em TI que resolvem problemas e geram resultados concretos e duradouros, a custos acessíveis e rápido retorno sobre os investimentos para os clientes.
*Agradecimento especial ao Paulo Giosele pela ajuda na construção deste ambiente de testes.
*Com informações de: WireGuard – Site Oficial, WireGuard Config, Mikrotik Help – WireGuard.