第九章 UDPack 应用之代理服务器
代理服务器一般在企业内部比较常见,可起到类似防火墙的作用。企业内部员工通过设置代理服务器上网,所有的网络请求都会经过代理服务器。可通过全局屏蔽一些与工作内容无关甚至有风险的网站,提高互联网访问的安全性。
代理协议主要有 SOCKS 和 HTTP 两种。SOCKS 是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。当防火墙后的客户端要访问外部的服务器时,就跟 SOCKS 代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。这个协议最初由 David Koblas 开发,而后由 NEC 的 Ying-Da Lee 将其扩展到 SOCKS4。最新协议是 SOCKS5,与前一版本相比,增加支持 UDP、验证,以及 IPv6。根据 OSI 模型,SOCKS 是会话层的协议,位于表示层与传输层之间。
SOCKS 工作在比 HTTP 代理更低的层次,SOCKS 使用握手协议来通知代理软件其客户端试图进行的 SOCKS 连接,然后尽可能透明地进行操作。SOCKS 代理不理解 HTTP 协议,不会试图解析流量内容,可确保用户隐私安全。而 HTTP 代理理解 HTTP 协议,通常会解释和重写报头,甚至可以分析流量,执行更高层次的过滤。
+--------------+ +--------------+ +-------------+
| | SOCKS | | | |
| Browser +----------> Proxy Server +----------> google.com |
| | LAN | | Internet | |
+--------------+ +--------------+ +-------------+
PC/Mac/Phone Proxy Server
如上图所示,一般 SOCKS 代理服务器是这样部署的: 电脑手机等设备配置好位于局域网内部的 Proxy Server,Browser 与 Proxy Server 之间建立 TCP 连接,并通过 SOCKS 协议中转上网。本章会基于 UDPack 协议实现一个 SOCKS 代理,完全采用另外一种部署结构,使得 Browser 与 SOCKS 代理之间建立 UDPack 会话,并通过 UDPack 协议中转流量,实现代理上网。
+----------------------------------------------+
| |
| |
| |
| +----------------+ +---------------+ | +---------------+ +-------------+
| | | SOCKS | | |UDPack | | | |
| | Browser +---------> UDPack Client +-+-------> UDPack Server +----------> google.com |
| | |localhost| | | LAN | | Internet | |
| +----------------+ +---------------+ | +---------------+ +-------------+
| | Proxy Server
| |
| |
+----------------------------------------------+
PC/Mac/Phone
如上图所示,电脑手机等设备配置好位于本机(localhost)的 UDPack Client,Browser 与 UDPack Client 之间建立 TCP 连接,并通过 SOCKS 协议中转流量。UDPack Client 与 UDPack Server 之间建立 UDPack 会话,并通过 UDPack 协议中转流量,实现代理上网。
可以看到新的部署结构多了 UDPack Client 节点,是因为 Browser 本身不理解 UDPack 协议,必须通过 UDPack Client 将 SOCKS 协议转为 UDPack 协议。UDPack Client 与 UDPack Server 之间通过基于 UDP 实现的 UDPack 协议通信。