
Semplice tunnel TCP in Rust che espone le porte locali a un server remoto, bypassando i firewall NAT. Leggero, auto-ospitabile e facile da installare.
Un tunnel TCP moderno e semplice in Rust che espone porte locali a un server remoto, bypassando i firewall NAT standard. Fa solo questo: né più, né meno.

# Installation (requires Rust, see alternatives below)
cargo install bore-cli
# On your local machine
bore local 8000 --to bore.pub
Questo esporrà la tua porta locale su localhost:8000 a Internet pubblico su bore.pub:<PORT>, dove il numero di porta viene assegnato casualmente.
Simile a localtunnel e ngrok, tranne per il fatto che bore è pensato per essere uno strumento altamente efficiente e senza opinioni per l'inoltro del traffico TCP, semplice da installare e facile da self-hosting, senza fronzoli.
(bore conta circa 400 righe di codice Rust sicuro e asincrono ed è banale da configurare — basta eseguire un singolo binario per client e server.)
bore è incluso come formula core di Homebrew.
brew install bore-cli
bore è disponibile nell'AUR come bore.
yay -S bore # or your favorite AUR helper
bore è disponibile nell'overlay gentoo-zh.
sudo eselect repository enable gentoo-zh
sudo emerge --sync gentoo-zh
sudo emerge net-proxy/bore
Altrimenti, il modo più semplice per installare bore è dai binari precompilati. Questi sono disponibili sulla pagina delle release per macOS, Windows e Linux. Basta decomprimere il file appropriato per la tua piattaforma e spostare l'eseguibile bore in una cartella nel tuo PATH.
Puoi anche compilare bore dal sorgente usando Cargo, il gestore di pacchetti di Rust. Questo comando installa il binario bore in un percorso accessibile all'utente.
cargo install bore-cli
Pubbliciamo anche immagini Docker versionate per ogni release. L'immagine è costruita per un'architettura AMD a 64 bit. Sono taggate con la versione specifica e ti permettono di eseguire il binario bore collegato staticamente da un container minimale "scratch".
docker run -it --init --rm --network host ekzhang/bore <ARGS>
Questa sezione descrive l'uso dettagliato del comando CLI bore.
Puoi inoltrare una porta sulla tua macchina locale usando il comando bore local. Accetta un argomento posizionale, la porta locale da inoltrare, e un'opzione obbligatoria --to, che specifica l'indirizzo del server remoto.
bore local 5000 --to bore.pub
Opzionalmente puoi passare un'opzione --port per scegliere una porta specifica sul remoto da esporre, anche se il comando fallirà se questa porta non è disponibile. Inoltre, passare --local-host ti permette di esporre un host diverso sulla tua rete locale oltre all'indirizzo di loopback localhost.
Le opzioni complete sono mostrate di seguito.
Starts a local proxy to the remote server
Usage: bore local [OPTIONS] --to <TO> <LOCAL_PORT>
Arguments:
<LOCAL_PORT> The local port to expose [env: BORE_LOCAL_PORT=]
Options:
-l, --local-host <HOST> The local host to expose [default: localhost]
-t, --to <TO> Address of the remote server to expose local ports to [env: BORE_SERVER=]
-p, --port <PORT> Optional port on the remote server to select [default: 0]
-s, --secret <SECRET> Optional secret for authentication [env: BORE_SECRET]
-h, --help Print help
Come menzionato nelle istruzioni di avvio, c'è un'istanza pubblica del server bore in esecuzione su bore.pub. Tuttavia, se vuoi auto-ospitare bore sulla tua rete, puoi farlo con il seguente comando:
bore server
Tutto qui! Dopo che il server è in esecuzione a un dato indirizzo, puoi aggiornare il comando bore local con l'opzione --to <INDIRIZZO> per inoltrare una porta locale a questo server remoto.
È possibile specificare indirizzi IP diversi per il server di controllo e per i tunnel. Questa configurazione è utile nei casi in cui potresti volere il server di controllo su una rete privata mentre permetti connessioni tunnel su un'interfaccia pubblica, o viceversa.
Le opzioni complete per il comando bore server sono mostrate di seguito.
Runs the remote proxy server
Usage: bore server [OPTIONS]
Options:
--min-port <MIN_PORT> Minimum accepted TCP port number [env: BORE_MIN_PORT=] [default: 1024]
--max-port <MAX_PORT> Maximum accepted TCP port number [env: BORE_MAX_PORT=] [default: 65535]
-s, --secret <SECRET> Optional secret for authentication [env: BORE_SECRET]
--bind-addr <BIND_ADDR> IP address to bind to, clients must reach this [default: 0.0.0.0]
--bind-tunnels <BIND_TUNNELS> IP address where tunnels will listen on, defaults to --bind-addr
-h, --help Print help
C'è una porta di controllo implicita sulla 7835, usata per creare nuove connessioni su richiesta. All'inizializzazione, il client invia un messaggio "Hello" al server sulla porta di controllo TCP, chiedendo di inoltrare una porta remota selezionata. Il server risponde quindi con un acknowledgment e inizia ad ascoltare connessioni TCP esterne.
Ogni volta che il server ottiene una connessione sulla porta remota, genera un UUID sicuro per quella connessione e lo invia di nuovo al client. Il client apre quindi uno stream TCP separato verso il server e invia un messaggio "Accept" contenente l'UUID su quello stream. Il server quindi inoltra le due connessioni tra di loro.
Per ragioni di correttezza e per evitare perdite di memoria, le connessioni in arrivo vengono memorizzate dal server solo per un massimo di 10 secondi prima di essere scartate se il client non le accetta.
In un deployment personalizzato di bore server, puoi opzionalmente richiedere un segreto per impedire che il server venga usato da altri. Il protocollo richiede che i client verifichino il possesso del segreto su ogni connessione TCP rispondendo a sfide casuali sotto forma di codici HMAC. (Questo segreto viene usato solo per l'handshake iniziale, e nessun ulteriore traffico è crittografato per impostazione predefinita.)
# on the server
bore server --secret my_secret_string
# on the client
bore local <LOCAL_PORT> --to <TO> --secret my_secret_string
Se un segreto non è presente negli argomenti, bore tenterà anche di leggere dalla variabile d'ambiente BORE_SECRET.
Creato da Eric Zhang (@ekzhang1). Concesso in licenza sotto la licenza MIT.
L'autore desidera ringraziare i contributori e i manutentori del progetto Tokio per aver reso possibile scrivere servizi di rete ergonomici ed efficienti in Rust.