{"id":49755842,"url":"https://github.com/mcloud136/v2node","last_synced_at":"2026-06-06T07:01:20.918Z","repository":{"id":356995880,"uuid":"1229805163","full_name":"Mcloud136/v2node","owner":"Mcloud136","description":"大幅度提升安全性和性能","archived":false,"fork":false,"pushed_at":"2026-05-25T04:04:39.000Z","size":345,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T06:47:13.578Z","etag":null,"topics":["golang","high-performance","hysteria2","networking","proxy","shadowsocks","trojan","tuic","v2board","v2ray","v2x","vless","vmess","xray"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mcloud136.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-05T11:58:56.000Z","updated_at":"2026-05-25T02:06:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Mcloud136/v2node","commit_stats":null,"previous_names":["mcloud136/v2node"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/Mcloud136/v2node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mcloud136%2Fv2node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mcloud136%2Fv2node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mcloud136%2Fv2node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mcloud136%2Fv2node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mcloud136","download_url":"https://codeload.github.com/Mcloud136/v2node/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mcloud136%2Fv2node/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33972398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","high-performance","hysteria2","networking","proxy","shadowsocks","trojan","tuic","v2board","v2ray","v2x","vless","vmess","xray"],"created_at":"2026-05-10T21:12:38.727Z","updated_at":"2026-06-06T07:01:20.912Z","avatar_url":"https://github.com/Mcloud136.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# v2node\n\nA high-performance v2board backend based on modified xray-core.基于改进的xray-core的高性能v2board后端。\n\n[![Build](https://img.shields.io/github/actions/workflow/status/Mcloud136/v2node/release.yml?label=Build\u0026logo=github\u0026logoColor=white\u0026color=28a745\u0026style=for-the-badge)](https://github.com/Mcloud136/v2node/actions/workflows/release.yml)\n[![Version](https://img.shields.io/github/v/release/Mcloud136/v2node?label=Version\u0026logo=semver\u0026logoColor=white\u0026color=0366d6\u0026style=for-the-badge)](https://github.com/Mcloud136/v2node/releases/)\n[![Released](https://img.shields.io/github/release-date/Mcloud136/v2node?label=Released\u0026logo=calendar\u0026logoColor=white\u0026color=6f42c1\u0026style=for-the-badge)](https://github.com/Mcloud136/v2node/releases/)\n[![Commits](https://img.shields.io/github/commit-activity/m/Mcloud136/v2node?label=Commits\u0026logo=git\u0026logoColor=white\u0026color=f1e05a\u0026style=for-the-badge)](https://github.com/Mcloud136/v2node/)\n\n\n## 项目简介\n\n本项目基于[https://github.com/wyx2685/v2node](https://github.com/wyx2685/v2node)制作，大幅度提升性能并加入一些新的特性。\n\n**注意**：本项目和[https://github.com/wyx2685/v2node](https://github.com/wyx2685/v2node)一样，需要搭配[修改版 V2board](https://github.com/Mcloud136/v2board) 使用。\n\n## 原版特性\n\n- 支持多种协议\n- 高性能并发设计，支持高负载场景\n- 完善的流量限制和设备管理\n- 自动证书管理和更新\n- 配置热更新，无需重启服务\n- 优雅的错误处理和日志管理\n\n## 项目概述\n- **原始项目**: [wyx2685/v2node](https://github.com/wyx2685/v2node)\n- **优化项目**: [Mcloud136/v2node](https://github.com/Mcloud136/v2node)\n- **当前版本**: 1.0.2\n\n---\n\n## 性能优化对比\n\n### 1. 并发性能优化\n\n| 优化项目 | 原始实现 | 优化实现 | 效果 |\n|---------|---------|---------|------|\n| **Limiter Map** | 普通 `map` 加锁 | `sync.Map` | 消除性能瓶颈，高并发下读写更高效 |\n| **原子操作** | 普通指针 | `atomic.Pointer` | 无锁读取，提升并发性能 |\n| **复合 Key** | 分散结构 | 复合 key 设计 | 简化数据结构，减少内存开销 |\n\n### 2. 字符串处理优化\n\n| 文件 | 优化内容 | 原始方式 | 优化方式 |\n|------|---------|---------|---------|\n| common/format/user.go | UserTag 函数 | `fmt.Sprintf` | `strings.Builder` + 预分配容量 |\n| api/v2board/panel.go | User-Agent 构造 | 字符串拼接 | `strings.Builder` + 预分配容量 |\n| limiter/limiter.go | IP Key 构造 | 字符串拼接 | `strings.Builder` + 预分配容量 |\n\n**效果**: 减少内存分配和 GC 压力\n\n### 3. 容量预分配优化\n\n| 文件 | 优化位置 | 优化内容 |\n|------|---------|---------|\n| node/user.go | `compareUserList` | 预分配 `oldMap`、`added`、`modified`、`deleted` 容量 |\n| node/user.go | `reportUserTrafficTask` | 预分配 `result`、`nocountUID`、`data` 容量 |\n| limiter/limiter.go | `GetOnlineDevices` | 预分配 `result`、`toDelete` 容量 |\n\n**效果**: 减少切片扩容次数，提升性能\n\n### 4. 算法优化\n\n| 优化项 | 原始实现 | 优化实现 |\n|-------|---------|---------|\n| `determineSpeedLimit` | 复杂判断逻辑 | 简洁的较小值返回 | 代码减少约 60% |\n| `DeviceTracker.DeleteUser` | 遍历整个 Map | 反向索引快速删除 | 大幅提升删除效率 |\n\n---\n\n## 类型安全与兼容性改进\n\n| 改进项 | 说明 |\n|-------|------|\n| 类型断言替代反射 | 提升代码安全性和执行效率 |\n| 新增 `int64` 类型支持 | 增强数据兼容性 |\n\n---\n\n## 配置管理改进\n\n| 功能 | 说明 |\n|-----|------|\n| 配置验证机制 | 启动前校验参数有效性 |\n| 端口可用性检查 | 避免启动失败 |\n| 配置热更新回滚 | 失败时保持原配置运行，确保服务连续性 |\n| 增量配置更新 | 支持更灵活的配置管理 |\n\n---\n\n## 资源管理改进\n\n| 功能 | 说明 |\n|-----|------|\n| 统一资源生命周期管理 | 避免资源泄漏 |\n| pprof 服务优雅关闭 | 更好的调试支持 |\n| 日志文件句柄统一管理 | 确保资源正确释放 |\n\n---\n\n## 新增功能\n\n| 版本 | 新增功能 |\n|-----|---------|\n| 1.0.0 | cloudflared 服务联动重启 |\n| 1.0.1 | Go 版本更新至 1.26.2，修复构建兼容性 |\n| 1.0.2 | 大幅度提升性能 |\n\n\n---\n---\n\n## 系统要求\n\n### 支持的操作系统\n\n| 系统 | 最低版本 | 说明 |\n|------|----------|------|\n| CentOS | 7 | CentOS 7 无法使用 hysteria1/2 协议 |\n| Ubuntu | 16 | 推荐 18.04+ |\n| Debian | 8 | 推荐 10+ |\n| Alpine | 3.10+ | 轻量级发行版 |\n\n### 硬件要求\n\n| 配置 | CPU | 内存 | 带宽 |\n|------|-----|------|------|\n| 最小配置 | 1核 | 512MB | 100Mbps |\n| 推荐配置 | 2核 | 1GB | 1Gbps |\n\n### 架构支持\n\n- x86_64 (amd64) - 推荐(其余版本请自行构建）\n- ARM64 (aarch64)\n- s390x\n\n---\n\n## 安装方法\n\n### 方法一：一键安装\n\n```bash\nwget -N https://raw.githubusercontent.com/Mcloud136/v2node/master/script/install.sh \u0026\u0026 bash install.sh\n```\n\n**带参数安装**（跳过交互）：\n\n```bash\nwget -N https://raw.githubusercontent.com/Mcloud136/v2node/master/script/install.sh \u0026\u0026 \\\nbash install.sh --api-host https://your-panel.com/ --node-id 1 --api-key your-secret-key\n```\n\n### 方法二：手动安装\n\n#### 1. 创建目录结构\n\n```bash\nmkdir -p /usr/local/v2node\nmkdir -p /etc/v2node\n```\n\n#### 2. 下载并解压二进制文件\n\n```bash\ncd /usr/local/v2node\ncurl -sL \"https://github.com/Mcloud136/v2node/releases/latest/download/v2node-linux-amd64.zip\" | unzip -\nchmod +x v2node\n```\n\n#### 3. 创建 systemd 服务\n\n```bash\ncat \u003e /etc/systemd/system/v2node.service \u003c\u003cEOF\n[Unit]\nDescription=v2node Service\nAfter=network.target nss-lookup.target\nWants=network.target\n\n[Service]\nUser=root\nGroup=root\nType=simple\nLimitAS=infinity\nLimitRSS=infinity\nLimitCORE=infinity\nLimitNOFILE=999999\nWorkingDirectory=/usr/local/v2node/\nExecStart=/usr/local/v2node/v2node server\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\nsystemctl daemon-reload\nsystemctl enable v2node\n```\n\n#### 4. 配置管理脚本\n\n```bash\ncurl -o /usr/bin/v2node -Ls https://raw.githubusercontent.com/Mcloud136/v2node/main/script/v2node.sh\nchmod +x /usr/bin/v2node\n```\n\n---\n\n## config.json 配置详解\n\n### 配置文件位置\n\n```\n/etc/v2node/config.json\n```\n\n### 完整配置示例\n\n```json\n{\n    \"Log\": {\n        \"Level\": \"info\",\n        \"Output\": \"/var/log/v2node.log\",\n        \"Access\": \"/var/log/v2node_access.log\"\n    },\n    \"Nodes\": [\n        {\n            \"ApiHost\": \"https://your-panel.com/\",\n            \"NodeID\": 1,\n            \"ApiKey\": \"your-secret-api-key\",\n            \"Timeout\": 15\n        }\n    ],\n    \"PprofPort\": 6060\n}\n```\n\n### 配置参数说明\n\n#### 1. Log 配置\n\n| 参数 | 类型 | 必填 | 默认值 | 说明 |\n|------|------|------|--------|------|\n| `Level` | string | 否 | `info` | 日志级别：`debug`、`info`、`warning`、`error` |\n| `Output` | string | 否 | `\"\"` | 日志输出文件路径，为空则输出到控制台 |\n| `Access` | string | 否 | `\"none\"` | 访问日志路径，设置为 `\"none\"` 禁用访问日志 |\n\n#### 2. Nodes 配置（支持多节点）\n\n| 参数 | 类型 | 必填 | 默认值 | 说明 |\n|------|------|------|--------|------|\n| `ApiHost` | string | **是** | - | V2board 面板 API 地址，必须以 `/` 结尾 |\n| `NodeID` | int | **是** | - | 节点 ID，在面板中创建节点时获得 |\n| `ApiKey` | string | **是** | - | 节点通讯密钥，在面板中设置 |\n| `Timeout` | int | 否 | `15` | API 请求超时时间（秒） |\n| `RetryCount` | int | 否 | `1` | 失败重试次数 |\n\n#### 3. PprofPort 配置\n\n| 参数 | 类型 | 必填 | 默认值 | 说明 |\n|------|------|------|--------|------|\n| `PprofPort` | int | 否 | `0` | pprof 调试端口，设置为 `0` 禁用 |\n\n### 多节点配置示例\n\n```json\n{\n    \"Log\": {\n        \"Level\": \"warning\",\n        \"Output\": \"\",\n        \"Access\": \"none\"\n    },\n    \"Nodes\": [\n        {\n            \"ApiHost\": \"https://panel1.example.com/\",\n            \"NodeID\": 1,\n            \"ApiKey\": \"key1\",\n            \"Timeout\": 15\n        },\n        {\n            \"ApiHost\": \"https://panel2.example.com/\",\n            \"NodeID\": 2,\n            \"ApiKey\": \"key2\",\n            \"Timeout\": 20\n        }\n    ]\n}\n```\n\n---\n\n## 服务管理\n\n### 使用管理脚本\n\n```bash\nv2node              # 显示管理菜单\nv2node start        # 启动服务\nv2node stop         # 停止服务\nv2node restart      # 重启服务\nv2node status       # 查看状态\nv2node enable       # 设置开机自启\nv2node disable      # 取消开机自启\nv2node log          # 查看日志\nv2node generate     # 生成配置文件\nv2node update       # 更新到最新版本\nv2node update 1.0.0 # 更新到指定版本\nv2node version      # 查看版本\nv2node uninstall    # 卸载\n```\n\n### 使用 systemd 命令\n\n```bash\nsystemctl start v2node        # 启动\nsystemctl stop v2node         # 停止\nsystemctl restart v2node      # 重启\nsystemctl status v2node       # 查看状态\njournalctl -u v2node -f       # 查看日志\nsystemctl enable v2node       # 设置开机自启\nsystemctl disable v2node      # 取消开机自启\n```\n\n---\n\n## 命令行参数\n\n### 启动命令\n\n```bash\nv2node server                   # 使用默认配置文件\nv2node server -c /path/to/config.json  # 指定配置文件\nv2node server --help            # 显示帮助\n```\n\n### 版本信息\n\n```bash\nv2node version\n```\n\n---\n\n## 常见问题\n\n### Q1: 启动失败，提示 \"Exec format error\"\n\n**原因**：二进制文件与系统架构不匹配\n\n**解决方案**：\n```bash\nuname -m                          # 查看系统架构\n# x86_64: 下载 v2node-linux-amd64.zip\n# aarch64: 下载 v2node-linux-arm64-v8a.zip\n```\n\n### Q2: 无法连接到面板 API\n\n**解决方案**：\n1. 检查 `ApiHost` 是否正确，必须以 `http://或者https://` 开头\n2. 检查服务器网络是否能访问面板地址\n3. 检查防火墙是否放行出站流量\n\n### Q3: 日志显示证书错误\n\n**解决方案**：\n```bash\n# Debian/Ubuntu\napt-get update \u0026\u0026 apt-get install ca-certificates\n\n# CentOS\nyum install ca-certificates\nupdate-ca-trust\n```\n\n### Q4: 高 CPU 占用\n\n**解决方案**：\n1. 降低日志级别为 `warning` 或 `error`\n2. 检查是否有大量连接请求\n3. 考虑升级服务器配置\n\n### Q5: 如何配置 HTTPS\n\nHTTPS 配置在 V2board 面板中完成，节点会自动获取证书配置。\n\n---\n\n## 日志管理\n\n### 日志位置\n\n- 默认日志：控制台输出（可通过 `Log.Output` 配置到文件）\n- Systemd 日志：`journalctl -u v2node`\n\n### 日志级别说明\n\n| 级别 | 说明 |\n|------|------|\n| `debug` | 详细调试信息，适合开发环境 |\n| `info` | 一般信息，适合生产环境 |\n| `warning` | 警告信息，推荐生产环境使用 |\n| `error` | 仅错误信息，最小日志量 |\n\n---\n\n## 安全建议\n\n1. **防火墙配置**：只开放必要端口\n2. **定期更新**：保持软件版本最新\n3. **密钥管理**：妥善保管并定期更新 `ApiKey`，避免泄露\n4. **日志监控**：定期检查日志，发现异常及时处理\n5. **权限控制**：建议使用非 root 用户运行\n\n---\n\n## 更新日志\n\n### v1.0.2\n- 字符串构建优化：使用 `strings.Builder` 替代 `fmt.Sprintf`，减少内存分配（涉及 `api/v2board/node.go`、`api/v2board/panel.go`、`common/format/user.go`）\n- 反向索引优化：为 `DeviceTracker` 添加 `userIPs` 反向索引，`DeleteUser` 时间复杂度从 O(n) 优化到 O(1)\n- 切片容量预分配：预计算容量减少扩容次数（涉及 `core/custom.go`、`node/user.go`、`api/v2board/user.go`）\n- 对象池优化：使用 `sync.Pool` 复用 `Writer` 对象，减少 GC 压力\n- 缓存机制优化：添加 `cache` 字段减少 `sync.Map` 查找，提升热点数据访问性能\n- 单次执行优化：`hasPublicIPv6` 使用 `sync.Once` 确保只检测一次，避免重复系统调用\n- 代码优化：直接使用索引访问切片，避免范围变量复制，减少内存拷贝\n- 文档完善：为缓存机制添加详细注释说明，提升代码可维护性\n\n### v1.0.1\n- 优化 Limiter 模块，使用 sync.Map 替代 map，消除性能瓶颈\n- 用户管理 Context 复用，减少内存分配和 GC 压力\n- 修复流量计数器超时参数传递问题\n- 更新 Go 版本为 1.26.2，修复构建兼容性\n- 添加 cloudflared 服务联动重启\n\n### v1.0.0\n- 优化并发性能和配置验证\n- 支持配置热更新\n- 完善错误处理机制\n\n---\n\n## 构建\n\n```bash\nGOEXPERIMENT=jsonv2 go build -v -o build_assets/v2node -trimpath -ldflags \"-X 'github.com/Mcloud136/v2node/cmd.version=1.0.2' -s -w -buildid=\"\n```\n\n---\n\n## 许可证\n\nGPL V3 License\n\n---\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n---\n\n## 相关项目\n\n- [V2board](https://github.com/wyx2685/v2board)\n- [Xray-core](https://github.com/XTLS/Xray-core)\n\n---\n\n## 联系支持\n\n- 项目地址：https://github.com/Mcloud136/v2node\n- 面板项目：https://github.com/wyx2685/v2board\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcloud136%2Fv2node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcloud136%2Fv2node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcloud136%2Fv2node/lists"}