kittylabassistant/sign-craze

GitHub: kittylabassistant/sign-craze

一个用 Go 编写的 Keenetic 路由器防火墙和代理管理工具,支持多内核切换和 DPI 绕过。

Stars: 4 | Forks: 0

# sign-craze [![GitHub Release](https://img.shields.io/github/v/release/kittylabassistant/sign-craze)](https://github.com/kittylabassistant/sign-craze/releases) [![GitHub stars](https://img.shields.io/github/stars/kittylabassistant/sign-craze)](https://github.com/kittylabassistant/sign-craze/stargazers) [![GitHub License](https://img.shields.io/github/license/kittylabassistant/sign-craze)](LICENSE) [![GitHub Wiki](https://img.shields.io/badge/wiki-docs-blue)](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)。 ![sign-craze](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/15cc089d08010710.jpg) ## 功能特性 - **多内核支持 (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, 二进制发布, 代理核心, 多核支持, 安全合规, 开源工具, 日志审计, 程序破解, 网络代理, 网络安全, 自动化管理, 路由器管理, 路由编辑, 防火墙工具, 隐私保护, 预设配置