FTP問題



瀏覽器,ftp客戶端是主動連接的,你現在相當於被動連接了,所以一般瀏覽器,ftp客戶端的用不了
-------

我的意思是,當外網的機器A想訪問內網的資源(比如ftp以及某些限ip的web服務器)的時候,
先和內網的某臺機器B建立UDP or TCP鏈接,然後A發請求給B,B再解析A的請求,訪問A所請求的資源,將
數據回傳給A。
就是A通過B訪問一些資源,

這樣的話要求A,B有自己的ftp或者瀏覽器的軟件麼?還是B運行象一個代理那樣的軟件,而在A上設置代理就可以?

 

採用透明代理技術應該可以解決這個問題。其結構如下圖所示:


      +-------------+                    +--------------------+
      |  UDP Proxy  | <=== NAT Tunnel ===>|  Remote UDP Agent  |
      |  ^  |    |                    |      |  ^        |
      |(2)|  |(7)  |                    |  (3)|  |(6)      |
      |  |  v    |                    |      v  |        |
      |  TCP Proxy  |                    |  Remote TCP Agent  |
      +-------------+                    +--------------------+
          ^  |                                |  ^ 
      (1)|  |(8)                          (4)|  |(5)
          |  v                                v  | 
      +-------------+                    +--------------------+
      |  TCP-Based  |                    |  Remote Private  |
      |  Client(s)  |                    |    Server(s)      |
      +-------------+                    +--------------------+
     
其中:
-------------
TCP Proxy:實現TCP透明代理功能。與典型透明代理主要的不同在於:當需要連接Client端請求的遠端服務器時,將連接請求發送給UDP Proxy,後面的事情就完全委託UDP Proxy來處理

UDP Proxy:它一方面負責與遠端的Remote UDP Agent 建立 NAT Tunnel,同時接收來自TCP Proxy的各種請求,並通過NAT Tunnel與Remote UDP Agent進行數據交換。

Remote UPD Agent:完成來自UDP Proxy的請求,並將請求轉發各 Remote TCP Agent;同時將 Remote TCP Agent 的反饋信息轉發會UDP Proxy。

Remote TCP Agent:最終與目標服務器建立TCP連接,完成轉發代理的最後一步。


數據流:如圖。
-------------

實現:
-------------
- TCP Proxy 和 UDP Proxy功能可以集成在一個獨立程序中,也可以分別在不同的程序中實現。
前者的好處是開發起來可能更容易一些(也可能更麻煩;-)):兩個模塊之間可以很容易的實現數據共享;
而後者則保證了系統整體可伸縮性。
如果你這是處於興趣搞個練習的話,可以考慮方案1;即便如此,也建議在實現前仔細定義這兩個模塊之間的接口,沒準哪天你想把它們分開呢

- Remote UDP Agent 和 Remote TCP Agent 的實現與上面相同。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章