Skip to content

网络代理基础原理

网络代理的核心是“代替应用发起连接”。应用原本会直接连目标服务;启用代理后,应用先把请求交给本机代理客户端,再由客户端决定是否直连、拒绝,或者通过远端代理服务访问目标。

代理解决的问题

代理系统通常用于三类场景:

  • 统一出口:让多台设备或多个程序从指定出口访问外部服务。
  • 规则分流:部分域名直连,部分域名走代理,避免所有流量都进入隧道。
  • 网络适配:让不支持复杂路由的应用,通过本机代理端口或 TUN 接入统一策略。

它不改变应用层业务逻辑。浏览器仍然发 HTTP 请求,数据库客户端仍然发数据库协议,代理只是改变这条连接走哪条网络路径。

代理和 VPN 的边界

VPN 通常在网络层建立虚拟网卡,把一大段路由导入隧道。网络代理通常在应用层或本机转发层工作,更强调按规则处理每条连接。

维度网络代理VPN
接入方式HTTP/SOCKS 端口、系统代理、TUN虚拟网卡、系统路由
分流能力常按域名、IP、进程、规则集分流常按路由表和网段分流
客户端感知应用可能需要读取系统代理多数应用无感知
常见用途浏览器、开发工具、指定 API 出站企业内网、全局隧道、站点互联

现代代理客户端也可以使用 TUN 模式接管更底层流量,所以二者边界在工程上会重叠。判断时不要看名字,看它实际接管的是应用代理端口还是系统路由。

本机流量怎么进入代理客户端

本机侧常见三种入口。

HTTP / SOCKS 端口

客户端在本机监听端口,例如 HTTP 代理端口和 SOCKS5 端口。应用显式配置代理地址后,请求会先发给这个本机端口。

text
浏览器 -> 127.0.0.1:7890 -> 代理客户端 -> 远端代理 / 直连

这种方式边界清晰,适合浏览器、命令行工具、开发工具。缺点是某些应用不读取代理设置,或者只支持 HTTP 代理、不支持 SOCKS。

系统代理

系统代理是把本机代理端口写入操作系统网络设置。大部分遵守系统设置的应用会自动使用它。

它不是强制接管。应用如果自己实现网络栈、忽略系统代理,或者直接建立原始连接,系统代理就管不到。

TUN 模式

TUN 模式通过虚拟网卡接收流量,再由代理客户端在本机判断和转发。它覆盖面更广,适合不支持系统代理的应用。

TUN 也更敏感:它会和系统路由、DNS、企业 VPN、防火墙、其他虚拟网卡产生相互影响。只有在系统代理无法覆盖目标应用时,才需要优先考虑 TUN。

规则决策怎么发生

代理客户端拿到一条连接后,会把目标域名、IP、端口、进程、协议等信息交给规则引擎。规则通常按顺序匹配,命中后就确定流量去向。

yaml
rules:
  - DOMAIN-SUFFIX,internal.example,DIRECT
  - DOMAIN-SUFFIX,api.example.org,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

这段配置表达的是:

  1. 内部域名直连。
  2. 指定 API 域名走代理。
  3. 中国大陆 IP 直连。
  4. 其他没有命中的流量走代理。

规则的顺序很重要。越具体的规则越应该放在前面,兜底规则放在最后。

DNS 为什么关键

很多代理问题看似是节点问题,实际是 DNS 问题。原因是规则匹配常常依赖域名和 IP:

  • 如果域名在本地先解析成 IP,后续规则可能只能看到 IP。
  • 如果使用 fake-ip,客户端会给域名分配一个虚拟 IP,再在内部保存域名映射。
  • 如果目标域名被错误解析,代理链路再稳定也会访问到错误地址。

网络代理里的 DNS 不只是“拿到 IP”,它还影响规则命中、连接目标和隐私边界。生产配置里要明确哪些域名本地解析,哪些通过可信 DNS 解析,哪些域名必须保留给代理客户端判断。

数据面链路

一次典型的代理访问如下:

mermaid
sequenceDiagram
    participant App as 应用程序
    participant Core as 本机代理内核
    participant DNS as DNS / 规则引擎
    participant Remote as 远端代理服务
    participant Target as 目标服务

    App->>Core: 发起连接
    Core->>DNS: 解析域名并匹配规则
    alt 直连
        Core->>Target: 直接建立连接
        Target-->>Core: 返回数据
    else 代理
        Core->>Remote: 建立代理协议连接
        Remote->>Target: 访问目标服务
        Target-->>Remote: 返回数据
        Remote-->>Core: 加密传回
    end
    Core-->>App: 返回响应

这条链路中,本机代理内核既是入口,也是路由控制点;远端代理服务只是代理分支上的一环。直连流量不会经过远端代理服务。

分层模型

层级关键问题常见配置
本机接入层应用流量怎么进入客户端系统代理、HTTP/SOCKS 端口、TUN
路由决策层这条连接走直连还是代理rules、proxy-groups、DNS 策略
加密协议层客户端和远端如何认证和加密cipher、password、UUID、TLS
传输承载层加密流量以什么网络形态传输TCP、WebSocket、gRPC、QUIC
出口访问层远端怎样访问目标站点出口 IP、DNS、目标端口、连通性

排查时也按这个顺序推进。先看应用有没有进入客户端,再看规则是否命中,再看远端连接是否建立,最后看出口到目标是否可达。

总结

网络代理不是简单的“开代理”。它先在本机接住流量,再用规则和 DNS 决定路径,最后通过直连或远端代理访问目标。理解本机接入、规则决策和数据面链路,就能看懂后面的组件、实施和排障。

别急,先让缓存热一下。