首先要提到的這裡的内網是指一般我們網吧内部環境的内網,對區域網路内網我沒什麼好說的,願花錢的去dns0755好了。一個基本條件:一個公網ip,對網關有操作權限。
ftp伺服器端192.168.0.100,我選用win2k+serv-u 4.1.0.0,很普通常用的一個組合網關是最簡單的雙網卡pc,一接外網一接内網,這裡假設外網ip為218.4.218.4,内網ip為192.168.0.1。
提一些概念性的東東:
一次完整的ftp會話,包含有兩個連接配接,一個稱之為指令通道,一個稱之為資料通道。指令通道用來傳遞一些"指令"和回報,包括使用者名密碼登陸,而且衆所周知是明文資料通道用來傳遞實際資料----列目錄、檔案傳輸,一旦需要列目錄或檔案傳輸,資料通道就會被建立起來,這裡分兩種方式,一是port二是pasv。
你會在網際網路上找到許多ftp伺服器,有的要麼隻支援port,有的要麼隻支援pasv,有的是因為考慮安全因素,有的是因為條件限制等等。我想把我的ftp做成port和pasv方式都能支援的,這樣不會使用戶端在連接配接上受到困擾,特别是一些新手,對于port和pasv的定義,比較容易了解的解釋是針對ftp服務端而言的:
port是主動模式,在建立資料通道時,服務端去連接配接别人;
pasv是被動模式,在建立資料通道時,服務端被别人連接配接;
建立資料通道時,用port模式還是pasv模式,選擇權在于ftp用戶端。
現在要做的,就是端口映射了,最基本的是指令通道的映射,這裡選用預設的21,我想把在網關外網接口收到的對218.4.218.4端口21的連接配接請求,轉發到192.168.0.100的21端口去。
win2k網關
系統自帶簡單的端口轉發程式,就是能給我們提供連接配接共享的ics/rras,這兩種方式原理是一樣的,而且都能提供這類業務的端口轉發設定過程比較簡單,我也不抓圖了,以前有過很多。
就是在"服務與端口"中,注冊一條類似"公用網絡與端口218.4.218.4:21 to 專用網絡與端口192.168.0.100:21"這樣格式的規則設定好後,别人就能通路你的内網ftp伺服器了,但你很快會發現你的ftp伺服器隻支援port方式,如果用戶端也在内網環境則port方式也用不了了這是為什麼呢?我們來分析一下,因為在pasv方式,伺服器接到用戶端的pasv指令後,會指定一個本地的随機端口來作為pasv端口,并通知用戶端,然後等待用戶端的連接配接,在通知消息裡包含有ftp伺服器的ip位址和打開的pasv端口,我ftp伺服器的ip位址是什麼?
現在是192.168.0.100,那麼對方收到的pasv通知将是這樣格式的227 entering passive mode (192,168,0,100,m,n)mn是定義了pasv端口的值,計算方式是m*256+m,如果這裡m是10而n是20,那麼pasv端口就是2580用戶端收到這條通知後,當它想發起資料通道的連接配接,它會向192.168.0.100:2580這個目标位址發送syn請求,毫無疑問将不會收到應答,因為這個ip在公共網絡事實上是不存在的解決的辦法是讓ftp伺服器發送帶公網ip的pasv通知,我們的serv-u支援這個功能。

然後在網關上把需要打開的pasv端口跟21端口一樣做映射到192.168.0.100
你也許會疑惑了,pasv是伺服器動态打開的随機端口,我怎麼會知道它會用哪個?怎麼映射啊?沒有問題,serv-u同樣可以定義每次使用固定的pasv端口,當然為了同時承接多個連接配接會話,你需要多設定幾個成一段,然後在網關上一一對應映射到ftp伺服器上去,圖中設定了20個。