摘要:在使用華為彈性雲服務器ECS搭建FTP服務的時候,經常會遇到搭建完成后無法訪問的問題。本篇通過演示windows IIS搭建FTP方法,講解ftp主動模式、被動模式原理來說明無法訪問的原因及解決方案。
我們在使用華為彈性雲服務器ECS搭建FTP服務的時候,經常會遇到搭建完成后無法訪問的問題。本篇案例通過講解ftp主動模式、被動模式原理來說明無法訪問的原因及解決方案。
華為雲上的彈性公網IP地址EIP和彈性雲服務器ECS的私網IP地址是動態綁定的,通過NAT的方式進行映射。FTP協議應用層中攜帶了IP地址或端口等信息,因此一般需要ALG的幫助才能正常穿越NAT。我們在華為雲主機上搭建ftp服務器后,一般默認無法從公網去訪問,要理解這個原因,首先要了解下ftp的主動模式和被動模式的概念。

一、FTP主動模式與被動模式
1、主動模式
客戶端從一個任意的非特權端口N(N>1024,如下圖的1026端口)連接到FTP服務器的21端口。然后客戶端開始監聽N+1(如下圖的1027端口),並發送FTP命令“port N+1”到FTP服務器。接着服務器會從它自己的數據端口(20)連接到客戶端指定的數據端口(N+1)。
用更通俗的語言來理解這個交互過程:
-
客戶端用一個大於1024的端口N與FTP服務器的21端口建立一個控制通道,發送一條命令告訴FTP服務端(即通常說的PORT命令),我的數據通道的通信地址是IP1(本機網卡IP),數據通道的端口N+1,服務端收到請求后回復ACK確認。
-
服務端確認后,用源端口20主動與客戶端IP1:N+1建立連接,進行數據通信。

2、被動模式
當開啟一個FTP連接時,客戶端打開兩個任意的非特權本地端口N>1024和N+1(分別如下圖的1026端口和1027端口)。第一個端口連接服務器的21端口,客戶端提交PASV命令給服務端,這樣做的結果是服務器會開啟一個任意的非特權端口(P>1024),並發送PORT P(如下圖2024)命令給客戶端。然后客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。
用更通俗的語言來理解這個交互過程:
-
客戶端使用源端口N與FTP服務端建立一個控制通道,發送一條命令告訴服務端(即通常說的PASV命令),我將使用被動模式與你通信。服務端收請求后,會告知客戶端我的IP是IP2(默認為主機網卡IP)和監聽端口P,你可以和我的這個IP和端口通信。
-
客戶端收到1)中的信息后,使用源端口N+1,與服務端IP2:P建立連接,進行數據通信。

二、windows IIS搭建FTP方法演示
server 版本:Windows Server 2012 R2 標准版 64位簡體中文
IIS版本: IIS 8
1、安裝FTP服務
“控制面板”—“管理工具”—“服務器管理器”—“儀表盤”


2、ftp服務部署


客戶端IE瀏覽器一般默認配置采用被動模式訪問FTP服務器,如果通過EIP去訪問雲上ECS部署的FTP服務,會報如下錯誤:

理解了FTP被動模式的原理后,我們就很容易理解訪問失敗的原因:
第一步控制通道通信過程中,服務端回復給客戶端的數據面IP是服務端網卡的私網IP(此處為172.16.0.170)而不是服務端的公網IP地址,導致客戶端第二步數據通道建連失敗。
三、解決方案
1.客戶端IE修改為主動模式
如下圖所示所示,在“工具->Internet選項->高級”將“使用被動FTP…“勾選去掉。前面說過,FTP主動模式下,FTP服務器會

但有一點需要注意,如果客戶端本地網絡是通過NAT方式訪問外網的,也可能會有問題,所以不建議采用該方案。
2、服務端配置“FTP防火牆支持”
如下圖所示,在“防火牆的外部IP地址”中填寫主機的彈性公網IP即可,此時仍然采用FTP被動模式。建議使用該種方式,該種方法可以支持被動模式訪問FTP,且對客戶端本地網絡無特殊要求。

注意:被動模式下,FTP服務器的安全組入方向需要放通FTP數據通道的端口號(默認為1024~65535的端口號),否則,FTP服務器也無法訪問。如上圖所示,此處FTP服務器數據通道端口設置為1025~10018,所以FTP服務器網卡對應安全組主要添加如下入方向規則,如下圖所示。

以上,是在華為雲上如何使用華為雲彈性雲服務器ECS搭建FTP的實踐。