
Backend de nodos Xboard: basado en Xray-core v26.10.31, implementación de límite de dispositivos/velocidad con un solo parche, alineación estricta con el contrato de Xboard V2, mitigación integrada de CVE-2026-98432
Backend de nodos de nueva generación para el panel cedar2025/Xboard.
Toma de wyx2685/v2node la cobertura de protocolos modernos + el modo de integración del núcleo, y de cedar2025/Xboard-Node la capa de operaciones (push/modo máquina/certificados/doble núcleo), con la línea base del núcleo fijada en Xray-core v26.10.31.
Documentación: docs/ARCHITECTURE.md (arquitectura y registro de decisiones) · docs/CONTRACT.md (contrato campo por campo con el panel, con números de línea de evidencia) · docs/PANEL-PATCH.md (parche del panel: por qué se modifica, cómo se instala, cómo se revierte) · docs/STATUS.md (implementado / no implementado / cómo verificar) · docs/PANEL-IMPROVEMENTS.md (lista de mejoras del panel a más largo plazo)
| Dimensión | Xboard-Node (dev 2026-04) | v2node (2026-10) | Este proyecto |
|---|---|---|---|
| Versión del kernel | fork congelado en v26.3.27 | v26.9.30 | v26.10.31 (con MPTCP desactivado por defecto) |
| Número de dispositivos/limitación de velocidad | //go:linkname secuestra el registro no exportado | copia todo el paquete dispatcher a su propio módulo | parche único app/usergate (3 hunks) |
| Superficie de protocolos | vless/vmess/trojan/ss/hysteria2/tuic/anytls (xray+sing-box) | vless/vmess/trojan/ss/hysteria2/tuic/anytls, incluye VLESS encryption / mldsa65Seed / xver | lado xray vless/vmess/trojan/ss2022 + endurecimiento completo de REALITY; anytls/tuic/hysteria2 delegados a sing-box (cero parches de protocolo) |
| Transporte | ws/grpc/httpupgrade/h2 (eliminado)/xhttp | tcp/ws/grpc/httpupgrade/xhttp | xhttp prioritario, h2/quic rechazados en tiempo de compilación |
| Push | push por handshake WS | solo sondeo (ETag + msgpack) | push por WS + retroceso a sondeo |
| Certificados | certmagic + 21 proveedores libdns | lego | certmagic + libdns (siguiendo el esquema de xbn) |
| Modo máquina | soportado (multinodo/monoproceso) | multiproceso con múltiples Nodes | soportado |
Conclusión clave: la verdadera divergencia entre ambos proyectos no está en las funcionalidades, sino en "cómo se insertan en el plano de datos de xray".
app/usergate + 3 hunks en el xray vendorizado, la semántica del plano de datos la asume el propio dispatcher de xray, y la puerta solo implementa dos funciones puras: 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/ # 架构决策记录、面板改造清单
Dependencias: Go 1.27+ (requerido por go.mod), 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 单测 + 补丁幂等
Las máquinas sin make (por ejemplo, git-bash en Windows) ejecutan directamente bash scripts/verify.sh, que es equivalente a make verify;
make vendor puede sustituirse por una única tubería tar, véase la implementación en el Makefile.
Nota para Windows: si
%TEMP%no es escribible, go reportarácreating work dir: ... Access is denied, basta conexport TMP=D:/tmp TEMP=D:/tmpantes de compilar (scripts/verify.shadmite la variableGO_TMP).
El estado actual se encuentra en docs/STATUS.md: go build ./..., go test ./..., -smoke,
las pruebas unitarias de app/usergate y app/dispatcher vendorizados ya han pasado.
SetMultipathTCP(false) (CVE-2026-98432), salvo que la configuración especifique explícitamente sockopt.tcpMptcp: true.debug.SetGCPercent, se verifica si GODEBUG contiene multipathtcp=0; si falta, se emite WARN y se continúa; install.sh lo escribe por defecto.allowInsecure se rechaza en la capa de compilación y se traduce a pinnedPeerCertSha256 / verifyPeerCertByName.h2/http/h3/quic generan un error directo en la capa de compilación (eliminados en versiones posteriores), no se degradan silenciosamente a tcp.shortIds no vacío, dest obligatorio, maxTimeDiff por defecto 90s, opcionales mldsa65Seed/xver/limitFallback*.minClientVer; si el panel lo envía, se registra WARN y se expone en /status, para evitar que los clientes de la familia mihomo sufran una degradación silenciosa.