CLOUDFLARE TUNNEL ARCHITECTURE Your Local Network (No Open Ports) Service localhost:8080 Web App / API cloudflared Tunnel Daemon Outbound Only TLS Encrypted CF Edge DDoS Protection WAF + Access SSL Termination Zero Trust Users https://app.domain HTTPS Secure No port forwarding needed — cloudflared creates outbound-only encrypted tunnels

Se você hospeda aplicações em casa ou no escritório — um servidor de mídia, um painel de automação residencial, um ambiente de desenvolvimento, um wiki pessoal — tradicionalmente precisava abrir portas no roteador, configurar regras NAT, configurar DNS dinâmico e torcer para que seu provedor não bloqueie conexões de entrada. Cada porta aberta é um vetor de ataque potencial.

Cloudflare Tunnels eliminam tudo isso. Você executa um daemon leve (cloudflared) na sua máquina local que cria uma conexão criptografada apenas de saída para a rede edge da Cloudflare. O tráfego flui da internet através da Cloudflare para o seu serviço, sem nenhuma porta de entrada aberta no seu firewall.

Por Que Cloudflare Tunnels?

  • Sem Port Forwarding: Seu firewall pode bloquear todas as conexões de entrada
  • Sem IP Público Necessário: Funciona mesmo com CGNAT
  • Proteção DDoS Integrada: Tráfego passa pela rede da Cloudflare
  • Plano Gratuito: Incluído no plano gratuito da Cloudflare
  • TLS Automático: Cloudflare gerencia certificados SSL automaticamente

Instalando cloudflared

Debian/Ubuntu

sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | \
  sudo tee /etc/apt/sources.list.d/cloudflared.list

sudo apt-get update
sudo apt-get install -y cloudflared

Criando um Tunnel

cloudflared tunnel login
cloudflared tunnel create meu-homelab
cloudflared tunnel route dns meu-homelab app.knowledgexchange.xyz

Configurando Regras de Ingress

tunnel: a1b2c3d4-e5f6-7890-abcd-ef1234567890
credentials-file: /home/user/.cloudflared/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json

ingress:
  - hostname: app.knowledgexchange.xyz
    service: http://localhost:8080
  - hostname: home.knowledgexchange.xyz
    service: http://localhost:8123
  - hostname: git.knowledgexchange.xyz
    service: http://localhost:3000
  - service: http_status:404

Executando como Serviço systemd

sudo cloudflared service install
sudo systemctl enable --now cloudflared

Políticas de Acesso com Cloudflare Zero Trust

Para serviços que não devem ser acessíveis publicamente, adicione políticas de acesso do Cloudflare Access no dashboard Zero Trust.

SSH Através de Cloudflare Tunnels

ingress:
  - hostname: ssh.knowledgexchange.xyz
    service: ssh://localhost:22
  - service: http_status:404

No cliente, adicione ao ~/.ssh/config:

Host ssh.knowledgexchange.xyz
    ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

Conclusão

Cloudflare Tunnels mudam fundamentalmente como você expõe serviços self-hosted na internet. Sem mais port forwarding, sem DNS dinâmico, sem preocupações com restrições de ISP ou endereços IP expostos. O modelo de conexão apenas de saída significa que seu firewall permanece bloqueado enquanto seus serviços permanecem acessíveis.