Ir para o conteúdo

Túneis de Rede: Conceitos, Aplicações e Uso com Cloudflare Tunnel

De Wikiversidade

Em redes de computadores, túnel é um mecanismo que permite a transmissão segura de dados privados por meio de uma rede pública, geralmente utilizando técnicas de encapsulamento e criptografia. Esse processo é conhecido como tunneling ou port forwarding e tem como principal finalidade garantir a integridade, confidencialidade e segurança da comunicação entre sistemas conectados.

Exemplo de ferramentas que utilizam do mecanismo de túneis são: ssh -L (port forwarding via SSH), cloudflared, ngrok e expose, softwares de VPN (OpenVPN, WireGuard, etc.).

Conceito e Funcionamento

[editar | editar código]

Túneis criam um canal lógico protegido entre dois pontos da rede — frequentemente entre um cliente remoto e um servidor privado — permitindo o tráfego de dados através de firewalls e dispositivos NAT (Network Address Translation) sem a necessidade de abrir portas específicas. Essa conexão é frequentemente iniciada a partir da rede privada em direção a um serviço externo (como Cloudflare ou servidores SSH), que então encaminha o tráfego externo para o servidor interno por meio do túnel estabelecido.

Usuário → [Servidor externo (ex: Cloudflare)] ⇄ [Túnel] ⇄ [Servidor local]

O funcionamento básico do tunneling envolve as seguintes etapas:

  1. Criptografia dos pacotes de dados originais, assegurando sua confidencialidade.
  2. Encapsulamento desses pacotes em protocolos públicos, ocultando sua real natureza.
  3. Adição de cabeçalhos, que definem os pontos de origem e destino do túnel.
  4. Transmissão dos pacotes encapsulados pela rede pública.
  5. Desencapsulamento na extremidade receptora, recuperando os dados originais.
  6. Descriptografia e entrega dos pacotes ao destino final.

Este processo permite que dados sensíveis atravessem redes públicas como a internet, mantendo-se protegidos contra interceptações.

Aplicações Comuns

[editar | editar código]

O uso de túneis é essencial em diversos contextos, incluindo:

  • Exposição de servidores locais à internet (e.g., desenvolvimento local em localhost:3000) sem a necessidade de reconfiguração de roteadores ou firewalls.
  • Acesso remoto seguro, como em conexões SSH com port forwarding.
  • Implementação de redes privadas virtuais (VPNs), que encapsulam e criptografam pacotes IP para viabilizar comunicação segura entre redes ou dispositivos remotos.
  • Compatibilidade entre protocolos, ao permitir que protocolos não suportados por uma rede trafeguem encapsulados em protocolos permitidos.

Embora o encapsulamento introduza certa sobrecarga e possa impactar a latência, o benefício em termos de segurança, flexibilidade e portabilidade do tráfego justifica seu uso em diversos cenários corporativos e pessoais.

Uso de Túneis em Ambientes DevOps e de Testes

[editar | editar código]

O uso de túneis em ambientes DevOps tem se consolidado como uma prática essencial para acesso seguro, testes integrados e colaboração contínua. Por meio do tunneling, é possível expor ambientes de staging ou aplicações locais para a internet de maneira segura e controlada, eliminando a necessidade de configurações complexas de rede.

Alguns casos de uso práticos são:

  • Testes de funcionalidades em dispositivos móveis, tablets e navegadores externos.
  • Demonstrações de funcionalidades para clientes, investidores ou membros da equipe.
  • Validação de integração com serviços de terceiros que requerem callback HTTP(s).

Ambientes de Staging e Integração com DevOps

[editar | editar código]

No contexto DevOps, o tunneling de ambientes de staging permite que desenvolvedores, equipes de QA (Quality Assurance) e partes interessadas acessem ambientes de pré-produção diretamente a partir de suas máquinas locais ou locais externos. Ferramentas como Cloudflare Tunnel, Tailscale e CodoBee são amplamente utilizadas para essa finalidade.

Essas soluções oferecem:

  • Compartilhamento instantâneo de aplicações e containers Docker.
  • Redução da complexidade de deploy em ambientes intermediários.
  • Feedback ágil de equipes distribuídas ou stakeholders.

Esse tipo de acesso remoto é fundamental para garantir testes de integração contínua, revisões colaborativas de funcionalidades e validação antecipada de sistemas antes da publicação em produção.

Tunelamento para Testes End-to-End

[editar | editar código]

O tunelamento também é amplamente utilizado em testes end-to-end (E2E), que visam validar o funcionamento completo de uma aplicação, incluindo sua interface, lógica de negócios, integração com serviços externos e banco de dados.

