【linux】ftp使用端口轉發問題


相關資料:

1.【ssh】端口轉發

2.【ftp】主動模式和被動模式

 

先說結論:用端口轉發無法解決ftp客戶端與服務器的連接問題,原因是ftp的data端口不固定,不能把所有>1024的端口都做端口轉發

 

有如下三台機器:

1. ftp服務器  F (ftp)

2. 端口轉發用的跳板機  J  (jump)

3. 客戶端  C  (client)

其中,C要請求F的數據,但C無法連接F,F可以連接C,我們無法控制F,但可以控制J和C。J與F,C都可以連接,故作為中間跳板。

 

在C上建立端口轉發,C的2221端口映射F的21端口,即映射FTP的CMD端口

ssh -g -f -N -L 2221:<A>:21 username@<B> -22

注意:這里必須有-g  即開放轉發給所有ip使用。

原因:如果沒有-g,則C會監聽 127.0.0.1:2221,如果訪問<C>:2221則會被拒絕,而后面進行步驟⑦時會ftp的data通道會試圖連接127.0.0.1上的端口,導致錯誤。

使用-g后,就可以訪問<C>:2221了

 

在建立端口轉發后,采用主動模式的ftp連接過程如下圖所示:

 

①ftp客戶端像轉發端口2221請求建立cmd連接

②<C>:2221 通過 <J>:22 轉發請求

③<J>:22向ftp的cmd端口發送請求

④ftp的cmd端口響應<J>:22

⑤跳板返回響應

⑥<C>:2221返回響應  至此ftp的命令通道連接成功

⑦出問題的是在這一步,建立data通道時,ftp服務器企圖繞過J,直接與C連接。這是不可以的。

原因:

ftp實際上是與J建立了cmd連接,此時J告知ftp直接連接C,ftp發現cmd和data通道連接不同的ip自然會拒絕。

 

所以主動模式是行不通的。那看被動模式:

采用被動模式時,⑦的方向反過來了。需要C的data端口訪問F的data端口,但C的data端口不固定,所有>1024的都有可能,數量過大,不能都建立轉發。

所以,被動模式也是不行的.......

 

至此:得到結論,當ftp客戶端與服務器無法互聯時,無法通過端口轉發來解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM