Criei minha própria VPN

Print parcial de um iPhone SE mostrando a parte de cima do site do Manual do Usuário. Detalhe para o indicado “VPN” ao lado do status da rede 4G.

O pessoal do marketing é muito bom em inventar novos nomes para coisas triviais. Lembro de “nuvem”, termo quase esotérico que, na prática e de modo bem simplificado, é só o computador de uma empresa que você consegue acessar via internet.

“VPN” é outro desses termos — embora, imagino, não tenha sido cunhado por um publicitário. Daria para explicar o que é uma VPN de inúmeras maneiras (uma tentativa com milhares de palavras). No modo bem resumido, VPN é um acesso direto e protegido do seu celular/computador a outro computador. “Virtual Private Network”, rede privada virtual, sacou?

As VPNs comerciais, essas que anunciam em podcasts e canais de YouTube, espalham seus computadores/servidores em vários locais do mundo e concentram os acessos dos clientes neles. Isso tem uma série de vantagens, mas não abarca todos os casos de uso.

Infográfico mostrando o funcionamento de uma VPN.
O túnel criado pela VPN protege o tráfego de terceiros. Imagem: AT&T Cybersecurity.

Veja o meu. Em casa, tenho uma instalação do Pi-Hole, um bloqueador de rastreadores e anúncios. Funciona super bem, mas só quando estou dentro de casa, conectado à minha rede. Assim que me afasto e o celular troca o Wi-Fi de casa pelo 4G/5G da operadora, perco a proteção do Pi-Hole.

Uma solução para esse problema é criar uma VPN, de modo que, quando eu não estiver conectado ao Wi-Fi de casa, o celular crie um “túnel” até minha rede doméstica e faça o acesso à internet a partir dali.

Foi o que eu fiz. Há algumas premissas para que isso funcione, em especial ter um computador/servidor conectado e ligado 24 horas por dia. No meu caso, usei o mesmo Raspberry Pi em que o Pi-Hole funciona.

A instalação de uma VPN desse tipo é mais complicada que uma comercial. Primeiro porque, ao usar uma solução comercial você só precisa lidar com o lado “cliente” — o “servidor” fica a cargo da empresa que fornece a VPN. E mesmo no lado “cliente” é mais simples; em geral há aplicativos que automatizam toda a configuração.

Para subir uma VPN própria, é preciso cuidar das duas partes: o servidor e os clientes, e resolver um detalhe com sua operadora de internet.

O jeito mais fácil

O aplicativo mais popular e, dizem, melhor para subir uma VPN no momento é o WireGuard. A instalação é até trivial, mas a configuração pode ser intimidadora. Eu, inexperiente que sou com redes e Linux, travo já na primeira linha. Veja você mesmo(a).

É neste momento que entra em cena o PiVPN, um projeto que facilita horrores a configuração do WireGuard por automatizá-la. (Se preferir, dá para optar pelo OpenVPN, outra aplicação de VPN mais antiga.)

O PiVPN prevê o uso do Pi-Hole e também conversa numa boa com o Unbound, caso o usuário queira resolver os endereços DNS em casa mesmo.

Instalando o PiVPN

Não tem muito segredo: basta executar o comando de instalação no terminal, disponível no site do PiVPN, em algum sistema Linux baseado no Debian1. O assistente lembra bastante o do Pi-Hole e, mesmo rodando no terminal, sem interface gráfica, é bastante intuitivo. Basta responder as perguntas.

Existem, porém, dois momentos menos óbvios na instalação do PiVPN: redirecionar uma porta no modem e configurar um DNS dinâmico para o seu IP.

Eu não entendo muito disso e só consegui subir a VPN em casa com uma mistura de tentativa e erro e a leitura de tutoriais esparsos. Leia o que vem a seguir com um pé atrás.

A abertura da porta no modem é essencial para que você consiga se conectar via internet com sua rede local. É preciso fazer um redirecionamento de porta (“port forward”) no painel de controle do seu modem, redirecionando a porta UDP 51820 para o IP do servidor/dispositivo em que o PiVPN está sendo executado.

É impossível dar orientações mais precisas porque esse caminho varia de acordo com a fabricante e o modelo do modem. O lado positivo é que não é um negócio super complexo ou escondido. Bem provável que a opção esteja na cara ao abrir o painel de controle do modem/roteador. (Foi o caso aqui, com um modem MitraStar emprestado pela Vivo.)

Print do painel de controle do modem da Vivo, aberto na tela de redirecionamento de portas.

O lance do IP dinâmico é mais complicado.

Quando seu modem doméstico se conecta à internet, ele ganha um número IP, uma espécie de “RG” na internet. Só que ao contrário do nosso RG, o IP atribuído pela operadora é mutável: vez ou outra ela renova os empréstimos e altera o IP da sua conexão.

Isso é um problema para coisas como a que a gente está tentando fazer. Afinal, o meu celular lá fora precisa localizar o modem na minha casa, e essa localização se faz (a princípio) pelo IP. Se o IP muda, a conexão se perde e não tem como recuperá-la remotamente.

