HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 代理技术全栈手册

    • 代理技术全栈手册 - HiHuo
    • 原理篇

      • 第01章 代理是什么:正向 / 反向 / 透明 / 隧道的统一模型
      • 第02章 代理与网络层级:L3 / L4 / L5 / L7 在哪里截断流量
      • 第03章 一个请求穿过代理的一生:连接生命周期全景
    • 协议篇

      • 第04章 HTTP 代理协议:绝对 URI、CONNECT 隧道、转发头与连接池
      • 第05章 HTTPS 与 TLS 代理:终止 / 透传 / MITM / SNI / mTLS
      • 第06章 SOCKS 协议:SOCKS4/4a/5 与 UDP ASSOCIATE 报文级解析
      • 第07章 HTTP/2、gRPC 与 HTTP/3(QUIC) 代理的挑战
      • 第08章 代理自动配置:PAC / WPAD / 系统代理 / NO_PROXY
    • 层级与转发篇

      • 第09章 L4 代理:TCP/UDP 转发与连接级负载均衡
      • 第10章 L7 代理:协议感知与基于内容的路由
      • 第11章 透明代理:iptables REDIRECT/DNAT、TPROXY 与 eBPF 劫持
      • 第12章 数据搬运的艺术:splice / sendfile / 零拷贝 / io_uring
    • 组件横评篇

      • 第13章 Nginx / OpenResty:反向代理、upstream 与 Lua 可编程
      • 第14章 HAProxy:L4/L7、ACL、健康检查与 stick table
      • 第15章 Envoy:xDS 动态配置与 filter chain,为何是云原生数据面
      • 第16章 Traefik / Caddy:自动服务发现与自动 HTTPS
      • 第17章 Squid 与正向/缓存代理:企业出网、缓存与审计
      • 第18章 mitmproxy:抓包、改包、脚本化调试
      • 第19章 内网穿透与隧道:frp / gost / SSH 隧道 / ngrok
      • 第20章 科学上网生态的技术原理(技术中立)
    • 多语言手写篇

      • 第21章 Go:100 行手写 HTTP/CONNECT + SOCKS5 代理
      • 第22章 Rust:基于 tokio 的高性能 TCP 代理
      • 第23章 Python:asyncio 实现,适合调试与脚本
      • 第24章 C:epoll 裸写与零拷贝,及语言选型对比
    • 容器与K8s篇

      • 第25章 Docker 里的代理:HTTP_PROXY、build/pull 与 daemon 配置
      • 第26章 Sidecar 与流量劫持:Istio init-container 的 iptables 原理
      • 第27章 Ingress 与南北流量:Ingress-nginx 与 Gateway API
      • 第28章 Egress 与出网治理:出口网关、registry mirror、审计
      • 第29章 Service Mesh 数据面:Envoy Sidecar 全链路
    • 进阶篇

      • 第30章 可编程代理:Lua / Wasm / eBPF / xDS,代理的"软件定义"
      • 第31章 性能调优:并发模型、连接池、超时与重试、压测
      • 第32章 排错决策树:502 / 504 / 握手失败 / 环路 / 泄漏
      • 第33章 代理安全:开放代理、SSRF、凭证泄漏与攻击面
    • 底层机制篇

      • 第34章 代理的背压与流控:一个代理最难的部分
      • 第35章 socket 与 TCP 状态机:半关闭、超时、连接生命周期
      • 第36章 HTTP/2 帧、流控与 HPACK:h2 代理的内部机制
      • 第37章 负载均衡算法推导与韧性状态机
      • 第38章 Capstone:把玩具代理改造成生产级骨架
    • 综合实战篇

      • 第39章 企业多跳转发链:拓扑、协议矩阵与贯穿性难题
      • 第40章 端到端实战:把 6 类流量全代理通
      • 第41章 更刁钻的流量:gRPC、长轮询、WebRTC、大文件、双向流
      • 第42章 可落地完整参考实现:一套能跑的多协议转发栈
    • 附录

      • 附录 A:代理协议报文速查(HTTP / SOCKS / PAC / PROXY protocol)
      • 附录 B:组件选型决策树
      • 附录 C:抓包与命令速查

第20章 科学上网生态的技术原理(技术中立)

本章定位:从纯技术/工程视角,讲清 Shadowsocks、V2Ray/Xray、Trojan、Clash/mihomo、sing-box 这类工具背后的代理技术——加密代理、流量混淆、智能分流、多路复用。这些技术与企业出网代理、CDN、Service Mesh 在工程上同源,理解它们能补全你对"代理灵活性"的认知,也是网络抗审查(censorship resistance)这一学术领域的研究对象。

本章只讲技术原理与协议工程,不提供针对任何特定网络的规避操作指南或服务搭建步骤。

