
रस्ट में एक सरल TCP टनल जो स्थानीय पोर्ट को रिमोट सर्वर पर एक्सपोज़ करता है, NAT फ़ायरवॉल को बायपास करता है। हल्का, स्व-होस्ट करने योग्य, और इंस्टॉल करने में आसान।
Rust में लिखा एक आधुनिक, सरल TCP टनल जो स्थानीय पोर्ट को दूरस्थ सर्वर पर उजागर करता है, मानक NAT कनेक्शन फ़ायरवॉल को बायपास करता है। यह बस इतना ही करता है: न अधिक, न कम।

# Installation (requires Rust, see alternatives below)
cargo install bore-cli
# On your local machine
bore local 8000 --to bore.pub
यह आपके स्थानीय पोर्ट localhost:8000 को सार्वजनिक इंटरनेट पर bore.pub:<PORT> पर उजागर करेगा, जहाँ पोर्ट नंबर यादृच्छिक रूप से निर्दिष्ट किया जाता है।
localtunnel और ngrok के समान, सिवाय इसके कि bore TCP ट्रैफ़िक को फ़ॉरवर्ड करने के लिए एक अत्यधिक कुशल, अविवादित उपकरण है जो स्थापित करने में सरल और स्वयं-होस्ट करने में आसान है, बिना किसी अतिरिक्त सुविधा के।
(bore सुरक्षित, async Rust कोड की लगभग 400 पंक्तियों का है और सेट अप करना बहुत आसान है — बस क्लाइंट और सर्वर के लिए एक एकल बाइनरी चलाएँ।)
bore Homebrew कोर फॉर्मूला के रूप में पैक किया गया है।
brew install bore-cli
bore AUR में bore के रूप में उपलब्ध है।
yay -S bore # or your favorite AUR helper
bore gentoo-zh ओवरले में उपलब्ध है।
sudo eselect repository enable gentoo-zh
sudo emerge --sync gentoo-zh
sudo emerge net-proxy/bore
अन्यथा, bore को स्थापित करने का सबसे आसान तरीका प्रीबिल्ट बाइनरीज़ से है। ये macOS, Windows और Linux के लिए रिलीज़ पेज पर उपलब्ध हैं। बस अपने प्लेटफ़ॉर्म के लिए उपयुक्त फ़ाइल को अनज़िप करें और bore निष्पादन योग्य को अपने PATH में एक फ़ोल्डर में ले जाएँ।
आप Cargo, Rust पैकेज मैनेजर का उपयोग करके bore को स्रोत से भी बना सकते हैं। यह कमांड bore बाइनरी को एक उपयोगकर्ता-सुलभ पथ पर स्थापित करता है।
cargo install bore-cli
हम प्रत्येक रिलीज़ के लिए संस्करणित Docker इमेज भी प्रकाशित करते हैं। इमेज AMD 64-बिट आर्किटेक्चर के लिए बनाई गई है। वे विशिष्ट संस्करण के साथ टैग की गई हैं और आपको न्यूनतम "scratch" कंटेनर से स्थिर रूप से लिंक की गई bore बाइनरी चलाने की अनुमति देती हैं।
docker run -it --init --rm --network host ekzhang/bore <ARGS>
यह खंड bore CLI कमांड के विस्तृत उपयोग का वर्णन करता है।
आप bore local कमांड का उपयोग करके अपनी स्थानीय मशीन पर एक पोर्ट को अग्रेषित कर सकते हैं। यह एक स्थितीय तर्क लेता है, अग्रेषित करने के लिए स्थानीय पोर्ट, साथ ही एक अनिवार्य --to विकल्प, जो दूरस्थ सर्वर का पता निर्दिष्ट करता है।
bore local 5000 --to bore.pub
आप वैकल्पिक रूप से एक --port विकल्प पास कर सकते हैं ताकि रिमोट पर एक विशिष्ट पोर्ट चुन सकें, हालाँकि यदि यह पोर्ट उपलब्ध नहीं है तो कमांड विफल हो जाएगा। साथ ही, --local-host पास करने से आप लूपबैक पते localhost के अलावा अपने स्थानीय क्षेत्र नेटवर्क पर एक अलग होस्ट को उजागर कर सकते हैं।
पूर्ण विकल्प नीचे दिखाए गए हैं।
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
जैसा कि स्टार्टअप निर्देशों में उल्लेख किया गया है, bore.pub पर चलने वाला bore सर्वर का एक सार्वजनिक उदाहरण है। हालाँकि, यदि आप अपने नेटवर्क पर bore को स्वयं-होस्ट करना चाहते हैं, तो आप निम्नलिखित कमांड के साथ ऐसा कर सकते हैं:
bore server
बस इतना ही चाहिए! सर्वर किसी दिए गए पते पर चलना शुरू करने के बाद, आप एक स्थानीय पोर्ट को इस दूरस्थ सर्वर पर अग्रेषित करने के लिए bore local कमांड को विकल्प --to <ADDRESS> के साथ अपडेट कर सकते हैं।
नियंत्रण सर्वर और टनल के लिए अलग-अलग IP पते निर्दिष्ट करना संभव है। यह सेटअप उन मामलों के लिए उपयोगी है जहाँ आप नियंत्रण सर्वर को एक निजी नेटवर्क पर रखना चाहते हैं जबकि टनल कनेक्शन को सार्वजनिक इंटरफ़ेस पर अनुमति देना चाहते हैं, या इसके विपरीत।
bore server कमांड के पूर्ण विकल्प नीचे दिखाए गए हैं।
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
एक अंतर्निहित नियंत्रण पोर्ट 7835 पर है, जिसका उपयोग मांग पर नए कनेक्शन बनाने के लिए किया जाता है। आरंभीकरण पर, क्लाइंट TCP नियंत्रण पोर्ट पर सर्वर को एक "Hello" संदेश भेजता है, जो एक चयनित दूरस्थ पोर्ट को प्रॉक्सी करने के लिए कहता है। सर्वर तब एक स्वीकृति के साथ प्रतिक्रिया करता है और बाहरी TCP कनेक्शनों को सुनना शुरू करता है।
जब भी सर्वर को रिमोट पोर्ट पर एक कनेक्शन मिलता है, तो वह उस कनेक्शन के लिए एक सुरक्षित UUID उत्पन्न करता है और इसे क्लाइंट को वापस भेजता है। क्लाइंट फिर सर्वर के लिए एक अलग TCP स्ट्रीम खोलता है और उस स्ट्रीम पर UUID युक्त एक "Accept" संदेश भेजता है। सर्वर तब दोनों कनेक्शनों को एक दूसरे के बीच प्रॉक्सी करता है।
शुद्धता कारणों और मेमोरी लीक से बचने के लिए, आने वाले कनेक्शन सर्वर द्वारा अधिकतम 10 सेकंड तक संग्रहीत किए जाते हैं, यदि क्लाइंट उन्हें स्वीकार नहीं करता है तो उन्हें त्याग दिया जाता है।
bore server की एक कस्टम तैनाती पर, आप वैकल्पिक रूप से एक गुप्त की आवश्यकता कर सकते हैं ताकि सर्वर का उपयोग दूसरों द्वारा न किया जा सके। प्रोटोकॉल के लिए आवश्यक है कि क्लाइंट प्रत्येक TCP कनेक्शन पर HMAC कोड के रूप में यादृच्छिक चुनौतियों का उत्तर देकर गुप्त के कब्जे को सत्यापित करें। (यह गुप्त केवल प्रारंभिक हैंडशेक के लिए उपयोग किया जाता है, और डिफ़ॉल्ट रूप से कोई आगे का ट्रैफ़िक एन्क्रिप्ट नहीं किया जाता है।)
# on the server
bore server --secret my_secret_string
# on the client
bore local <LOCAL_PORT> --to <TO> --secret my_secret_string
यदि तर्कों में कोई गुप्त मौजूद नहीं है, तो bore BORE_SECRET पर्यावरण चर से पढ़ने का भी प्रयास करेगा।
Eric Zhang (@ekzhang1) द्वारा बनाया गया। MIT लाइसेंस के तहत लाइसेंस प्राप्त।
लेखक Tokio परियोजना के योगदानकर्ताओं और अनुरक्षकों को धन्यवाद देना चाहता है जिसने Rust में एर्गोनोमिक और कुशल नेटवर्क सेवाएँ लिखना संभव बनाया।