天天看點

linux下ssh端口轉發

假設現在有兩台伺服器client1,client2,他們直接不能直接互相通信,但是他們均能連接配接上第三台伺服器balance,我們可以在client1,client2和balance三台機器之間建立ssh隧道來讓client1和client2實作通信。

ssh端口轉發有三種實作方式:本地轉發,遠端轉發,和動态轉發。

定義簡稱:發起請求的伺服器(簡稱"startServer"),最終目标伺服器(簡稱“targetServer”),連接配接startServer和targetServer的伺服器(簡稱“bridgeServer”)

一. 準備工作

實作目标: startServer能通路bridgeServer但不能直接通路targetServer,bridgeServer可以通路targetServer;startServer通過bridgeServer做端口轉發可以間接通路targetServer。

1.1 伺服器IP:

startServer:伺服器guangzhou-IP  106.55.241.99

targetServer:伺服器new2-IP 106.55.171.53

bridgeServer:伺服器balance-IP 124.156.143.168

1.2 伺服器間通信狀态

 伺服器guangzhou:

 伺服器balance:

 現在上new2防火牆添加禁止guangzhou通路并重新開機firewalld服務:

 登陸guangzhou伺服器執行指令: telnet 106.55.171.53 22 ,結果無響應,說明防火牆禁止通路設定成功。

 目前guangzhou無法直連new2,可連接配接balance,balance可連接配接new2.

linux下ssh端口轉發

二. 配置端口轉發

2.1 本地轉發

指令:-L localport:remotehost:remotehostport sshserver

說明:localport          本機開啟的端口号

         remotehost      最終連接配接機器的IP位址

         remotehostport             轉發機器的端口号

         sshserver         轉發機器的IP位址

新開視窗打開guangzhou伺服器:

上面可見後面新開視窗通過通路9001端口可以連接配接上new2伺服器。

2.2 遠端轉發

指令:-R sshserverport:remotehost:remotehostport sshserver

說明:sshserverport           被轉發機器開啟的端口号

         remotehost          最終連接配接機器的IP位址

         remotehostport         被轉發機器的端口号

         sshserver                 被轉發機器的IP位址

遠端轉發就是做了一層請求代理服務,将指定用戶端IP和用戶端端口的請求轉發到指定第三方伺服器IP和端口。

2.3動态轉發

指令:-D localhost:localport -fN sshserver

以上通過設定guangzhou伺服器9200端口轉發已經可以正常請求new2伺服器上的web服務。

三. 使用實踐

假設guangzhou伺服器通路new2伺服器的mysql服務,mysql端口為3306,同之前一樣new2防火牆增加IP禁止guangzhou通路。

以下是php實作的例子。

優點

缺點

本地轉發

不用占用bridgeServer機器上新開端口(預設使用22端口)

占用startServer端口,bridgeServer的IP+端口,更換startServer後需要再次執行ssh指令

遠端轉發

不限制startServer的IP,bridgeServer執行一次可一直使用轉發服務

需要bridgeServer持續提供服務的話要啟用常住程序,占用bridgeServer機I/O資源

動态轉發

不需要bridgeServer提供常住程序服務,無需bridgeServer和targetServer指定端口

需要startServer占用端口,更換startServer後需要再次執行ssh指令

總的來說,三種轉發各有優缺點,本地轉發和遠端轉發需要時刻保證ssh隧道可用,動态轉發則不需要,可以按照自己需求設定即可。

至此,三種ssh端口轉發方式實踐完畢。

繼續閱讀