
Xboard 노드 백엔드: Xray-core v26.10.31 기반, 단일 패치로 기기 수/속도 제한 구현, Xboard V2 계약과 엄격히 정렬, CVE-2026-98432 완화 내장
cedar2025/Xboard 패널을 위한 차세대 노드 백엔드입니다.
wyx2685/v2node의 현대 프로토콜 커버리지 + 커널 통합 방식을 취하고, cedar2025/Xboard-Node의 **운영 계층(푸시/머신 모드/인증서/듀얼 커널)**을 취하며, 커널 베이스라인은 Xray-core v26.10.31로 고정합니다.
문서: docs/ARCHITECTURE.md(아키텍처 및 의사결정 기록) · docs/CONTRACT.md(패널과의 필드별 계약, 증거 행 번호 포함) · docs/PANEL-PATCH.md(패널 패치: 왜 수정했는지, 어떻게 설치하는지, 어떻게 롤백하는지) · docs/STATUS.md(구현됨 / 미구현 / 검증 방법) · docs/PANEL-IMPROVEMENTS.md(패널의 보다 장기적인 개선 목록)
| 차원 | Xboard-Node(dev 2026-04) | v2node(2026-10) | 본 프로젝트 |
|---|---|---|---|
| 커널 버전 | fork가 v26.3.27에 동결됨 | v26.9.30 | v26.10.31(MPTCP 기본 비활성화 포함) |
| 기기 수/속도 제한 | //go:linkname으로 비공개 레지스트리 하이재킹 | dispatcher 패키지 전체를 자체 모듈로 복사 | 단일 패치 app/usergate(3개 hunk) |
| 프로토콜 범위 | vless/vmess/trojan/ss/hysteria2/tuic/anytls(xray+sing-box) | vless/vmess/trojan/ss/hysteria2/tuic/anytls, VLESS encryption / mldsa65Seed / xver 포함 | xray 측 vless/vmess/trojan/ss2022 + 완전한 REALITY 강화; anytls/tuic/hysteria2는 sing-box에 위임(프로토콜 패치 제로) |
| 전송 | ws/grpc/httpupgrade/h2(삭제됨)/xhttp | tcp/ws/grpc/httpupgrade/xhttp | xhttp 우선, h2/quic 컴파일 시점 거부 |
| 푸시 | WS handshake 푸시 | 폴링만(ETag + msgpack) | WS 푸시 + 폴링 폴백 |
| 인증서 | certmagic + 21개 libdns provider | lego | certmagic + libdns(xbn 방식 계승) |
| 머신 모드 | 지원(다중 노드/단일 프로세스) | 단일 프로세스 다중 Nodes | 지원 |
핵심 결론: 두 프로젝트의 **진짜 분기점은 기능이 아니라 "어떻게 자신을 xray의 데이터 플레인에 끼워 넣는가"**입니다.
app/usergate 패키지 + 3곳의 hunk를 추가하고, 데이터 플레인 의미는 xray 자체의 dispatcher가 담당하며, 게이트는 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/ # 架构决策记录、面板改造清单
의존성: Go 1.27+ (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 单测 + 补丁幂等
make가 없는 머신(예: Windows의 git-bash)에서는 bash scripts/verify.sh를 직접 실행하면 되며, 이는 make verify와 동등합니다;
make vendor는 하나의 tar 파이프로 대체할 수 있으며, 구현은 Makefile을 참조하세요.
Windows 주의:
%TEMP%에 쓸 수 없으면 go는creating work dir: ... Access is denied를 보고합니다. 빌드 전에export TMP=D:/tmp TEMP=D:/tmp를 실행하면 됩니다(scripts/verify.sh는GO_TMP변수를 지원합니다).
현재 상태는 docs/STATUS.md를 참조하세요: go build ./..., go test ./..., -smoke,
vendored app/usergate와 app/dispatcher 단위 테스트가 모두 통과했습니다.
SetMultipathTCP(false) 적용(CVE-2026-98432), 단 설정에 명시적으로 sockopt.tcpMptcp: true가 있을 때는 예외.debug.SetGCPercent 외에도 GODEBUG에 multipathtcp=0이 포함되어 있는지 검증하며, 없으면 WARN을 남기고 계속 진행; install.sh가 기본으로 기록.allowInsecure는 빌드 계층에서 거부되며 pinnedPeerCertSha256 / verifyPeerCertByName으로 변환됨.h2/http/h3/quic 전송은 빌드 계층에서 바로 오류를 발생시킴(업스트림에서 삭제됨), tcp로 조용히 다운그레이드되지 않음.shortIds 비어 있지 않음 검증, dest 필수, maxTimeDiff 기본값 90s, 선택적 mldsa65Seed/xver/limitFallback*.minClientVer를 내려보내지 않음; 패널이 내려보내면 WARN을 기록하고 /status에 노출하여 mihomo 계열 클라이언트가 조용히 폴백되는 것을 방지.