SSH埠轉發與二次轉發
SSH Tunneling
SSH埠轉發功能通過ssh隧道方式,在本地埠和遠端伺服器的某個服務之間建立轉發關係,而SSH連線充當了轉發服務流量的隧道。從安全性來說,正確配置的SSH伺服器有很高的安全性,而SSH Tunneling可以轉發任意的服務,避免了將其他機器或埠暴露給外網。
如下圖所示,Xshell客戶端首先連線到公網IP地址x.y.160.14,ssh連線建立之後,根據配置的轉發規則,在Xshell客戶端所在主機的本地15902埠和目標伺服器172.26.0.17的5900埠之間建立了轉發關係。VNC客戶端訪問本地15902埠即相當於訪問172.26.0.17的5900埠VNC服務。在一個SSH連線上,可以建立多個轉發規則,如圖中的172.26.0.17,172.26.0.18,172.26.0.19。SSH伺服器x.y.160.14的內網地址是172.26.0.14,SSH伺服器和轉發目標通常位於同一個網段。
二次轉發
有時僅轉發一次還不能方便訪問到位於遠端的、內網的服務,而是需要做兩次跳轉。
例如,首先SSH到伺服器A,作為跳板機,只能從伺服器A再SSH登入伺服器B,最後要訪問的web服務位於伺服器C,伺服器C跟伺服器B在同一個內網網段。
第一層轉發規則建立在伺服器A的SSH連線上,可以表示為
ssh(serverA, 22) -> tunnel1(localhost:localport1) -> serverB:22
serverA是10.x.y.19,serverB是202.x.y.204,localport1是22222。
第二層轉發規則建立在localhost:localport1這個ssh服務的連線上,可以表示為
ssh(localhost, localport1) -> tunnel2(localhost:localport2) -> serverC:80
serverC是192.168.x.196,localport2是10080。
綜合起來,做了兩次隧道轉發,tunnel1(localhost:localport1) 在外層,tunnel2(localhost:localport2)在內層。沿著這種思路,可以實現多層轉發。
最後,開啟瀏覽器訪問本地10080埠,資料將依次通過tunnel2和tunnel1,最終訪問到遠端的serverC的服務。