Skip to content

coolapijust/Shaper-Next

 
 

Repository files navigation

Shaper Next

下一代防审查代理客户端平台。

核心特性技术架构构建与编译

简介

Shaper Next 是一个面向复杂网络环境的代理客户端。它内置可编排的流量拦截引擎与安全出站链路,用于在可控前提下提升连接可用性与抗干扰能力。

Shaper Next 支持用户自行部署中继端:推荐使用Cloudflare Worker (Serverless)Cloudflare Tunnel + 私有 VPS。 Todo:也可以直连VPS(可自行选择域前置) 客户端将请求修改urlpath后转发到你自有的中继域名,再由中继端发起到目标站点的访问。

核心特性

  • Server 模式: 利用 Cloudflare 边缘与 ECH,把客户端到中继端的外层链路表现为标准 HTTPS 访问;目标站点由中继端代为访问。
  • 双后端反代部署: 同时支持 Worker 与 CF Tunnel + VPS,两种后端使用同一 URL 负载协议,客户端仅需切换 server 域名即可迁移。
  • 完善的全局 TUN 支持: 一键接管操作系统的所有 TCP/UDP 流量,自动兜底注入默认路由,并支持按需绕过内网。
  • 透明代理与 MITM 测试模式: 内置自建 CA 证书热签发模块,支持本地截获流量并在应用层改写路由规则,极大地方便了开发者在模拟环境下的流量探视与测试。
  • 本地连接池与稳态传输: 通过持久化 http.Client + BufferedPipe,减少重复握手并避免 L7 拦截阶段的管道死锁。

技术架构与穿透原理

我们撰写了详尽的架构说明,欢迎阅读项目内的核心文档: 《Shaper Next — 代理穿透与反审查基础原理及技术架构分析》(tech.md)

Server 反代链路与安全边界

Server 模式不是传统 SOCKS/VPN 二进制隧道协议。客户端到中继端采用标准 HTTPS 请求(由本地 L7 解析后重写到 /{auth_secret}/{target_host:port}/{path}),再由 Worker 或 Tunnel+VPS 反向代理到目标站点。

  • 在启用 ECH 时,外层明文 SNI 不暴露真实中继域名。
  • 启用域前置,可绕过部分地区的Sni白名单。
  • 对中继端(Worker/VPS)而言,请求在中继处被处理,因此中继运营方可见目标地址与明文 HTTP 元数据;应将中继视为受信边界并妥善管理 AUTH_SECRET
  • Todo:下一个特性httpMix将完成明文http的轻量化混淆和服务端重组,用于解决CDN的潜在安全与隐私问题。

服务端部署指南 (Server Mode)

为了让 Server 模式 工作,需要一个部署在海外的服务端。项目源码中提供了无缝对接的开箱即用方案。

方案一:Cloudflare Worker (免费)

  1. 注册并登录 Cloudflare Dashboard
  2. 创建一个新的 Worker 服务。
  3. 将本项目下 server/worker.js 文件的全部内容复制并粘贴到 Worker 的在线编辑器中。
  4. 务必在 Worker 的 Settings -> Variables 中,添加一个名为 AUTH_SECRET 的明文环境变量,值设定为您自定义的复杂密码(同时请在 Shaper Next 客户端的出站配置中填入相同的 Token)。
  5. 部署并绑定您自己的(或自动分配的).workers.dev 域名。在客户端填入此域名即可连接。
  6. 流量对于Cloudflare而言是明文,不推荐。

方案二:Cloudflare Tunnel + 私有 VPS (解锁流媒体推荐)

  1. 准备一台境外的 VPS,并在上面安装运行Server端。
  2. 在该服务器上安装并运行 cloudflared,将其配置为代理本地的后端服务,并绑定至 Cloudflare DNS 上的一条子域名(例如 tunnel.example.com)。这一步是可选的,如完全不信任CDN,也可直连VPS。
  3. 在 Shaper Next 中将 Server 域名填写为该子域名并启动代理。

一键安装命令(Server 端)

安装脚本已放在本仓库 server/install.sh
该脚本会直接下载预编译 sni-server 二进制(不在服务器本地编译),并注册 systemd 服务。

在 Debian/Ubuntu VPS 上可直接执行:

curl -fsSL https://raw.githubusercontent.com/coolapijust/Shaper-Next/main/server/install.sh -o /tmp/sni-server-install.sh && sudo bash /tmp/sni-server-install.sh

二进制与源码位置:

  • 二进制:server/sni-server-linux-amd64server/sni-server-linux-arm64
  • 源码:server/src/main.goserver/src/proxy.goserver/src/go.mod

默认下载地址就是本仓库 server/ 目录里的二进制文件;如需自定义产物地址:

SNI_SERVER_URL="https://your-domain/path/to/sni-server-linux-amd64" sudo bash /tmp/sni-server-install.sh

更新与管理命令

脚本支持子命令,可直接用于更新和管理:

# 更新二进制并自动重启服务(保留现有配置)
sudo bash /tmp/sni-server-install.sh update

# 常用管理
sudo bash /tmp/sni-server-install.sh status
sudo bash /tmp/sni-server-install.sh logs
sudo bash /tmp/sni-server-install.sh restart

构建与编译

1. 准备开发环境

  • Node.js 及 包管理器 (推荐 pnpm): npm i -g pnpm
  • Go 语言环境 (推荐 1.24+): 官方下载
  • Wails CLI 框架构建工具:
    go install github.com/wailsapp/wails/v2/cmd/wails@latest

2. 拉取与编译

# 1. 前端构建
cd frontend
pnpm install --frozen-lockfile
pnpm build
cd ..

# 2. 整体跨平台编译 (将构建可执行客户端至 build/bin 目录)
wails build

About

Fully reuse GUI.for.SingBox for snishaper

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

No contributors

Languages

  • Vue 40.5%
  • TypeScript 40.2%
  • Go 14.5%
  • Less 2.2%
  • JavaScript 1.7%
  • Shell 0.7%
  • HTML 0.2%