• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
YvLink 给你的服务器加速并隐藏源ip

原生 YvLink 给你的服务器加速并隐藏源ip 0.12

完成注册/登录后下载
版权类型
原创
版权链接
https://github.com/baiyun1123/YvLink?tab=AGPL-3.0-1-ov-file
Wiki/文档
https://baiyun1123.github.io/YvLink/
语言支持
多语言
前置组件
适配版本(基岩)
  1. 最新版本
[MD] <div align="center"> <img src="assets/icon.png" width="144" height="144" alt="YvLink project icon / YvLink 项目图标"> <h1>YvLink · mc-proxy</h1> <p> Minecraft Java 协议感知转发器与 Web 管理控制台<br> Protocol-aware Minecraft Java proxy with a web control panel </p> <p> <a href="#中文">中文</a> · <a href="#english">English</a> · <a href="[URL]https://baiyun1123.github.io/YvLink/[/URL]">API Docs</a> · <a href="MODDED_COMPATIBILITY.md">Modded Compatibility</a> · <a href="CROSSPLAY.md">Crossplay</a> </p> </div> ![YvLink bilingual architecture: players connect through the proxy to multiple backends, managed by a web control panel / YvLink 双语架构:玩家经智能代理连接多个后端,并由 Web 控制台管理](assets/readme-architecture-bilingual.png) --- <a id="中文"></a> # 中文 ## 项目简介 YvLink(程序包名 `mc-proxy`)是一款使用 Rust 与 Tokio 构建的高性能 Minecraft Java TCP 转发器。它会解析连接初期的 Handshake、Status 和 Login Start,根据客户端访问的域名选择后端,并在选路完成后透明转发后续游戏与模组协议。 项目同时提供内置 Web 管理控制台,可在线管理路由、后端池、状态响应、白名单、健康检查和跨平台互通配置,无需手工修改 TOML 后重启服务。 当前开发版本:**v0.12.0** ## 下载 正式安装包请从 [GitHub Releases](https://github.com/baiyun1123/YvLink/releases/latest) 下载,不要使用 GitHub 自动生成的 `Source code (zip)` 作为安装包。 | 文件 | 适用环境 | | --- | --- | | `YvLink-ubuntu-22.04-x86_64.tar.gz` | Ubuntu 22.04 或兼容的 x86_64 glibc Linux | | `YvLink-ubuntu-24.04-x86_64.tar.gz` | Ubuntu 24.04 或更新的 x86_64 glibc Linux | | `YvLink-linux-musl-x86_64.tar.gz` | Alpine 及多数 x86_64 Linux 发行版的便携版本 | | `YvLink-linux-musl-aarch64.tar.gz` | ARM64 Linux、ARM 服务器和树莓派 64 位系统 | | `YvLink-windows-2022-x86_64.zip` | 64 位 Windows | ## 主要功能 - 单端口多域名路由,支持精确 Host、`*`/`?` 通配符和默认兜底规则。 - 单路由最多 128 个后端,支持顺序、随机、轮询、最少连接和最低延迟策略。 - 后端连接失败自动故障转移;可选 TCP 或 Minecraft Status 协议级主动健康检查。 - 支持自定义服务器列表状态,或透传后端状态并按需覆盖字段。 - 保留 Forge、NeoForge 状态扩展、favicon、玩家 sample 和未知 JSON 字段。 - 支持登录前玩家名白名单和自定义拒绝消息。 - 支持 PROXY Protocol v1/v2,将真实连接地址传给明确兼容的受信任后端。 - 对原版、Fabric、Forge 与 NeoForge 后续协议执行双向透明转发。 - Web 控制台提供配置管理、运行指标、后端健康状态和 60 秒实时吞吐曲线。 - 管理 API 使用 Bearer Token;配置变更通过临时文件和原子重命名持久化。 - 可配合外部 Geyser Standalone 提供 Bedrock 接入,并通过 RakNet Pong 检查其状态。 - 支持 Ctrl+C/SIGTERM 优雅退出、连接数限制、超时控制和 Linux/Android `SO_REUSEPORT`。 ## 工作方式 ```text Java 客户端 │ TCP :25565(Handshake 中携带访问域名) ▼ YvLink ├─ 按规则顺序匹配 Host ├─ 按策略选择健康后端 ├─ 可处理 Status / 白名单 └─ 透明转发后续协议 ├─ 后端 A ├─ 后端 B └─ 后端 C 浏览器 ── HTTP :18080 / HTTPS 反代 ── Web 控制台与管理 API ``` 同一入口可承载多个域名。客户端连接时,代理读取 Minecraft Handshake 中的 virtual host,选择首个匹配规则,再从该规则的后端池中选择节点。若首选节点连接失败,会继续尝试池内其他节点。 ## 所需环境 ### 开发与本地运行 | 项目 | 要求 | | --- | --- | | Rust | 1.85 或更高版本 | | Cargo | 随 Rust toolchain 安装 | | 操作系统 | Linux 推荐;其他支持 Rust/Tokio 的平台可自行构建 | | 管理令牌 | 环境变量 `MC_PROXY_ADMIN_TOKEN`,至少 32 个字符 | | Node.js | 仅在执行前端 JavaScript 语法检查时需要 | 安装 Rust: ```sh curl --proto '=https' --tlsv1.2 -sSf [URL]https://sh.rustup.rs[/URL] | sh rustc --version cargo --version ``` ### 可选生产组件 | 组件 | 用途 | | --- | --- | | Nginx | 为仅监听回环地址的管理端提供 HTTPS 反向代理 | | systemd | 服务守护、自动重启和开机启动 | | Certbot | 申请与续期 Let’s Encrypt 证书 | | Java 21 + Geyser Standalone | 需要 Bedrock → Java 互通时使用 | ## 快速启动 ### 1. 获取并编译 ```sh git clone <你的仓库地址> cd mc-proxy cargo build --release ``` 如果你已经位于项目目录,只需执行: ```sh cargo build --release ``` ### 2. 创建配置 ```sh cp config.example.toml config.toml ``` 至少修改一条 `[[rules]]` 的 `host` 和 `backend`。如果还没准备好真实后端,可先设置: ```toml [settings] proxy_enabled = false ``` 这样可以只启动管理控制台,避免开放一个无可用后端的 Minecraft 入口。 ### 3. 设置管理令牌 生成随机令牌: ```sh openssl rand -hex 32 ``` 仅为当前终端设置: ```sh export MC_PROXY_ADMIN_TOKEN='替换为至少32个字符的高强度随机令牌' export RUST_LOG='mc_proxy=info' ``` 不要把令牌提交到 Git、写入公开 README 或放进前端源码。 ### 4. 启动 使用已编译的二进制: ```sh ./target/release/mc-proxy --config config.toml ``` 也可以直接通过 Cargo 编译并运行: ```sh MC_PROXY_ADMIN_TOKEN='替换为至少32个字符的高强度随机令牌' \ RUST_LOG='mc_proxy=info' \ cargo run --release -- --config config.toml ``` 默认地址: - Minecraft Java 入口:`0.0.0.0:25565` - Web 管理端:`[URL]http://127.0.0.1:18080[/URL]` - 健康检查:`[URL]http://127.0.0.1:18080/healthz[/URL]` - API 文档:`[URL]http://127.0.0.1:18080/docs/api[/URL]` 停止服务时按 `Ctrl+C`,程序会等待现有连接在宽限期内结束。 ## 配置说明 完整、带注释的配置见 [`config.example.toml`](config.example.toml)。最小示例: ```toml [admin] listen = "127.0.0.1:18080" [crossplay] enabled = false bedrock_listen = "0.0.0.0:19132" java_address = "bedrock.example.com" java_port = 25565 auth_type = "online" [settings] listen = "0.0.0.0:25565" proxy_enabled = true max_connections = 10000 connect_timeout_ms = 5000 handshake_timeout_ms = 5000 shutdown_grace_secs = 30 copy_buffer_bytes = 32768 socket_buffer_bytes = 1048576 listen_backlog = 4096 tcp_nodelay = true reuse_port = false stats_interval_secs = 10 [[rules]] id = "survival" name = "生存服" host = ["play.example.com", "*.play.example.com"] backend = ["10.0.0.2:25565", "10.0.0.3:25565"] strategy = "least-connections" proxy_protocol = "off" modify_virtual_host = false whitelist_enabled = false whitelist = [] enabled = true [rules.health_check] enabled = true mode = "minecraft-status" interval_secs = 30 timeout_ms = 2000 unhealthy_threshold = 3 healthy_threshold = 2 minecraft_protocol = 769 [rules.status] mode = "backend" cache_ttl_secs = 30 [rules.status.fallback] motd = "§c服务器暂时离线" version_name = "后端不可用" protocol = -1 online = 0 max = 100 ``` ### 关键配置 | 配置 | 说明 | | --- | --- | | `admin.listen` | Web 管理端监听地址;生产环境建议保持回环地址 | | `settings.listen` | 所有 Java 域名共用的 TCP 入口 | | `settings.proxy_enabled` | 是否启用 Minecraft 转发入口 | | `rules.host` | 单个 Host 或 Host 数组,按规则出现顺序匹配 | | `rules.backend` | 单个后端或后端数组,格式为 `host:port` | | `rules.strategy` | `sequential`、`random`、`round-robin`、`least-connections` 或 `lowest-latency` | | `rules.modify_virtual_host` | 是否将握手 Host 改写为后端主机名 | | `rules.proxy_protocol` | `off`、`v1` 或 `v2`;普通服务端通常必须保持 `off` | | `rules.health_check.mode` | `tcp` 只检查端口;`minecraft-status` 验证 Status JSON 与 Ping/Pong | | `rules.status.mode` | `custom` 由代理生成状态;`backend` 保留后端状态并覆盖指定字段 | 规则按文件中的先后顺序匹配,因此 `host = "*"` 的兜底规则必须放在最后。 ## Web 控制台与 API 管理端默认只监听 `127.0.0.1:18080`。浏览器首次访问时输入与 `MC_PROXY_ADMIN_TOKEN` 相同的令牌,令牌仅保存在当前标签页的 `sessionStorage` 中。 生产环境建议通过 Nginx 暴露 HTTPS,不要直接将管理端绑定到公网地址。仓库已提供: - [`deploy/nginx-mc.lic6.top.conf`](deploy/nginx-mc.lic6.top.conf):Nginx 反向代理示例。 - [`deploy/nginx-rate-limit.conf`](deploy/nginx-rate-limit.conf):API 限速示例。 - [`docs/api.html`](docs/api.html):响应式、可搜索的 API 文档。 - <[URL]https://baiyun1123.github.io/YvLink/[/URL]>:由 GitHub Actions 自动部署的在线 API 文档。 公开演示管理地址:<[URL]https://mc.lic6.top[/URL]> ## 生产部署 Ubuntu 24.04 的详细构建与验收流程见 [`BUILD_UBUNTU24.md`](BUILD_UBUNTU24.md)。推荐布局: ```text /opt/mc-proxy/mc-proxy /etc/mc-proxy/config.toml /etc/mc-proxy/admin.env /etc/systemd/system/mc-proxy.service ``` 创建令牌文件: ```sh sudo install -d -m 0750 /etc/mc-proxy sudo sh -c "umask 077; printf '%s\n' 'MC_PROXY_ADMIN_TOKEN=替换为高强度随机令牌' > /etc/mc-proxy/admin.env" ``` 安装并启动 systemd 服务前,请检查 [`deploy/mc-proxy.service`](deploy/mc-proxy.service) 中的用户、路径和权限是否符合你的服务器: ```sh sudo cp deploy/mc-proxy.service /etc/systemd/system/mc-proxy.service sudo systemctl daemon-reload sudo systemctl enable --now mc-proxy sudo systemctl status mc-proxy ``` 常用运维命令: ```sh journalctl -u mc-proxy -f systemctl restart mc-proxy nginx -t certbot certificates ``` 需要放行的端口取决于部署方式: - `25565/tcp`:Minecraft Java 公网入口。 - `80/tcp`、`443/tcp`:Nginx HTTP/HTTPS。 - `19132/udp`:仅在配置并启用 Geyser Bedrock 入口时需要。 - `18080/tcp`:建议只监听回环地址,不在防火墙中对公网开放。 ## 验证与测试 ```sh cargo fmt --check cargo clippy --all-targets -- -D warnings cargo test --all-targets node --check web/app.js ``` 检查运行状态: ```sh curl -fsS [URL]http://127.0.0.1:18080/healthz[/URL] ``` ## 模组与跨平台兼容边界 - 代理会保留 Forge/FML Handshake Host 中的 NUL 扩展,并透明传递后续 Fabric、Forge 和 NeoForge 数据。 - 当前能力是“薄代理”:不会终止在线模式认证,也不会生成 Velocity modern forwarding 或 BungeeCord 玩家信息。 - 白名单只是后端认证前的快速筛选,不能代替 Minecraft 在线模式身份认证。 - PROXY Protocol 只传递源/目标地址,不转换 Java 协议版本,也不代替 Velocity/Bungee 转发协议。 - Minecraft Status 健康检查只证明列表协议可用,不代表玩家可以完成认证、模组协商或进入游戏。 - Bedrock 客户端需要外部 Geyser Standalone;YvLink 本身不实现 UDP → Java 协议翻译。 详细说明: - [`MODDED_COMPATIBILITY.md`](MODDED_COMPATIBILITY.md):原版、Fabric、Forge、NeoForge 兼容矩阵与限制。 - [`CROSSPLAY.md`](CROSSPLAY.md):Geyser/Floodgate 架构、认证方式与部署建议。 - [`tests/MODDED_MATRIX_RUNBOOK.md`](tests/MODDED_MATRIX_RUNBOOK.md):真实加载器服务端矩阵复现手册。 ## 性能调优 默认每个连接的每个方向使用 32 KiB 用户态缓冲区。流量指标在数据成功写入另一端后按块累加,不必等待长连接断开。 生产调优应使用真实 Minecraft 协议客户端逐步测试 16、32、64 和 128 KiB 缓冲区,不要使用 HTTP 压测工具代替游戏协议负载。提高 `max_connections` 前,也要同步检查系统文件描述符限制、内存和后端容量。 ## 许可证 YvLink 使用 [GNU Affero General Public License v3.0 only](LICENSE)(`AGPL-3.0-only`)。 - 允许个人和企业使用、修改、分发及商业化。 - 分发修改版本时,必须按照 AGPL v3 提供对应源代码并保留许可证声明。 - 如果修改后的版本通过网络与用户交互,必须向这些用户免费提供该版本的对应源代码。 - `YvLink` 项目名称和图标不因本软件许可证而授予商标使用权。 --- [/MD]
作者
3562519024
下载
4
查看
120
首次发布
最后更新

评分

0.00 星 0 次评分
后退
顶部 底部