■ 唐山市教育局電化教育館 方永亮
編者按: 筆者在為客戶重新部署在線教學(xué)平臺后,打開該網(wǎng)盤工具時,總報讀文件錯誤“Read File error!”,于是筆者進行了故障排查。
筆者為某單位部署的在線教學(xué)平臺提供了一款網(wǎng)盤工具。近期,為滿足大容量用戶訪問需求,筆者重新部署了該在線教學(xué)平臺。
此次部署首先將原單機部署更改為群集部署,并將數(shù)據(jù)庫服務(wù)器、負(fù)載均衡服務(wù)器、靜態(tài)文件服務(wù)器、緩存服務(wù)器、文件下載服務(wù)器、視頻點播服務(wù)器、視頻轉(zhuǎn)換服務(wù)器、Web服務(wù)器等支撐平臺運行的服務(wù)器部署在不同的服務(wù)器上,其中靜態(tài)文件服務(wù)器、緩存服務(wù)器、文件下載服務(wù)器、視頻點播服務(wù)器、視頻轉(zhuǎn)換服務(wù)器、WEB服務(wù)器等均部署了多臺服務(wù)器,分別做了負(fù)載均衡,整個在線教學(xué)平臺部署架構(gòu)圖如圖1所示。
圖1 在線教學(xué)平臺部署架構(gòu)圖
目前該在線教學(xué)平臺能滿足1萬多人同時訪問,基本滿足了客戶需求。平臺自帶的網(wǎng)盤工具支持拖拽上傳,可以上傳整個文件夾、上傳下載均支持?jǐn)帱c續(xù)傳,老師們已習(xí)慣使用平臺自帶的網(wǎng)盤工具上傳或下載數(shù)字化教學(xué)資源,重新部署平臺后,只要打開該網(wǎng)盤工具,總報讀文件錯誤“Read File error!”。這對習(xí)慣使用網(wǎng)盤工具上傳教學(xué)資源的老師們而言,很不方便。筆者為解決此問題,費勁了周折,終于排除了此故障,下面和大家分享故障排除過程。
圖2 FTP客戶端上傳/下載文件
打開平臺自帶的網(wǎng)盤工具后,可以看到窗口下方顯示的是“版本號1.2(FTP)”,估計此網(wǎng)盤工具是一個FTP客戶端工具,訪問的是FTP服務(wù)器。
于是筆者用一款經(jīng)典的FTP工具LeadFTP直接連接FTP服務(wù)器,經(jīng)過測試,LeadFTP不僅能連接到筆者部署的FTP服務(wù)器,也能正常上傳和下載文件,說明FTP服務(wù)器工作正常。
考慮到是在外網(wǎng)(公網(wǎng))發(fā)現(xiàn)的網(wǎng)盤錯誤,如果在內(nèi)網(wǎng)(校園網(wǎng))沒有錯誤,說明是IP地址和端口映射問題,于是筆者在內(nèi)網(wǎng)運行網(wǎng)盤工具,報同樣的錯誤。
從圖1所示在線教學(xué)平臺部署架構(gòu)圖不難看出,無論是在外網(wǎng)還是在內(nèi)網(wǎng),只要使用網(wǎng)盤工具訪問平臺的網(wǎng)盤,都需要經(jīng)過防火墻。筆者為了提升在線教學(xué)平臺的安全性能,限制內(nèi)外網(wǎng)直接訪問平臺服務(wù)器,部署了該防火墻。筆者不僅在防火墻上做了端口限制,還做了網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)。難道是防火墻阻擋了網(wǎng)盤工具訪問FTP服務(wù)器?
于是筆者直接在FTP服務(wù)器上運行網(wǎng)盤工具,發(fā)現(xiàn)網(wǎng)盤工具可以正常運行,可以用它上傳或下載文件。于是筆者又在其他服務(wù)器上運行網(wǎng)盤工具,經(jīng)過測試,網(wǎng)盤工具均能正常運行,說明網(wǎng)盤故障是由防火墻引起的。
筆者又用Telnet命令檢測FTP服務(wù)器端口號是打開還是關(guān)閉狀態(tài)。經(jīng)過測試,F(xiàn)TP服務(wù)器只有監(jiān)控端口16021處于打開狀態(tài),數(shù)據(jù)端口16020是關(guān)閉狀態(tài)。
數(shù)據(jù)端口是關(guān)閉狀態(tài),F(xiàn)TP服務(wù)器又能正常工作,是不是在做網(wǎng)絡(luò)地址轉(zhuǎn)換時,沒有將FTP服務(wù)器的端口都映射出去,筆者檢查了防火墻上的端口映射,發(fā)現(xiàn)FTP服務(wù)器端口16022-16422都做了端口映射,也就是說,F(xiàn)TP服務(wù)器的數(shù)據(jù)端口、監(jiān)控端口和被動模式端口都做了映射,應(yīng)該不是端口映射的問題。
經(jīng)過上述操作,基本排除網(wǎng)盤工具程序問題、FTP服務(wù)器問題和端口映射問題。難道是端口映射不成功?用FTP工具LeadFTP上傳一個較大文件,在上傳過程用端口掃描工具掃描端口,發(fā)現(xiàn)只有監(jiān)控端口16021處于打開狀態(tài),數(shù)據(jù)端口16020和筆者設(shè)置的被動端口16022-16422都處于關(guān)閉狀態(tài)。
同樣,直接在FTP服務(wù)器上掃描端FTP服務(wù)器的端口,也只有監(jiān)控端口16021處于打開狀態(tài),數(shù)據(jù)端口16020和筆者設(shè)置的被動端口16022-16422都處于關(guān)閉狀態(tài)。
由此可見,給FTP服務(wù)器做的端口映射也沒有問題,為了研究FTP服務(wù)器的數(shù)據(jù)端口和被動模式端口為什么處于關(guān)閉狀態(tài),筆者決定重新抓包分析FTP的工作原理。
FTP文件傳輸一般有主動模式(Port Mode)和被動模式(Passive Mode)兩種:
1.主動模式FTP連接雙方端口分析
在主動模式下,F(xiàn)TP客戶端上傳/下載文件的過程如圖2所示。
(1)FTP客戶端通過臨時端口發(fā)送一個TCP SYN(TCP同步)包給FTP服務(wù)端的監(jiān)控端口21(默認(rèn)情況下,F(xiàn)TP監(jiān)控端口是21,后面步驟就用21代替監(jiān)控端口)。
(2)FTP服務(wù)端通過監(jiān)控端口21發(fā)送SYN ACK(同步應(yīng)答)包給FTP客戶端的臨時端口。
(3)FTP客戶端通過臨時端口發(fā)送一個ACK(應(yīng)答)包給FTP服務(wù)端的監(jiān)控端口21。此時雙方的連接建立起來,F(xiàn)TP客戶端使用這個連接來發(fā)送命令,F(xiàn)TP服務(wù)端也使用這個連接來發(fā)送FTP應(yīng)答。
圖3 自定義端口范圍
(4)當(dāng)FTP客戶端需要獲取FTP服務(wù)器上的目錄列表、上傳文件或下載文件時,會發(fā)出相應(yīng)請求,F(xiàn)TP客戶端使用的端口時臨時端口,數(shù)據(jù)包里包含客戶端的IP地址,它希望FTP客戶端打開數(shù)據(jù)連接時使用該端口。
(5)FTP服務(wù)端通過數(shù)據(jù)端口20發(fā)送一個SYN(同步)包給FTP客戶端的臨時端口(FTP服務(wù)器的默認(rèn)數(shù)據(jù)端口為 20)。
(6)FTP客戶端通過臨時端口發(fā)送SYN ACK(同步應(yīng)答)包給FTP服務(wù)端的數(shù)據(jù)端口20。
(7)FTP服務(wù)端通過20端口向FTP客戶端臨時端口發(fā)送一個ACK(應(yīng)答)包。此時二者之間的數(shù)據(jù)連接就建立起來了。
(8)發(fā)送數(shù)據(jù)的主機以這個連接來發(fā)送數(shù)據(jù),實現(xiàn)文件上傳和下載。
通過上述分析不難得出以下結(jié)論,如果FTP客戶端通過主動模式連接FTP服務(wù)端,需要先提供地址和端口,由FTP服務(wù)器去連接FTP客戶端的這個端口,這對于互聯(lián)網(wǎng)應(yīng)用而言,讓FTP服務(wù)器連接客戶端是部現(xiàn)實的,畢竟多數(shù)FTP客戶端都是通過NAT連接互聯(lián)網(wǎng)的。
2.被動模式FTP連接雙方端口分析
如果FTP客戶端以被動方式發(fā)起連接請求,F(xiàn)TP客戶端會打開兩個本地端口N和 N+1,其中 N是由 FTP客戶端產(chǎn)生的,N一般大于等于1024。第一個端口N連接FTP服務(wù)器的21端口。和主動方式不同的是,F(xiàn)TP客戶端不會提交PORT命令并允許服務(wù)器來回連它的數(shù)據(jù)端口,而是提交PASV命令,此時FTP服務(wù)器會開啟一個任意的非特權(quán)端口P(端口號一般也大于1024),并發(fā)送PORT P命令給客戶端。然后客戶端發(fā)起從本地端口N+1到服務(wù)器的端口P的連接用來傳送數(shù)據(jù)。
通過上述分析不難看出,在被動模式下,是FTP客戶端連接FTP服務(wù)器提供的端口21和非特權(quán)端口P,不用FTP服務(wù)器連接FTP客戶端,也就是說,如果在互聯(lián)網(wǎng)環(huán)境,F(xiàn)TP客戶端適合以被動模式連接FTP服務(wù)器。
根據(jù)圖1所示平臺部署架構(gòu)圖,無論校內(nèi)訪問平臺,還是校外訪問平臺,都要經(jīng)過防火墻。而且筆者為了平臺安全,將平臺單獨部署在一個網(wǎng)段內(nèi),平臺所有服務(wù)器構(gòu)成一個私網(wǎng),校內(nèi)或校外不能直接訪問這些服務(wù)器,需通過防火墻才能訪問。通過上述對FTP工作模式及FTP連接雙方端口的分析,平臺網(wǎng)盤工具只能工作在被動模式。
在被動模式下,F(xiàn)TP客戶端需提交PASV命令,FTP服務(wù)器才會開啟一個任意的非特權(quán)端口P(端口號一般也大于1024)。一般的端口掃描工具,包括終端命令telnet在內(nèi),都不會發(fā)起PASV命令,F(xiàn)TP服務(wù)端也就不會開啟被動端口,這就是前面掃描FTP服務(wù)期被動端口時,F(xiàn)TP服務(wù)器被動端口處于關(guān)閉狀態(tài)的原因。同理,用LeadFTP等FTP工具能連接FTP服務(wù)器,能上傳或下載數(shù)據(jù),但用端口掃描工具掃描FTP服務(wù)器端口時,不會發(fā)起PORT命令,F(xiàn)TP服務(wù)器不會建立數(shù)據(jù)連接,數(shù)據(jù)端口自然也處于關(guān)閉狀態(tài)。
老師們在使用平臺自帶的網(wǎng)盤工具時,報讀文件錯誤“Read File error!”,估計是FTP客戶端訪問不了FTP服務(wù)端的被動端口。如果正確設(shè)置FTP服務(wù)器,這個問題應(yīng)該能正確解決。按照上述思路,筆者調(diào)整了FTP服務(wù)器的被動模式設(shè)置,排除了網(wǎng)盤故障。為了保護客戶單位平臺隱私,下面以FTP服務(wù)器FileZilla Server為例,介紹調(diào)整了FTP服務(wù)器的被動模式設(shè)置的過程。
其實,只要進入FTP服務(wù)器FileZilla Server被動模式設(shè)置頁面,就可以看到FileZilla后給出的提示信息:“如果你在NAT路由或防火墻后操控服務(wù)器,請使用自定義被動設(shè)置.這種情況下,在路由外部不可訪問服務(wù)器IP,所以你應(yīng)該在此填入正確的地址. 使用端口范圍來限定需要穿過路由提交的端口號.”。
根據(jù)圖1所示平臺框架,F(xiàn)TP服務(wù)器在“NAT路由或防火墻后操控服務(wù)器”定義范圍內(nèi),所以需要自定義端口范圍,在本例中,定義了如圖3所示端口“16022-16422”,共定義了401個被動模式端口。在“用于被動模式傳輸?shù)耐獠糠?wù)器IP地址”欄選擇“使用以下IP”,在地址欄輸入正確的IP地址,取消選擇“對本地連接不使用外部IP”,完成被動模式設(shè)置。
說明:為保護客戶隱私,本文(含圖片)涉及到的FTP服務(wù)器名稱、IP地址、端口均為虛擬信息。