■ 唐山市教育局電化教育館 方永亮
編者按: 筆者在為客戶重新部署在線教學平臺后,打開該網盤工具時,總報讀文件錯誤“Read File error!”,于是筆者進行了故障排查。
筆者為某單位部署的在線教學平臺提供了一款網盤工具。近期,為滿足大容量用戶訪問需求,筆者重新部署了該在線教學平臺。
此次部署首先將原單機部署更改為群集部署,并將數據庫服務器、負載均衡服務器、靜態文件服務器、緩存服務器、文件下載服務器、視頻點播服務器、視頻轉換服務器、Web服務器等支撐平臺運行的服務器部署在不同的服務器上,其中靜態文件服務器、緩存服務器、文件下載服務器、視頻點播服務器、視頻轉換服務器、WEB服務器等均部署了多臺服務器,分別做了負載均衡,整個在線教學平臺部署架構圖如圖1所示。

圖1 在線教學平臺部署架構圖
目前該在線教學平臺能滿足1萬多人同時訪問,基本滿足了客戶需求。平臺自帶的網盤工具支持拖拽上傳,可以上傳整個文件夾、上傳下載均支持斷點續傳,老師們已習慣使用平臺自帶的網盤工具上傳或下載數字化教學資源,重新部署平臺后,只要打開該網盤工具,總報讀文件錯誤“Read File error!”。這對習慣使用網盤工具上傳教學資源的老師們而言,很不方便。筆者為解決此問題,費勁了周折,終于排除了此故障,下面和大家分享故障排除過程。

圖2 FTP客戶端上傳/下載文件
打開平臺自帶的網盤工具后,可以看到窗口下方顯示的是“版本號1.2(FTP)”,估計此網盤工具是一個FTP客戶端工具,訪問的是FTP服務器。
于是筆者用一款經典的FTP工具LeadFTP直接連接FTP服務器,經過測試,LeadFTP不僅能連接到筆者部署的FTP服務器,也能正常上傳和下載文件,說明FTP服務器工作正常。
考慮到是在外網(公網)發現的網盤錯誤,如果在內網(校園網)沒有錯誤,說明是IP地址和端口映射問題,于是筆者在內網運行網盤工具,報同樣的錯誤。
從圖1所示在線教學平臺部署架構圖不難看出,無論是在外網還是在內網,只要使用網盤工具訪問平臺的網盤,都需要經過防火墻。筆者為了提升在線教學平臺的安全性能,限制內外網直接訪問平臺服務器,部署了該防火墻。筆者不僅在防火墻上做了端口限制,還做了網絡地址轉換(NAT)。難道是防火墻阻擋了網盤工具訪問FTP服務器?
于是筆者直接在FTP服務器上運行網盤工具,發現網盤工具可以正常運行,可以用它上傳或下載文件。于是筆者又在其他服務器上運行網盤工具,經過測試,網盤工具均能正常運行,說明網盤故障是由防火墻引起的。
筆者又用Telnet命令檢測FTP服務器端口號是打開還是關閉狀態。經過測試,FTP服務器只有監控端口16021處于打開狀態,數據端口16020是關閉狀態。
數據端口是關閉狀態,FTP服務器又能正常工作,是不是在做網絡地址轉換時,沒有將FTP服務器的端口都映射出去,筆者檢查了防火墻上的端口映射,發現FTP服務器端口16022-16422都做了端口映射,也就是說,FTP服務器的數據端口、監控端口和被動模式端口都做了映射,應該不是端口映射的問題。
經過上述操作,基本排除網盤工具程序問題、FTP服務器問題和端口映射問題。難道是端口映射不成功?用FTP工具LeadFTP上傳一個較大文件,在上傳過程用端口掃描工具掃描端口,發現只有監控端口16021處于打開狀態,數據端口16020和筆者設置的被動端口16022-16422都處于關閉狀態。
同樣,直接在FTP服務器上掃描端FTP服務器的端口,也只有監控端口16021處于打開狀態,數據端口16020和筆者設置的被動端口16022-16422都處于關閉狀態。
由此可見,給FTP服務器做的端口映射也沒有問題,為了研究FTP服務器的數據端口和被動模式端口為什么處于關閉狀態,筆者決定重新抓包分析FTP的工作原理。
FTP文件傳輸一般有主動模式(Port Mode)和被動模式(Passive Mode)兩種:
1.主動模式FTP連接雙方端口分析
在主動模式下,FTP客戶端上傳/下載文件的過程如圖2所示。
(1)FTP客戶端通過臨時端口發送一個TCP SYN(TCP同步)包給FTP服務端的監控端口21(默認情況下,FTP監控端口是21,后面步驟就用21代替監控端口)。
(2)FTP服務端通過監控端口21發送SYN ACK(同步應答)包給FTP客戶端的臨時端口。
(3)FTP客戶端通過臨時端口發送一個ACK(應答)包給FTP服務端的監控端口21。此時雙方的連接建立起來,FTP客戶端使用這個連接來發送命令,FTP服務端也使用這個連接來發送FTP應答。