学习目标

  • 看清这一类工具的技术共性:本质都是"加密的 SOCKS/HTTP 代理 + 伪装 + 分流"
  • 理解流量混淆/伪装如何对抗 DPI(深度包检测)与 SNI 审查
  • 理解 Clash/sing-box 的"规则分流"如何工作,及它与 DNS 泄漏的关系
  • 把这些技术与前面章节(SOCKS/TLS/QUIC/DNS)连成一条线

前置知识

  • 第06章 SOCKS、第05章 TLS/SNI/ECH、第03章 DNS 泄漏、第07章 QUIC/WebSocket

原理

技术共性:剥开看其实都很熟悉

这些工具名字花哨,但从前 19 章的视角看,技术骨架高度一致:

   本地客户端                      远端服务器
  ┌──────────────┐  加密+混淆隧道  ┌──────────────┐
  │ 本地 SOCKS5/  │═══════════════▶│ 解密 → 转发到 │──▶ 目标网站
  │ HTTP 代理入口 │  伪装成正常流量 │ 真实目标      │
  └──────────────┘                └──────────────┘
        ↑                                 
   应用按系统代理/分流规则把流量送进来

一句话:它们 = 本地一个标准代理入口(第06章 SOCKS5)+ 一条加密混淆的隧道 + 远端出口 + 智能分流规则。 每一块你前面都学过。

演进脉络:从简单加密到深度伪装

工具/协议技术要点解决的问题
Shadowsocks (SS)加密的 SOCKS5,AEAD 对称加密(chacha20-poly1305 / aes-gcm),轻量比明文 SOCKS 多了加密,流量不可读
ShadowsocksRSS + 协议/混淆插件(已停止维护)早期对抗特征识别
V2Ray / Xray(VMess/VLESS)多协议平台;VMess 带加密+认证,VLESS 轻量化(加密交给传输层 TLS)平台化、传输层可叠加伪装
Trojan把代理流量伪装成标准 HTTPS,让它"看起来就是在访问一个普通网站"对抗主动探测:探测者看到的就是个正常 TLS 站点
Clash / mihomo不是新协议,而是多协议客户端 + 规则分流引擎统一管理多种代理 + 按规则智能分流
sing-box通用代理平台,统一整合上述多种协议,现代化架构一个内核支持多协议、多入站/出站

关键技术维度(这才是本章重点)

① 加密:AEAD

用对称 AEAD(认证加密)算法加密整条隧道,保证机密性 + 完整性。流量在网络上是一团不可读、不可篡改的密文。这和 第05章 的 TLS 是同类思想,只是这里是代理协议自带的加密层。

② 混淆 / 伪装:对抗 DPI

DPI(Deep Packet Inspection,深度包检测) 会分析流量特征来识别"这是不是代理流量"。混淆/伪装就是让代理流量在网络观察者眼里和正常流量难以区分:

  • TLS 伪装(Trojan、VLESS+TLS):让代理流量就是真正的 TLS,SNI 填一个正常域名,外观与访问普通 HTTPS 网站无异
  • WebSocket + TLS + CDN:把代理流量包成 WebSocket over HTTPS,再经 CDN 中转——观察者看到的是"在访问某个 CDN 上的网站"(这用到了 第07章 的 WS/h2)
  • gRPC / HTTP2 传输:借多路复用的 h2 流承载,混在正常 gRPC 流量里
  • 与 第05章 的 SNI 审查 / ECH 直接相关:审查方看 SNI 判断目标,伪装方用正常 SNI 或 ECH 隐藏真实目标——这是一场持续的攻防

学术上这叫可插拔传输(Pluggable Transports),是 Tor 等抗审查项目的研究方向;域前置(domain fronting) 曾是一种经典手法(外层 SNI 是大厂域名,内层 Host 才是真实目标),后被主要云厂商封堵。

③ 传输层叠加:分层组合

现代工具把"代理协议"与"传输/伪装层"解耦,可自由组合:

   代理协议(VLESS/Trojan/SS)
        ├─ over TLS                (加密+伪装成 HTTPS)
        ├─ over WebSocket over TLS (再套一层,便于过 CDN)
        ├─ over gRPC               (借 h2 多路复用)
        └─ over QUIC               (UDP、抗丢包,第07章)

这种"协议 × 传输"的矩阵式组合,正是"代理灵活性"的极致体现——也是本书 第30章 "软件定义代理"的一种民间演绎。

④ 智能分流:Clash 规则引擎

Clash/mihomo/sing-box 的核心价值不在协议,而在分流:按规则决定每个连接"直连 / 走代理 / 拒绝",避免"全量走代理"的低效与不必要:

# Clash 配置结构(讲解分流机制,非可用节点)
proxies:                      # 多个代理出口(各种协议)
  - { name: "out-a", type: ss, ... }
