一、 概念理解 FTP的主動、被動模式讓人很煩,相信你認真看完下麵的描述就不會再煩了! 由於歷史原因,FTP服務預設需要有2個埠20(數據埠),21(控制埠) FTP服務的最初的工作過程是:Client請求Server的21埠建立控制連接,然後Server主動用20埠去連Client建立數 ...
一、 概念理解
FTP的主動、被動模式讓人很煩,相信你認真看完下麵的描述就不會再煩了!
由於歷史原因,FTP服務預設需要有2個埠20(數據埠),21(控制埠)
FTP服務的最初的工作過程是:Client請求Server的21埠建立控制連接,然後Server主動用20埠去連Client建立數據連接,結果總是被Client的防火牆拒之門外。(主動模式)
Server畢竟是為大多數人服務的,這樣低三下四又幹不成事固然不行,於是為瞭解決服務端被拒之門外的問題,被動模式誕生了:Client請求Server的21埠建立控制連接,然後Server告訴Client我開了哪幾個數據埠,你自己來連。(被動模式)
2種模式的區別總結為一句話:前提都是Client去請求Server建立控制連接,不同的是誰來發起數據連接。
二、 故障案例分析
FTP伺服器公網IP為:124.x.x.x 內網IP:192.168.1.85 服務端為Vsftpd
故障如圖(連接超時):
當我看到這個問題的時候,我並不知所措,也沒有仔細去分析連接的過程,我習慣性的用工具連接了一下,因為我相信工具某些方面比人更強大,果然我用CuteFTP連接正常,於是我看工具連接的日誌,註意到了一句話:
這句話是什麼意思呢?為什麼要替換呢?
我們來分析一下過程:
-
Client向Server(公網IP)發出控制連接申請並通過賬號密碼驗證
-
Client向Server發出PASV命令進入被動模式
-
Server向Client返回的是監聽IP(192.168.1.85)和數據傳輸埠(38*256+254=9982)
-
Client發現返回的IP(192.168.1.85)和之前發出的連接(124.x.x.x)不同,Client自行修改IP為正確的公網IP
-
Client向124.x.x.x的9982埠發出數據連接申請,建立數據連接
這個分析完之後,我們再回過頭來看用命令連接時出現的問題,不難看出,是卡在了Client向Server端發出數據連接申請的時候了,為什麼?因為我們命令模式不是智能的,不會自己將Server返回的內網IP轉成公網IP,所以連192.168.1.85返回超時。
然後分析的就是為什麼會只返回內網IP?
原來,公網IP並不是配在該服務端的,而是通過路由界面 進行綁定的,所以FTP服務端程式只知道存在一個內網的IP。
解決辦法:配置文件寫入pasv_address=公網IP
# man vsftpd.conf