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

  • 2020 年 3 月 31 日
  • 筆記

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,打完收工。