proxy-groups:                 # 出口分组(手动选/自动测速/故障转移)
  - { name: "PROXY", type: select, proxies: ["out-a", "DIRECT"] }
rules:                        # 分流规则:自上而下匹配
  - DOMAIN-SUFFIX,internal.corp,DIRECT     # 内网直连
  - GEOIP,CN,DIRECT                        # 国内 IP 直连
  - MATCH,PROXY                            # 其余走代理
  • 规则类型:DOMAIN/DOMAIN-SUFFIX/IP-CIDR/GEOIP/MATCH
  • 与 DNS 泄漏的关系(第03章):分流要先知道域名/IP,所以这类客户端通常自带 fake-ip / DNS 重定向机制,确保 DNS 解析也按规则走,不泄漏给本地 DNS
  • 多路复用(mux):多个请求复用一条隧道连接,减少握手开销(第07章 h2 思想)

与企业代理/CDN/Mesh 的技术同源

把民间工具和企业技术并排,你会发现是同一套工程:

技术科学上网工具企业/云原生对应
加密隧道SS/Trojan AEAD/TLSMesh mTLS、VPN
TLS 伪装/SNITrojan、域前置SNI 路由、CDN
WebSocket/gRPC 承载VLESS+ws/grpcgRPC 代理
规则分流Clash rulesEgress 出网策略、PAC(第08章)
多路复用muxHTTP/2 多路复用

这正是把本章放进本书的理由:它不是"另一个世界",而是你已学的代理技术(SOCKS+TLS+混淆+分流+复用)的高强度组合应用。


️ 概念验证(不涉及规避,仅演示技术等价性)

演示一:Shadowsocks 本质 = 加密的本地 SOCKS5

用本机自连演示"SS 客户端 = 一个本地 SOCKS5 入口"这一技术事实(服务端也指向本机,仅说明结构):

# ss-local 在本地 1080 起一个 SOCKS5 入口(与第06/21章的 SOCKS5 完全同构)
# 应用把它当普通 SOCKS5 用:
curl --socks5-hostname 127.0.0.1:1080 https://example.com/ -s -o /dev/null -w "%{http_code}\n"
# 技术上:应用 → 本地SOCKS5(加密) → 远端解密 → 目标,与第06章的 SOCKS5 流程一致,只是隧道加了密

演示二:理解 TLS 伪装为何难被识别

# Trojan 类伪装的核心:它就是真正的 TLS,SNI 是正常域名
openssl s_client -connect <host>:443 -servername www.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject
# 观察者只看到一次到 www.example.com 的正常 TLS 握手——这就是"看起来像正常网站"的含义

演示三:分流规则的判定逻辑

请求 github.com  → 命中 MATCH,PROXY → 走代理
请求 10.0.0.5    → 命中 IP-CIDR,10.0.0.0/8,DIRECT → 直连
请求 内网域名     → 命中 DOMAIN-SUFFIX,...,DIRECT → 直连(避免内网流量走代理)

这套"按目标决定走向"的逻辑,与 第08章 的 PAC FindProxyForURL 在工程上是一回事。


技术要点 / 排错(工程视角)

现象技术原因关联章节
解析对了但"被看到访问了谁"DNS 泄漏,域名在本地解析第03章:用远端 DNS / fake-ip
UDP/QUIC 业务不通代理未实现 UDP 转发第06章:UDP ASSOCIATE
伪装流量仍被识别特征残留 / 指纹(TLS 指纹、包长分布)DPI vs 混淆的持续攻防
分流误判(该直连的走了代理)规则顺序/GEOIP 库过期规则自上而下,更新 GEOIP
连接频繁握手、慢未开多路复用mux / h2(第07章)

本章小结

  • 这类工具的技术骨架 = 本地标准代理入口(SOCKS5)+ 加密混淆隧道 + 远端出口 + 智能分流,每块都是前面学过的技术。
  • 演进主线:SS(加密 SOCKS)→ V2Ray/Xray(多协议平台)→ Trojan(TLS 伪装)→ Clash/sing-box(多协议 + 规则分流)。
  • 四大技术维度:AEAD 加密、对抗 DPI 的混淆/伪装、协议×传输的分层组合、规则分流(含防 DNS 泄漏)。
  • 它与企业代理、CDN、Service Mesh 技术同源——理解它就是理解"代理灵活性"的极限组合。

组件横评篇至此完整收官(13-20,从云原生反代到正向/调试/穿透/混淆全覆盖)。下一篇回到 第五篇·多语言手写:用 Rust/Python/C 重新实现代理,对照 第21章 的 Go,理解不同语言写代理的取舍。

Prev
第19章 内网穿透与隧道:frp / gost / SSH 隧道 / ngrok