假設現在有兩台伺服器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.

二. 配置端口轉發
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端口轉發方式實踐完畢。