1. 程式人生 > >FtpServer穿透內網訪問配置踩筆記

FtpServer穿透內網訪問配置踩筆記

FtpServer穿透內網訪問配置踩筆記

引言

FtpServer是伺服器檔案遠端管理常用方式。

以前在區域網配置Ftp伺服器以及使用公網上的Ftp服務均未碰到問題,固未對Ftp傳輸進行深入瞭解。

然而,最近在配置一臺內網Ftp伺服器提供外部訪問服務時,卻碰過了問題,折騰了幾番,方才搞定。為了避免遺忘和提供他人借鑑,特此記錄。

 

FTP配置應用踩坑

為了給一個臺內網伺服器上釋出的Web應用提供遠端維護,在同一臺伺服器上架設了Ftp伺服器。

Ftp伺服器採用的FileZille,使用的UTF-8編碼版本。

採用的綠色版本,註冊為Windows服務。

通過配置管理工具,配置了訪問使用者和訪問目錄及相關許可權。相應配置採用預設設定。

按自己的經驗,Ftp服務使用21埠和20埠,設定了伺服器的防火牆策略,放行了TCP上的20、21埠。

 

在內網訪問時,出現了能成功連線伺服器,但列出檔案目錄失敗,開啟了本地防火牆,允許Ftp客戶端通訊後,本地Ftp訪問成功。

到此,以為Ftp配置成功。不料通過外網進行訪問時,仍舊出現列出檔案目錄失敗的情況。

 

經過上網查詢研究,終於搞清Ftp服務通訊傳輸的機制,針對Ftp傳輸機制,配置伺服器的被動模式支援使用固定的埠並在防火牆中放行,配置路由器Nat對映支援被動模式資料埠中(外網埠和內網埠需相同),Ftp客戶端採用被動模式,問題解決。 

FTP伺服器模式

FTP協議採用TCP傳輸協議

主動模式:

客戶端(自動分配埠N,N>1024)->連線伺服器配置的命令埠(預設21)

連線成功後,客戶端分配埠N+1做為本地資料傳輸埠

客戶端開啟TcpServer,偵聽本地資料傳輸埠(通常N+1),

客戶端通過命令連線通道,傳送PORT協議,告訴伺服器本地資料埠

伺服器使用資料埠(預設20),連線客戶端的資料通訊埠

此模式下,由於客戶端資料連線埠不固定,難以處理閘道器和防火牆的攔截問題。

在客戶端為NAT子網的情況下,伺服器無法穿透客戶端的閘道器裝置連線到客戶端。

 

 

  

 

在第1步中,客戶端的命令埠與FTP伺服器的命令埠建立連線,併發送命令“PORT 1027”。然後在第2步中,FTP伺服器給客戶端的命令埠返回一個"ACK"。在第3步中,FTP伺服器發起一個從它自己的資料埠(20)到客戶端先前指定的資料埠(1027)的連線,最後客戶端在第4步中給伺服器端返回一個"ACK"。

 

  主動方式FTP的主要問題在於客戶端。FTP的客戶端並沒有實際建立一個到伺服器資料埠的連線,它只是簡單的告訴伺服器自己監聽的埠號,伺服器再回來連線客戶端這個指定的埠。對於客戶端的防火牆來說,這是從外部系統建立到內部客戶端的連線,這是通常會被阻塞的。

 

被動模式:

 為了解決伺服器發起到客戶的連線的問題,人們開發了一種不同的FTP連線方式。這就是所謂的被動方式,或者叫做PASV,當客戶端通知伺服器它處於被動模式時才啟用。

 

  在被動方式FTP中,命令連線和資料連線都由客戶端發起,這樣就可以解決從伺服器到客戶端的資料埠的入方向連線被防火牆過濾掉的問題。當開啟一個FTP連線時,客戶端開啟兩個任意的非特權本地埠(N >1024和N+1)。第一個埠連線伺服器的21埠,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許伺服器來回連它的資料埠,而是提交PASV命令。這樣做的結果是伺服器會開啟一個任意的非特權埠(P > 1024),併發送PORT P命令給客戶端。然後客戶端發起從本地埠N+1到伺服器的埠P的連線用來傳送資料。

 

  

 

 

 

 

在第1步中,客戶端的命令埠與伺服器的命令埠建立連線,併發送命令“PASV”。然後在第2步中,伺服器返回命令"PORT 2024",告訴客戶端(伺服器)用哪個埠偵聽資料連線。在第3步中,客戶端初始化一個從自己的資料埠到伺服器端指定的資料埠的資料連線。最後伺服器在第4 步中給客戶端的資料埠返回一個"ACK"響應。

 

 

伺服器被動模式埠配置

伺服器端採用FileZilla Server(UTF-8編碼版本)

 

 

 

 

在伺服器被動模式設定中,將埠範圍指定為一個埠,如上圖3720-3720,也可以是一個範圍。對路由器/防火牆中新增此埠的NAT對映和訪問規則。

 

 

 

早期Ftp協議中,並未規定傳輸資料的編碼格式,導致不同客戶端工具和伺服器通訊時,會出現目錄/檔名亂碼問題,後來為解決這個問題,擴充套件標準協議中,定義了客戶端和服務端問詢/確認編碼格式的協議,用於解決此問題。

 

 

 

 

防火牆訪問配置

 

 

 

 

 

外網埠對映配置

配置路由器上外網埠到FtpServer服務埠的對映。

兩個埠,命令埠和資料傳輸埠。

本專案中,伺服器命令埠使用的21,外網埠採用的3721(將外網3721對映到釋出FTP伺服器的21埠)

伺服器資料埠使用的3720,外網埠採用的3720(此處兩個埠必須相同,否則不能正常傳輸檔案)

Ftp客戶端配置

本專案中,使用的FtpClient工具為FileZilla,版本3.7.3(32bit)

 

 

 

 在配置中選擇傳輸模式為被動模式。

 進行遠端連線測試(需要外部網路電腦遠端FTP訪問),OK,打完收工。

&n