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 :)