圖3 自定義端口范圍
(4)當FTP客戶端需要獲取FTP服務器上的目錄列表、上傳文件或下載文件時,會發出相應請求,FTP客戶端使用的端口時臨時端口,數據包里包含客戶端的IP地址,它希望FTP客戶端打開數據連接時使用該端口。
(5)FTP服務端通過數據端口20發送一個SYN(同步)包給FTP客戶端的臨時端口(FTP服務器的默認數據端口為 20)。
(6)FTP客戶端通過臨時端口發送SYN ACK(同步應答)包給FTP服務端的數據端口20。
(7)FTP服務端通過20端口向FTP客戶端臨時端口發送一個ACK(應答)包。此時二者之間的數據連接就建立起來了。
(8)發送數據的主機以這個連接來發送數據,實現文件上傳和下載。
通過上述分析不難得出以下結論,如果FTP客戶端通過主動模式連接FTP服務端,需要先提供地址和端口,由FTP服務器去連接FTP客戶端的這個端口,這對于互聯網應用而言,讓FTP服務器連接客戶端是部現實的,畢竟多數FTP客戶端都是通過NAT連接互聯網的。
2.被動模式FTP連接雙方端口分析
如果FTP客戶端以被動方式發起連接請求,FTP客戶端會打開兩個本地端口N和 N+1,其中 N是由 FTP客戶端產生的,N一般大于等于1024。第一個端口N連接FTP服務器的21端口。和主動方式不同的是,FTP客戶端不會提交PORT命令并允許服務器來回連它的數據端口,而是提交PASV命令,此時FTP服務器會開啟一個任意的非特權端口P(端口號一般也大于1024),并發送PORT P命令給客戶端。然后客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。
通過上述分析不難看出,在被動模式下,是FTP客戶端連接FTP服務器提供的端口21和非特權端口P,不用FTP服務器連接FTP客戶端,也就是說,如果在互聯網環境,FTP客戶端適合以被動模式連接FTP服務器。
根據圖1所示平臺部署架構圖,無論校內訪問平臺,還是校外訪問平臺,都要經過防火墻。而且筆者為了平臺安全,將平臺單獨部署在一個網段內,平臺所有服務器構成一個私網,校內或校外不能直接訪問這些服務器,需通過防火墻才能訪問。通過上述對FTP工作模式及FTP連接雙方端口的分析,平臺網盤工具只能工作在被動模式。
在被動模式下,FTP客戶端需提交PASV命令,FTP服務器才會開啟一個任意的非特權端口P(端口號一般也大于1024)。一般的端口掃描工具,包括終端命令telnet在內,都不會發起PASV命令,FTP服務端也就不會開啟被動端口,這就是前面掃描FTP服務期被動端口時,FTP服務器被動端口處于關閉狀態的原因。同理,用LeadFTP等FTP工具能連接FTP服務器,能上傳或下載數據,但用端口掃描工具掃描FTP服務器端口時,不會發起PORT命令,FTP服務器不會建立數據連接,數據端口自然也處于關閉狀態。
老師們在使用平臺自帶的網盤工具時,報讀文件錯誤“Read File error!”,估計是FTP客戶端訪問不了FTP服務端的被動端口。如果正確設置FTP服務器,這個問題應該能正確解決。按照上述思路,筆者調整了FTP服務器的被動模式設置,排除了網盤故障。為了保護客戶單位平臺隱私,下面以FTP服務器FileZilla Server為例,介紹調整了FTP服務器的被動模式設置的過程。
其實,只要進入FTP服務器FileZilla Server被動模式設置頁面,就可以看到FileZilla后給出的提示信息:“如果你在NAT路由或防火墻后操控服務器,請使用自定義被動設置.這種情況下,在路由外部不可訪問服務器IP,所以你應該在此填入正確的地址. 使用端口范圍來限定需要穿過路由提交的端口號.”。
根據圖1所示平臺框架,FTP服務器在“NAT路由或防火墻后操控服務器”定義范圍內,所以需要自定義端口范圍,在本例中,定義了如圖3所示端口“16022-16422”,共定義了401個被動模式端口。在“用于被動模式傳輸的外部服務器IP地址”欄選擇“使用以下IP”,在地址欄輸入正確的IP地址,取消選擇“對本地連接不使用外部IP”,完成被動模式設置。
說明:為保護客戶隱私,本文(含圖片)涉及到的FTP服務器名稱、IP地址、端口均為虛擬信息。