ftp主動模式和被動模式區別以及把ftp映射到公網


前言

FTP,File transfer Protocl即文件傳輸協議,是用於在網絡中控制文件的雙向傳輸的協議。通常FTP用默認21端口作為命令端口,根據FTP工作模式的不同,數據傳輸端口也存在差異。

FTP的工作模式

主動模式

如上圖所示,在主動模式下,FTP客戶端從任意端口5150(端口號>1023)發起一個FTP請求,並攜帶自己監聽的端口號5151(發送的端口號+1=監聽端口號);隨后服務器返回確認,然后從服務器本地的20端口主動發起連接請求到客戶端的監聽端口5151,最后客戶端返回確認。
這種模式缺點在於服務器帶客戶端的FTP連接很容易被傳輸過程中的路由器、防火牆所影響或攔截。

被動模式

為了主動模式所面臨的服務器到客戶端的連接會被攔截阻塞的問題,FTP發展出了被動模式。在被動模式中,命令連接和數據連接都由客戶端來發起,這樣就可以解決從服務器到客戶端的數據端口的入方向連接被防火牆攔截的問題。

如上圖所示,客戶端用隨機命令端口5150向服務器的21命令端口發送一個PASV請求,然后服務器返回數據端口3267,告訴客戶端我在哪個端口監聽數據連接。然后客戶端向服務器的監聽端口3268發起數據連接,最后服務器回復確認ok。

把FTP服務映射出去

從FTP的工作模式來說,如需把ftp服務映射出去需要FTP工作在被動模式(PASV)。

通過路由器映射

通過路由器映射比較簡單,只需要把21端口映射到WAN口即可,當客戶端需要連接服務端的數據端口時,路由器會自動把數據包路由到(應該是得益於路由器NAT設置內的ALG服務,具體暫未深究)服務端對應端口上。

通過frp映射

 如若通過frp這樣的反向代理工具,除了需要把21端口映射出去還需要把相應的數據傳輸端口映射出去。

 首先在服務端限定被動模式下數據傳輸端口的范圍,這里以vsftpd為例:

 然后在frp中映射出對用端口。

還需要在vsftp配置文件中增加pasv_promiscuous=YES,關閉PASV模式的安全檢查。

pasv_promiscuous=YES

外網訪問 提示返回了不可路由的服務器地址

至此就映射成功了,但你會發現只有在內網中通過映射出去的公網的地址能夠成功訪問,到外面還是訪問失敗。

這是因為,客戶端去連接服務器的數據端口時還是以內網ip(比如192.168.x.x)去尋找的,從外網自然無法路由到。

配置文件中,可以通過增加 來指定被動模式回傳的服務器IP地址。配置文件中,可以通過增加 來指定被動模式回傳的服務器IP地址。

pasv_address=180.x.x.x

如果時動態ip的話,可以寫成域名,並且配置文件增加 pasv_addr_resolve,且放在 pasv_address 前面:

pasv_addr_resolve=YES
pasv_address=www.xxx.cn

同時vsftp默認只監聽的IPV6端口,所以若需pasv_address項目生效,還需在vsftpd.conf中開啟IPV4端口的監聽。

listen=YES
#listen_ipv6=YES

vsftp啟動時提示cannot resolve host

這是因為域名無法解析到ip,通常是由於服務器未連接到互聯網,無法通過DNS解析到IP。如果內網中有其他DNS服務器,手動填入dns服務器的地址即可。也可以用一台服務器來轉發dns請求實現,這里我使用的是群暉(同時連接了內外網)的DNS轉發服務。

 將內網的dns請求轉發到dns服務商。

 同時手動指定DNS地址:

 現在重啟vsftpd服務就不會報錯,從外網訪問也正常了,至此通過frp映射成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM