內網穿透 - SSH反向代理

SSH反向代理有着很廣泛的實際應用,

實例描述:
本人在家庭局域網放置有一個樹莓派主機(無公網ip),正常情況下只能在家庭局域網內通過
ssh連接這臺樹莓派主機,但如果本人想在其他地方(非本地局域網)對它進行遠程登陸,則需要進行SSH反向代理。

如下圖示例,我的樹莓派主機A可以ping通我的公網主機B(有公網IP),遠程操控的主機C也可以ping通我的公網主機B,主機A和C之間是無法直接連通,它們分屬兩個局域網。
在這裏插入圖片描述

SSH有個強大的功能就是端口轉發,那麼,我們可以利用ssh的端口轉發功能實現SSH反向代理登陸。如下操作:

登陸代理
反向代理
端口轉發
C
B
A

建立A機器到B機器的反向代理,
具體指令爲:

ssh -fCNR [B機器IP或省略]:[B機器端口]:[A機器的IP]:[A機器端口] [登陸B機器的用戶名@服務器IP] 

在這裏我使用了B機器的7280端口,以及A機器的22端口,按照上面的指令就是這樣子的操作

ssh -fCNR 7280:localhost:22 [email protected]

檢驗是否已經啓動了可以使用ps aux | grep ssh指令來查看:

建立B機器的正向代理,用來做轉發,具體指令爲

ssh -fCNL [A機器IP或省略]:[A機器端口]:[B機器的IP]:[B機器端口] [登陸B機器的用戶名@B機器的IP]
按照第3那裏輸入的指令,這裏的B機器的端口和上面的B機器的端口是一致的,端口1234的也是B機器的。

ssh -fCNL *:1234:localhost:7280 localhost

檢驗是否已經啓動了可以使用ps aux | grep ssh指令來查看:

至此我們都配置好了AB機器,那麼我們就可以從一部外網的電腦登陸到內網裏面去啦。鑑於我目前的電腦在內網,而服務器都是外網的(也就是配置的B機器),所以可以通過B機器連接到我內網的A中,具體指令爲:

ssh -p 1234 [email protected] 

在此-p參數爲指定登陸的IP,我們在上面指定了1234端口爲轉發端口,故用1234端口登陸,然後hostname是內網A機器的用戶名,123.123.123.123爲外網B機器的IP地址。

用autossh建立穩定隧道
以上步驟建立的SSH反向代理隧道是不穩定的,一旦斷掉就會非常麻煩,需要在A/B機器上重新建立鏈接,如果說你在只能操作另外的C機器的環境而無法控制A/B機器,那麼你將無法重建隧道。

centos7上沒有默認安裝autossh的,所以使用以下命令安裝:

yum install autossh

來看看具體的autossh的指令爲

autossh -M 7281 -fCNR 7280:localhost:22 [email protected] 

=================================================
Tips: SSH反向代理也可以應用到從公網訪問局域網的web服務,實現內網穿透,只要將端口轉發映射到80端口即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章