A saída desse impasse é configurar um serviço de IP dinâmico, ou DyDNS. Nesse caso, em vez de um IP, o celular “encontra” a minha rede por um domínio que, por sua vez, fica responsável por monitorar e fazer as alterações necessárias quando o IP do meu modem for trocado pela operadora.

Existem alguns serviços dedicados de DyDNS, como No-IP, Dyn e DuckDNS (o último, gratuito).

No meu caso, aproveitei um domínio que já tinha e rodei um script para usá-lo como DNS dinâmico via Cloudflare e com um cron job (automação de tarefas no Linux) configurado no servidor onde o PiVPN foi instalado.

Sei que está complicado, mas continue comigo. Se o inglês estiver em dia, recomendo este tutorial. Só que em vez de usar o script indicado nele, use este outro — nesse, a chave da API da Cloudflare é menos permissiva, liberando apenas as permissões estritamente necessárias para que o negócio funcione.

Dá para instalar o PiVPN sem um DNS dinâmico configurado? Dá, sim, mas em algum momento o arranjo vai quebrar, quando a operadora alterar o IP da sua conexão/seu modem, e será preciso alterá-lo manualmente sabe-se lá onde. Essa configuração inicial é meio chatinha, mas coloca a sua VPN doméstica em modo automático. Por isso, recomendo perder alguns fios de cabelo aqui.

Ativando a VPN nos clientes

Print parcial do WireGuard para iOS mostrando uma VPN chamada PiVPN com status sob demanda.

Se tudo correr bem, você será jogado de volta ao Terminal do Linux após a instalação do PiVPN e terá um novo comando à disposição, o pivpn.

Esse comando é bem útil para adicionar e conectar clientes ao seu servidor VPN. Basta dar um pivpn -a para adicionar (dê um nome descritivo a cada cliente) e, depois, pivpn -qr para gerar um QR code que deve ser lido pelo aplicativo do WireGuard no dispositivo cliente.

O comando pivpn -h mostra os comandos disponíveis.

Janela do Terminal do macOS mostrando a ajuda do pivpn.

No celular, baixe o aplicativo oficial do WireGuard e acrescente uma VPN via QR code. Basta apontar a câmera para o código gerado pelo PiVPN. Também há versões do WireGuard para sistemas desktop. Todos os aplicativos estão nesta página.

Um último detalhe, que considero a cereja do bolo: é possível configurar o aplicativo do WireGuard para acionar a VPN sob demanda, ou seja, sempre que eu não estiver conectado ao Wi-Fi de casa. Funciona supreendentemente bem.

Para saber se deu certo, desconecte-se da sua rede doméstica e acesse um site qualquer que informe o IP, como o DNS leak test, a partir da conexão móvel ou de outro Wi-Fi. Se o IP mostrado for o mesmo da sua rede doméstica, deu certo.

E agora?

Com a ajuda do PiVPN, você tem acesso constante e de qualquer lugar do mundo à sua rede doméstica. Além de poder usar o Pi-Hole longe de casa, existem outras várias aplicações possíveis, como ter acesso a serviços “self-hosted” sem se expor (muito) à internet aberta.

É possível instalar o NextCloud, por exemplo, e ter uma espécie de Dropbox dentro de casa. Ou o Jellyfin para ter uma Netflix própria apenas com vídeos de domínio público, nada de pirataria! Ou ainda instalar o Vaultwarden, um gerenciador de senhas.

É bem verdade que o Raspberry Pi é um gargalo em várias dessas aplicações — nem pense em vídeos em 4K, por exemplo. Se gostar da brincadeira, um computador velho ou baratinho qualquer é um upgrade que talvez valha a pena fazer.

Por fim, um aviso importantíssimo: hospedar suas próprias coisas traz uma carga de responsabilidade enorme. Se você se esquecer as senhas, quebrar o sistema ou fizer qualquer coisa que comprometa os dados guardados no servidor, é fim de jogo, não tem a quem pedir ajuda.

Por esse motivo, estou começando devagar, sentindo a temperatura da água com aplicações simples e que, caso o servidor vá pelos ares, não farão falta e/ou podem ser restauradas facilmente: um bloqueador de anúncios, um servidor de arquivos (Samba), coisas assim.

  1. Apesar do nome, o PiVPN funciona no próprio Debian, Ubuntu e, claro, no Raspberry Pi OS.

Newsletter

O Manual no seu e-mail. Três edições por semana — terça, sexta e sábado. Grátis. Cancele quando quiser.

Deixe um comentário

É possível formatar o texto do comentário com HTML ou Markdown. Seu e-mail não será exposto. Antes de comentar, leia isto.

