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 的实现与上面相同。

 

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