Wireguard é uma VPN que foi recentemente adicionada ao Kernel oficial do Linux. É extremamente rápida, simples e com excelente criptografia, além de ser multi-plataforma.
Tem vários tutoriais por aí, mas talvez por ainda ser bem nova tive dificuldade de achar todos os passos necessários num só local.
Terminei agora a pouco a minha configuração usando meu novo router/access point baseado num Raspberry Pi 3B+ que comprei esses dias. Pastei umas boas horas, então vão aqui algumas dicas e links que me foram úteis
Instalação num Raspberry Pi
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138
# echo 'deb http://httpredir.debian.org/debian buster-backports main contrib non-free' | tee -a /etc/apt/sources.list.d/debian-backport.list
# apt update
# apt install wireguard
Configuração do servidor (Pi)
Crie o par de chaves
# umask 077
# mkdir -p /etc/wireguard/keys
# cd /etc/wireguard/keys
# wg genkey > privatekey
# wg pubkey < privatekey > publickey
Crie o arquivo de configuração
Vamos assumir que você queira usar a subnet 192.168.10.0/24 para a VPN. Crie a parte inicial da sua configuração no arquivo /etc/wireguard/wg0.conf
[Interface]
Address = 192.168.10.1/24
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT; iptables -t nat -I POSTROUTING -o eth1-j MASQUERADE;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth1-j MASQUERADE;
ListenPort = 443
PrivateKey = chave-privada-gerada-acima
O arquivo acima também assume que sua interface de rede interna é eth1
Configuração do cliente (Android)
No meu caso eu quero conectar via Android. Para isso precisamos gerar um arquivo de configuração para ele e depois atualizar o nosso servidor.
Par de chaves pro Android
wg genkey | (
read chave
echo "android-chave-privada: $chave"
echo "android-chave-publica: $(echo "$chave" | wg pubkey)"
)
android-chave-privada: IAI9CR7AxKNMrI3rrWdxQBPvkSaftVcvfyyUNmUH32k=
android-chave-publica: PgGwU4b9CdxJ20d/7QmCu1nwp7OtQAaPzH0w7q/Dl1U=
Arquivo de configuração Android
Pode ser criado em qualquer lugar. Uma vez gerado o QR Code (abaixo) você não precisa mais desse arquivo. Vamos chamar de android.conf
[Interface]
Address = 192.168.10.3/24
PrivateKey = IAI9CR7AxKNMrI3rrWdxQBPvkSaftVcvfyyUNmUH32k=
DNS = 192.168.10.1
[Peer]
PublicKey = tAJ7LYRVB4QbLA0lJvEXrVDoCENdxlfolqYGeJPmnCQ=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 200.200.200.200:2345
Explicando:
-
Interface é o que diz respeito ao Android Address é o IP que o Android vai receber
-
Private Key é a chave do Android gerada acima
-
DNS é o IP VPN do Raspberry Pi
Coisas a manter em mente:
- Seu servidor de DNS tem que estar configurado para responder queries fora da rede local
- Seu Pi tem que ter IP público ou ter a porta 2345 UDP exposta na Internet
Arquivo de configuração Pi
Agora podemos atualizar a configuração do Pi
[Interface]
Address = 192.168.10.1/24
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT; iptables -t nat -I POSTROUTING -o eth1-j MASQUERADE;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth1-j MASQUERADE;
ListenPort = 443
PrivateKey = chave-privada-gerada-acima
[Peer]
# Android
PublicKey = PgGwU4b9CdxJ20d/7QmCu1nwp7OtQAaPzH0w7q/Dl1U=
AllowedIPs = 192.168.10.3
Pronto. Vamos iniciar a interface no Pi:
# wg-quick up wg0
Instalando App no Android
Instale o cliente oficial via Google Play.
Feito isso gere o QR code à partir do arquivo android.conf criado acima:
$ qrencode -t utf8 < android.conf
Agora basta escanear o código e conectar na VPN.
Finalizando
Não vamos esquecer de configurar o wireguard para reiniciar caso o Pi reboote:
# systemctl enable wg-quick@wg0