Como o WireGuard fará parte do futuro kernel Linux 5.6, decidi ver a melhor forma de integrar essa VPN ao meu roteador / ponto de acesso LTE no Raspberry Pi .Equipamento
- Raspberry Pi 3 com módulo LTE e endereço IP público. Haverá um servidor VPN (doravante denominado edgewalker )
- Um telefone Android que deve usar uma VPN para todas as comunicações
- Laptop Linux que deve usar VPN somente dentro da rede
Cada dispositivo que se conecta à VPN deve poder se conectar a todos os outros dispositivos. Por exemplo, um telefone deve conseguir se conectar a um servidor Web em um laptop se ambos os dispositivos fizerem parte de uma VPN. Se a configuração for bem simples, você pode pensar em se conectar a uma VPN e a uma área de trabalho (via Ethernet).Dado que as conexões com e sem fio estão se tornando cada vez menos seguras ao longo do tempo ( ataques direcionados , ataque KRACK a hackers WPA2 e ataque Dragonblood contra WPA3 ), considero seriamente a possibilidade de usar o WireGuard para todos os meus dispositivos, independentemente do ambiente em que eles trabalham.Instalação de software
O WireGuard fornece pacotes pré-compilados para a maioria das distribuições Linux, Windows e macOS. Os aplicativos Android e iOS são entregues através de diretórios de aplicativos.Eu tenho o Fedora Linux 31 mais recente e, antes de instalar, fiquei com preguiça de ler o manual. Acabei de encontrar os pacotes wireguard-tools
, instalei-os e não consegui entender por que nada estava funcionando. Pesquisas posteriores mostraram que eu não tinha um pacote instalado wireguard-dkms
(com um driver de rede) e não estava no repositório da minha distribuição.Se eu ler as instruções, seguiria as etapas corretas:$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools
Eu tenho o kit de distribuição Raspbian Buster instalado no Raspberry Pi, já existe um pacote wireguard
, instale-o:$ sudo apt install wireguard
No telefone Android, instalei o aplicativo VPN WireGuard a partir do diretório oficial da Google App Store.Instalação chave
Para autenticação de host, o Wireguard usa um esquema simples de chave pública / privada para autenticar hosts VPN. Você pode criar facilmente chaves de VPN com o seguinte comando:$ wg genkey | tee wg-laptop-private.key | wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key | wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key | wg pubkey > wg-mobile-public.key
Isso nos dá três pares de chaves (seis arquivos). Nós não iremos nos referir aos arquivos nas configurações, mas copiaremos o conteúdo aqui: cada chave é uma linha na base64.Criando um arquivo de configuração para o servidor VPN (Raspberry Pi)
A configuração é bem simples, eu criei o seguinte arquivo /etc/wireguard/wg0.conf
:[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE
[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32
[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32
Alguns comentários:- Nos locais apropriados, você precisa inserir linhas de arquivos com chaves
- Minha VPN está usando um intervalo interno
10.200.200.0/24
- Para comandos
PostUp
/ PostDown
eu tenho uma interface de rede externa wwan0, você pode ter outra (por exemplo, eth0)
A rede VPN é facilmente levantada pelo seguinte comando:$ sudo wg-quick up wg0
Um pequeno detalhe: como servidor DNS usado dnsmasq
na ligação a uma interface de rede br0
, também adicionei dispositivos wg0
à lista de dispositivos permitidos. No dnsmasq, isso é feito adicionando uma nova linha com uma interface de rede ao arquivo de configuração /etc/dnsmasq.conf
, por exemplo:interface=br0
interface=wg0
Além disso, adicionei a regra iptable para permitir o tráfego na porta UDP de escuta (51280):$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT
Agora que tudo está funcionando, podemos definir o túnel da VPN para iniciar automaticamente:$ sudo systemctl enable wg-quick@wg0.service
Configuração do cliente no laptop
No laptop, crie um arquivo de configuração /etc/wireguard/wg0.conf
com as mesmas configurações:[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820
Notas:- Em vez de edgewalker, você precisa especificar o IP público ou o host do servidor VPN
- Ao definir
AllowedIPs
para 10.200.200.0/24
, usamos a VPN apenas para acessar a rede interna. O tráfego para todos os outros endereços / servidores IP continuará passando por canais abertos "normais". Um servidor DNS pré-configurado no laptop também será usado.
Para teste e início automático, usamos os mesmos comandos wg-quick
e systemd
:$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service
Configurando um cliente em um telefone Android
Para um telefone Android, crie um arquivo de configuração muito semelhante (vamos chamá-lo mobile.conf
):[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820
Diferentemente da configuração do laptop, o telefone deve usar nosso servidor VPN como servidor DNS (string DNS
) e também passar todo o tráfego pelo túnel VPN ( AllowedIPs = 0.0.0.0/0
).Em vez de copiar o arquivo para o seu dispositivo móvel, você pode convertê-lo em um código QR:$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf
O código QR será enviado para o console como ASCII. Você pode digitalizá-lo no aplicativo VPN Android e configurar automaticamente o túnel da VPN.Conclusão
Configurar o WireGuard é simplesmente mágico comparado ao OpenVPN.