VPN与代理有什么区别?看流量接管方式、分流与加密边界

VPN 与代理的主要区别在于怎样接管联网流量:应用代理由支持代理的应用把连接交给代理服务器;VPN 可以通过虚拟网络接口和路由接管指定流量。**VPN 不一定覆盖整个设备,代理客户端也不一定只处理一个应用。**选择时,应分别确认哪些应用被接管、目标连接走哪条路、DNS 如何解析,以及哪一段连接受到加密保护。

系统代理、VPN 和 TUN 是不同层面的概念

名称 描述什么 使用时需要确认什么
应用代理设置 应用把连接交给代理的方式 应用是否支持并使用该设置
系统代理设置 系统提供的代理配置入口 目标应用是否遵循设置,是否存在绕过规则
VPN 虚拟专用网络连接方案 接管哪些应用或目标,远端能访问哪些网络
TUN 供程序读写 IP 数据包的虚拟网络接口 哪些流量进入接口,程序随后怎样转发
商业服务名称 服务或套餐的称呼 实际协议、客户端模式与配置

应用代理依赖应用使用代理连接。假设浏览器使用了代理,而另一个应用没有使用该设置,就不能用浏览器的联网结果判断另一个应用的路径。这是解释机制的假设场景,不是对某款浏览器或系统版本的实测结论。

TUN 则提供另一种接管入口。Android 官方指南说明,应用可以通过 VpnService 建立本地 TUN 接口,读取发出的 IP 数据包,再由应用处理与网关之间的传输。接口负责交付数据包,后续连接由应用实现。

因此,TUN 不是某一种远端代理协议,也不能仅凭“TUN 模式”判断流量是否全部经过远端服务器。还要看路由范围和客户端的转发规则。

VPN 可以分流,TUN 也有接管范围

Microsoft 的 VPN 路由文档适用于 Windows 10 和 Windows 11,区分了两种配置:

  • 分流:指定路由经过 VPN,其余流量通过物理网络接口。
  • 强制隧道:通过 VPN 默认路由扩大覆盖范围;物理接口上的更具体路由仍可能影响实际路径。

例如,公司内网地址经过 VPN,普通网页直连,是一种分流场景。此时浏览器没有使用 VPN 出口,不能据此认定公司内网连接失效。

Android 官方指南还介绍了按应用筛选 VPN 流量的能力。路由回答“哪些目标进入连接”,应用筛选回答“哪些应用可以使用连接”,两者需要一起看。

代理客户端的接管方式也不局限于应用设置。sing-box 的 TUN 文档提供默认路由、自定义路由和排除路由等选项,说明虚拟接口接管同样可以限定范围。打开 TUN,并不自动证明所有目标都使用同一个远端出口。

这里引用 sing-box 仅用于解释机制。抓取页面包含多个版本的字段变更,不能直接作为已安装版本的配置模板,也不能把其中的能力泛化为所有代理客户端的能力。

Android 的 VPN 图标能证明什么

Android 官方指南说明,首次启用 VPN 应用时,系统会请求用户授权;连接活动时,状态栏会显示 VPN 图标。

这个图标表示系统中的 VPN 连接处于活动状态。它没有直接说明远端使用哪种协议、哪些应用被纳入、哪些目标直连,也不能替代对加密方式的核对。

如果一个客户端请求 VPN 授权,应继续查看它的连接模式、应用范围和路由配置。本文依据的是 VpnService 应用开发指南,不据此推断各 Android 版本的内置协议支持情况,也不保证具体产品兼容性。

加密要分清两条连接

先把路径拆开:

设备 → 代理服务器或 VPN 网关 → 目标网站

设备到中转服务器的加密,与设备到目标网站的 HTTPS 保护,是两个不同条件。

HTTP 代理也可以承载网站 HTTPS

RFC 9110 的 CONNECT 规范说明,CONNECT 请求代理建立通往目标的隧道;成功后,代理在两个方向转发数据。客户端可以通过这条隧道建立到目标的 TLS 连接。

因此,通过支持 CONNECT 的 HTTP 代理访问 HTTPS 网站时,不能把后续网页内容概括为“设备到代理之间全部是明文”。在正常验证目标证书、没有 TLS 拦截的场景下,网站 TLS 保护的是客户端与目标网站之间的通信。

