SSH做反向 Proxy

來源:互聯網
上載者:User

標籤:

說實話,我對反向 Proxy這個概念並不熟悉,只是感覺以下要做的事是一個代理的逆向過程,故藉此名詞一用。

 

問題情境是這樣的:我有兩套Linux叢集的存取權限,分別為A和B,它們互相獨立。其中A、B叢集均能訪問外網,但只有A叢集有公網IP,所以從外網直接登入B就不行。要解決的問題就是從外網能登入到B叢集。

 

我對代理的理解是:一台不能訪問外網的機器,通過區域網路內一台可以訪問外網的機器代理服務,就能實現訪問外網的目的。

而我以為的反向 Proxy就是以上的逆向過程,這個肯定是可以做到的,比如:我們在外網要對某台區域網路內的Windows進行遠端桌面控制時就面臨IP地址非公網的問題,但QQ能遠端桌面卻能完成這樣的需求,區別就在於一個是被動受控,一個是主動請求受控;木馬什麼的,其實都是主動請求受控。

 

那麼,在Linux叢集之間,我該如何解決碰到的問題呢?以下是從http://portable.easylife.tw/entry/Reverse-SSH-Tunnel整理的部分內容,該內容正好能處理對應的需求。

 

通常用SSH Tunnel是用來完成類似代理的功能,

紅色地區可通過SSHTunnel訪問原本受限的綠色部分,這一招通常用來FQ。

反向Tunnel可以解決我實際碰到的問題:

通過反向的Tunnel就可以做到了,具體步驟如下(以下內容轉載而來,歡迎轉載而去):

 

樣本環境:

區域網路主機:

ServerA / Linux / user userA / ip192.168.0.123 / ssh port 22

ServerB / Linux / user userB / ip192.168.0.125 / ssh port 22

PC / Windows / ip 192.168.0.128 / 遠端桌面 port3389

遠程主機:

MyServer / Linux / user me / ip 1.2.3.4 /ssh port 22

 

ssh參數:

-N:不執行何指令

-f:後台執行

-R:建立reverse tunnel

 

樣本1:從MyServer ssh連回ServerA

[[email protected]] $ ssh -NfR2222:localhost:22 [email protected]

--------------------------------------------------------------

[[email protected]] $ netstat -tnl | grep 127.0.0.1

tcp       0      0 127.0.0.1:2222              0.0.0.0:*                   LISTEN 

[[email protected]] $ ssh [email protected] -p 2222

MyServer連到2222 port會轉向ServerA的ssh port,成功串連到ServerA

 

 

樣本2:從MyServer ssh連回ServerB

[[email protected]] $ ssh -NfR 2244:192.168.0.125:[email protected]

 --------------------------------------------------------------

[[email protected]] $ netstat -tnl | grep127.0.0.1

tcp       0      0 127.0.0.1:2244              0.0.0.0:*                   LISTEN 

[[email protected]] $ ssh [email protected] -p 2244

MyServer串連到原生2244 port會轉向到ServerB的ssh port,成功串連到ServerB

 

 

樣本3:從MyServer遠端桌面PC

 [[email protected]] $ ssh -NfR2266:192.168.0.128:3389 [email protected]

--------------------------------------------------------------

[[email protected]] $ netstat -tnl | grep127.0.0.1

tcp       0      0 127.0.0.1:2266              0.0.0.0:*                   LISTEN 

[[email protected]] $ rdesktop 127.0.0.1:2266

若你在Linux的案頭環境則可以直接display遠端桌面PC,不然就export DISPLAY到其他主機。

 

此外,為了防止反向的Tunnel斷開,還需要一個autossh工具,它可以協助斷線後自動重連。這個對我相當的重要,事實上我現在很少去B叢集所在的地方。

對樣本一做autossh可以如此做:

[[email protected]] $ autossh -M 12345-NfR2222:localhost:22 [email protected]

當然,為了防止叢集重啟或斷電等問題,可以將上語句寫到開機啟動指令碼裡。

 

以上的工作也可以通過putty完成,如樣本3可以如下設定:

xshell也能幹同樣的事:

趕緊試試吧~~~~

 

今天看到個好東西,補充一下。

再上文中做反向隧道後,只能在本機ssh localhost -p 來登入,想要從其他IP來卻不行,因為SSH本地連接埠轉寄綁定的是 lookback 介面。看網上博文http://blog.csdn.net/xyyangkun/article/details/7025854 說建立隧道時加-g參數可以實現,但我沒有成功。不過看完https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 後靈機一動,再建立個本機公網到本機localhost的隧道就OK了:

ssh -g -L 9099:localhost:2222 localhost

這樣就可以通過ssh 公網 -p 9099 來登入了!

SSH做反向 Proxy

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.