
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%लिखने योग्य नहीं है, तो gocreating work dir: ... Access is deniedत्रुटि देगा, बिल्ड से पहलेexport TMP=D:/tmp TEMP=D:/tmpकरें (scripts/verify.shGO_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 श्रृंखला के क्लाइंट चुपचाप फ़ॉलबैक न हों।