天天看點

SSH 端口轉發之圖解

綁定本地端口

既然SSH可以傳送資料,那麼我們可以讓那些不加密的網絡連接配接,全部改走SSH連接配接,進而提高安全性。

假定我們要讓8080端口的資料,都通過SSH傳向遠端主機,指令就這樣寫:

  $ ssh -D 1080 user@host

SSH會建立一個socket,去監聽本地的1080端口。一旦有資料傳向那個端口,就自動把它轉移到SSH連接配接上面,發往遠端主機。可以想象,如果1080端口原來是一個不加密端口,現在将變成一個加密端口。

本地端口轉發

有時,綁定本地端口還不夠,還必須指定資料傳送的目标主機,進而形成點對點的"端口轉發"。為了差別後文的"遠端端口轉發",我們把這種情況稱為"本地端口轉發"(Local forwarding)。

假定Clien是本地主機,mailhost是遠端主機。由于種種原因,這兩台主機之間無法連通。但是,另外還有一台sshhost,可以同時連通前面兩台主機。是以,很自然的想法就是,通過sshhost,将client連上mailhost。

我們在Client執行下面的指令:

  $ ssh -L 2025:mailhost:25 sshhost

指令中的L參數一共接受三個值,分别是"本地端口:目标主機:目标主機端口",它們之間用冒号分隔。這條指令的意思,就是指定SSH綁定本地端口2025,然後指定sshhost将所有的資料,轉發到目标主機mailhost的25端口(假定host2運作mail server ,預設端口為25)。

這樣一來,我們隻要連接配接local的2025端口,就等于連上了mailhost的25端口。

  $ telnet localhost:2025

"本地端口轉發"使得client和mail server之間仿佛形成一個資料傳輸的秘密隧道,是以又被稱為"SSH隧道"。

SSH 端口轉發之圖解

十、遠端端口轉發

既然"本地端口轉發"是指綁定本地端口的轉發,那麼"遠端端口轉發"(remote forwarding)當然是指綁定遠端端口的轉發。

還是接着看上面那個例子,Client 與mail server之間無法連通,必須借助sshhost轉發。但是,特殊情況出現了,sshhost是一台内網機器,它可以連接配接外網的Client,但是反過來就不行,外網的Client連不上内網的sshhost。這時,"本地端口轉發"就不能用了,怎麼辦?

解決辦法是,既然sshhost可以連Client,那麼就從sshhost上建立與Client的SSH連接配接,然後在Client上使用這條連接配接就可以了。

我們在sshhost執行下面的指令:

  $ ssh -R 2025:mailhost:25 Client

R參數也是接受三個值,分别是"遠端主機端口:目标主機:目标主機端口"。這條指令的意思,就是讓Client監聽它自己的2025端口,然後将所有資料經由sshhost,轉發到mailhost的25端口。由于對于sshhost來說,mailserver是遠端主機,是以這種情況就被稱為"遠端端口綁定"。

綁定之後,我們在Client就可以連接配接mailserver了:

這裡必須指出,"遠端端口轉發"的前提條件是,兩台主機都有sshD和ssh用戶端。

www.jiangyexiang.com

QQ×××流:283605880