但建立隧道的 CONNECT 请求与后续网站 TLS 数据不同。CONNECT 请求包含目标主机和端口;网站内容受到 TLS 保护,不等于这项隧道建立信息也被 HTTP 代理连接加密。代理还可以限制允许建立隧道的目标或端口,不能仅凭 CONNECT 推断任意连接都能通过。

HTTPS 代理保护设备到代理这一段

在 everything curl 的术语中,HTTPS 代理指客户端使用 HTTPS 连接代理服务器。它为客户端到代理这一段增加 TLS,其他主要工作方式仍与 HTTP 代理相似。

这层 TLS 的另一端是代理服务器。它不能被当作“代理也无法读取普通 HTTP 请求”的依据:是否另有客户端到目标网站的 TLS,要看目标连接是否使用 HTTPS,以及是否通过隧道建立该连接。

可以按下面的方式区分:

连接方式 设备到代理的 TLS 客户端到网站的 TLS
HTTP 代理访问 HTTP 网站 没有由 HTTP 代理连接提供 没有由 HTTP 网站提供
HTTP 代理通过 CONNECT 访问 HTTPS 网站 代理连接本身没有额外 TLS 可以在隧道中建立
HTTPS 代理访问 HTTP 网站 有,终止于代理 没有由 HTTP 网站提供
HTTPS 代理通过 CONNECT 访问 HTTPS 网站 有,终止于代理 可以另行在隧道中建立

表格描述的是上述协议连接模型,不包含企业 TLS 检查或其他额外封装。具体软件界面中的“HTTPS”标签含义,仍需核对其文档。

VPN 也有保护边界。Android 官方指南要求应用与 VPN 网关之间使用强加密;这项要求不能扩展成“网关到任何网站都自动加密”。访问网站时,仍应确认网站使用 HTTPS 并正常验证证书。

出口 IP、DNS 和路由分别判断

这三个检查项对应不同环节:

  • 出口 IP:某个请求到达目标服务时,使用什么来源地址?
  • DNS 路径:域名由谁解析,查询通过哪条连接发送?
  • 目标路由:访问该目标的连接是否进入代理或 VPN?

SOCKS5 规范允许请求携带 IPv4 地址、域名或 IPv6 地址。因此,“使用 SOCKS5”本身不足以证明域名一定在本地解析,或一定交给远端处理,需要继续核对客户端实际发送的地址类型与解析设置。

同样,浏览器中某个请求的出口结果不能代表其他应用或所有目标。发现出口不符合预期时,应先确认该请求是否进入预期路径,再单独检查 DNS;不能直接把出口 IP 未改变归因于 DNS 泄漏。

以下是只读诊断顺序,本文没有执行这些检查:

  1. 查看目标应用使用的代理设置和绕过列表。
  2. 查看客户端连接模式、应用范围、目标路由与排除项。
  3. 对具体目标查看已有连接记录,确认客户端选择的路径或出口。
  4. 单独查看 DNS 配置和已有解析记录,判断解析位置与查询路径。

如果记录不足以说明实际路径,应保留“不确定”,不要把“已连接”状态当成全部流量已被接管的证明。

按实际需求选择

需求 优先确认的能力 选择前要核对什么
只让浏览器使用指定出口 浏览器或应用代理 应用支持情况、绕过范围、目标连接方式
只接管一个应用 应用代理或按应用 VPN 客户端是否提供应用筛选
接管不支持代理设置的应用 虚拟接口与路由接管 流量是否进入接口,客户端能否处理相关流量
访问公司内网 公司提供的接入方案 账号权限、网关可达范围、内网路由和 DNS 要求
内网走公司连接,普通网页直连 分流配置 内网目标是否被纳入,其余流量是否按预期直连

访问公司内网,应以公司提供的接入配置为准;服务名称相似,不代表它能到达公司的网络。只需要浏览器代理时,先确认应用支持情况;需要扩大接管范围时,再核对虚拟接口、路由和应用筛选。

安全性与速度也不能仅凭“VPN”或“代理”名称排序。明确实际流量路径和加密边界,才有条件比较具体方案。