天天看點

内網架設FTP伺服器(serv-u)

1. 内網FTP伺服器的概念

設想下面的這種環境:幾台計算機組成一個區域網路,該區域網路中擁有一台DHCP伺服器負責為局 域網中每台計算機配置設定IP位址。其中有一台計算機(或網絡裝置)作為網關(可以與DHCP伺服器為同一台裝置),網關通過撥号或其他方式連接配接到 Internet,擷取一個真實IP位址。區域網路内的計算機通過網關的轉發來實作與Internet的連接配接。我們定義該區域網路内部為内網,相對地,定義 Internet為外網。

舉個例子,假設我們擁有兩台計算機A、B和一個擁有撥号和DHCP功能的網關G。各自的網絡配置如下:

網關G:

區域網路IP位址:192.168.0.1(由網關硬體指定)

區域網路子網路遮罩:255.255.255.0(由網關硬體指定)

廣域網IP位址:12.34.56.78(撥号之後獲得)

計算機A:

區域網路IP位址:192.168.0.10(通過網關的DHCP功能獲得)

區域網路子網路遮罩:255.255.255.0(通過網關的DHCP功能獲得)

網關:192.168.0.1(通過網關的DHCP功能獲得)

計算機B:

區域網路IP位址:192.168.0.11(通過網關的DHCP功能獲得)

區域網路子網路遮罩:255.255.255.0(通過網關的DHCP功能獲得)

網關:192.168.0.1(通過網關的DHCP功能獲得)

這樣,從A、B發出的所有網絡請求都會被發送到網關G(192.168.0.1),網關再将這些請求變換之後通過12.34.56.78發送到Internet,以實作A、B與Internet的連接配接。

需要提醒一點的是,你的網關必須擁有端口映射(Port Mapping)的功能(也稱轉發,Forwarding),這是下文架設伺服器的先決條件。所謂端口映射功能,就是指網關能夠将從外網發送到網關的指定 端口的包轉發到内網中指定的IP位址上。舉個例子,假如我們定義了如下一條規則:将端口21映射到192.168.0.10上。那麼

從外網發送到網關的一個包,其資訊為

源位址:200.12.34.56:7890,目的位址:12.34.56.78:21

那麼網關将修改該包的目的位址,結果為

源位址:200.12.34.56:7890,目的位址:192.168.0.10:21

并将該包發送到區域網路中的192.168.0.10上。這樣對于192.168.0.10來說,這個包仿佛是從Internet上直接發給自己的一樣。

2. FTP協定原理

一般我們說,FTP協定使用TCP端口21。實際上這這并不準确;FTP協定使用TCP的21端口傳送的是控制指令,同時使用随機端口來傳送資料。也就是說,下載下傳一個檔案至少需要在用戶端與伺服器之間建立兩個TCP連接配接,這兩個連接配接分别稱為控制連接配接和資料連接配接。

控制連接配接總是由用戶端主動連接配接伺服器的21端口來建立的;而資料連接配接則不一定。根據資料連接配接 的建立方式的不同,FTP傳送方式可分為主動方式和被動方式兩種。主動方式下,伺服器連接配接用戶端的某個端口以建立資料連接配接;被動方式下,用戶端連接配接伺服器 的某個端口來建立資料連接配接。

主動方式的連接配接過程如下:

1. 用戶端用随機端口連接配接伺服器的21端口,建立控制連接配接,并發送使用者名和密碼進行登入。

2. 用戶端打開一個随機端口P進行監聽,并通過控制連接配接将自己的IP位址和P端口的資訊通知伺服器。

3. 伺服器用自己的随機端口連接配接用戶端的端口P,建立資料連接配接,并進行資料傳送。

4. 資料傳送完畢之後,資料連接配接斷開。

5. 用戶端通過控制連接配接發送結束指令,以斷開控制連接配接,FTP互動過程結束。

被動方式的連接配接過程如下:

1. 用戶端用随機端口連接配接伺服器的21端口,建立控制連接配接,并發送使用者名和密碼進行登入。(與主動方式相同)

2. 用戶端通過控制連接配接通知伺服器使用被動方式。

3. 伺服器選擇一個随機端口P進行監聽,并通過控制連接配接将自己的IP位址和P端口的資訊通知用戶端。

4. 用戶端用自己的随機端口連接配接伺服器的端口P,建立資料連接配接,并進行資料傳送。

5. 資料傳送完畢之後,資料連接配接斷開。(與主動方式相同)

6. 用戶端通過控制連接配接發送結束指令,以斷開控制連接配接,FTP互動過程結束。(與主動方式相同)

舉個實際的例子來說明。下文中以S:開頭的為伺服器傳回的資訊,C:開頭的為用戶端指令。

主動方式:

S: 220 ProFTPD 1.2.10 Server(控制連接配接建立,伺服器傳回歡迎資訊)

C: USER foo(發送使用者名)

S: 331 Password required for foo.

C: PASS mypassword (發送密碼)

S: 230 User foo logged in. (登入成功)

C: SYST (擷取伺服器類型)

