Skip to content

架构概述

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/grpcgRPC 传输 + Commander API
gvisor.dev/gvisor用户态 TCP/IP 协议栈(用于 TUN)
github.com/gorilla/websocketWebSocket 传输
github.com/apernet/quic-goQUIC 传输(Hysteria)
github.com/refraction-networking/utlsTLS 指纹模拟
github.com/xtls/realityREALITY 协议
github.com/sagernet/sing-shadowsocksShadowsocks 2022
github.com/miekg/dnsDNS 消息解析
golang.zx2c4.com/wireguardWireGuard 实现
lukechampine.com/blake3BLAKE3 哈希(XUDP GlobalID)

设计原则

  1. Protobuf 优先的配置:所有配置均定义为 protobuf 消息。JSON 只是一种序列化格式,在加载时会被转换为 protobuf。

  2. 功能注册表:组件通过 common.RegisterConfig() 使用其 protobuf 配置类型进行注册。Instance 自动解析依赖关系。

  3. 接口驱动:核心契约在 features/ 中定义为 Go 接口。app/proxy/ 中的实现满足这些接口。

  4. 基于管道的数据流:入站和出站通过 transport/pipe 连接,提供具有背压感知的缓冲通道。

  5. 重度使用上下文:会话元数据(来源、目标、用户、标签、嗅探配置)通过类型化的键在 context.Context 中传递。

用于重新实现目的的技术分析。