Para realizar testes E2E eficazes, especialmente os horizontais (do ponto de vista do usuário), é necessário que a aplicação esteja acessível de forma realista — como se estivesse em produção. Com o uso de túneis, é possível:

  • Tornar aplicações locais visíveis a ferramentas de teste automatizado e dispositivos reais.
  • Compartilhar a aplicação em execução local com testadores ou sistemas externos via um URL público.
  • Realizar testes de fluxo completo em navegadores e dispositivos móveis reais, sem necessidade de deploy completo.

Benefícios do Tunelamento em DevOps

[editar | editar código]

Ao contrário das abordagens tradicionais, que exigem configurações complexas como IP público, DNS, abertura de portas, proxy reverso e certificados, o tunneling oferece uma alternativa simples e segura:

  • Sem necessidade de abrir portas no firewall: o túnel inicia conexões de saída, o que evita configurações manuais no roteador.
  • Gerenciamento automático de HTTPS: certificados SSL/TLS são fornecidos e mantidos pela própria plataforma de túnel (ex.: Cloudflare).
  • Eliminação do proxy reverso: o próprio túnel atua como intermediário entre o cliente e o servidor.
  • Simplicidade no DNS: um único registro CNAME pode ser configurado para apontar para o túnel.
  • Implantação simplificada: bastando executar um único binário, como cloudflared, para expor a aplicação.

Exemplo Prático: Expondo Aplicações Locais com Cloudflare Tunnel

[editar | editar código]

A seguir, utilizaremos Cloudflared Quick Tunnels (versão gratuita disponibilizada pela Cloudflared) para demonstrar como disponibilizar localhost em um domínio público.

Visão Geral do Cloudflare Tunnel

[editar | editar código]

O Cloudflare Tunnel [1]utiliza um agente leve chamado cloudflared, que é executado na máquina local. Esse agente estabelece conexões TLS de saída com servidores da Cloudflare ao redor do mundo, criando um túnel seguro. O tráfego externo entra por um subdomínio temporário fornecido pela Cloudflare e é encaminhado diretamente para o serviço local configurado.

Passo a Passo

[editar | editar código]
  1. Instalação do cloudflared: faça o download e instalação do binário oficial em https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
  2. Antes de iniciar o túnel, certifique-se de que:
    • A aplicação local está em execução (ex: em http://localhost:3000 ou http://localhost:8080)
    • A configuração de CORS e allowed hosts da aplicação permite conexões de domínios dinâmicos (quando aplicável)
    • Variáveis de ambiente podem ser usadas para ajustar URLs durante o desenvolvimento
    • Exemplo de Variável de Ambiente:
      # URL da aplicação backend
      APP_BASE_URL=http://localhost:8080
      
      # Lista de domínios permitidos para frontend
      ALLOWED_HOSTS=tunnel-url.trycloudflare.com
      
  3. Execução do túnel
    • Execute o seguinte comando para criar o túnel com a aplicação local:
      cloudflared tunnel --url http://localhost:3000
      
      O terminal exibirá uma URL pública (ex: https://some-random-string.trycloudflare.com) pela qual sua aplicação poderá ser acessada de qualquer lugar.
  4. Ajustes opcionais
    • Caso sua aplicação utilize controle de origem (CORS) ou defina explicitamente domínios confiáveis, atualize a configuração para incluir o domínio gerado.
    • Exemplo genérico (backend):
      # Adiciona domínio do túnel às origens permitidas
      allowHost("some-random-string.trycloudflare.com", schemes = listOf("https"))
      
    • Exemplo genérico (frontend - Vite):
      # no vite.config.js
      allowedHosts: ['localhost', 'some-random-string.trycloudflare.com']
      

Implementação de Exemplo

[editar | editar código]

Uma implementação completa desse fluxo pode ser consultada no repositório Tutorial Túnel .

Essa versão utiliza a seguinte stack:

  • Backend: Kotlin + Ktor
  • Frontend: React + Vite
  • Ambiente de execução: Docker

O repositório inclui:

  • Configuração de variáveis de ambiente para suportar túneis dinâmicos
  • Ajustes de CORS no backend
  • Suporte a domínios aleatórios no Vite

Esse exemplo serve como referência prática para adaptar o uso de túneis Cloudflare a projetos reais em ambientes de desenvolvimento e testes.

Referências

[editar | editar código]
  1. https://developers.cloudflare.com/_astro/handshake.eh3a-Ml1_1IcAgC.webp