Configurando uma VPN com Wireguard

Tabela de Conteúdo

Comparado com OpenVPN ou IPSec, o Wireguard é bem mais simples de configurar: sem certificados, sem PKI, só um par de chaves por peer.

Instalando

Na maioria das distribuições recentes o wireguard-tools já está nos repositórios:

$ sudo apt install wireguard

Gerando as chaves

Cada peer (servidor e cliente) tem seu próprio par de chaves:

$ wg genkey | tee privatekey | wg pubkey > publickey

Roda esse comando uma vez no servidor e uma vez em cada cliente.

Configurando o servidor

Cria o arquivo /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <chave_privada_do_servidor>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <chave_publica_do_cliente>
AllowedIPs = 10.0.0.2/32

Troca eth0 pela interface de saída pra internet do servidor.

Habilita o encaminhamento de pacotes:

$ sudo sysctl -w net.ipv4.ip_forward=1

Pra manter depois de um reboot, adiciona net.ipv4.ip_forward = 1 em /etc/sysctl.conf.

Configurando o cliente

No cliente, /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <chave_privada_do_cliente>
Address = 10.0.0.2/24

[Peer]
PublicKey = <chave_publica_do_servidor>
Endpoint = ip.do.servidor:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0 manda todo o tráfego do cliente pela VPN. Se for só pra acessar a rede interna do servidor, troca pelo range dessa rede.

Subindo a VPN

Em ambos os lados:

$ sudo wg-quick up wg0

Pra deixar ativo depois de um reboot:

$ sudo systemctl enable wg-quick@wg0

Conferindo o status

$ sudo wg show

Mostra os peers conectados, o handshake mais recente e o tráfego de cada um.

Simples assim :)