現代,簡單的TCP隧道,將本地端口暴露於遠程服務器,繞過標準的NAT連接防火牆。這就是全部:不再,而且不再如此。
#安裝(需要生鏽,請參見下面的替代方案)貨物安裝孔 - CLI#在您的本地機器bore本地8000 - bore.pub
這將使您在localhost:8000
將您的本地端口曝光到bore.pub:<PORT>
,其中端口號被隨機分配。
與LocalTunnel和Ngrok類似,除了bore
外,旨在是一種高效,未開放的工具,用於轉發TCP流量,易於安裝,易於自我託管,沒有裝飾。
( bore
總計約400行安全,異步生鏽代碼,並且可以設置很瑣碎 - 只需為客戶端和服務器運行一個二進製文件即可。)
如果您在MacOS上, bore
將作為自製核心配方包裝。
釀造孔CLI
否則,安裝孔的最簡單方法來自預建二進制。這些可在MacOS,Windows和Linux的版本頁面上找到。只需解壓縮適當的平台文件,然後將bore
可執行即可移動到路徑上的文件夾中。
您還可以使用Rust Package Manager Cargo從源頭建造bore
。此命令將bore
安裝在用戶訪問路徑上。
貨物安裝鑽孔
我們還為每個版本發布版本的Docker圖像。該圖像是為AMD 64位體系結構而構建的。它們標記為特定版本,並允許您從最小的“刮擦”容器中運行靜態連接的bore
。
docker run - it-init -rm -network主機ekzhang/bore <args>
本節介紹了bore
CLI命令的詳細用法。
您可以使用bore local
命令在本地計算機上轉發端口。這需要一個位置參數,要轉發的本地端口以及強制性--to
選項,該選項指定了遠程服務器的地址。
孔本地5000-孔。
您可以選擇傳遞--port
選項,以在遙控器上選擇特定端口以公開,儘管如果此端口不可用,則命令將失敗。此外,通過--local-host
除了Loopback地址localhost
外,您可以在局域網上公開其他主機。
完整選項如下所示。
啟動遠程服務器的本地代理 用法:bore local [options] - to <to> <local_port>參數:<local_port>曝光的本地端口 選項: -l, - 本地主持人<主機>露出的本地主機[默認:localhost] -t, - to <到>遠程服務器的地址,將本地端口暴露於[env:bore_server =] -p,-port <port>在遠程服務器上的可選端口以選擇[默認值:0] -s, - 秘密<Secret>身份驗證的可選秘密[env:bore_secret] -h, - 螺旋打印幫助信息
如啟動說明中所述,在bore.pub
上運行的bore
服務器的公共實例。但是,如果您想在自己的網絡上進行自主bore
,則可以使用以下命令這樣做:
孔服務器
這就是全部!服務器開始以給定地址運行後,您可以使用選項更新bore local
命令--to <ADDRESS>
將本地端口轉發到此遠程服務器。
bore server
命令的完整選項如下所示。
運行遠程代理服務器 用法:孔服務器[選項] 選項: -Min-port <min_port>最低接受的TCP端口號[默認值:1024,env:bore_min_port] -max-port <ax_port>最大接受的TCP端口號[默認值:65535,env:bore_max_port] -s, - 秘密<Secret>身份驗證的可選秘密[env:bore_secret] -h, - 螺旋打印幫助信息
7835
處有一個隱式控制端口,用於按需創建新的連接。在初始化時,客戶端將“ Hello”消息發送給TCP控制端口的服務器,要求代理選定的遠程端口。然後,服務器以確認響應,並開始聆聽外部TCP連接。
每當服務器在遠程端口上獲得連接時,它就會為該連接生成安全的UUID,並將其發送回客戶端。然後,客戶端將單獨的TCP流向服務器打開,並發送包含該流上UUID的“接受”消息。然後,服務器將兩個連接彼此之間。
出於正確的原因,為了避免內存洩漏,服務器僅由服務器存儲長達10秒鐘,然後如果客戶端不接受,則將其丟棄。
在自定義的bore server
上,您可以選擇需要一個秘密來防止其他人使用的服務器。該協議要求客戶通過以HMAC代碼的形式回答隨機挑戰來驗證每個TCP連接上的秘密。 (此秘密僅用於初始握手,默認情況下沒有進一步的流量。)
#在serverbore服務器上 - 銷售my_secret_string#clientbore local <local_port> - to <to> - scret my_secret_string
如果參數中不存在秘密,則bore
還將嘗試從BORE_SECRET
環境變量中讀取。
由Eric Zhang(@ekzhang1)創建。根據MIT許可獲得許可。
作者要感謝Tokio項目的貢獻者和維護者,以使在Rust中撰寫符合人體工程學和高效的網絡服務成為可能。