架构概述
Xray-core 是一个用 Go 编写的模块化网络代理平台。它通过 入站 → 分发器 → 路由器 → 出站 的流水线处理网络流量,两端支持可插拔协议,底层支持可配置的传输方式。
项目结构
xray-core/
core/ # 实例、配置加载、生命周期管理
app/ # 应用层功能
dispatcher/ # 中央分发器(入站→路由→出站)
proxyman/ # 入站/出站处理器管理器
router/ # 路由引擎、规则、负载均衡器
dns/ # DNS 解析器、Fake-IP
policy/ # 超时和缓冲区策略
stats/ # 流量统计
commander/ # gRPC 管理 API
reverse/ # 反向代理隧道
observatory/ # 健康检查
common/ # 共享工具库
buf/ # 缓冲区池(8KB 块)
net/ # 网络基础类型(Address、Destination)
protocol/ # 协议抽象(RequestHeader、AddressParser)
session/ # 会话上下文(Inbound、Outbound、Content)
mux/ # 流多路复用
xudp/ # UDP-over-mux,支持逐包寻址
signal/ # Notifier、ActivityTimer、Done
strmatcher/ # 字符串/域名匹配(全匹配、域名、子串、正则、MPH)
crypto/ # AES、ChaCha20 等
singbridge/ # sing-box 库桥接
features/ # 功能接口(特征/协议)
dns/ # dns.Client、dns.FakeDNSEngine 接口
inbound/ # inbound.Manager、inbound.Handler 接口
outbound/ # outbound.Manager、outbound.Handler 接口
routing/ # routing.Dispatcher、routing.Router 接口
policy/ # policy.Manager 接口
stats/ # stats.Manager 接口
proxy/ # 协议实现
vless/ # VLESS(支持 Vision、XUDP、反向代理)
vmess/ # VMess(AEAD)
trojan/ # Trojan
shadowsocks/ # Shadowsocks(经典版)
shadowsocks_2022/ # Shadowsocks 2022
socks/ # SOCKS5
http/ # HTTP 代理
dokodemo/ # 透明代理(dokodemo-door)
freedom/ # 直连出站
blackhole/ # 空出站(丢弃流量)
dns/ # DNS 代理
loopback/ # 重新进入路由
wireguard/ # WireGuard 隧道
hysteria/ # Hysteria2
tun/ # TUN 设备 + gVisor IP 协议栈
transport/ # 传输层
internet/ # 传输注册 + 实现
tcp/ # TCP
websocket/ # WebSocket
grpc/ # gRPC(gun)
httpupgrade/ # HTTP Upgrade
splithttp/ # Split HTTP
kcp/ # mKCP(可靠 UDP)
tls/ # TLS + uTLS
reality/ # REALITY
hysteria/ # QUIC(Hysteria 传输)
udp/ # UDP 分发器
pipe/ # 内部管道(Reader↔Writer)
infra/conf/ # JSON 配置 → protobuf 转换高层数据流
mermaid
flowchart LR
Client([客户端]) -->|TCP/UDP| Inbound
subgraph Xray["Xray-core 实例"]
Inbound["入站处理器<br/>(VLESS/VMess/Trojan/...)"]
Dispatcher["分发器<br/>(嗅探 + 路由)"]
Router["路由器<br/>(规则 + 负载均衡器)"]
Outbound["出站处理器<br/>(Freedom/VLESS/VMess/...)"]
Inbound -->|"Dispatch(ctx, dest)"| Dispatcher
Dispatcher -->|"PickRoute(ctx)"| Router
Router -->|出站标签| Dispatcher
Dispatcher -->|"Dispatch(ctx, link)"| Outbound
end
Outbound -->|传输层| Server([远程服务器])关键依赖
| 依赖 | 用途 |
|---|---|
google.golang.org/protobuf | 配置序列化 |
google.golang.org/grpc | gRPC 传输 + Commander API |
gvisor.dev/gvisor | 用户态 TCP/IP 协议栈(用于 TUN) |
github.com/gorilla/websocket | WebSocket 传输 |
github.com/apernet/quic-go | QUIC 传输(Hysteria) |
github.com/refraction-networking/utls | TLS 指纹模拟 |
github.com/xtls/reality | REALITY 协议 |
github.com/sagernet/sing-shadowsocks | Shadowsocks 2022 |
github.com/miekg/dns | DNS 消息解析 |
golang.zx2c4.com/wireguard | WireGuard 实现 |
lukechampine.com/blake3 | BLAKE3 哈希(XUDP GlobalID) |
设计原则
Protobuf 优先的配置:所有配置均定义为 protobuf 消息。JSON 只是一种序列化格式,在加载时会被转换为 protobuf。
功能注册表:组件通过
common.RegisterConfig()使用其 protobuf 配置类型进行注册。Instance自动解析依赖关系。接口驱动:核心契约在
features/中定义为 Go 接口。app/和proxy/中的实现满足这些接口。基于管道的数据流:入站和出站通过
transport/pipe连接,提供具有背压感知的缓冲通道。重度使用上下文:会话元数据(来源、目标、用户、标签、嗅探配置)通过类型化的键在
context.Context中传递。