WireGuard – The next generation VPN + Mikrotik

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:

Diagrama de Rede - WireGuard VPN com Mikrotik
Diagrama de Rede 1 – WireGuard VPN com Mikrotik

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.

Mikrotik Router OS - WireGuard Config
Mikrotik Router OS 1 – WireGuard Config
  • 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

Mikrotik Router OS - IP Adress List
Mikrotik Router OS 2 – IP Adress List
  • 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

Mikrotik Router OS - Firewall Rules 1
Mikrotik Router OS 3 – Firewall Rules (Allow Port and Traffic) – Permite porta 13231 e tráfego entre as redes (LAN e VPN)

IP / Firewall / NAT

Add Rule 0 (WireGuard NAT / Masquerade)
Chain: srcnat
Src Address: 172.16.0.0/24
Action: masquerade

Mikrotik Router OS - Firewall Rules
Mikrotik Router OS 4 – Firewall Rules (NAT / Masquerade) – Permite o direcionamento do tráfego da VPN
  • 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.

Wireguardconfig - Peers
Wireguardconfig 1 – Gerando chaves criptográficas para os peers

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 - Client ExampleWireguardconfig 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.

Mikrotik Router OS 5 - WireGuard Peers - Adicionando clientes VPN
Mikrotik Router OS 5 – WireGuard Peers – Adicionando clientes VPN
  • 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

Wireguard Client Windows
Wireguard Client Windows
  • 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
WireGuard Client Linux - Config
WireGuard Client Linux – Config

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

Wireguard Client Linux - Network Details
WireGuard Client Linux – Network Details

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.