实现清单
在其他框架中重新实现 Xray-core 的分步指南。各项按依赖关系排序——前面的项是后面项的前置依赖。
阶段 1:基础层
缓冲区系统
- [ ] 实现池化字节缓冲区(默认 8KB,等价于
sync.Pool) - [ ] 起止游标,支持零拷贝切片
- [ ]
MultiBuffer(缓冲区列表),用于批量 I/O - [ ]
Buffer.UDP字段,支持每包目标地址元数据 - [ ]
Reader/Writer接口,包含ReadMultiBuffer()/WriteMultiBuffer() - [ ]
Copy(reader, writer)循环,支持活动计时器回调 - [ ]
BufferedWriter,用于批量发送头部 + 首个载荷
管道(Pipe)
- [ ] 双向管道:
New() -> (Reader, Writer) - [ ] 背压机制:可配置大小限制,写满时阻塞
- [ ] 基于信号的通知(非阻塞信号,阻塞等待)
- [ ]
Done实例,用于关闭通知 - [ ] 超时读取支持(
ReadMultiBufferTimeout)
网络基础类型
- [ ]
Address类型:IPv4、IPv6、域名 - [ ]
Destination类型:网络协议(TCP/UDP)+ 地址 + 端口 - [ ]
AddressParser:序列化(类型字节 + 地址),支持端口优先顺序
会话上下文
- [ ]
Inbound元数据:Source、Tag、User、Conn、CanSpliceCopy - [ ]
Outbound元数据:Target、OriginalTarget、RouteTarget、Tag、CanSpliceCopy - [ ]
Content元数据:Protocol、SniffingRequest、Attributes - [ ] 上下文贯穿所有调用
阶段 2:核心流水线
传输链路
- [ ]
Link=(Reader, Writer)对 - [ ] 管道对创建:inboundLink <-> outboundLink(交叉连接)
分发器(Dispatcher)
- [ ]
Dispatch(ctx, destination) -> Link(异步路由) - [ ]
DispatchLink(ctx, destination, link)(同步路由) - [ ] 管道对创建,带统计包装器
- [ ]
cachedReader,支持在不消费数据的情况下进行嗅探 - [ ] 嗅探流水线:HTTP、TLS SNI、QUIC、BitTorrent、FakeDNS
- [ ]
shouldOverride()判断逻辑 - [ ] RouteOnly 与完整覆盖
- [ ]
routedDispatch()—— 强制标签 -> 路由器 -> 默认 outbound
嗅探器(Sniffer)
- [ ] HTTP 方法 + Host 头检测
- [ ] TLS ClientHello SNI 提取
- [ ] QUIC Initial 数据包 SNI 提取
- [ ] BitTorrent 协议检测
- [ ] FakeDNS 元数据嗅探器(IP 池查找)
- [ ] 组合结果(元数据域名 + 内容协议)
- [ ] 200ms 超时,最多 2 次尝试
路由器(Router)
- [ ] 顺序规则评估(首次匹配生效)
- [ ] 域名匹配器:完整匹配、域名后缀匹配、子串匹配、正则匹配
- [ ] IP 匹配器:CIDR 范围 + 二分查找
- [ ] 端口匹配器:精确匹配和范围匹配
- [ ] 网络协议、协议类型、用户、InboundTag 匹配器
- [ ] GeoIP
.dat文件加载 - [ ] GeoSite
.dat文件加载 - [ ] 域名策略:AsIs、IPIfNonMatch、IPOnDemand
- [ ] 负载均衡器:random、roundRobin、leastPing、leastLoad
功能系统
- [ ] 功能注册表(类型 -> 实例映射)
- [ ] 依赖解析(等价于
RequireFeatures) - [ ] 配置注册表(Protobuf 类型 -> 工厂函数)
- [ ] 实例生命周期:创建 -> 添加功能 -> 解析依赖 -> 启动
阶段 3:传输层
传输注册表
- [ ]
RegisterTransportDialer(name, dialer) - [ ]
RegisterTransportListener(name, listener) - [ ]
MemoryStreamConfig(运行时传输 + 安全配置) - [ ] Dialer:
Dial(ctx, dest) -> Connection - [ ] Listener:通过回调接受连接
TCP 传输
- [ ] 基本 TCP 拨号和监听
- [ ] Socket 选项:SO_MARK、TCP_FASTOPEN、SO_REUSEPORT
- [ ] Happy Eyeballs(RFC 8305)双栈支持
- [ ] TProxy / Redirect 支持(Linux)
TLS 安全
- [ ] 标准 TLS,支持可配置证书
- [ ] uTLS 指纹模拟(Chrome、Firefox、Safari 等)
- [ ] ALPN 协商
- [ ] 证书钉扎
REALITY 安全
- [ ] 服务端:模拟真实 TLS 服务器,Short ID 认证
- [ ] 客户端:uTLS 自定义 SessionID
- [ ] 无需 CA(使用目标的真实证书)
附加传输(按需实现)
- [ ] WebSocket(gorilla/websocket 或等效库)
- [ ] gRPC(双向流)
- [ ] HTTPUpgrade(HTTP/1.1 Upgrade)
- [ ] SplitHTTP(POST 上传 + GET 下载)
- [ ] mKCP(UDP 可靠传输)
阶段 4:代理协议
VLESS(优先级:高)
- [ ] 请求头:version + UUID + addons + command + address
- [ ] 响应头:version + addons
- [ ] Addons Protobuf 编解码
- [ ] 用户验证器(UUID -> 账号查找)
- [ ] Inbound:解码头部、认证、分发
- [ ] Outbound:编码头部、拨号传输、双向拷贝
- [ ] 回落系统:name -> ALPN -> path
- [ ] UDP:长度前缀数据包(2B + 载荷)
- [ ] Mux 检测和处理
- [ ] XUDP 检测(session=0、network=UDP)
VLESS Vision(优先级:高,提升性能)
- [ ] TrafficState 逐连接追踪
- [ ] XtlsPadding:可变长度填充 + 命令
- [ ] XtlsUnpadding:移除填充、解析命令
- [ ] XtlsFilterTls:从 ServerHello 检测 TLS 版本
- [ ] VisionWriter:握手期间填充,AppData 时切换直连
- [ ] VisionReader:去填充,检测直连拷贝命令
- [ ] 直连拷贝 / splice 支持
Freedom(优先级:高)
- [ ] 直连出站连接
- [ ] 域名策略:AsIs、UseIP、UseIPv4、UseIPv6
- [ ] 目标覆盖 / 重定向
- [ ] TLS ClientHello 分片(Fragment 选项)
VMess
- [ ] AEAD 头部:auth ID + length(AES-GCM)+ command(AES-GCM)
- [ ] Body 加密:AES-128-GCM、ChaCha20-Poly1305、无加密
- [ ] 基于计数器的逐消息 nonce
- [ ] 基于时间的认证(正负 120 秒)
Trojan
- [ ] SHA224(password) + CRLF + command + address + CRLF
- [ ] 回落支持
- [ ] UDP 分帧(2B 长度 + 载荷)
Shadowsocks
- [ ] AEAD:AES-128/256-GCM、ChaCha20-Poly1305
- [ ] 密钥派生(HKDF)
- [ ] 重放保护(nonce 过滤器)
- [ ] Shadowsocks 2022(通过 sing-shadowsocks 或重新实现)
其他协议
- [ ] SOCKS5(RFC 1928)
- [ ] HTTP 代理(CONNECT + 明文)
- [ ] Dokodemo-door(透明代理)
- [ ] Blackhole(空接收器)
- [ ] Loopback(重新进入路由)
阶段 5:高级功能
Mux
- [ ] 帧格式:meta_len + session_id + status + option + address
- [ ] 客户端:
ClientManager->ClientWorker连接池 - [ ] 服务端:
ServerWorker解复用 + 分发 - [ ] 会话管理(创建、数据、关闭、保活)
XUDP
- [ ] PacketWriter:mux 帧中的逐包寻址
- [ ] PacketReader:提取逐包目标地址
- [ ] GlobalID:源地址的 BLAKE3 哈希
- [ ] Cone 模式上下文标志
DNS
- [ ] 多服务器 DNS,支持基于域名的路由
- [ ] UDP、TCP、DoH、DoQ 后端
- [ ] 带 TTL 的缓存
- [ ] Fake-IP 池(LRU,基于 CIDR 的地址分配)
- [ ] 与分发器嗅探集成
TUN
- [ ] 平台特定的 TUN 设备创建
- [ ] 用户态 IP 栈(gVisor 或替代方案)
- [ ] TCP 转发器(握手 -> net.Conn)
- [ ] UDP Full-Cone NAT 处理器
- [ ] 回程路径的原始 UDP 数据包构造
统计
- [ ] 每用户流量计数器
- [ ] 在线用户追踪
- [ ]
SizeStatWriter包装器
其他
- [ ] 反向代理(Bridge + Portal)
- [ ] Observatory(健康检查)
- [ ] Commander(gRPC 管理 API)
- [ ] Policy(超时、缓冲区大小、按等级配置)
阶段 6:配置
- [ ] JSON 配置解析
- [ ] 配置到运行时对象的转换
- [ ] Inbound/outbound handler 创建
- [ ] 流设置(传输 + 安全)
- [ ] 嗅探配置
- [ ] 路由规则配置
最小可用产品(MVP)的优先顺序
构建最小可用代理的优先顺序:
- Buffer + Pipe —— 基础
- Dispatcher + Router —— 核心流水线(可先实现简单的基于标签的路由)
- TCP 传输 + TLS —— 连通性
- Freedom outbound —— 直连
- VLESS 协议 —— 一个完整的协议(inbound + outbound)
- 嗅探 —— 至少实现 TLS SNI 以支持基于域名的路由
- DNS —— 基本的 UDP DNS 解析器
这将为你提供一个可工作的 VLESS 代理。之后可以逐步增加功能。