S: 215 UNIX Type: L8

C: PWD (擷取目前目錄)

S: 257 "/" is current directory.

C: PORT 192,168,0,11,10,171 (用戶端監聽端口2731,并将IP位址和端口2731通過PORT指令通知伺服器。2731為10*256+171)

S: 200 PORT command successful

C: TYPE A (設定傳輸方式為文本方式)

S: 200 Type set to A

C: LIST (發出擷取檔案清單的指令)

S: 150 Opening ASCII mode data connection for file list (伺服器嘗試連接配接用戶端的2731端口以建立資料連接配接)

(通過資料連接配接發送檔案清單……)

S: 226 Transfer complete. (檔案清單傳送完畢,資料連接配接斷開)

C: QUIT (退出指令)

被動方式:

S: 220 ProFTPD 1.2.10 Server(控制連接配接建立,伺服器傳回歡迎資訊)

C: USER foo(發送使用者名)

S: 331 Password required for foo.

C: PASS mypassword (發送密碼)

S: 230 User foo logged in. (登入成功)

C: SYST (擷取伺服器類型)

S: 215 UNIX Type: L8

C: PWD (擷取目前目錄)

S: 257 "/" is current directory.

C: PASV (通知伺服器使用被動方式)

S: 227 Entering Passive Mode (192,168,0,10,132,29).

(伺服器監聽端口33821,并将IP位址和端口33821通過PORT指令通知伺服器。33821為132*256+29)

C: TYPE A (設定傳輸方式為文本方式)

S: 200 Type set to A

C: LIST (發出擷取檔案清單的指令)

S: 150 Opening ASCII mode data connection for file list (用戶端嘗試連接配接伺服器的33821端口以建立資料連接配接)

(通過資料連接配接發送檔案清單……)

S: 226 Transfer complete. (檔案清單傳送完畢,資料連接配接斷開)

C: QUIT (退出指令)

3. 内網FTP伺服器的問題及解決方案

在這裡我們沿用第一部分的網絡執行個體,并假設FTP伺服器架設在計算機A(192.168.0.10)上。

1. 如何使外網的用戶端能夠與内網的FTP伺服器建立控制連接配接

由于控制連接配接的伺服器端端口為21,是以我們隻需要在網關的端口映射上添加一條規則,将21端口映射到192.168.0.10即可。

2. 如何建立資料連接配接

在主動方式下,資料連接配接由伺服器發起,相當于内網的伺服器主動去連接配接外網的用戶端,這種連接配接 可以穿過網關正常建立,是以不需要做任何特殊設定即可實作。問題是被動連接配接。由于被動方式下伺服器會監聽随機端口并需要将自己的IP位址和端口号通知客戶 端,這樣就産生了以下兩個問題:

a) 伺服器僅知道自己的内網IP位址(192.168.0.10),它會将這個IP位址通知給外網的用戶端,而用戶端從外網是無法連接配接這個内網IP位址的(用戶端不知道該如何路由);

b) 伺服器需要監聽随機端口,範圍為1024-65535,出于安全起見,也考慮到可能存在其它的服務也使用該範圍内的端口,是以不可能在網關上将這些端口全部映射給192.168.0.10。

由于以上的問題的存在,我們經常可以看到連接配接伺服器時下方的連接配接日志停在

150 Opening ASCII mode data connection for file list

處遲遲不動,這就是因為被動資料連接配接無法建立。

對此SERV-U提供了如下的解決方案。

a) 在SERV-U中指定伺服器通知給用戶端的IP位址。即使得FTP伺服器不再将自己的内網IP位址192.168.0.10通知給用戶端,而是将指定的IP位址通知給用戶端。在SERV-U中指定12.34.56.78 (指定為網關的外網位址)

内網架設FTP伺服器(serv-u)

但是上面的方法并不是十全十美的。因為:

1、如果網關的外網位址不固定(例如通過撥号擷取IP的情況),那就不能用這種辦法。

2、強制FTP通知網關的IP位址,這對于用戶端位于外網的情況下是正确的,但是當用戶端位于内網時,用戶端可能會無法解析網關的IP位址,導緻無法建立資料連接配接。

b) 通過指定Passive端口來限制被動方式下監聽的端口的範圍。例如

60000 65535

内網架設FTP伺服器(serv-u)

這樣伺服器在被動方式下将僅使用60000-65535之間的端口,而不是原來的1024-65535。然後在網關上添加規則,将60000-65535的所有端口映射到192.168.0.10上。

内網架設FTP伺服器(serv-u)

如果本機有防火牆,還要在防火牆裡增加規則,允許any IP通路60000-65535端口。

内網架設FTP伺服器(serv-u)

這樣,外網的用戶端就可以正常通路FTP伺服器了。

4. 總結

内網架設FTP伺服器的方法:

1. 在SERV-U中來限制被動方式下監聽的端口的範圍

2. 在網關的端口映射上将第一步中指定的端口範圍以及FTP端口21映射到FTP伺服器的内網位址上

繼續閱讀