如何通過一對一的 NAT 建立 ssh 隧道
我需要一個從我家到私有 IP 10.4.100.6的 SSH 隧道,如下圖所示:
+-------+ +-----------------+ +------------+ +-------------+ | | | | | | | | | Home +----+ foo.example.com +--+ 10.4.100.5 +--+ 10.4.100.6 | | | | | | | | | +-------+ +-----------------+ +------------+ +-------------+
我對10.4.100.5和10.4.100.6具有 root 訪問權限。我對foo.example.com的訪問權限為零。當我 ssh 到foo.example.com時,我不知何故登陸了10.4.100.5,這是一個不同的主機。我們正在談論 4 個獨立的主機。我假設foo.example.com使用一對一的 NAT。
我試過:
ssh -L 8080:10.4.100.6:80 user@foo.example.com
沒運氣。有小費嗎?
***編輯:***事實證明隧道有效,但不適用於 websockets。連接
ws://localhost:8080
失敗:<snip> WebSocket connection to 'ws://localhost:8080/' failed: Error during WebSocket handshake: Unexpected response code: 200
起初我沒有意識到這一點。我以為連接掛了。
***編輯2:***我很抱歉,但我想通了。我沒有意識到該應用程序涉及 2 個伺服器:埠 80 上的 nginx 和埠 8080 上的 websocket 伺服器。我創建了 2 個單獨的 SSH 隧道,現在一切正常。我很困惑,因為我選擇的本地埠 8080 也是遠端 websocket 伺服器使用的埠。
總結:通過一對一的 NAT 創建 SSH 隧道沒有什麼特別的要求。
前提是
10.4.100.5
可以訪問,10.4.100.6:80
我不明白為什麼您的ssh -L 8080:10.4.100.6:80 user@foo.example.com
行不通。你可以遠端登錄/捲曲
10.4.100.6:80
嗎10.4.100.5
?如果不是,則可能是防火牆配置為10.4.100.6
禁止訪問埠 80,方法是斷開連接而不拒絕它。
您可以使用 OpenSSH 中的ProxyJump功能來乾淨地完成此操作。
ssh -J user@foo.example.com -L 8080:localhost:80 user@10.4.100.6
添加
-J user@foo.example.com
告訴 ssh 通過 foo.example.com 上動態設置的埠轉發連接到目標。如果您沒有設置 ssh 密鑰,系統將提示您輸入 foo.example.com 和 10.4.100.6 的密碼。如果這對您有用,您可以將其添加到本地
~/.ssh/ssh_config
以使其更容易。例如,Host 10.4.100.6 ProxyJump user@foo.example.com
然後,您無需
-J
在命令行上指定連接到 10.4.100.6。