Come esporre una porta locale su internet senza complicazioni
Una situazione familiare: avvii un backend sulla tua macchina locale, configuri l'integrazione con un servizio esterno come Stripe o Telegram, e poi devi testare un webhook. Non c'è accesso esterno al tuo localhost:8000, ordinare un IP statico sembra troppo sforzo, e distribuire un ambiente di staging solo per un paio di richieste richiede troppo tempo.
Di solito in momenti come questi, la mano istintivamente raggiunge ngrok o servizi simili. Ma le alternative commerciali hanno sempre fastidiose limitazioni: limiti di traffico, URL che cambiano a ogni riavvio, o abbonamenti a pagamento per funzionalità base. Recentemente ho scoperto tunnelto — un'utilità open-source in Rust che fa esattamente quello che promette, senza il fastidio extra.
Cos'è questo strumento
Il progetto tunnelto ti permette di esporre un server web locale a internet pubblico tramite un tunnel. Esegui un singolo comando nel terminale, ottieni un URL pubblico valido, e lo passi a servizi esterni o client per scopi di demo.
Il punto principale è che sia il client che il server sono scritti in Rust usando il motore async tokio. Questo risulta in un uso modesto della memoria e una gestione rapida delle connessioni in entrata. Nessun runtime pesante o processi in background che consumano gigabyte di RAM.
Il repository del progetto è disponibile su https://github.com/tunneltodev/tunnelto.
Come funziona in pratica
L'installazione richiede un paio di minuti. Se sei su macOS, l'utilità si installa tramite Homebrew:
brew install agrinman/tap/tunnelto
Se hai già una toolchain Rust configurata, puoi compilare il pacchetto tramite Cargo:
cargo install tunnelto
Per altri sistemi, l'autore ha preparato binari compilati nella sezione Releases su GitHub.
Quick start
Diciamo che hai un'applicazione web in esecuzione localmente sulla porta 8000. Puoi esporla al mondo esterno con questo comando:
tunnelto --port 8000
Dopo l'esecuzione, l'utilità apre un tunnel e fornisce immediatamente un indirizzo funzionante. Qualsiasi richiesta che arriva a quell'indirizzo da internet viene inoltrata istantaneamente alla tua porta locale.
Parametri utili
Nel lavoro quotidiano, spesso hai bisogno di configurazione aggiuntiva. Ecco i flag che fanno risparmiare tempo:
--subdomainimposta un nome di sottodominio fisso così non devi cambiare l'URL nelle impostazioni del webhook dopo ogni riavvio--schemecambia il protocollo tra http e https se il tuo servizio locale richiede una connessione sicura--dashboard-addressavvia un'interfaccia locale per ispezionare e visualizzare le richieste in entrata--keyaccetta una chiave API per l'autorizzazione del tunnel
Esempio di comando con specifica esplicita del sottodominio:
tunnelto --port 3000 --subdomain my-test-app
A cosa serve
In sviluppo, ci sono diversi scenari in cui il tunneling fa risparmiare ore di lavoro:
- Debugging di webhook in entrata da sistemi di pagamento, messenger o provider OAuth direttamente nel tuo debugger locale con breakpoint.
- Test di un'applicazione mobile su uno smartphone reale connesso a una rete mobile, senza configurare il router Wi-Fi.
- Mostrare rapidamente layout o prototipi ai colleghi mentre il codice non è ancora stato pushato nel repository o distribuito su un server di test.
- Verificare i certificati HTTPS e gli header di sicurezza prima del rilascio.
Impressioni personali
Il README menziona la possibilità di self-hostare il componente server, anche se la documentazione manca di istruzioni dettagliate. Se la privacy completa del traffico è importante per te, dovrai approfondire il codice sorgente e distribuire un relay sul tuo VPS.
Il progetto non ha molte stelle (circa 400), e i commit non arrivano ogni giorno, ma per i compiti base l'utilità funziona in modo affidabile. Si avvia rapidamente, non richiede registrazione per il tunneling base, e fa esattamente una cosa chiara. Se stai cercando una semplice alternativa open-source a ngrok, vale la pena controllare il repository e provarlo.
Progetti correlati