Networking
SSH 隧道通過第三個伺服器連接 2 個伺服器
我有 3 台伺服器,A是 Internet 上的公共可訪問伺服器。 B託管我要訪問的 Web 服務。 C具有連接到 A 和 B 的訪問權限。
現在我希望如果客戶端D嘗試訪問 A 上的一個特殊埠,他會被轉發給 B。
IP 和埠
A:
- 1.0.0.1:22 SSHD 伺服器
- 1.0.0.1:443 我想使用的公共埠
乙:
- 1.0.0.2:23 SSHD 伺服器
- 1.0.0.2:444 我要訪問的網路服務
C:
- 1.0.0.3
丁:
- 1.0.0.4
圖表:
+------------+ +------------+ | Client (D) +--------> Public (A) | +------------+ +-----^------+ | +----------------+ +-----------+ | Webservice (B) <----+ Proxy (C) | +----------------+ +-----------+
問題:
我需要在C上執行什麼 ssh 隧道命令,以便如果我嘗試在D上打開 1.0.0.1:443我會在 1.0.0.2:444 上託管服務?
在 C 上你可以執行
ssh -fNR 1.0.0.1:443:1.0.0.2:444 root@1.0.0.1
root
只有當您以使用者身份登錄時它才會起作用,因為443
它是一個特權埠。此外,它僅sshd
在 A 上配置為GatewayPorts
設置為yes
或時才有效clientspecified
。(預設是no
和 usingyes
不推薦,所以如果你想這樣做我推薦clientspecified
)。
這不是 SSH 隧道的工作方式。您可以接近您所描述的內容,但並不完全按照您繪製的方式。
您可以使用 2 個選項:
- 使用本地埠轉發
- 使用動態埠轉發
1)本地埠轉發
這需要你改變你的方法:隧道需要從客戶端打開,從圖中的 D 開始。這很容易實現,在客戶端(D)上只需做一個
ssh -L 443:1.0.0.2:444 user@1.0.0.3
當然,這需要您:
- 在 D 上具有 shell 訪問權限或 putty 客戶端
- 在 D 可以登錄的代理 (C) 上有一個使用者
- 能夠通過 ssh 從 D 連接到 C
- 在 C 上的伺服器配置中將 X11Forwarding 和 AllowTcpForwarding 設置為 yes
稍後我將解釋動態埠轉發