Construir uma VPN Wireguard entre um smartphone Android e um roteador Mikrotik, em menos de 10 minutos? Sim! isso é possível. E no final, se você quiser ainda poderá usar seu laptop ou tantos outros dispositivos quanto desejar, sem pagar nada mais por isso para ter a mesma segurança que os serviços de VPN comerciais vendem por ai.
VPN é um termo que está na moda e muita “gente boa” está ganhando dinheiro vendendo a falsa expectativa de que este seja o suprassumo da tecnologia de segurança.
Meu aborrecimento com os serviços de venda de VPN é devido a ilusão de segurança total que eles tentam passar, fazendo o usuário leigo acreditar que ninguém está bisbilhotando suas conexões.
O que é uma VPN em termos simples?
Uma forma simples de entender a VPN é pensar em túneis da vida real (ou da ficção). Mas para ficar claro, esqueça a comparação dos túneis atravessando montanhas na cidade e pense naqueles túneis secretos que costumamos ver em filmes de enredo medieval que partem ou chegam em algum castelo. Desta forma observamos que há dois tipos de túneis:
O primeiro é aquele liga um cômodo do castelo até outro, como o quarto de um amante, ou de uma visita indesejada, uma saleta secreta etc. Quem conhece tal caminho pode se deslocar de um local a outro sem ser percebido ou incomodado.
Este túnel seria o equivalente ao da VPN que o seu empregador, banco, corretora etc pode fornecer para que você consiga navegar do seu computador de casa até o seu escritório, ou central de dados sem que sua navegação possa ser rastreada ou interceptada no meio do caminho.
O segundo tipo de túnel é aquele que sai de algum lugar dentro do castelo para alguma região fora dos seus muros, como por exemplo, em meio uma floresta, uma choupana, ou uma taverna etc. Geralmente ele é usado como rota de fuga para o caso de uma invasão, já que mesmo que o inimigo tenha invadido o castelo ele não o verá fugindo. Mas tem um grande “opa”: Quando você tiver atravessado o túnel e já fora do castelo, a sua segurança já dependerá de outras ferramentas e recursos, e não mais do túnel.
Este é tipo de túnel VPN é o que as empresas de VPN vendem. Você entra pelo túnel que eles fizeram até alguma outra região do mundo e quando você chega naquela ponta, você sai para Internet aberta e sua segurança já passa a depender de outras ferramentas e recursos que você tenha, e não mais do túnel que você acabou de sair.
Tanto no exemplo do castelo quanto na sua VPN. Se o atacante souber exatamente onde está a ponta de saída do seu túnel, ele poderá te armar uma emboscada por lá. Espera-se então que a partir daqui (após sair do túnel) você já tenha mitigado os problemas ou conseguido fugir das pessoas que estariam te importunando.
Isso é útil quando você não quer ficar a mercê do administrador de sua rede local, ou há políticas restritivas na sua localidade. Por exemplo, se você estiver navegando a partir de um wifi público na cafeteria, shopping ou outro qualquer que você não sabe como seus dados estão sendo manipulados, você pode usar uma VPN para sair em segurança desta rede WIFI até um ponto que você considere seguro (no caso das VPNs comerciais seria em outro país ou cidade). Desta forma o administrador desta rede não poderá ver os dados que você está acessando ou transferindo.
Em um outro caso, como ocorre na China, onde o governo mantém um sistema poderoso de firewall já há alguns anos e que impede os chineses acessem oficialmente diversos sites que podemos acessar aqui no ocidente. Mas eu disse impede apenas oficialmente porque, usando VPNs deste segundo tipo, os chineses conseguem burlar o firewall atravessando com segurança de seus equipamentos até algum outro país menos restritivo e então usar os sites bloqueados.
Se a sua necessidade por uma VPN se encaixar neste segundo caso (sair de uma rede sendo monitorada ou com restrições), então você pode assinar uma VPN seguramente que você não será enganado (desde que não deixe de tomar outras medidas de segurança).
Agora se você precisa de uma VPN para o primeiro caso, então seu empregador é quem deverá fornecer o serviço de conexão entre seu dispositivo e o datacenter da empresa.
Em ambos os casos a alternativa para não pagar a VPN seria você montar sua própria VPN com um servidor simples em algum lugar que você considere a rede segura. Este o propósito deste texto e o que veremos daqui em diante.
Cliente VPN
Para fins de ilustração, eu vou usar um smartphone Android como cliente da VPN, mas isso foi meramente por praticidade, no entanto, salvo a parte de configuração do app no aparelho que poderá ser ligeiramente diferente (embora com os mesmos termos e parâmetros), o procedimento a ser usado será identico em qualquer equipamento e sistema operacional suportado.
Não importa a qual rede seu equipamento (celular, tablet, laptop etc) esteja conectado (3G, 4G, 5G, wifi do vizinho, do aeroporto, do shopping etc), a partir do momento que iniciamos o cliente VPN, os dados que saírem dele serão criptografados até que chegue a ponta final da VPN.
Se a rede que nosso dispositivo se conectou estiver sendo monitorada, a única coisa que os bisbilhoteiros e hackers conseguirão ver será um fluxo de dados embaralhados entre a nossa máquina e um outro dispositivo qualquer que será onde temos o nosso servidor VPN, porém, sem a chave de criptografia que nós usamos, e sem acesso a tal equipamento, eles não conseguirão descobrir o que estamos fazendo na Internet.
Servidor VPN
Há inúmeras técnicas, ferramentas e protocolos para se montar uma VPN. O processo que vou mostrar aqui será usando um roteador Mikrotik que possui custo bastante acessível e é muito completo.
Os testes foram feitos em uma RB750Gr3 com RouterOS 7.3.1 e posteriormente atualizado para o 7.4, mas qualquer roteador da marca com ROS superior a versão 7.1 já oferece suporte confiável ao Wireguard que é o protocolo de VPN que usaremos aqui.
O protocolo Wireguard é o mais novo de todos os protocolos de VPN que temos disponível para uso. Embora as primeiras linhas de código tenham começado a surgir em 2016, podemos dizer que ele só se tornou estável de fato para uso em produção a partir de Março/2020 quando entrou oficialmente no ramos de produção do Kernel Linux e desde então, tem sido muito elogiado pela sua qualidade, simplicidade e performance.
Embora eu ainda não me sinta confortável em usá-lo na VPN da empresa onde trabalho, com mais quase 100 pessoas usando a VPN diariamente, para uso doméstico, pequenos grupos de pessoas ou mesmo uma conexão “matriz-filiais”, o Wireguard atende muito bem. Não porque lhe careça segurança, pelo contrário, ele tão ou mais robusto que os outros protocolos, mas a sua performance vem da falta de alguns recursos que para o meu caso empresarial, tornariam a vida dos usuários mais complexas.
Por fim, embora para mim seja óbvio, não me custa lembrar a quem passou distraído que a sua segurança na VPN deixa de existir exatamente aqui neste ponto.
É neste equipamento que você sai do túnel, seu dados são decifrados e enviados abertamente na Internet, como ocorre com as VPNs comerciais.
Sendo assim, este servidor Mikrotik deverá estar instalado em uma rede que eu considero segura. Como no meu caso esta rede segura é da operadora que presta serviço de conectividade à minha casa, eu posso usar meus dispositivos móveis em qualquer rede wifi não confiável que tudo será criptografado até em casa de onde eu poderei sair com a segurança que espero ter.
Mãos na massa, ou melhor no Mikrotik
Embora o texto e as explicações possam parecer longas, eu asseguro que este é um processo rápido.
Se o seu Mikrotik já estiver funcionando como roteador da sua rede, do login no roteador, até o seu primeiro teste de navegação pela VPN você não levará mais do que uns 5 a 10 minutos.
Conecte-se então ao seu dispositivo, abra um terminal e não perca mais tempo.
1 – Criar a Interface Wireguard e atribuir um endereço IP
Os dois comandos a seguir criarão uma interface virtual para o wireguard chamada de “MinhaVPN” e que escuta na porta 19876 da minha interface pública porém só responderá aos endereços IP dentro do range 192.168.90.0/24, já que o IP que escolhi (192.168.90.1) está nesta faixa. Atenção que esta faixa de endereços não deve ser a usada em sua rede.
/interface wireguard
add listen-port=19876 name=MinhaVPN
/ip address add address=192.168.90.1/24 interface=MinhaVPN
Quando criamos uma interface Wireguard, o Mikrotik se encarrega de criar junto um par de chaves para criptografia assimétrica. Estas chaves serão usadas para cifrar o tráfego que atravessa o túnel portanto você deve protegê-las e mantê-las em segredo, tal como faria com uma senha.
Para vê-las, você deverá dar um “print” na interface do Wireguard como abaixo:
/interface wireguard print
Flags: X - disabled; R - running
0 R name="MinhaVPN" mtu=1420 listen-port=19876
private-key="x2DmGeBRw7g3VQQH44Y6iuJDx/ViPJeTVbZGmdGC5Fn="
public-key="pRhfuOcntJHkXUbV4F3SDN/N8gGbKq4Z1y1WHDYpEt7="
Tome nota dos valores que foram gerados (listen-port, name, address, interface, private-key e public-key), principalmente da “public-key“, pois você precisará deles futuramente.
2 – Permitir que o smartphone acesse a sua VPN a partir de fora da rede
A regra abaixo, quando ativa no firewall IPv4 do Mikrotik permite que qualquer conexão destinada a porta UDP/19876 seja autorizada.
/ip firewall filter add action=accept chain=input comment="permite WireGuard" dst-port=19876 protocol=udp place-before=1
Ela é importante porque o seu aparelho chegará até aqui com o IP público da rede que ele estiver conectado então seria difícil definir o IP do equipamento sem que algo seja pré-combinado. Mas caso estivéssemos trabalhando com conexões de IP fixo, como para ligar a sede de uma empresa a sua filial, poderiamos seguramente adicionar um “src-address” nesta regra e restringir a origem da conexão.
Note ainda que se você alterou o valor de “listen-port” no primeiro passo, você deverá alterá-lo aqui também. Só a título de curiosidade a porta padrão é UDP/13231 mas eu a mudei para 19876 neste tutorial, um procedimento que, embora não seja obrigatório, pode ser adotado para reduzir as tentativas de ataque.
3 – Liberação dos serviços que o equipamento vai acessar (OPÇÃO 1)
O comando abaixo adiciona a interface do Wireguard na lista de interfaces “LAN” do seu roteador.
/interface list member add interface=MinhaVPN list=LAN
Isso é um recurso muito prático do Mikrotik que equipara as conexões via LAN e via VPN definindo rotas automáticas e permitindo que o tráfego entre elas flua sem necessidade de qualquer outra regra de firewall ou roteamento, no entanto isso libera tudo e caso você queira ser minucioso, você pode optar pela opção a seguir.
4 – Liberação dos serviços que o equipamento vai acessar (OPÇÃO 2)
Veja que você deve optar por usar a opção 1 ou a opção 2, nunca as duas, ou você vai começar a bagunçar o ambiente, então, se você quiser controlar individualmente cada serviço que seus clientes VPN poderão acessar, ao invés de adicionar a interface na lista “LAN”, você deverá criar tantas regras quantas necessárias para que eles acessem os serviços que você espera.
O comando a seguir basicamente adiciona uma regra que, tal como no caso anterior, libera o acesso a toda a rede. O correto aqui seria você ter regras para liberar o acesso ao DNS, servidores WEB, bancos de dados etc.
/ip firewall filter add action=accept chain=input comment="permite trafego WireGuard" src-address=192.168.90.0/24 place-before=1
Na dúvida comece com a primeira opção que libera tudo para o cliente conectado a VPN, depois que você “ver o brinquedo funcionando”, então vá adicionando regras que permitam o acesso a serviços específicos.
5 – Instalação do app Wireguard no smartphone
Ainda falta um passo para concluir a nossa configuração da VPN. Nós precisamos definir o “peer” que é justamente dizer quem está autorizado a se conectar a esta VPN, mas não podemos fazer isso antes de termos a chave pública do telefone, então nós vamos passar para configuração do Wireguard no smartphone e depois voltamos para concluir esta etapa.
Você pode obter o aplicativo diretamente na Google Play Store mas se você não se sente seguro em clicar em qualquer link que aponte para app de smartphone, mesmo que venha do site oficial da Wireguard então primeiramente meus parabéns, porque isso só mostra que de fato você está preocupado com a sua segurança e segundo, procure na Play Store pelo aplicativo “WireGuard” da empresa de mesmo nome e cujo logo seja o apresentado no início deste artigo.
Uma vez localizado, instale-o em seu aparelho para que possamos fazer a configuração.
6 – Configurando o WireGuard no Android
Após abrir o aplicativo já instalado em seu smartphone Android siga os passos abaixo:
- Clique no botão (+) no fim da página
- Escolha a opção “Criar do Zero“
- Defina um nome para esta conexão. Ex. CASA
- Em Chave Privada, clique no ícone das setinhas em forma de círculo para gerar o par de chaves
- Tome nota da chave pública que será usada para o último passo de configuração do Mikrotik e cuidado para não misturar as duas a do Mikrotik e a do seu telefone)
Dica: Há diversas maneiras de levar um texto do smartphone para o PC e vice-versa. Uma sugestão é escrever em um e-mail que possa ser lido em ambos os equipamentos, mas você pode usar o Telegram, enviando a chave para si mesmo, usar um aplicativo de anotações como Google Keep, Evernote, ou qualquer programa que permita escrever uma pequena frase e seja acessível de ambos os dispositivos como Tarefas, Calendário etc, só não esqueça de excluir depois. - Digite o endereço que o seu celular deve usar quando estiver trafegando pela VPN.
Lá no primeiro passo, nós definimos o IP 192.168.90.1/24 para o Mikrotik, então o nosso celular precisa ter um endereço IP dentro desta mesma faixa de rede. Por exemplo 192.168.90.2/24.
Dica: Como só estamos usando um cliente (o telefone) poderiamos restringir mais esta máscara de rede, e ao invés de “/24” colocaríamos um “/30” em ambas as pontas. Isso criaria uma rede com apenas dois endereços IPs ao invés dos 254 disponíveis, mas eu optei pelo range grande para o caso de alguém decidir adicionar mais dispositivos. - Caso haja alguma exceção, clique em “TODAS AS APLICAÇÕES” no fim da página para definir quais aplicações realmente usarão a VPN e quais não.
- Os servidores DNS podem ficar em branco para que usemos os fornecidos pelo próprio roteador da VPN
- Clique em “ADICIONAR NÓ”
- Na caixa “Chave Pública” você deverá colar aquela chave pública lá do primeiro passo que geramos no Mikrotik
Dica: Eu já dei a dica lá no passo 5 sobre como transferir as chaves entre os equipamentos, então use o mesmo método para trazer a chave pública do Mikrotik para cá - “Chave pré-partilhada” e “Keepalive persistente” podem ficar vazios
- Endpoint é o endereço IP público ou nome com FQDN completo do seu servidor VPN (caso ele esteja registrado no DNS público da sua empresa) e seguido da porta (listen-port).
Como nós estamos usando o Mikrotik você tem a opção de usar o DDNS que fornece um hostname genérico e público para cada dispositivo da marca, o que pode ser visto com o comando “/ip cloud print” ou então pela interface web.
No meu, por exemplo, ficou algo como cd290a6e8d61.sn.mynetname.net:19876
Onde “cd290a6e8d61.sn.mynetname.net” é o nome público do meu Mikrotik, visto com o comando “/ip cloud print” e “19876” é a “listen-port” que definimos lá no primeiro passo de configuração. - Em IPs permitidos digite os endereços que o seu celular deverá acessar pela VPN. É de praxe informarmos 0.0.0.0/0 para que tudo passe pela VPN, dificilmente você precisará fazer diferente disso.
- O flag “Excluir IPs privados” pode ficar desmarcado para que você consiga acessar os serviços internos da sua rede. Caso contrário, você só poderá usar a sua VPN para navegar na Internet
7 – Última configuração do Mikrotik
Agora que o app no smartphone está configurado e já temos sua chave pública, nós podemos voltar ao Mikrotik e executar o último passo, com o comando abaixo:
/interface wireguard peers
add allowed-address=192.168.90.2/24 comment="Meu telefone Android" interface=MinhaVPN public-key="AyAJ5Iyp0fr06YhXmDGWWUQ1ixP5W+TfsKzV1FHkhFD="
Vale destacar aqui que, juntamente com a configuração do app no cliente (no nosso caso o Android), este passo também será executado para cada novo dispositivo que você quiser autorizar o uso da sua VPN.
Caso você pretenda adicionar outros clientes (um segundo telefone, laptop etc), instale e configure o cliente no dispositivo e então permita que ele use sua VPN digitando o comando anterior, alterando somente a chave pública e o endereço IP.
8 – Ativando e testando
Agora que toda a configuração está pronta você já poderá ativar a VPN no seu telefone.
Antes de mais nada, caso seu celular esteja usando a rede WIFI que sai pelo mesmo roteador Mikrotik, o ideal seria desligar o WIFI do seu telefone e verificar se ele está navegando na Internet pelo seu plano de dados.
Agora, entre no app da WireGuard e toque no botão de ativação que aparece ao lado do nome da conexão que foi criada. O seu smartphone imediatamente estará conectado a VPN e todo o tráfego de dados dele para Internet passará pelo túnel.
Uma forma de saber se você realmente está usando a VPN é descobrindo o IP público da sua conexão (que deverá ser o mesmo da rede onde está o seu Mikrotik) ou acessando a interface WEB do seu roteador e observar os contadores de pacotes na aba de Interfaces, ou mesmo na aba de configuração do Wireguard.
Quando não precisar mais da VPN é só abrir o aplicativo e desativá-la.
9 – Breves palavras sobre segurança
Atenção para o fato de que toda a segurança da sua VPN (e da sua rede como um todo) depende do sigilo dos pares de chaves, então em primeiro lugar NUNCA forneça e nem compartilhe as chaves privadas entre as máquinas.
Estas chaves (privadas) deverão permanecer sempre na máquina onde foram geradas e não serão usadas em nenhum outro lugar. No máximo anote-as em algum lugar seguro como backup, para o caso de uma reconfiguração no futuro.
Com relação as chave públicas, elas são compartilhadas. Todos os clientes conhecem a chave pública do servidor, e o servidor conhece as chaves públicas de todos os clientes.
Caso a chave de qualquer pessoa tenha vazado, exclua-a imediatamente e peça que o indivíduo te forneça outra para que você a habilite novamente no servidor.
Caso tenha sido as chaves do seu servidor que vazaram, as exclua imediatamente e avise a todos os clientes, informando a nova chave que eles deverão usar.
Ao infinitocloud e além…
Originalmente o protocolo WireGuard nasceu para funcionar no Kernel Linux, mas seu sucesso foi tanto que hoje todos os principais sistemas operacionais desde pequenos dispositivos embarcados até grandes computadores podem usá-lo da mesma forma.
E embora eu não tenha abordado a instalação em outros sistemas, o procedimento apresentado pode ser adaptado seguramente para colocar qualquer outro dispositivo na sua rede com a VPN WireGuard com relativa simplicidade.
No futuro, eu publico uma continuidade deste tema mostrando como configurar um cliente Linux, Windows etc.
Uma última dica útil a ser dada aqui, ainda relacionada a outros dispositivos é que apesar de ter usado um roteador Mikrotik como servidor, eu poderia ter usado uma máquina (física ou virtual) Linux ou mesmo Windows para isso. E o procedimento é igualmente simples.
Dito isso, pense nas possibilidades! Suponha que você precise acessar um serviço online qualquer que está disponível apenas em determinado país.
Certamente o instinto consumidor (graças aos “marqueteiros” de VPN) será de assinar um serviço de VPN comercial que, segundo uma pesquisa rápida no Google, custaria em torno de $3 a $9 por mês, se você assinar os planos anuais, ou seja o mais barato desta pesquisa sairia $36/ano.
Mas tem um ditado popular que diz que “quem tem amigo não morre pagão”. Se você tiver um amigo legal e confiável que more em outro país e que consiga/possa montar uma VPN na casa dele e deixar disponível para que você a use…
Ou ainda, se você já for assinante de um serviço de nuvem como a AWS, Azure, GCloud etc, você pode subir uma instância Linux bem básica rodando o WireGuard como servidor em diversas partes do mundo.
Assim, ao invés de pagar mais uma assinatura, você terá sua própria VPN com a ponta saindo onde achar melhor e com mais duas grandes vantagens:
A primeira você terá certeza do que trafega em sua VPN e quem está acessando seus dados, já que por questões contratuais nem o administrador da Cloud poderá divulgar seus dados. Se um caso desse acontece e vaza na mídia, por menor que seja, será uma catástrofe para a imagem da empresa.
O segundo é que subir uma instância Linux nestes serviços de nuvem é muito barato custando milésimos de centavos de dólar e você só paga pelo tempo que a máquina estiver rodando.
Se por exemplo, você precisar da VPN por apenas uma semana, você pagará apenas uma semana de processamento de uma máquina bem básica e no final é só destruir a máquina que você volta a não pagar nada.
Vou deixar aqui uma conta rápida usando os serviços da AWS, que são so que estou mais habilitado e habituado, mas certamente outros serviços de nuvem possuirão recursos e preços equiparáveis.
Considerando que você vai construir um pequeno servidor VPN na AWS com a seguinte especificação:
- Zona: Mubai
- Tipo de máquina: “t3.micro” (2 vCPUs, 1GB de RAM)
- Sistema: Linux (Ubuntu ou Amazon Linux, compatível com CentOS e RedHat)
- Armazenamento: 8GB em HD (como é só boot do SO não precisamos de SSD e nem muito espaço)
- Tráfego de dados saindo: cerca de 50GB/mês
Deixar esta máquina ligada durante todo o mês nos custaria algo em torno de $7,65 conforme cálculo na própria ferramenta de estimativas da AWS, mas o que já está na média de preços de uma VPN comercial, acaba caindo mais ainda se você considerar que só queríamos usar por uma semana, o custo poderá ser bem menor.
Bônus extra se você não tiver uma conta por lá ainda. Neste caso você terá o direito a pouco mais de 720 horas de processamento gratuito (equivalente a aproximadamente 1 mês) e que você poderá usá-lo todo de uma vez, ou aos poucos até o limite máximo de 1 ano.
Mas mesmo que você já não tenha mais direito a este benefício, há outras formas de reduzir ainda mais os custos, como por exemplo usando instâncias spots, que são recursos ociosos na AWS.
Usando ou não, máquinas geram custos, ainda mais em um ambiente como na AWS onde há milhares delas ociosas esperando que algum cliente as reserve. Para eles então, é preferível alugarem estes recursos para serviços temporários por um valor mais baixo, do que deixá-los completamente ociosos. O resultado é que podemos reservar estas máquinas por períodos de várias horas e as vezes até alguns dias por custos as vezes até 10x menor.
Certamente esta não será a melhor solução para a minha tia-avó que só quer assistir uma série russa que está bloqueada no Youtube, mas para você que chegou até aqui e tem um conhecimento pelo menos intermediário sobre tudo que escrevi, não tenho dúvidas. Você pode estar jogando dinheiro fora se estiver pagando VPN comercial.
Referências
Wireguard no Mikrotik – https://help.mikrotik.com/docs/display/ROS/WireGuard
Documentação oficial do WireGuard – https://www.wireguard.com