Configurando o Wireguard VPN no OpenWrt com Luci
Neste artigo vamos configurar um “servidor” VPN com WireGuard no OpenWrt e conectar um computador com Arch Linux (não demonstrarei instalação de pacotes) como exemplo de configurações a ser fazer para se ter a VPN ponta-a-ponta.
O WireGuard é uma VPN extremamente simples, porém rápida e moderna, que utiliza criptografia de ponta-a-ponta para conectar os computadores através do túnel VPN. O WireGuard pretende ser tão fácil de configurar e implantar quanto o SSH. Uma conexão VPN é feita simplesmente trocando chaves públicas - exatamente como as chaves SSH - e todo o resto é tratado de forma transparente pelo WireGuard.
O OpenWrt é um sistema operacional Linux direcionado a dispositivos incorporados, como roteadores. Ao usar o OpenWrt você tem total controle sobre o seu roteador, assim como num computador com Linux, e pode instalar pacotes para autmentar as funcionalidades do mesmo.
Instalando o WireGuard no OpenWrt
Para instalar o WireGuard no OpenWrt vamos utilizar o pacote luci-i18n-wireguard-pt-br
que já instala todas a dependências necessárias, incluindo o próprio pacote wireguard-tools
e o luci-proto-wireguard
(necessário para a configuração gráfica na Luci).
Após feita a instalação reinicie o roteador para que as alterações de pacotes entrem em vigor pois quando se instala um pacote lucil-proto-*
ele só irá aparecer se reinicar (se alguém souber de outra forma me avise que eu modifico).
Criando as chaves de acesso
Para conectar os pares a o WireGuard utiliza chaves de acesso semelhante ao SSH. Você deve criar uma chave privada (que deve ser mantida em segurança) e, através de sua chave privada, deve ser gerada a chave pública que você deve compartilhar com o ponto onde você vai se conectar.
Para criar as chaves usaremos o comando wg
na em linha de comando (shell). Tanto faz você utilizar esses comandos na shell do OpenWrt ou do seu computador que já deve estar com o WireGuard instalado.
Criando as chaves para o servidor (adaptei os comandos da página oficial para facilitar o entendimento):
$ wg genkey | tee serv-privatekey.txt | wg pubkey > serv-publickey.txt
Neste momento, onde você rodou esse comando, vão ter dois arquivos .txt
, um com a chave privada e outro com a chave pública.
Repita o comando moficiado para gerar as chaves do cliente:
$ wg genkey | tee client-1-privatekey.txt | wg pubkey > client-1-publickey.txt
Para cada cliente a se conectar gere um par da chaves trocando o número 1
por outro ou (ou outra coisa) para você não sobrescrever as chaves anteriormente geradas.
Configurando a interface WireGuard no OpenWrt
Agora vamos configurar a interface para que o WireGuard seja executado. Vá em Redes >> Interfaces
(presumindo que você está com sua interface Luci já em português) e clique em Adicionar uma nova interface
, nomeie a interface, selecione o protocolo VPN WireGuard
e clique em Criar interface
.
Na tela a seguir, coloque a chave privada so servidor (serv-privatekey.txt) no campo correspondente, escolha uma porta para o serviço rodar (ao que parece, na documentação, por padrão o WireGuard utilizaria a porta 51820
) e atribua um endereço de IP com /24
para ser o endereço da interface a criada:
Vá na aba de Configurações do Firewall
e atribua uma zona de Firewall para a interface. Eu normalmente gosto de criar uma zona própria para cada interface de rede. No restante desse artigo vou levar em conta que você também o fez:
Na aba Pares
clique em Adicionar parceiro
:
Nesta tela vamos adiconar as informações do dispositivo que irá se conectar a este OpenWrt. Coloque uma Descrição
, insira a Chave Pública
do cliente gerada (client-1-publickey.txt), atribua um Endereço de IP Autorizado
e uma Porta no ponto final
(endereço e porta que vamos configurar no cliente mais tarde). A opção Manutenção da Conexão Persistente
, segundo a documentação oficial serve para que, se você estiver se conectando através de NAT ou Firewall, a conexão não se “perca” e desconecte. Ser for o seu caso, coloque essa opção em 25
. Se o dispositivo parceiro a ser conectado tiver um endereço de IP válido você poderá colocá-lo em Equipamento do ponto final
para aumentar a segurança (somente faça de for um IP válido e estático).
Adicone quantos parceiros você desejar. Sempre que for para autorizar um novo dispositivo a se conectar a este OpenWrt é nesta tela que você fará isso.
Dica: Sempre que adicionar novos parceiros deve-se reinicar a interface do WireGuard clicando no botão Reiniciar
na tela de interfaces.
Clique em Salvar
.
Aplique as mudanças clicando em Salvar & Aplicar
.
Configurações de Firewall
Feito isso já somos capazes de conectar na VPN pela rede local mas somente teremos acesso a própria rede da VPN e não acesso total as redes (rede lan, por exemplo).
Agora vamos liberar o acesso da rede VPN WireGuard para as outras redes. Vá em Rede >> Firewall
. Vamos configurar as Zonas de Firewall
para que permita Encaminhar
pacotes da rede da VPN
(saron
nas imagens) para a zona da rede lan
e vice versa, se assim você desejar. Habilite o encaminhamento para a zona da rede wan
se você desejar que a VPN seja rota padrão do cliente e que ele “navegue” pela internet (utiliza-se muito o termo “sair pela rede”) deste OpenWrt. Habilite o encaminhamento para todas as redes que você desejar. Ative também o Mascaramento
na zona da interface da VPN.
Clique em Salvar
.
Aplique as mudanças clicando em Salvar & Aplicar
.
Agora, quando nos conectarmos a VPN seremos capazes de “enxergar” as outras redes habilitadas no Encaminhar
bem como sair pela wan
do OpenWrt, se configurarmos como rota default nos clientes.
Na aba Regras de Tráfego
devemos liberar a entrada de conexões para o dispositivo na porta configurada na interface wan
.
Clique em Adicionar
para adicionar uma nova regra de tráfego. Na tela que surgir dê um Nome
para a regra, Selecione o Protocolo
UDP
(WireGuard roda no protocolo UDP!?), na Zona de origem
escolha a zona da interface wan
, na Zona de destino
escolha Dispositivo (entrada)
, em Porta de destino
coloque a porta configurada no servidor OpenWrt (mesma tela onde utilizamos a chave privada do servidor).
Clique em Salvar
.
Aplique as mudanças clicando em Salvar & Aplicar
.
Em Condição Geral >> Condição geral do WireGuard
você deverá ver uma tela como a abaixo onde aparece a chave pública do seu servidor e dos parceiros conectados. Nesta tela você sempre pode verificar quais os parceiros estão conectados no momento.
Configurando a conexão em um parceiro
Aqui utilizarei um computador com Arch Linux com a interface GNOME. Você pode aplicar os mesmos princípos para conectar vários tipos de dispositivos, inclusive outro OpenWrt (imagine que show fica!).
No site oficial do WireGuard tem as instruções e links para download e instalação dos aplicativos para vários sistemas operacionais.
Ao criar uma nova interface no NetworkManager do GNOME, ao criar uma nova conexão VPN eu tenho a tela de configurações da interface WireGuard. O conceitos dessas informações podem ser aplicados a todos os clientes de todas as plataformas.
Darei um Nome
a interface, em Addresses
colocarei o endereço de IP autorizado e em Listen Port
a porta (ambos configurados na configuração do parceiro no OpenWrt), em Private Key
colocaremos a chave privada do parceiro (client-1-privatekey.txt), em DNS servers
utilizaremos o endereço de IP configurado na interface do OpenWrt (192.168.3.1) para que o dispositivo possa ser capaz de usar a rede do OpenWrt como rota padrão e “saia” por ela para a internet.
Se no dispositivo que você está configurando tiver a opção de adicionar um parceiro, clique e vamos adicionar o OpenWrt como parceiro deste dispositivo. Em Publick Key
colocaremos a chave pública do OpenWrt (serv-publickey.txt), em Allowed IPs colocaremos 0.0.0.0/0
, em Endpoint
colocaremos o endereço de IP válido do servidor (interface wan
do OpenWrt) e a porta que configuramos e liberamos no Firewall na sintaxe IP:PORTA
.
Pronto. Já devemos ser capazes de conectar e navegar pela VPN. Você pode conferir a conexão na tela de Condição geral do WireGuard
.
Veja que agora o Parceiro celular-mariel
está conectado e as informações da conexão são mostradas.
O dispositivo conectado (celular-mariel) está com a rota padrão saindo pelo OpenWrt. Você pode tentar navegar na internet agora e verificar o IP que você está “saindo” através de sites como o meu ip. O IP mostrado aqui deverá ser o IP válido do OpenWrt.
Bônus: Alterando rota padrão no clientes
Se você não deseja que a VPN seja utilizada como rota padrão no cliente você deverá utilizar esses passos.
Para quê serve isso? Uma rota padrão é por onde você “navega na internet”. Se deixarmos a VPN como rota padrão TODAS as conexões com a internet serão feitas por dentro da VPN.
Ao alterar isso faremos com que somente as conexões a endereços de IP da nossa rede VPN ou das nossas redes internas do OpenWrt trafeguem por dentro da VPN e outras conexões (navegação normal na internet) ocorram pela conexão onde o dispositivo está conectado.
Você deve alterar a opção Allowed IPs que está em 0.0.0.0/0
e colocar as redes utilizadas no OpenWrt, separadas por vírgula, no meu caso 192.168.3.0/24, 192.168.1.0/24
.
Você também deverá configurar manualmente rota para as redes que não sejam a da conexão VPN (no meu caso ai, 192.168.1.0/24
). No NetworkManager
isso se faz na mesma janela de configuração da VPN na aba IPv4
.
No aplicativo cliente para celulares Android, na tela de edição da conexão, clique em ALL APPLICATIONS
, na tela que surgir clique na aba INCLUDE ONLY
e selecione somente os aplicativos que deverão sair pela VPN.
Consulte a documentação de seu dispositivo/sistema sobre como fazer isso.