Skip to content

代理和 VPN 协议概述

简介

本文介绍 Xray-core 所涉及的主要代理协议(SOCKS5、HTTP、VLESS、VMess、Trojan、Shadowsocks)和 VPN 协议(WireGuard、IPSec)的基本工作原理。

本文回答

  • 代理协议和 VPN 协议的区别
  • 各种代理协议的设计思路和安全特性
  • 不同协议在反审查场景下的优劣

本文在项目中的位置

本文属于背景知识层。理解各协议的基本原理是阅读协议分析文档的前置条件。

适合读者

所有需要理解不同代理协议差异和适用场景的读者。

前置知识

TCP/UDP 基础,基本的加密概念。

文章理解难度

入门。

重点

  • SOCKS5 的三阶段握手机制
  • VLESS 的无加密设计哲学
  • Trojan 的 TLS 伪装思路
  • WireGuard 的 Noise 协议框架

上级文档和相关文档

主要证据

RFC 1928(SOCKS5),VLESS 协议规范,Shadowsocks 协议文档,WireGuard 白皮书。


代理协议 vs VPN 协议

特性代理协议VPN 协议
工作层级应用层(L7)或传输层(L4)网络层(L3)或数据链路层(L2)
粒度可按应用/域名代理通常是全设备或全网段
配置复杂度需要客户端配置代理通常系统级配置
典型协议SOCKS5, HTTP, ShadowsocksIPSec, WireGuard, OpenVPN
性能开销较低(仅代理需要的数据)较高(所有流量都走隧道)

SOCKS5 协议

SOCKS5(RFC 1928)是一种通用的代理协议,它工作在会话层(L5),不关心传输的具体应用协议。

握手流程

SOCKS5 的连接建立分为三个阶段:

SOCKS5 在反审查中的作用

  • SOCKS5 本身不提供加密,所有数据以明文传输
  • 它通常作为本地代理接口使用,在客户端本地运行,将浏览器/应用的连接转发到远程代理
  • 在 Xray-core 中,SOCKS5 入站是客户端最常见的入口协议

UDP 支持

SOCKS5 支持 UDP 转发(UDP ASSOCIATE):客户端先通过 TCP 建立关联,然后通过该关联发送封装了目标地址的 UDP 数据报。

HTTP 代理

HTTP 代理通过 HTTP CONNECT 方法建立隧道:

客户端 → 代理:CONNECT example.com:443 HTTP/1.1
代理 → 客户端:HTTP/1.1 200 Connection Established
(之后双向转发原始 TCP 数据)

与 SOCKS5 相比:

  • HTTP 代理只支持 TCP(不支持 UDP)
  • 头部开销更大(HTTP 请求头)
  • 但更容易被网络中间件理解(支持标准 HTTP 认证)

Shadowsocks

Shadowsocks 是一种流行的加密代理协议,设计目标是简单高效。

设计特点

  • 使用预共享密钥(PSK)进行认证和加密
  • 流量看起来像随机数据(没有协议特征头)
  • 支持多种加密方式:AEAD(AES-256-GCM, ChaCha20-Poly1305)等

数据包格式

[加密的载荷]
- 加密算法使用 AEAD 模式
- 每个数据块包含加密的目标地址 + 数据
- 没有单独的目标地址解析步骤

Shadowsocks 2022 版本对协议进行了现代化改造,使用了独立的加密方法。

VMess

VMess 是 V2Ray 项目原创的加密代理协议,Xray-core 作为 V2Ray 的 fork 继承了完整的 VMess 实现。

核心特征

  • 基于 UUID 的用户认证
  • 使用 AEAD(AES-128-GCM, ChaCha20-Poly1305 等)进行加密
  • 支持多用户和用户等级
  • 指令机制:支持 TCP、UDP、Mux 等多种传输模式
  • 时间戳和随机数防重放

消息格式

请求头:
[版本(1)] [指令] [端口] [地址类型] [地址] [随机填充长度] [填充]
认证信息:
[时间戳] [随机数] [加密的载荷]

