
Xboard-Node-Backend: basierend auf Xray-core v26.10.31, Geräteanzahl/Ratenbegrenzung mit einem einzigen Patch implementiert, strikt an den Xboard-V2-Vertrag angelehnt, integrierte CVE-2026-98432-Mitigation
Die nächste Node-Backend-Generation für das Panel cedar2025/Xboard.
Übernommen von wyx2685/v2node die moderne Protokollabdeckung + Kernel-Integrationsweise, von cedar2025/Xboard-Node die Betriebsebene (Push/Maschinenmodus/Zertifikate/Dual-Kernel), die Kernel-Baseline ist auf Xray-core v26.10.31 festgelegt.
Dokumente: docs/ARCHITECTURE.md (Architektur und Entscheidungsprotokoll) · docs/CONTRACT.md (Feld-für-Feld-Vertrag mit dem Panel, inklusive Belegzeilennummern) · docs/PANEL-PATCH.md (Panel-Patch: warum geändert, wie installiert, wie zurückgerollt) · docs/STATUS.md (implementiert / nicht implementiert / wie zu prüfen) · docs/PANEL-IMPROVEMENTS.md (langfristige Liste der Panel-Umbauten)
| Dimension | Xboard-Node (dev 2026-04) | v2node (2026-10) | Dieses Projekt |
|---|---|---|---|
| Kernel-Version | Fork eingefroren auf v26.3.27 | v26.9.30 | v26.10.31 (mit standardmäßig deaktiviertem MPTCP) |
| Geräteanzahl/Ratenbegrenzung | //go:linkname-Hijacking der nicht exportierten Registry | Kopieren des gesamten dispatcher-Pakets in das eigene Modul | Einzelner Patch app/usergate (3 Hunks) |
| Protokollumfang | vless/vmess/trojan/ss/hysteria2/tuic/anytls (xray+sing-box) | vless/vmess/trojan/ss/hysteria2/tuic/anytls, inkl. VLESS encryption / mldsa65Seed / xver | xray-Seite vless/vmess/trojan/ss2022 + vollständige REALITY-Härtung; anytls/tuic/hysteria2 an sing-box übergeben (null Protokoll-Patches) |
| Transport | ws/grpc/httpupgrade/h2 (entfernt)/xhttp | tcp/ws/grpc/httpupgrade/xhttp | xhttp priorisiert, h2/quic zur Kompilierzeit abgelehnt |
| Push | WS-Handshake-Push | Nur Polling (ETag + msgpack) | WS-Push + Polling-Fallback |
| Zertifikate | certmagic + 21 libdns-Provider | lego | certmagic + libdns (xbn-Ansatz übernommen) |
| Maschinenmodus | Unterstützt (Multi-Node/Einzelprozess) | Einzelprozess mit mehreren Nodes | Unterstützt |
Zentrale Erkenntnis: Die echte Divergenz der beiden Projekte liegt nicht in den Funktionen, sondern darin, "wie man sich selbst in die Datenebene von xray einfügt".
app/usergate-Paket + 3 Hunks hinzufügen, die Datenebenen-Semantik wird vom Dispatcher von xray selbst getragen, das Gate übernimmt nur die beiden reinen Funktionen Admit/Limit.cmd/xboard-core/ # 入口(node 模式 / machine 模式 / standalone)
internal/config/ # YAML 配置 + 校验 + 热重载
internal/panel/ # 面板契约:/api/v2/server/*(含 V1 兼容)
internal/kernel/ # 内核抽象(xray / singbox 双实现)
internal/kernel/xray/ # 配置构建(安全默认在此集中收敛)+ 运行时热更新
internal/gate/ # 设备数 + 限速闸门(被 usergate 补丁调用)
internal/sysinfo/ # 面板 status 必填项(cpu/mem/swap/disk,零依赖)
internal/traffic/ # 每用户流量计数与上报
internal/metrics/ # Prometheus 指标 + 健康检查
internal/cert/ # ACME 证书管理(certmagic + libdns)
third_party/xray/ # vendored Xray-core + 补丁序列
panel-patch/ # 面板侧补丁(对 cedar2025/Xboard 的零迁移改动)
docs/ # 架构决策记录、面板改造清单
Abhängigkeiten: Go 1.27+ (laut go.mod erforderlich), git, GNU patch.
make vendor # clone Xray-core v26.10.31 到 third_party/xray
make patches # 打 patches/*.patch(幂等)
make build # -> bin/xboard-core
bash scripts/verify.sh # gofmt + vet + test + build + smoke + vendored 单测 + 补丁幂等
Auf Maschinen ohne make (z. B. git-bash unter Windows) lässt sich direkt bash scripts/verify.sh ausführen, was äquivalent zu make verify ist;
make vendor kann durch eine einzige tar-Pipe ersetzt werden, siehe die Implementierung im Makefile.
Windows-Hinweis: Wenn
%TEMP%nicht beschreibbar ist, meldet gocreating work dir: ... Access is denied; vor dem Build genügtexport TMP=D:/tmp TEMP=D:/tmp(scripts/verify.shunterstützt die VariableGO_TMP).
Den aktuellen Status siehe docs/STATUS.md: go build ./..., go test ./..., -smoke,
die Unit-Tests der vendorten app/usergate und app/dispatcher sind alle bestanden.
SetMultipathTCP(false) (CVE-2026-98432), es sei denn, die Konfiguration setzt explizit sockopt.tcpMptcp: true.debug.SetGCPercent zusätzlich geprüft, ob GODEBUG den Wert multipathtcp=0 enthält; fehlt er, wird eine WARN-Meldung ausgegeben und fortgefahren; install.sh schreibt ihn standardmäßig.allowInsecure wird auf Build-Ebene abgelehnt und in pinnedPeerCertSha256 / verifyPeerCertByName übersetzt.h2/http/h3/quic führen auf Build-Ebene direkt zu einem Fehler (upstream entfernt) und werden nicht stillschweigend auf tcp herabgestuft.shortIds nicht leer ist, dest ist Pflichtfeld, maxTimeDiff hat den Standardwert 90s, optional mldsa65Seed/xver/limitFallback*.minClientVer wird nicht ausgeliefert; falls das Panel es ausliefert, wird eine WARN-Meldung protokolliert und unter /status offengelegt, um zu vermeiden, dass Clients aus der mihomo-Familie stillschweigend zurückfallen.