Networking

SSH 隧道通過第三個伺服器連接 2 個伺服器

  • May 29, 2017

我有 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. 使用本地埠轉發
  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

稍後我將解釋動態埠轉發

引用自:https://serverfault.com/questions/851287