VLESS

VLESS(V2Ray Less / Very Less)是 Project X 设计的轻量级代理协议,是 VMess 的简化版。

核心设计

  • 无加密:VLESS 本身不提供加密层,依赖底层传输(TLS、REALITY 等)提供安全
  • 无状态:服务端不维护连接状态,提升性能
  • Flow 流控:通过 XTLS 流控模式消除 TLS-in-TLS 特征
  • Fallback 回落:支持将非 VLESS 连接转发到其他服务

为什么去除加密

去除加密层的优点:

  1. 减少计算开销(不需要双重加密)
  2. XTLS 需要看到内部 TLS 流量才能分流——如果 VLESS 加密了数据,XTLS 无法识别内部的 TLS 结构
  3. 安全由传输层(TLS/REALITY)保证,应用层加密是冗余的

Trojan

Trojan 的设计思路是将代理流量完全伪装为 HTTPS 流量。

工作原理

客户端 → 服务端:TLS 连接到 443 端口
  - ClientHello 看似正常的 HTTPS 访问
  - 在 TLS 隧道建立后,发送 Trojan 认证头:
    [密码的 SHA224 哈希(56字节)] + CRLF + [SOCKS5 请求]
  - 后续流量通过 TLS 隧道双向转发

如果认证头不匹配(即非 Trojan 流量),服务端将连接转发到配置的本地 Web 服务器(如 Nginx),返回正常的网页内容——这被称为"回落"。

与 VLESS + REALITY 的对比

Trojan 的回落依赖有真实的 Web 服务运行。如果回落目标是空服务,审查方能通过抓取网页响应来判断。

REALITY 改进了这一点:回落目标可以是任何外部网站,不依赖本地 Web 服务。审查方进行主动探测时,连接被转发到配置的目标网站(如 microsoft.com),收到的就是真实网站的证书和页面。

WireGuard

WireGuard 是一种现代 VPN 协议,被集成到 Linux 内核中。

核心设计

  • 基于 Noise 协议框架进行密钥交换
  • 使用 ChaCha20-Poly1305 进行加密
  • 基于 UDP 传输
  • 使用 Cryptokey Routing 将公钥与允许的 IP 地址关联
  • 代码量极小(约 4000 行),易于审计

在 Xray-core 中的角色

源码位置:xray-core/proxy/wireguard/

Xray-core 支持 WireGuard 作为入站和出站协议,可以与其他代理协议配合使用。

IPSec

IPSec(IP Security)是一组在网络层提供安全通信的协议套件。

主要模式

  • 传输模式:只加密 IP 载荷,IP 头部保持原样
  • 隧道模式:加密整个原始 IP 包,封装在新的 IP 包中

协议组件

  • AH(Authentication Header):提供数据完整性验证(不加密)
  • ESP(Encapsulating Security Payload):提供加密和完整性
  • IKE(Internet Key Exchange):负责密钥协商

IPSec 通常用于站点到站点 VPN,在反审查场景中较少使用,因为其 IKE 握手有明显的协议特征。

外部参考资料

资料:RFC 1928 - SOCKS Protocol Version 5 类型:IETF 标准 可信度:A

资料:Shadowsocks 协议规范 类型:项目文档 链接:https://shadowsocks.org/doc/ 可信度:A

资料:WireGuard 白皮书 类型:学术论文 链接:https://www.wireguard.com/papers/wireguard.pdf 可信度:A

资料:VLESS 协议说明 类型:项目文档 链接:https://xtls.github.io/ 可信度:A

读者自检

读完本文后应能回答:

  • 代理协议和 VPN 协议在 OSI 模型中的层次差异
  • SOCKS5 的三阶段握手
  • VLESS 去除加密层的设计动机
  • Trojan 与 VLESS+REALITY 在回落机制上的区别
  • WireGuard 的 Noise 协议框架特点

下一步阅读

各协议的源码级分析见 protocols/ 目录。