代理是怎么工作的?从原理看懂系统代理、TUN 和分流

通俗讲解网络代理的工作原理:直连和走代理时数据分别怎么走,代理服务器做了什么,系统代理与 TUN 模式的原理差异,分流规则如何决定每个连接的去向,以及代理能看到和看不到什么。

作者:最后更新:阅读约 3 分钟

直接答案代理就是「替你出面」的中间人:你的设备不直接连接网站,而是把请求交给代理服务器,由它去访问网站,再把结果转给你。网站看到的是代理服务器的 IP。客户端通过系统代理或 TUN 模式接管设备的流量,再按分流规则决定每个连接直连还是走代理。

「代理」这个词听起来复杂,原理其实很直观:找一个中间人替你去访问。下面从一次网页访问说起。

直连:自己去

不用代理时,访问一个网站的过程是:

  1. 你的设备通过 DNS 查到网站的 IP(过程见 IP 地址、域名和 DNS);
  2. 设备直接和这个 IP 建立连接;
  3. 网站把内容发回给你。

网站看到的访问者 IP,就是你家宽带的公网 IP。

走代理:让中间人去

使用代理时,过程变成:

  1. 你的设备把「我要访问某某网站」的请求,加密后发给代理服务器;
  2. 代理服务器替你连接网站,取回内容;
  3. 代理服务器再把内容转发给你。

这样带来几个变化:

  • 网站看到的是代理服务器的 IP,以及它所在的地区;
  • 你和代理服务器之间的数据是加密的,中间环节看到的只是「你在和代理服务器通信」;
  • 数据多绕了一段路,延迟会增加,增加多少取决于代理服务器的位置和线路。

代理服务器做了什么

一个代理服务(比如由多个节点组成的服务)在背后做的事情,大致是:

角色 做什么
客户端(你设备上的软件) 接管流量、加密、按规则选择发往哪个节点
入口(有时是中转服务器) 接收你的连接,转发到出口
出口(落地服务器) 解密后替你访问目标网站,网站看到的就是它的 IP

客户端和服务器之间使用约定好的协议来加密和传输数据,协议只决定「数据怎么包装」,而数据「走哪条路」取决于网络线路,两者是不同的概念。

客户端怎么「接管」流量:系统代理和 TUN

代理客户端要先让设备上的流量交给自己,常见有两种方式:

系统代理:客户端在系统设置里登记一个本地地址(比如 127.0.0.1 加端口)。愿意读取这个设置的程序(浏览器等)会把请求发给它。但不读取系统设置的程序(很多终端工具、游戏)就不会走代理。

TUN 模式:客户端在系统里创建一块虚拟网卡,修改路由表,让系统把所有流量都交给这块网卡。这样不管程序读不读设置,流量都会经过客户端,所以能接管终端程序和游戏。TUN 模式还能处理 UDP 流量,UDP 是什么见 TCP 和 UDP 有什么区别。

分流:每个连接走哪条路

客户端接管流量后,并不是全部都发给代理服务器,而是按规则逐个判断:

  1. 看目标域名:比如命中「国内网站列表」,就直连;
  2. 看目标 IP 的归属地:比如是国内 IP,就直连;
  3. 命中广告域名,就直接拦截;
  4. 其余的,交给指定的代理节点。

这就是「规则模式」。它的好处是国内网站不绕路、速度不受影响,也不浪费代理的流量;「全局模式」则是不管规则、全部走代理。

DNS 在代理里的处理

既然要按域名分流,域名查询本身也要处理好。如果 DNS 查询绕过代理、直接发给本地运营商,就会出现「DNS 泄露」,并可能拿到被干扰的结果。

很多客户端使用 fake-ip 的方式:先给域名返回一个假的内部 IP,让程序立刻发起连接,客户端再根据域名决定这个连接是直连还是交给代理,由代理服务器在远端完成真实的域名解析。这样既快,又减少了 DNS 泄露。

代理能看到什么、看不到什么

代理服务器处在你和网站之间,所以:

  • 能看到:你访问了哪些网站(域名或 IP)、什么时间、传了多少数据;
  • 看不到:HTTPS 网站的具体页面内容和你输入的密码,因为它们在浏览器和网站之间是端到端加密的。

所以选择可信的服务、重要账号开启两步验证,是使用任何代理时都该有的习惯。加密的原理见 HTTPS 和 TLS 加密。

总结

  • 代理是替你访问网站的中间人,网站看到的是代理出口的 IP。
  • 客户端用系统代理或 TUN 模式接管流量,TUN 能覆盖所有程序。
  • 分流规则决定每个连接直连还是走代理,国内直连、海外走代理是最常见的用法。
  • 代理能看到你访问了哪里,但看不到 HTTPS 的具体内容。

常见问题

用了代理,网站看到的是谁的 IP?

看到的是代理服务器(出口)的 IP,而不是你自己的。这也是网站会根据代理的出口地区判断你「在哪里」的原因。

代理和 VPN 在原理上有什么不同?

传统 VPN 通常在系统层面建立一条加密隧道,接管全部流量;代理一般针对应用或按规则转发部分流量。现在的代理客户端开启 TUN 模式后,也能像 VPN 一样接管全部流量,两者的界限已经越来越模糊。

走代理为什么会比直连慢?

数据多绕了一段路:先到代理服务器,再到网站。代理服务器越远、线路越拥挤,额外的延迟就越大。所以通常让国内网站直连,只让需要的流量走代理。