Como expor uma porta local para a internet sem complicação
Uma situação familiar: você sobe um backend na sua máquina local, configura integração com um serviço externo como Stripe ou Telegram, e então precisa testar um webhook. Não há acesso externo ao seu localhost:8000, encomendar um IP estático parece esforço demais, e fazer deploy de um ambiente de staging só para algumas requisições demora demais.
Normalmente nesses momentos, sua mão instintivamente alcança o ngrok ou serviços similares. Mas alternativas comerciais sempre vêm com limitações irritantes: caps de tráfego, URLs que mudam a cada reinício, ou assinaturas pagas para funcionalidades básicas. Recentemente descobri o tunnelto — um utilitário Rust open-source que faz exatamente o que promete, sem a complicação extra.
O que é essa ferramenta
O projeto tunnelto permite expor um servidor web local para a internet pública através de um túnel. Você executa um único comando no terminal, obtém uma URL pública válida, e a passa para serviços externos ou clientes para fins de demonstração.
O destaque principal é que tanto o cliente quanto o servidor são escritos em Rust usando o motor async tokio. Isso resulta em uso modesto de memória e tratamento rápido de conexões recebidas. Sem runtimes pesados ou processos em segundo plano consumindo gigabytes de RAM.
O repositório do projeto está disponível em https://github.com/tunneltodev/tunnelto.
Como funciona na prática
A instalação leva alguns minutos. Se você está no macOS, o utilitário é instalado via Homebrew:
brew install agrinman/tap/tunnelto
Se você já tem uma toolchain Rust configurada, pode compilar o pacote via Cargo:
cargo install tunnelto
Para outros sistemas, o autor preparou binários compilados na seção Releases no GitHub.
Início rápido
Digamos que você tenha uma aplicação web rodando localmente na porta 8000. Você pode expô-la para o mundo externo com este comando:
tunnelto --port 8000
Após a execução, o utilitário abre um túnel e imediatamente fornece um endereço funcional. Qualquer requisição que chegar a esse endereço da internet é instantaneamente redirecionada para sua porta local.
Parâmetros úteis
No trabalho diário, você frequentemente precisa de configuração adicional. Aqui estão as flags que economizam tempo:
--subdomaindefine um subdomínio fixo para você não precisar mudar a URL nas configurações do webhook após cada reinício--schemealterna o protocolo entre http e https se o seu serviço local requer uma conexão segura--dashboard-addresssobe uma interface local para inspecionar e visualizar requisições recebidas--keyaceita uma chave de API para autorização do túnel
Exemplo de comando com especificação explícita de subdomínio:
tunnelto --port 3000 --subdomain my-test-app
Para que isso é útil
No desenvolvimento, existem vários cenários onde tunelamento economiza horas de trabalho:
- Depurando webhooks recebidos de sistemas de pagamento, mensageiros ou provedores OAuth diretamente no seu depurador local com breakpoints.
- Testando uma aplicação móvel em um smartphone real conectado à rede móvel, sem configurar roteador Wi-Fi.
- Mostrando rapidamente layouts ou protótipos para colegas enquanto o código ainda não foi pushado para o repositório ou deployado em um servidor de teste.
- Verificando certificados HTTPS e headers de segurança antes do release.
Impressões pessoais
O README menciona a capacidade de fazer self-host do componente servidor, embora a documentação careça de instruções detalhadas. Se privacidade total do tráfego é importante para você, você precisará explorar o código-fonte e fazer deploy de um relay no seu próprio VPS.
O projeto não tem muitas estrelas (cerca de 400), e commits não vêm todos os dias, mas para tarefas básicas o utilitário funciona de forma confiável. Inicia rapidamente, não requer registro para tunelamento básico, e faz exatamente uma coisa clara. Se você está procurando uma alternativa open-source simples para o ngrok, vale a pena verificar o repositório e testá-lo.
Projetos relacionados