Skip to content

Releases: chainreactors/rem

v0.3.0 Makeover

10 Apr 02:23

Choose a tag to compare

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:1080

Simplex 信道 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:1080

Agent 拓扑发现

  • [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] -f Console 连接代理链, 为 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:8388

CLI 接口变更

  • [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

10 Apr 02:09

Choose a tag to compare

Pre-release

🌙 Nightly build

📝 Commit: d53dce9

⚠️ This is an automated nightly build and may be unstable.

📦 This release includes the latest changes from the main branch.

v0.2.4

27 May 07:46

Choose a tag to compare

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

28 Apr 08:00

Choose a tag to compare

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

12 Apr 20:22

Choose a tag to compare

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/