Tailscale e tailnet, sem abrir porta nenhuma
Como configurar uma rede privada entre diversos dispositivos sem perder a sanidade, usando WireGuard por baixo do capô.
- #redes
- #tailscale
- #homelab
Recentemente, no meu trabalho, eu e meus colegas estávamos tendo um problema um tanto tosco mas ao mesmo tempo bem importante de ser resolvido: Como conectar várias máquinas de forma a não precisar expor elas na internet de forma desnecessária e sem precisar se conectar a várias VPNS diferentes? Eis que um dos meus sêniors teve a ideia de implementar uma “rede paralela” via Tailscale
Antes de mais nada, o que é o Tailscale?
Tailscale é uma ferramenta que coloca dispositivos dentro de uma rede privada virtual chamada tailnet. Dentro dela, cada máquina enxerga as outras como se estivessem na mesma rede local, não importa se uma está no seu rack e a outra numa VPS do outro lado do país.
O transporte é via WireGuard, um protocolo de VPN moderno, enxuto e auditado, que já é parte do kernel Linux. O Tailscale não reinventou a criptografia do zero, ele pegou o WireGuard e resolveu o problema que o WireGuard sozinho não resolve (configurar chaves, trocar IPs, lidar com NAT e manter tudo isso sincronizado entre várias máquinas).
O modelo mental: malha, não hub
A diferença central para quem vem de VPN tradicional é que o Tailscale forma uma malha (mesh), não um túnel único até um servidor central. Cada par de dispositivos tenta abrir uma conexão direta entre si, usando técnicas de furo de NAT (semelhantes às que apps de chamada de vídeo usam). Se a conexão direta não rola, o tráfego passa por um relay da própria Tailscale mas ele é só um fallback, criptografado de ponta a ponta, sem ver o conteúdo.
Quem coordena essa malha é o plano de controle: um serviço da Tailscale que sabe quais máquinas existem na sua tailnet, distribui as chaves públicas de cada uma e ajuda a negociar as conexões. O tráfego em si nunca passa por esse plano de controle — ele só facilita o aperto de mão inicial.
MagicDNS e nomes que fazem sentido
Sem Tailscale, cada máquina na sua rede tem um IP que muda ou que você simplesmente não lembra. O
MagicDNS dá nome a cada dispositivo da tailnet: em vez de decorar 100.x.x.x, você digita
raspberrypi ou banco-dev e o Tailscale resolve para o endereço certo. É pouca coisa, mas é o tipo de
atrito que, removido, muda o quanto você usa a ferramenta no dia a dia.
ACLs: quem pode falar com quem
Numa tailnet com mais de uma pessoa, nem todo mundo deveria acessar tudo. As ACLs (listas de controle de
acesso) do Tailscale são um arquivo de configuração, em JSON ou HCL, que define regras como “o grupo
estagiarios pode acessar a porta 3000 do servidor de staging, e mais nada”. É política de acesso como
código, versionada, revisável em pull request não uma tela de admin clicada às pressas.
Para que serve na prática, para quem está começando
Os casos de uso mais comuns para quem está entrando em redes e infraestrutura:
- Acessar o Raspberry Pi ou o home server de qualquer lugar sem abrir porta no roteador.
- Conectar no banco de dados de desenvolvimento que roda na sua máquina de casa, a partir do notebook do trabalho, sem expor a porta 5432 para a internet.
- Testar um serviço local (
localhost:3000) a partir do celular, na mesma tailnet, sem precisar de túnel público tipo ngrok. - Montar um pequeno cluster de estudo entre uma VPS barata e o computador de casa, com comunicação segura entre as duas.
Primeiro passo prático
Para experimentar: crie conta no Tailscale, instale o cliente em duas máquinas (o notebook e, por exemplo,
um Raspberry Pi), rode tailscale up em cada uma e autentique. Em segundos as duas aparecem na mesma
tailnet, com IP próprio na faixa 100.x.x.x e nome resolvido por MagicDNS. Depois disso, o exercício
natural é tentar SSH de uma para a outra sem nenhuma configuração de rede adicional e sentir a diferença
entre isso e o caminho tradicional de abrir porta no roteador.