Ssh

埠上 TCP 連接的透明代理(大多數情況下,沒有 root 訪問權限)

  • March 11, 2015

我的客戶端機器位於 Internet 上的某個位置,它需要訪問位於內部的 Target 機器的自定義埠(或者,最初是任何可訪問機器上的任何埠,但最終是特定埠,例如 Target 上的 12345)一個專用網路,只接受來自該網路內機器的連接。

              |
Client --X-->  |   Target:12345
              |
(the Internet)   (private network)

沒有VPN

專用網路有一個 VPN 伺服器,但我在客戶端上沒有 root 訪問權限,我不能在那裡使用 (Open)VPN,因此,我無法輕鬆訪問專用網路。

沒有根的“門”

大概可以幫助 Client 到達 Target 的第一件事是可以從外部世界訪問的專用網路中的 Gate 機器,並且 Target 會接受來自 Gate 的 TCP 連接:

              |
Client --?--> Gate --ok--> Target:12345
              |

問題是在 Gate 設置透明 TCP 流量轉發,讓 Client 連接到 Gate$$ :some_port $$實際上會與 Target:12345 交談。

  • 如果我在 Gate 有 root 訪問權限,我會使用 iptables 透明地轉發到達 Gate 的 TCP 流量

$$ :chosen_port $$到目標:12345。但是,我在 Gate 沒有 root 訪問權限(不過,我在那裡有使用者級別的訪問權限並且可以通過 SSH 訪問它)。

  • 如果我對 Target 有 SSH 訪問權限,我將在 Target 和 Gate 之間建立一個 SSH 隧道,使客戶端可以通過該隧道訪問 Target;但是,我在 Target 上沒有 SSH 訪問權限(事實上,我對 ​​Target 唯一能做的就是在專用網路中與其埠 12345 建立 TCP 連接)。

是否可以建立上述 TCP 轉發,在 Client 和 Gate 都沒有 root 並且沒有對 Target 的 SSH 訪問?如果答案是否定的,那麼還有一個後續問題。

沒有根的“門”+有根的“內部人員”

除了 Gate,專用網路還有機器 Insider,我確實有 root 訪問權限。

              |
Client -ssh-> Gate -ssh-> Insider --?--> Target:12345
              |

從 Insider 到 Gate 建立了反向 SSH 隧道,因此客戶端可以 SSH 到 Insider,理論上,Insider 可以(“手動”)與 Target 的 12345 埠建立 TCP 連接。但是,它並不完全是我正在尋找的透明 TCP 流量轉發解決方案。

在後一種情況下,我在 Insider 上的 root 訪問權限能否幫助透明地將流量從 Client 轉發到 Target:12345?

任何建議都非常感謝!

您可以使用 ssh 埠轉發

ssh user@work.example.org -L 10000:172.16.10.10:10000

在您可以連接到 localhost:10000 之後,實際上您將連接到 172.16.10.10:10000 的服務

您還可以使用 ssh -D 參數創建“代理”。

引用自:https://unix.stackexchange.com/questions/189448