23 comentários

  1. A legenda “O túnel criado pela VPN protege o tráfego de terceiros. ” e a imagem em si não estão corretas.
    A empresa que fornece o serviço “vê” todo o tráfego do usuário, já que está na outra ponta do tunel, fora dele. Resalto isso porque é importante ter em mente que todo o trafégo está sendo concentrado em uma única empresa.

      1. Entre ‘You’ (origem) e a ‘Internet’ (destino) existe, também, a empresa fornecedora (que a imgem não mostra) do tunel. Do ponto de vista da origem é um terceiro, um intermediario na troca de trafego entre origem e o destino. E um terceiro importante, onde o trafego da origem está sempre cruzando (quando a VPN estiver ativa).
        Ou seja, é um intermediario que sabe a origem e o destino de todo o trafego do usuário. E o usuário deve sempre assumir que esse intermediario coleta e armazena informações do trafego que cruza por ele.

        1. A empresa fornecedora é o próprio túnel e, embora mal sinalizada, ela está — aquela montanha ali é o logo da NordVPN. A relação, quando se fala em VPN, é entre você e a empresa fornecedora de VPN. O que você faz na internet acontece num segundo momento, após o seu tráfego ser redirecionado pela VPN para um dos servidores dela.

  2. E como fica a conexão fora de casa? A velocidade é aceitável? Para subir fotos em um servidor particular é praticável? E minha dúvida mais importante: qual a motivação?

    1. Não fiz medição de velocidade, mas não senti qualquer engasgo usando a VPN. A conexão de casa talvez vire um gargalo com o 5G do celular (tenho 200 Mb/s de download e 100 Mb/s de upload em casa; o 5G passa fácil disso em locais com boa cobertura), mas o teto imposto pela conexão doméstica já é bem alto para o que costumo fazer.

      A motivação, a princípio, é poder usar o Pi-Hole de qualquer lugar. Se um dia em tiver um servidor doméstico mais robusto, aí abre-se uma nova janela para experimentar soluções “self-hosted” sem custo extra e com mais segurança do que se fosse um servidor exposto à internet.

      1. Legal! Moro em um polo de alta tecnologia e por incrível que pareça minha conexão doméstica não passa de 25 mb/s, o que impõe um limite baixo. Já tentei colocar vpn mas a dificuldade técnica me travou, rede é um mundo a parte dentro da informática.

  3. que texto ótimo ghedin, desde que vc comentou no post livre eu fiquei esperando uma matéria sobre!

    não vejo a hora de vc ter o setup completo, com nuvem, gerenciador de senhas e e-mail (será que rola? pq vc disse que cai em spam, mas seria legal tentar um dia)

  4. A operadora roxa assim como outras bloqueiam as portas baixas como 80 e 443, uma maneira de manobrar isso é redireciona a porta local 80 pra 8080, e o mesmo pra 443. Isso pode gerar mais trabalho pra gerar um certificado, teria que ser feito via DNS.

    Mas uma caminho legal, que incluem operadoras com CGNAT, é fazer um tunnel, a Cloudflare tem esse serviço gratuito. O tunnel roda dentro do seu servidor e a entrega é feita pela rede deles, algo interessante é que permitem criar painéis de login com oAuth e dupla autenticação pra manter o acesso seguro como alternativa ao modelo de VPN. Se não gosta da Cloudflare tem a Tailscale também.

    No Github tem um listão de Awesome Tunneling (https://github.com/anderspitman/awesome-tunneling).

    1. Esse bloqueio só seria um problema caso eu quisesse servir um site (80) para toda a internet, não? No meu arranjo, com a VPN, parece que tudo está funcionando: consigo acessar a rede doméstica e, daqui, eventuais sites hospedados no mesmo “servidor” — NextCloud, Jellyfin etc.

      1. Sim, tá perfeito.

        Inclusive o PiVpn usa OpenVPN ou Wireguard?

        Mas usar o Jellyfin ou Plex, possa ter dificuldade pra acessar remotamente garantindo encriptação, ou pela TV onde não conseguir conectar na VPN. É possível definir nas configurações pra tudo sair pela 443.

        Ou talvez se quiser usar o Nextcloud como alternativa ao Google Photos no celular sem precisar sempre estar conectado a VPN.

        Outra coisa legal de colocar no RPI é um heartbeat apontando pro Cronitor.io, é só um ping via Cronjob, aí sabe se sua internet caiu, mesmo sem ter uma porta 80/443 exposta.

        1. Boa a dica do heartbeat! Vou tentar instalar aqui.

          O PiVPN oferece as duas opções, OpenVPN e WireGuard. Você escolhe qual deles quer usar durante a instalação.

  5. Tô na fila de espera de uns RPi de 8gb. Por aqui tá todo mundo sem estoque, estimam pra maio de 23. Ter uma VPN vindo aqui pra casa tá nos planos. Além de rodar oi-hole e photoprism ou owncloud.

        1. Sabe se ainda rola a historinha “tenho um dvr” para sair do cgnat?
          Um colega falou que pedem modelo do dvr e outras coisas assim para validar, mas não sei se era papo….
          (Claro Net)

          1. Claro e operadoras fe bairro tem problemas. Tim nunca ouvi sobre. Vivo raramente tem problemas de CGNAT, mesmo com ip compartilhado.

          2. Não faço a menor ideia! Me livrei da Claro/NET logo no começo da pandemia. Sei que a Oi Fibra, meu provedor atual, usa e estou há quase 3 anos me preparando psicologicamente para tentar resolver essa questão.

  6. Eu teria perdido vários fios de cabelo e desistido no final. Mas esse artigo deve ser um material de ouro para quem quer fazer algo parecido.