[轉載]NAT轉換後FTP服務器不能訪問解決方法一例

 

[轉載]NAT轉換後FTP服務器不能訪問解決方法一例

文章作者:FreeFire

最近學習FreeBSD過程中安裝了ProFTP作爲FTP服務器,在使用過程中發現有很多用戶從外面無法連接到FTP服務器,但我在內網訪問無任何問題。

環境描述:

FreeBSD 4.10 安裝ProFTP 地址 192.168.0.4/255.255.255.0 192.168.0.254

FTP服務使用非標準端口 2121,支持Port、PASV模式(指定端口50000-65534)

192.168.0.254爲公司接入互聯網的寬帶路由器,PPPoE、動態地址.

在寬帶路由器上,對外作2120、2121以及50000-65534(PASV模式)的端口轉發。

網絡拓撲:

FTP Server - FireWall(NAT) - Internet -[FireWall(NAT)]- FTP Client
注:[]內的FW不一定存在.

問題描述:

外網通過訪問FTP服務器,登陸都正常但在LIST的時候就不能接受數據,然後連接超時。
在內網訪問沒有任何問題。

公司內部另有一臺FTP服務器,使用標準端口,訪問無任何問題.

故障分析:

通過觀察FTP客戶端的日誌記錄,在PASV模式下發現客戶端與服務器的連接過程中在發送PASV指令以前一切正常,在發送PASV指令以後服務器發給客戶端的回訪地址是服務器的內部地

址(192.168.0.4)。外部網絡訪問這個地址肯定是不能訪問的,所以通信失敗。
Ftp使用兩個tcp通道進行工作,有兩種模式 PORT和PASV模式。

FTP通信過程

在Port模式下,FTP server 使用TCP 20和21號端口進行通信21號端口負責傳送指令,20端口負責傳輸數據。當需要在服務器和客戶端之間傳輸數據時,客戶端會在控制通道發port指令類似

(PORT 192,168,0,100,6,216),客戶端在本機開一個大於1024的監聽端口,等待服務器連接,服務器在控制通道接受該port指令後,使用其20端口去連接client的監聽端口,即server:20

-> client:any,使用該數據通道進行數據傳輸;

對於PASV模式,client發pasv指令,server將會隨機開放一個>1024的監聽端口,隨後 CLIENT連接到該高端口進行數據傳送。

在本例中假設服務器地址爲A,防火牆爲地址爲B,客戶端爲C,那麼通信過程如下:

C:ANY -> B:2121 -> A:2121 通訊正常 ,但當傳輸數據的時候

C:ANY(Port指令) -> B:2121 -> A:2121

A:2020 -> C:(Port指定的端口)

如果C不在防火牆(NAT)後面的話,通信是沒有問題的,但如果C在防火牆(NAT)後面,並且防火牆沒有相應的處理的話,這次通信將宣告失敗.

PASV模式下

C:ANY -> B:2121 -> A:2121 通訊正常 ,但當傳輸數據的時候

C:ANY(PASV指令) -> B:2121 -> A:2121

C:ANY -> B:(PASV指定端口)-> A:(PASV指定端口)

由於服務器發送的是本地地址(私有地址),所以客戶端連接也會失敗。

通過對分析故障認爲是寬帶路由器在做NAT地址轉換的時候沒有對FTP協議進行處理,所以FTP Server把自身的IP地址發送給了FTP客戶端。

解決辦法:

在PORT模式下,加入FTP客戶端也在防火牆後面的話,由於我不能去修改其設置,所以在這裏不討論這種情況下的解決辦法.

在PASV模式下由於是客戶端連接服務器,所以其解決方法可從兩個方面考慮

1、修改防火牆(NAT)設置,使其對FTP協議進行相應的處理。
2、修改FTP服務器使其在接受到PASV指令的時候發送正確的FTP地址。

第一種方式由於我的防火牆使用的是簡單的寬帶路由器,不具備這樣的選項,所以無法修改。通過和廠家的電話聯繫得知這款路由器只處理標準端口的FTP協議,這也是那臺使用標準端口

的FTP服務器能工作的原因。

所以要解決這個問題必須採用第二種方法,通過查看ProFTP的文檔發現ProFTP有相關的處理選項。
如下:

MasqueradeAddress=movie.vip.netbuddy.org

重新啓動ProFTP,測試正常。




注:本文是事後憑記憶寫的,可能會有些不準確的地方,請指正。
在查找問題的時候還使用tcpdump抓取TCP的數據包來分析,但通過包的分析和對FTP日誌的分析得出的結果一致,自己把問題複雜化了。:(

測試過程中還碰到一個有趣的現象,使用FlashFXP在PASV模式下能正常訪問服務器,雖然FlashFXP收到的是私有地址,但FlashFXP還能轉換到正確的地址上去。雖然這樣做有點不規矩,但看的出來FlashFXP的作者還是花了不少心思的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章