Skip to main content

WireGuard entre Arch Linux e MikroTik

🔍 Visão Geral

Estabelecer uma VPN persistente, segura e performável entre:

  • lab.local: Notebook com Arch Linux (cliente)
  • CHR MikroTik: Roteador virtualizado em um data center (servidor)

🎯 Objetivo: permitir acesso remoto ao `lab.local` por meio da infraestrutura da CHR, sem necessidade de redirecionamento de portas no roteador residencial.

🌐 Diagrama de Topologia

[ Notebook lab.local ]  <====== VPN ======> [ CHR MikroTik no DC ]
      10.10.121.2           (WireGuard)         10.10.121.1       
      Arch Linux                                MikroTik CHR

🐧 Preparar o Arch Linux

Instalar o necessário

sudo pacman -S wireguard-tools networkmanager-openconnect openresolv --need --noconfirm

Gerar chaves no cliente (Arch Linux)

mkdir -p ~/lab-local/vpn
cd ~/lab-local/vpn

wg genkey | tee privatekey | wg pubkey > publickey

Resultado:

  • privatekey → chave privada do lab.local
  • publickey → deve ser copiada para a CHR

No MikroTik CHR (CLI ou WinBox Terminal):

/interface wireguard
add name=wg-lab listen-port=51820

/ip address
add address=10.10.121.1/24 interface=wg-lab
image.png

Lembre-se de copiar a sua chave pública e colar o lugar de "CHAVE_PUBLICA_DO_LAB", mantendo as aspas.

/interface wireguard peers
add interface=wg-lab public-key="CHAVE_PUBLICA_DO_LAB" allowed-address=10.10.121.2/32

image.png

No Arch Linux crie o arquivo de configuração da sua conexão do WireGuard

sudo nano /etc/wireguard/wg0.conf

Cole as configurações abaixo no arquivo:

[Interface]
PrivateKey = CHAVE_PRIVADA_LAB
Address = 10.10.121.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = CHAVE_PUBLICA_CHR
Endpoint = IP_PUBLICO_CHR:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Substitua `CHAVE_PRIVADA_LAB` e `CHAVE_PUBLICA_CHR` pelos valores reais gerados no passo anterior.

Agora que tudo está configurado é hora de subir o túnel e validar as configurações.

wg-quick up wg0

Para desativar use:

wg-quick down wg0

Quando você subir o túnel você não conseguirá navegar na internet. O motivo é que você precisará criar uma regra de NAT na CHR para o IP 10.10.121.2 ou para a rede 10.10.121.0/24

Um exemplo que funciona comigo no Mikrotik para esses casos.

/ip firewall nat
add chain=srcnat src-address=10.10.121.0/24 out-interface=ether1 action=masquerade

Com as regras de NAT no Mikrotik já temos navegação na internet.

👩‍💻 Configurações para o lab.local

No Mikrotik cria a rota para a rede interna do Laboratório/Rede Local

/ip route add dst-address=192.168.56.0/24 gateway=10.10.121.2

🌟 Resultado Esperado

  • O lab.local está acessível remotamente via IP da CHR (10.10.121.2)
  • O Mikrotik (CHR) consegue acessar a rede local 192.168.56.0/24
  • Conexões são seguras, criptografadas e persistentes
  • O lab.local pode acessar internet através do datacenter (opcional)

😎 Dicas

Se desejar importar a conexão criada pelo terminal use:

sudo nmcli connection import type wireguard file /etc/wireguard/wg0.conf

Para tornar a conexão da vpn permanente use:

sudo systemctl disable wg-quick@wg0

Para não sair para a internet modifique o arquivo /etc/wireguard/wg0.conf na linha AllowedIPs = 0.0.0.0/0 por AllowedIPs = 10.10.121.1/32.

[Interface]
PrivateKey = CHAVE_PRIVADA_LAB
Address = 10.10.121.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = CHAVE_PUBLICA_CHR
Endpoint = IP_PUBLICO_CHR:51820
AllowedIPs = 10.10.121.1/32
PersistentKeepalive = 25

Isso faz com que somente o tráfego destinado ao MikroTik (10.10.121.1) passe pelo túnel. Todo o resto (inclusive internet) segue pela rota local normal.