使用 @nwtgck 的管道伺服器作為中繼的安全性、多路復用 TCP/UDP 連接埠轉送器。主要設計用於(多個)NAT/防火牆後面的對等點之間的 p2p 連接。
有關IPFS的特殊情況,請參閱下面的#examples。
ID:每個節點都有一個唯一的(base64)ID -
tunnel -i
ID 與硬體(MAC 位址)和環境變數 USER、HOME 和 HOSTNAME 綁定。與您的同行一勞永逸地分享。注意:同一台機器上的兩個使用者被賦予不同的節點 ID,因為他們的 USER 和 HOME 變數不同。
伺服器模式:向與您共享任何秘密字串的對等方公開您的本機連接埠 -
tunnel [options] [-u] [-k < shared-secret > ] < local-port >
客戶端模式:將您的本機連接埠轉送到對等方公開的本機連接埠 -
tunnel [options] [-u] [-k < shared-secret > ] [-b < local-port > ] [-I < IP > ] < peer-ID:peer-port >
如果使用-b
選項未提供本地端口,則tunnel
將使用隨機未使用的端口。使用的連接埠始終在標準輸出中報告。
當用戶端在筆記型電腦上運行且偶爾連接到伺服器所在的 LAN 時, -I
選項非常方便。當可以在 LAN 上找到伺服器且私人 IP = <IP>
時, tunnel
將透過 LAN 進行連線。
客戶端和伺服器必須使用相同的金鑰才能相互連線。也可以使用環境變數TUNNEL_KEY
傳遞秘密字串。使用-k
傳遞的秘密優先。
-u
標誌表示使用 UDP 而不是預設的 TCP。如果使用,則必須由雙方使用。
預設情況下,所有日誌都位於 stderr。然而,使用-l <logfile>
選項,可以在背景(守護程式模式)啟動tunnel
,並將日誌轉儲到<logfile>
。守護進程 ID 在啟動期間向使用者顯示,以便他可以隨時終止守護進程
tunnel -K < procID >
選項:
有關選項的完整列表,請參閱: tunnel -h
下載:
curl -LO https://raw.githubusercontent.com/SomajitDey/tunnel/main/tunnel
使其可執行:
chmod +rx ./tunnel
然後在系統範圍內安裝:
./tunnel -c install
如果您沒有sudo
權限,您可以本地安裝:
./tunnel -c install -l
安裝後隨時更新:
tunnel -c update
程式只是一個可執行的bash
腳本,依賴標準GNU工具,包括socat
、 openssl
、 curl
、 mktemp
、 cut
、 awk
、 sed
、 flock
、 pkill
、 dd
、 xxd
、 base64
等,這些工具在標準Linux發行版上很容易獲得。
如果您的系統缺少任何這些工具,並且您沒有從本機軟體包儲存庫安裝它所需的sudo
權限(例如sudo apt-get install <package>
),請嘗試下載便攜式二進位檔案並在本地安裝它${HOME}/.bin
。
SSH :
對等點 A 公開本地 SSH 連接埠 -
tunnel -k " ${secret} " 22
對等點 B 連線 -
tunnel -b 67868 -k " ${secret} " -l /dev/null " ${peerA_ID} :22 " # Daemon due to -l
ssh -l " ${login_name} " -p 67868 localhost
IPFS :
讓對等點 A 具有 IPFS-peer-ID: 12orQmAlphanumeric
。她的 IPFS 守護程序偵聽預設 TCP 連接埠 4001。
tunnel -k " ${swarm_key} " ipfs
swarm_key
只是對等點 A 可以用來控制誰可以使用tunnel
swarm 連接到她的任何秘密字串。
對等點 B 現在與對等點 A 連接以進行檔案共用、pubsub 或 p2p -
tunnel -k " ${swarm_key} " 12orQmAlphanumeric
最後一個命令 swarm 透過管道伺服器中繼連接到對等點 A,並在後台每隔幾秒鐘保持 swarm 連線以保持連線處於活動狀態。
tunnel
會在背景啟動 IPFS 守護程序(如果尚未啟動)。
IPFS 儲存庫的路徑可以使用選項-r
傳遞。否則,照常使用環境變數IPFS_PATH
或預設路徑~/.ipfs
。範例: tunnel -r ~/.ipfs -i
給出 IPFS 對等 ID。
遠端外殼:
假設您經常需要從家用電腦在工作場所的 Linux 機器上啟動命令。由於某種原因,您不想/不能透過tunnel
使用 SSH。
在工作場所電腦上,公開一些隨機的本機 TCP 端口,例如 49090 並將 shell 連接到該端口:
tunnel -l " /tmp/tunnel.log " -k " your secret " 49090 # Note the base64 node id emitted
socat TCP-LISTEN:49090,reuseaddr,fork SYSTEM: ' bash 2>&1 '
回到你家:
tunnel -l " /dev/null " -b 5000 -k " your secret " " node_id_of_workplace:49090 "
rlwrap nc localhost 5000
使用 rlwrap 不是必需的。但它確實讓體驗更加甜蜜,因為它使用 GNU Readline 並記住輸入歷史記錄(可以使用向上/向下箭頭鍵訪問,類似於本地 bash 會話)。
雷迪斯:
需要連接到由同行或您自己託管的遠端 Redis 實例?在遠端主機上,使用tunnel
公開redis-server
運行的TCP連接埠(預設:6379)。
在本機上,使用tunnel
將 TCP 連接埠轉送到遠端連接埠。將您的redis-cli
指向轉送的本機連接埠。
以下是我能想到的一些tunnel
的隨機用例。從廣義上講,任何涉及 NAT/防火牆穿越(例如不帶 TURN 的 WebRTC)或加入遠端 LAN 的內容都應該發現tunnel
很有用。以下一些想法相當粗略,根本沒有經過測試,並且可能行不通,但至少暫時記錄在這裡,只是為了獲得靈感。如果您發現這些有用或無用,或者您發現了tunnel
的全新應用程序,請在討論中發布。我測試過的那些案例被標記為“工作”。
tunnel
從辦公室內的節點轉送到的本機連接埠。tunnel
(免費)並將存儲在環境變量PORT
中的端口轉發到您想要公開的本地端口。您的公開 URL 為:https://your-app-name.herokuapp.com。tunnel
連接伺服器和客戶端即可。如果中繼使用 https, tunnel
會使用 TLS 加密對等方與中繼之間的所有流量。對等點之間本身不存在端對端加密。然而,管道伺服器中繼據稱是無儲存的。
只有當客戶端使用相同的金鑰 (TUNNEL_KEY) 時,用戶端才能與服務對等點連線。密鑰主要用於中繼階段的對等發現。對於轉送的本機連接埠的每個新連接,用戶端都會向服務對等方發送隨機會話金鑰。然後,對等方基於此隨機金鑰在另一個中繼點形成新連接,以進行實際的資料傳輸。局外人,即。不知道 TUNNEL_KEY 的壞人應該無法破壞此流程。
但是,惡意對等方可以執行以下操作。因為他知道服務對等體的 TUNNEL_KEY 和節點 ID,所以他可以模擬後者。因此,來自毫無戒心的連接對等方的資料將被轉發給模仿者,從而使真正的伺服器陷入飢餓。 tunnel
的未來更新/實作應該使用公鑰加密來處理這種威脅。 [在這種情況下,為每個要轉送的新連線產生的隨機會話金鑰將由真正的伺服器單獨解密]。
鑑於tunnel
本質上是傳輸層,以上幾點不應令人沮喪,因為大多數應用程式(例如 SSH 和 IPFS)都是在應用層加密資料。對所有資料傳輸進行端對端加密tunnel
只會增加延遲。但是,如果您選擇的話,您始終可以在使用tunnel
建立低階對等互連後建立 SSH 隧道。
tunnel
使用的預設中繼是 https://ppg.io。您也可以使用此清單中的其他一些公共中繼,或在免費服務(例如 Heroku 提供的服務)上託管您自己的實例。不用說,要連接,兩個對等點必須使用相同的中繼。
如果您願意,您也可以使用 sertain 等簡單工具編寫自己的中繼以供tunnel
使用。只需確保您的中繼服務具有與管道伺服器相同的 API。如果您的中繼程式碼是開源的,非常歡迎您在討論中介紹它。
gsocket;啟用電路中繼的 ipfs p2p ; go-管道-雙工;管道.me;上行鏈路;本機.運行;恩格羅克;本地隧道; sshreach.me(僅限限時免費試用);更多的
筆記:
tunnel
和管道伺服器,您可以簡單地部署自己的中繼實例,一勞永逸地與您的同行共享其公共 URL, export
與.bashrc
內的TUNNEL_RELAY
相同的內容,然後就可以開始了。此外,多個公共管道伺服器可用於冗餘。IPFS(完成):
連接到 IPFS 會簡單得多:
tunnel -k <secret> ipfs
用於公開, tunnel -k <secret> <IPFS_peerID>
用於連接。
如果離線,它們將自行啟動 IPFS 守護程序。後一個指令將以 30 秒的間隔重複群集連接到給定的對等點。 IPFS-peer-ID 將用作節點 ID,因此對等點不再需要單獨共用其節點 ID。非預設 IPFS 儲存庫路徑可以使用選項-r
傳遞。或IPFS_PATH
。
SSH:
在本機連接埠和對等連接埠之間建立 SSH 隧道非常簡單:
tunnel -k <secret> ssh
公開 &
tunnel -sk <secret> -b <local-port> <peerID>:<peer-port>
建立。
請注意,連線時不再需要提供登入名稱。預設以服務節點的${USER}
作為登入名稱。但是,如果需要,始終可以使用環境變數或選項傳遞非預設登入。
GPG:
虛擬機器(例如雲端外殼和測功機使用的虛擬機器)沒有持久的、唯一的硬體位址。因此,對於此類 VM,節點 ID 在會話之間不斷變化。未來的tunnel
將有一個-g
選項,它將 GPG 私鑰傳遞給tunnel
。節點 ID 將從該金鑰的指紋生成,類似於 IPFS 的做法。這也將使tunnel
更加安全。
氬氣2:
選項 [ -a
] 在使用前使用 argon2 對 TUNNEL_KEY 進行哈希處理,這樣較弱的秘密就不會太容易受到攻擊。
請回報問題中的錯誤。在討論中發表您的想法、評論、想法、用例和功能請求。如果有的話,請告訴我這對您有什麼幫助。
也請隨時直接寫信給我有關該項目的任何資訊。
如果這個小腳本對您有任何用處,一顆星星對我來說將是極大的鼓勵。
謝謝 ! ?