Releases: chainreactors/rem
v0.3.0 Makeover
v0.3.0
v0.3.0 是一次大版本重构, 引入了 Simplex 单工信道传输框架、SR-ARQ 可靠传输协议、yamux 多路复用等核心能力, 同时对协议栈、CLI 接口、编译体系进行了全面现代化改造。
新功能
Simplex 单工信道传输框架
新增 x/simplex 包, 实现基于轮询的单工信道抽象层, 支持在各种云 API / 协议上建立全双工隧道:
- [feat] DNS 信道 (
simplex+dns://), 通过 DNS TXT/CNAME 记录传输数据, 支持自定义 DNS 服务器 - [feat] OSS 信道 (
simplex+oss://), 通过阿里云 OSS 对象存储传输数据, HMAC-SHA1 签名, 支持 file/mirror 模式 - [feat] HTTP 信道 (
simplex+http://), 通过 HTTP 轮询传输数据, 自定义 UA/Host/Content-Type - [feat] File 信道, 通过本地文件系统传输数据 (测试/离线场景)
- [feat] SimplexBuffer 双通道缓冲区, CTRL 包优先于 DATA 包传输, TLV 分片重组
- [feat] SimplexPacket TLV 协议格式 (Type 1B + Length 4B + Value), 支持 MTU 自动分片
Simplex 信道用法
# DNS 信道
rem -s "simplex+dns://0.0.0.0:5353/tunnel.example.com"
rem -c "simplex+dns://8.8.8.8:53/tunnel.example.com" -l socks5://127.0.0.1:1080
# OSS 信道
rem -s "simplex+oss:///rem?endpoint=oss-cn-hangzhou.aliyuncs.com&bucket=mybucket&ak=...&sk=..."
rem -c "simplex+oss:///rem?endpoint=...&bucket=...&ak=...&sk=..." -l socks5://127.0.0.1:1080
# HTTP 信道
rem -s "simplex+http://0.0.0.0:8080/tunnel?interval=100&max=131072"
rem -c "simplex+http://server:8080/tunnel?interval=100" -l socks5://127.0.0.1:1080Simplex 信道 URL 通用参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
interval |
轮询间隔 (ms) | 3000 |
max |
最大包体大小 | 信道默认 |
wrapper |
数据包装器 (raw/snappy 等) | - |
proxy |
出站代理 URL | - |
Relay 多跳路由
- [feat] 新增 relay 模式 (
-c -s), 任意节点同时监听下游和连接上游, 自动成为中继 - [feat] Agent 通过 RouteAnnounce 自动发现网络拓扑, 支持 10+ 跳链路
- [feat] raw TCP 透传, wrapper 加密端到端保持, 不在 relay 层解密
- [feat] relay link 自动生成, 带
&via=agentID的上游 URL - [feat]
-d参数跨多跳路由到指定 Agent
# Console
rem -s tcp://0.0.0.0:34996
# Relay: 连上游 + 监听下游
rem -c tcp://console:34996 -s tcp://0.0.0.0:35000 -a relay-a
# Leaf: 连 Relay, 流量从 Console 出去
rem -c tcp://relay-a:35000 -l socks5://127.0.0.1:1080
# 跨多跳路由到指定节点
rem -c tcp://gateway:34996 -d "backend" -l socks5://127.0.0.1:1080Agent 拓扑发现
- [feat] 网络图 JSON 序列化: 节点类型 (server/relay/client)、服务列表、连接关系、流量统计
- [feat]
/api/topology端点, 为可视化管理和智能路由打基础
多连接管理 (ConnHub)
- [feat] ConnHub 连接管理器, 管理多条并行通道, bridgeRoute 路由缓存
- [feat] 三种负载均衡算法:
fallback— 主连接优先, 故障切换到备用连接 (默认)random— 随机选择连接round-robin/rr— 轮询选择
- [feat] 通过
--lb参数或 URL?lb=指定算法
# 多连接 fallback 模式
rem -c tcp://primary:34996 -c tcp://backup:34996 --lb fallback
# round-robin 轮询
rem -c tcp://srv1:34996 -c tcp://srv2:34996 -c ws://srv3:8080/tunnel --lb round-robin上下行分离信道 (Duplex)
- [feat] 支持
up-/down-URL 前缀语法, 将上行和下行流量拆分到不同信道 - [feat] Login 消息 ChannelRole 字段 (
"up:pair-0"/"down:pair-0") 完成方向配对 - [feat]
mergeHalfConn合并两个半双工连接为全双工 - 用例: TCP 上行 + UDP 下行, HTTP 上行 + WebSocket 下行, 不同 endpoint 伪装
Multi-Serve 双向 Serve
- [feat]
-l/-r支持重复指定, 单连接上同时开启多个 serve - [feat] 两端各自独立配置, 互为出口
# 本端同时开 SOCKS5 + 端口转发
rem -c tcp://server:34996 -l socks5://127.0.0.1:1080 -l forward://127.0.0.1:3306?dest=db:3306
# 两端同时开 SOCKS5, 互为出口
rem -c tcp://server:34996 -l socks5://127.0.0.1:1080 -r socks5://0.0.0.0:2080新增传输层
- [feat] HTTP/2 隧道传输 (
h2:///h2s://), 独立 HTTP/2 tunnel, h2c 明文和 TLS 双模式 - [feat] StreamHTTP 隧道 (
streamhttp:///streamhttps://), SSE 下行 + HTTP POST 上行, 反向代理重放缓冲, H1 兼容 - [feat] DNS 隧道传输 (
dns://), base64 编码嵌入域名, KCP 可靠传输 - [feat] Memory Tunnel (
memory://), 进程内 net.Pipe, 用于 C 库集成 - [feat] WireGuard 传输层增强, hash-based tun_ip 自动分配 (
100.64.x.y)
代理链级联
- [feat]
-x出站代理链, 支持 SOCKS5/HTTP/SS 混合级联, 按顺序串联 - [feat]
-fConsole 连接代理链, 为 tunnel 连接指定代理 - 流量路径:
本地 → -f 代理链 → Console → Tunnel → -x 代理链 → 目标
rem -c tcp://server:34996 -x socks5://proxy1:1080 -x http://proxy2:8080
rem -c tcp://server:34996 -f socks5://bastion:1080
rem -c tcp://server:34996 -x ss://aes-256-gcm:password@proxy:8388CLI 接口变更
- [feat]
-l(本端 serve) /-r(对端 serve) 替代旧的-m proxy/-m reverse - [feat]
--list参数, 列出所有已注册的 tunnel/serve/wrapper 组件 - [feat]
--retry/--retry-interval/--retry-max-interval重连参数 - [feat]
--lb负载均衡算法选择 - [feat]
-m/--mode兼容旧版参数 (legacy, ignored)
URL Query 通用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
tls |
启用 TLS | tcp://host:port?tls |
tlsintls |
嵌套 TLS | tcp://host:port?tls&tlsintls |
wrapper |
指定 wrapper | tcp://host:port?wrapper=snappy |
retry |
最大重试次数 (0=无限) | tcp://host:port?retry=5 |
retry-interval |
重试间隔 (秒) | tcp://host:port?retry-interval=10 |
retry-max-interval |
最大退避间隔 (秒) | tcp://host:port?retry-max-interval=300 |
lb |
负载均衡算法 | tcp://host:port?lb=round-robin |
其他新功能
- [feat] 加密算法注册中心重构 (
x/cryptor), 两层模型 (Block+Stream), 支持: aes, sm4, twofish, tripledes, cast5, blowfish, tea, xtea, xor - [feat] 编码器库 (
x/encoders): base32, base58, base64, hex, gzip, images - [feat] Agent 自动恢复机制 (
SafeGoWithRestart), goroutine panic 后自动重启 - [feat] Server 重启热重连, RST 通知机制让 client 快速感知并重连
- [feat] 动态轮询间隔调整, 通过 Reconfigure 消息运行时修改 simplex 轮询频率
- [feat] 指数退避+抖动的 client 重连策略
- [feat] 流量统计, 250ms 桶滑动窗口, 每连接实时带宽/累计流量/最后活跃时间
- [feat] C 库导出 (
-buildmode c-shared/c-archive), 支持 Python/C/Rust 等语言调用 - [feat] 编译期内置默认值,
-s/-c/-l/-r/-q可编译到二进制, 免配置部署
架构重构
- [refactor] 消息协议: 从 protobuf 切换到手写 wire protocol (
protocol/message/wire.go), 移除 protobuf/proto 依赖, 降低体积 - [refactor] 多路复用: 替换 hashicorp/yamux 为本地
x/yamux, 深度集成到 agent 层 - [refactor] CLI 解析: 从 go-flags 切换到标准库 flag, 移除 runtime yaml 依赖
- [refactor] TLS 管理: 从
x/utils抽取x/xtls包, 统一管理 TLS 证书配置 - [refactor] Build Tag 体系: DNS/OSS 各有独立 tag, 按需条件编译
- [refactor] 连接管理: 引入 ConnHub 替代单连接模型, bridge 改为 yamux stream
- [refactor] InboundSide: 用
"local"/"remote"/""替代旧的"proxy"/"reverse", 语义更清晰 - [refactor] URL 解析: 统一 tunnel+serve+wrapper 的 URL 语法, 支持 query 参数配置一切
- [refactor] WireGuard: 拆分为 config/device/keys 等独立文件
性能优化
- [perf] cio.Join 64KB buffer pool, 减少大文件传输 GC 开销
- [perf] token bucket 限速器使用
sync.Cond替代 1ms 自旋等待 - [perf] SOCKS5 请求解析使用
sync.Pool复用bufio.Reader - [perf] HTTP Transport server→client 数据投递重写, 性能提升 3-5x
- [perf] KCP simplex 场景 CPU 占用优化
Bug 修复
- [fix] ARQ session 生命周期 bug 导致 goroutine 泄漏和数据丢失
- [fix] SimplexBuffer 接收路径包边界未保留
- [fix] yamux keepalive 替换为应用层 ping/pong, 修复高延迟环境假死
- [fix] acceptStreamsForSession 中 yamux 错误导致 agent 被误杀
- [fix] HTTP transport server→client 方向数据传递错误
- [fix] redirect 路由未跟随 alias 目标
- [fix] bridge close 时的 atomic 访问和 data race
- [fix] agent Handler 返回后未 close, 导致断线恢复失效
- [fix] DNS simplex 自定义 DNS 服务器不生效
- [fix] pack() buffer 泄漏
破坏性变更
| 变更 | 旧用法 | 新用法 |
|---|---|---|
| Serve 参数 | -m proxy / -m reverse |
-l (本端) / -r (对端) |
| 消息协议 | protobuf | 手写 wire protocol (不兼容旧版本) |
| 依赖 | protobuf, go-flags, yaml | 标准库 flag, 零额外依赖 |
| yamux | hashicorp/yamux (间接) | x/yamux (内置, API 微调) |
Full Changelog: https://github.com/chainreactors/rem-community/commits/v0.3.0
Nightly Build nightly-20260410
🌙 Nightly build
📝 Commit: d53dce9
📦 This release includes the latest changes from the main branch.
v0.2.4
Changelog
- [fix] bind 默认不生效的bug
- [fix] 尝试解决 GLIBC not found的问题
- [fix] retry not work #3
- [fix] proxy mod log error
- [fix] golang 1.17 兼容性
- [fix] -x/-f proxyclient失效的bug
- [fix] icmp 失效的问题 #2
- [improve] 优化多个log信息
- [improve] 初始化时记录更多信息, 优化name生成, 以备后用
- [improve] http tunnel 性能. 大概3-5倍的提升
- [improve] export 中统一错误代码
- [improve] 优化内存分配
- [improve] 优化kcp的simplexCPU性能
Full Changelog: v0.2.3...v0.2.4
v0.2.3
Changelog
- [fix] 部分场景下使用因为stdin 导致的卡死, 如webshell、C2反射加载等
- [fix] 重连机制失效,导致网络波动会直接退出程序
- [fix] -m proxy模式下,日志打印与预期不符, thanks #1
- [improve] 删除x/proxyclient, 统一使用 github.com/chainreactors/proxyclient
- [improve] 大量日志输出优化, 现在能获取到更多且更简洁的信息
Full Changelog: v0.2.2...v0.2.3
v0.2.2
rem作为内部工具已经进行了较为长时间的更新与维护, 所以版本号直接从v0.2.2 开始。
rem-community 在功能上与rem完全一致, 只有一些关于OPSEC的特性rem会更加先进一些。
rem介绍请见: https://chainreactors.github.io/wiki/blog/2025/04/13/rem-introduce/
quickstart: https://chainreactors.github.io/wiki/rem/usage/