kittylabassistant/sign-craze
GitHub: kittylabassistant/sign-craze
一个用 Go 编写的 Keenetic 路由器防火墙和代理管理工具,支持多内核切换和 DPI 绕过。
Stars: 4 | Forks: 0
# sign-craze
[](https://github.com/kittylabassistant/sign-craze/releases) [](https://github.com/kittylabassistant/sign-craze/stargazers) [](LICENSE) [](https://github.com/kittylabassistant/sign-craze/wiki)
一个用于管理 Keenetic 路由器防火墙的 Go 工具。
通过统一的 Web UI 管理支持三种代理内核:**sing-box**、**xray** 和 **mihomo** — 内核在 `--install` 时根据出站 URL 自动确定,并通过 `--core` 命令切换。可选地集成了用于绕过深度包检测的 [nfqws2](https://github.com/nfqws/nfqws2-keenetic)。

## 功能特性
- **多内核支持 (v1.0.0)**:支持 sing-box、xray 和 mihomo,在 `--install` 时根据出站 URL 自动检测内核。切换内核使用 `--core `,列出可用内核使用 `--core-list`,下载安装内核使用 `--core-install `。
- **统一路由编辑器 (v1.0.0)**:位于 `:9092` 的 Web UI 接收任何活动内核的入站 / 出站 / 规则 / 规则集和预设。点击应用会为所需内核重新生成配置,无需重启 UI 进程。
- **内核专属预设**:应用预设时,URL 规则集会根据活动内核自动匹配 — sing-box 使用 `.srs` (SagerNet),mihomo 使用 `.mrs` (MetaCubeX),xray 使用 geosite:/geoip: 匹配器(内置 `.dat`)。
- **各内核支持的协议**:
- 三个内核均支持:VLESS Reality, VLESS Vision (TCP/TLS), Trojan, Shadowsocks
- Mihomo:Hysteria2, TUIC v5, WireGuard
- Xray:XHTTP, Vision UDP443, PQ (后量子)
- 管理 sing-box / xray / mihomo:安装、启动、停止、更新、回滚
- 两种路由模式:`policy` — 选择性标记(默认),`full` — 所有局域网流量通过代理。在两种模式下,DPI 通过 nfqws2 + NFQUEUE 工作。
- 原子化应用 iptables/ipset 规则,并保证可回滚
- 通过 SRS 规则集进行地理过滤(可按 SHA256 选择性下载)
- 内置 Web UI(仅限局域网访问):Zashboard `:9090`,管理 API `:9091`,路由编辑器 `:9092`(原生 Preact + htm 单页应用)
- 选择性 DPI:通过 `--dpi-targets` 仅为选定的域名/SNI 进行干扰解除
- DPI 规则中的 WAN 过滤器:NFQUEUE 仅捕获 ISP 流量(`-o $WAN_IFACE`),不影响局域网桥接和 TUN
- VPN 排除 (`--dpi-exclude-ips`):为指定 IP 在 NFQUEUE 前执行 RETURN — 保护到自身服务器的 Reality 握手中的 TLS 伪装,以及同一端点上的下游 VPN 客户端
- 自动更新主机列表 (`--dpi-update-interval 24`):每 24 小时从上游来源(zapret, Flowseal discord/youtube)自动更新 DPI 域名列表;`--dpi-update-now` 强制立即更新
- 防火墙看门狗:在 `--ui on` 运行时,每 30 秒自动恢复 iptables 规则
- 无需重启即可管理端口和排除项
- 配置备份与恢复
- 诊断模式 (`--diag`)
## 支持的架构
| 平台 | GOARCH | 备注 |
| ----------- | -------- | ----------- |
| Keenetic (MIPS LE) | `mipsle` | GOMIPS=softfloat |
| Keenetic (MIPS BE) | `mips` | GOMIPS=softfloat |
| Keenetic / RPi (ARM 32) | `arm` | GOARM=7 |
| Keenetic Ultra / RPi 4 | `arm64` | |
## 系统要求
- 已安装 [Entware](https://help.keenetic.com/hc/ru/articles/360021214160) 的 Keenetic 路由器
- 路由器需要互联网访问(用于安装时下载 sing-box)
- `/opt` 分区至少有 30 MB 可用空间
## 安装
```
# 自动检测架构并安装最新发行版
curl -fsSL https://github.com/kittylabassistant/sign-craze/releases/latest/download/install.sh | sh
# 替代方案:直接从 raw.githubusercontent.com 获取脚本(其他CDN——
# 若发行版域名被运营商或DNS封锁,此方式可能生效)
curl -fsSL https://raw.githubusercontent.com/kittylabassistant/sign-craze/refs/heads/main/scripts/install.sh | sh
# 启动安装(交互式:将询问代理URL / 出口设置)
sign-craze --install
# 或无提示模式——从路由器配置自动检测
sign-craze --install-auto
# 运行
sign-craze --start
```
### 离线安装(无 GitHub 访问权限的路由器)
如果路由器无法访问互联网 — 在有网络的机器上下载 bundle,通过 `scp` 传输到路由器并本地运行。
在有互联网的机器上(指定架构 — `arm64`、`arm7`、`mipsle` 或 `mips`):
```
ARCH=mipsle
wget https://github.com/kittylabassistant/sign-craze/releases/latest/download/signcraze-${ARCH}.tar.gz
scp signcraze-${ARCH}.tar.gz root@192.168.1.1:/tmp/
```
在路由器上:
```
cd /tmp && tar xzf signcraze-mipsle.tar.gz
cd signcraze-mipsle-bundle && ./install-offline.sh
```
## 快速路由
sign-craze 通过文件 `/opt/etc/sign-craze/routing.json` 管理路由。该文件与内核无关:相同的规则可在 sing-box、xray 和 mihomo 上工作 — 每个内核会将其转换为自己的原生格式。可通过内置的 Web UI(端口 9092)或 REST API 进行编辑。
### 管理端口
| 端口 | 用途 | 何时使用 |
| ----------- | ----------- | ------------------- |
| `:9090` | Zashboard(监控) | 查看实时流量,切换代理选择器 |
| `:9091` | 管理 REST | 脚本化管理状态、排除项、DPI |
| `:9092` | **路由编辑器** | **编辑路由规则** |
### 启动路由 UI
```
sign-craze --ui on
# 打开 http://:9092
```
### 现成预设
在 UI 的 **路由 → “预设 ▾”** 标签页中:`block-ads`、`ru-direct`、`blocked-vpn`、`discord-vpn`、`torrents-direct`、`block-bogon-udp`、`sign-craze-default`。
预设中的 URL 规则集会自动匹配活动内核:sing-box 使用 `.srs`,mihomo 使用 `.mrs`,xray 通过 geosite:/geoip: 匹配器。
任何修改后 — 点击 **应用**,然后运行 `sign-craze --restart`。
### 文档
- [wiki/Routing.md](wiki/Routing.md) — 路由流水线概述
- [wiki/Routing-Reference.md](wiki/Routing-Reference.md) — routing.json 和 API 的完整说明
- [wiki/Recipe-RU-Direct.md](wiki/Recipe-RU-Direct.md) — “俄罗斯直连,其余走 VPN” 配方
- [wiki/Recipes.md](wiki/Recipes.md) — 所有配方索引
## 多内核支持 (v1.0.0)
sign-craze 支持三种代理内核。活动内核在 `state.json` 中指定,并决定运行哪个二进制文件以及如何生成配置。
### 切换内核
```
# 查看列表及当前活动项
sign-craze --core-list
# 切换至xray
sign-craze --core xray
# 安装(下载)内核(若未安装)
sign-craze --core-install mihomo
# 应用切换
sign-craze --restart
```
### 支持的协议
| 协议 | sing-box | xray | mihomo |
|----------|----------|------|--------|
| VLESS Reality | + | + | + |
| VLESS Vision (TCP/TLS) | + | + | + |
| Trojan | + | + | + |
| Shadowsocks | + | + | + |
| Hysteria2 | + | — | + |
| TUIC v5 | + | — | + |
| WireGuard | + | — | + |
| XHTTP | — | + | — |
| Vision UDP443 | — | + | — |
### 统一路由编辑器
文件 `/opt/etc/sign-craze/routing.json` 与内核无关:一套规则适用于所有内核。Web UI `:9092` 接收更改,应用后会为活动内核生成配置:
- sing-box → `/opt/etc/sign-craze/config.json`
- xray → `/opt/etc/sign-craze/xray/config.json`
- mihomo → `/opt/etc/sign-craze/mihomo/config.yaml`
不兼容的结构(例如在 mihomo 活动时使用 `.srs` URL)会在 `apiValidate` 中显示为警告 — 不会阻止应用,但在 UI 中可见。
## DPI:自动更新主机列表与 VPN 排除项 (v0.8.0)
### 自动更新主机列表
启用 DPI 域名列表每 24 小时从上游自动更新:
```
# 设置数据源(默认已启用 zapret + Flowseal discord/youtube)
sign-craze --dpi-update-urls \
https://raw.githubusercontent.com/bol-van/zapret/master/ipset/zapret-hosts-user.txt.example,\
https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/main/lists/list-youtube.txt,\
https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/main/lists/list-discord.txt
# 启用每日自动更新
sign-craze --dpi-update-interval 24
# 立即更新
sign-craze --dpi-update-now
```
### VPN 排除项 (Reality/VLESS)
保护 Reality 握手中的 TLS 伪装:NFQUEUE 不会影响指向指定 IP 的流量。
当 sing-box 连接到自己的 Reality 服务器或路由器上的下游客户端使用相同的 VPN 端点时,需要此设置。
```
# 将VPN服务器IP添加至排除列表
sign-craze --dpi-exclude-ips 203.0.113.1,2001:db8::1
# 检查列表
sign-craze --dpi-exclude-ips-list
# 应用更改
sign-craze --restart
```
## Web界面
**Web UI**(仅限局域网访问):
- **9090** — Zashboard(代理管理、流量监控、兼容 Clash 的 API)。在浏览器中打开 `http://:9090/`。
- **9091** — sign-craze 管理 REST API(状态、配置、端口、排除项、DPI 目标)。
- **9092** — 路由编辑器单页应用(路由规则的可视化编辑器)。
端口 9090/9091/9092 监听在 `0.0.0.0`;`filter/INPUT` 中的规则(使用 owner-comment + 前缀)用于阻止从 WAN 接口访问 Zashboard :9090。局域网内访问无需认证。
启动:`sign-craze --ui on`。
## 命令
```
sign-craze --install Установить sing-box + правила iptables
sign-craze --install-auto Установить без интерактивных подсказок
sign-craze --install-offline <путь> Установить из локального бинаря
sign-craze --install --with-dpi Установить + включить nfqws2 с preset discord-youtube
sign-craze --start Применить правила + запустить sing-box
sign-craze --stop Остановить + убрать правила iptables
sign-craze --restart / -r Перезапуск (stop + start)
sign-craze --status / -s Показать состояние сервисов
sign-craze --update / -u Обновить sign-craze
sign-craze --update-geo / -g Обновить гео-файлы (SRS rule-set)
sign-craze --update-core Обновить бинарь sing-box
sign-craze --dpi-update Переустановить актуальную версию nfqws2
sign-craze --reinstall Переустановить sign-craze поверх существующей (сохраняет state.json)
sign-craze --core-list Список зарегистрированных ядер (sing-box/xray/mihomo) и активное
sign-craze --core Переключить активное ядро; routing.json сохраняется, конфиг пересобирается (требует --restart)
sign-craze --core-install Скачать и установить указанное ядро (sing-box/xray/mihomo)
sign-craze --config-backup Создать архив state.json в /opt/var/lib/sign-craze
sign-craze --config-restore <путь> Восстановить конфиг из архива
sign-craze --mode policy|full Переключить режим маршрутизации
(Legacy-имена `proxy`/`dpi`/`hybrid` мигрируются в `policy` с предупреждением.)
sign-craze --dpi on|off Включить / выключить DPI-обход (по умолчанию off; первый `on` качает nfqws2)
sign-craze --dpi-strategy <пресет> Установить стратегию DPI
sign-craze --dpi-targets <домены> Selective DPI: desync только для указанных SNI (через запятую; clear — сбросить)
sign-craze --dpi-targets-list Показать текущий список DPI-целей
sign-craze --dpi-exclude-ips IP/IPv6-адреса, исключённые из NFQUEUE (Reality VPN-эндпоинты); clear — сбросить
sign-craze --dpi-exclude-ips-list Показать список IP-исключений DPI
sign-craze --dpi-update-urls Источники для auto-update hostlist (через запятую; clear — отключить)
sign-craze --dpi-update-interval <ч> Период авто-обновления hostlist в часах (0 — выкл, рекомендуется 24)
sign-craze --dpi-update-now Принудительно обновить hostlist из dpi-update-urls прямо сейчас
sign-craze --port-add <порт> Добавить порт в проксируемый набор
sign-craze --port-del <порт> Удалить порт
sign-craze --port-list Показать список портов
sign-craze --exclude-add Добавить IP/CIDR в исключения
sign-craze --exclude-del Удалить из исключений
sign-craze --exclude-list Показать исключения
sign-craze --ui on|off Включить / выключить Web UI (порты 9090/9091/9092)
Watchdog firewall активен, пока процесс `--ui on` работает
sign-craze --backup / -b Создать резервную копию конфигурации
sign-craze --restore <путь> Восстановить из резервной копии
sign-craze --diag / -D Диагностика (PASS/WARN/FAIL по каждому пункту)
sign-craze --uninstall Полное удаление: sing-box, конфиги, логи, бинарь sign-craze
sign-craze --version / -v Показать версии sign-craze и sing-box
```
每个命令的详细说明、iptables 不变量以及配置格式 — 请参阅 [`BEHAVIOR_SPEC.md`](BEHAVIOR_SPEC.md)。
## 从源码构建
宿主机上不需要 Go — 构建在容器中进行。
```
# 所有架构 + UPX
podman run --rm \
-v $(pwd):/workspace:z -w /workspace \
golang:1.25 make build
# 特定架构
podman run --rm \
-v $(pwd):/workspace:z -w /workspace \
-e GOOS=linux -e GOARCH=mipsle -e GOMIPS=softfloat -e CGO_ENABLED=0 \
golang:1.25 go build -ldflags="-s -w" -o dist/sign-craze-mipsle ./cmd/sign-craze
# 测试
podman run --rm -v $(pwd):/workspace:z -w /workspace golang:1.25 go test ./...
# 代码检查工具
podman run --rm -v $(pwd):/workspace:z -w /workspace \
golangci/golangci-lint:latest golangci-lint run ./...
```
经过 `upx --lzma` 压缩后,目标二进制文件大小:≤ 4 MB。
## 架构
```
cmd/sign-craze/main.go
│
internal/cli (диспетчер команд)
├── internal/core (registry: sing-box / xray / mihomo)
│ ├── internal/singbox (адаптер: конфиг, RenderConfig, CheckConfig)
│ ├── internal/core/xray (адаптер: render_rules, translation geosite:/geoip:)
│ └── internal/core/mihomo (адаптер: rule-providers, YAML-рендер)
├── internal/dpi (nfqws2: загрузка, конфиг, NFQUEUE)
├── internal/firewall (iptables/ipset: tproxy / redirect / hybrid)
├── internal/service (init.d shim, lifecycle, PID-файлы)
├── internal/geo (SRS rule-set, ipset-конвертация)
├── internal/state (state.json: ValidCores, Mode, Inbound, Outbounds)
├── pkg/types (RoutingConfig, CoreRenderParams — core-agnostic)
└── internal/web (HTTP: admin API + Routing Editor :9092)
```
详细的数据流图 — 请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。
## 路由器上的文件结构
```
/opt/sbin/sing-box — бинарь sing-box
/opt/sbin/sign-craze — этот бинарь
/opt/etc/sign-craze/config.json — конфигурация sing-box
/opt/etc/sign-craze/nfqws2.conf — конфигурация nfqws2 (если DPI включён)
/opt/etc/sign-craze/dpi-hostlist.txt — список SNI-целей для Selective DPI (если задан)
/opt/etc/init.d/S99signcraze — init.d shim (автозапуск)
/opt/var/lib/sign-craze/ — состояние (гео-файлы, бэкапы)
/opt/var/log/sign-craze/ — логи с ротацией
/opt/var/run/sign-craze-singbox.pid — PID sing-box
/opt/var/run/sign-craze-nfqws2.pid — PID nfqws2
/opt/var/lock/sign-craze.lock — эксклюзивная блокировка
```
## 验证发布版本
发布产物通过 [Sigstore](https://sigstore.dev/)(无密钥 OIDC)签名,并通过 SLSA 构建溯源进行认证。验证不需要单独的密钥。
```
# 1. 下载所需架构的构建产物
gh release download v1.2.3 -p 'sign-craze-mipsle' -p 'sign-craze-mipsle.sig' \
-p 'sign-craze-mipsle.pem' -p 'sha256sums.txt'
# 2. 验证SHA-256完整性
sha256sum -c sha256sums.txt --ignore-missing
# 3. 验证cosign签名(通过Sigstore OIDC验证真实性)
cosign verify-blob \
--certificate sign-craze-mipsle.pem \
--signature sign-craze-mipsle.sig \
--certificate-identity-regexp 'https://github\.com/kittylabassistant/sign-craze/\.github/workflows/release\.yml@.*' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
sign-craze-mipsle
# 4. 验证SLSA来源证明
gh attestation verify sign-craze-mipsle --repo kittylabassistant/sign-craze
```
将 `mipsle` 替换为所需的架构:`arm64`、`arm7`、`mips`。
## 联系方式
- 电子邮件:[kittylabassistant@protonmail.com](mailto:kittylabassistant@protonmail.com)
标签:DPI绕过, EVTX分析, Go语言, Keenetic路由器, mihomo, Netcraze, nfqws2, sing-box, TCP SYN 扫描, Web UI, xray, 二进制发布, 代理核心, 多核支持, 安全合规, 开源工具, 日志审计, 程序破解, 网络代理, 网络安全, 自动化管理, 路由器管理, 路由编辑, 防火墙工具, 隐私保护, 预设配置