BungeeViaProxy

一个BungeeCord插件,用于修复与ViaProxy的兼容性问题,从而实现后端服务器无缝的多版本支持,并降低开销。

资源图片
# BungeeViaProxy ## TL;DR **BungeeViaProxy** 是一个 [BungeeCord](https://github.com/SpigotMC/BungeeCord) 插件,它修复了与 [ViaProxy](https://github.com/ViaVersion/ViaProxy) 兼容性问题,使您可以使用单个 ViaProxy 实例管理运行不同 Minecraft 版本的多个后端服务器。 - **为什么?** [ViaBungee](https://github.com/ViaVersion/ViaBungee) 在 Minecraft 1.20.2 中已停止支持。为了继续使用 BungeeCord 与最新版本的 Minecraft,您需要 ViaProxy。 然而,将 ViaProxy 与 BungeeCord 结合使用会引入挑战,例如不正确的主机名转发和重复服务器错误。 - **它如何提供帮助?** BungeeViaProxy 通过确保正确的 hostname 转发并避免重复服务器错误来解决这些问题,从而实现 ViaProxy 和 BungeeCord 的无缝集成。 - **谁应该使用它?** 运行 BungeeCord 网络并具有多个后端服务器的 Minecraft 服务器管理员,这些服务器需要支持 Minecraft 版本,包括 1.20.2 及更高版本,但希望避免在每个后端服务器上管理 [ViaVersion](https://github.com/ViaVersion/ViaVersion) 的复杂性。 ![BungeeViaProxy](https://cdn.modrinth.com/data/cached_images/1ab51ac8c69d5b9bdfeb504cfa24e410efaacc4c.png) ## 目录 - [概述](#overview) - [用例](#use-case) - [工作原理](#how-it-works) - [特性](#features) - [安装](#installation) - [注意](#note) - [配置](#configuration) - [示例配置](#example-configuration) ## 概述 **BungeeViaProxy** 是一个 BungeeCord 插件,旨在解决在使用 [ViaProxy](https://github.com/ViaVersion/ViaProxy) 与 [BungeeCord](https://github.com/SpigotMC/BungeeCord) 时出现的兼容性问题。 此插件特别适用于具有多个运行不同 Minecraft 版本的后端服务器的网络,您希望在每个后端服务器上维护 ViaVersion 插件的开销最小化的情况下,支持最新版本的 Minecraft。 [ViaBungee](https://github.com/ViaVersion/ViaBungee) 的支持已于 Minecraft 1.20.2 停止,这使得迁移到 ViaProxy 以实现与游戏较新版本的兼容性成为必要。 本指南对于那些希望在继续使用 BungeeCord 与最新版本的 Minecraft 的同时避免在每个后端服务器上单独更新 [ViaVersion](https://github.com/ViaVersion/ViaVersion) 的负担的人有价值。 通过利用具有 wildcard-domain-handling 的 ViaProxy,单个 ViaProxy 实例可以支持多个后端服务器,从而简化更新并减少资源使用。 ## 用例 BungeeViaProxy 适用于: - 使用 BungeeCord 管理多个运行不同 Minecraft 版本的后端服务器的网络。 - 希望使用 ViaProxy 和 Bungeecord 维护与最新 Minecraft 版本的兼容性的管理员。 - 通过 ViaProxy 集中版本转换来减少在单个后端服务器上更新 ViaVersion 插件的操作开销。 **重要提示:** 在这种设置中使用 ViaProxy 时,必须将其置于 BungeeCord 和后端服务器之间。此外,在 ViaProxy 的配置中: - `proxy-online-mode` 必须禁用。 - `auth-method` 必须设置为 `NONE`。 - `wildcard-domain-handling` 必须设置为 `PUBLIC`。 - `target-address` 在使用 `wildcard-domain-handling` 时会被忽略 (任何内容都可以)。 ## 工作原理 通常,每个后端服务器都需要单独的 ViaProxy 实例。 然而,这可能会导致内存消耗增加和额外的更新工作。 为了解决这个问题,ViaProxy 支持 `wildcard-domain-handling` 功能,允许单个 ViaProxy 实例处理连接到多个后端服务器。 这通过使用特定地址格式来实现每个后端服务器: ``` address.<后端 IP>.port.<后端端口>.version.<后端版本>.f2.viaproxy..nip.io: ``` 这些地址然后可以列在 BungeeCord 的 `config.yml` 中,从而实现通过单个 ViaProxy 实例进行无缝连接管理。 然而,这种设置会引入某些挑战,BungeeViaProxy 解决了这些挑战。 ## 特性 1. **正确的 hostname 转发:** 当 ViaProxy 中启用 `wildcard-domain-handling: PUBLIC` 时,它可能无法检索 BungeeCord 配置中指定的 hostname,从而阻止了正确的服务器路由。BungeeViaProxy 确保任何包含 `.viaproxy.` 的地址都正确转发到后端服务器。 2. **避免重复服务器错误:** BungeeCord 将解析为同一 IP 地址的不同 hostname 的服务器视为同一服务器,从而导致错误:“您已经连接到此服务器了!”。 BungeeViaProxy 通过使用未解析的 `InetSocketAddress` 对象来解决此问题,确保了具有不同 hostname 的服务器的唯一标识。 ## 安装 1. 下载 BungeeViaProxy 的最新版本。 2. 将插件 `.jar` 文件放入您的 BungeeCord `plugins` 目录中。 3. 重新启动您的 BungeeCord 服务器。 ## 注意 注意:您需要从 Jenkins 下载并使用 ViaProxy 的最新版本,目前尚未发布 (2025/1/16,将在 ViaProxy 3.3.8 发布版中包含)。 https://ci.viaversion.com/view/All/job/ViaProxy/ 这允许使用 BungeeCord 配置中可以使用的 f2 格式。 `address..port.<端口>.version.<版本>.f2.viaproxy.<主机名>` ## 配置 不需要额外的配置。BungeeViaProxy 自动处理 `.f2.viaproxy.` 地址并确保正确的服务器路由。 ## 示例配置 这是一个示例,说明如何配置 BungeeCord 与 wildcard-domain-handling 使用 ViaProxy ![网络图](https://cdn.modrinth.com/data/cached_images/d5f8f4e36c8452f80de359b78e3bc4ba49dd6cb4.png) 假设以下设置: | 服务器 | IP:端口 | Minecraft 版本 | |------------------|---------------------|-------------------| | BungeeCord | 127.0.0.1:25565 | N/A | | ViaProxy | 127.0.0.1:25566 | N/A | | 后端服务器 1 | 127.0.0.1:3001 | 1.20.4 | | 后端服务器 2 | 127.0.0.1:3002 | 1.16.5 | | 后端服务器 3 | 127.0.0.1:3003 | 1.21 | BungeeCord `config.yml` (仅显示相关选项): ```yaml online_mode: true servers: server1: # ViaProxy 地址格式:address.<后端 IP>.port.<后端端口>.version.<后端版本>.f2.viaproxy..nip.io: address: address.127.0.0.1.port.3001.version.1.20.4.f2.viaproxy.127.0.0.1.nip.io:25566 motd: '&1Example Server 1' restricted: false server2: # 在此示例中, # 后端服务器 IP:127.0.0.1:25566 # ViaProxy IP:127.0.0.1:3002 address: address.127.0.0.1.port.3002.version.1.16.5.f2.viaproxy.127.0.0.1.nip.io:25566 motd: '&1Example Server 1' restricted: false server3: # 如果不需要,可以省略版本 (ViaProxy 会自动检测版本) address: address.127.0.0.1.port.3003.f2.viaproxy.127.0.0.1.nip.io:25566 motd: '&1Example Server 3 (".version.1.20.4" 可以省略)' restricted: false listeners: - host: 0.0.0.0:25565 prevent_proxy_connections: false ip_forward: true ``` ViaProxy `config.yml` (仅显示相关选项): ```yaml # ViaProxy 配置文件的 # ViaProxy 应该侦听连接的地址。 # 此选项不可重新加载。 bind-address: 0.0.0.0:25566 # ViaProxy 应该连接到的服务器地址。 target-address: AnythingIsOK.ThisFieldIsIgnored.example.com # Proxy Online Mode 允许您在 online mode 服务器上看到皮肤并使用签名聊天功能。 # 启用 Proxy Online Mode 需要您的客户端具有有效的 minecraft 帐户。 proxy-online-mode: false # 用于连接到目标服务器的身份验证方法。 # none: 无身份验证 (离线模式) # openauthmod: 需要 OpenAuthMod 客户端模组 (https://modrinth.com/mod/openauthmod) # account: 要连接到目标服务器使用帐户。 (必须在 ViaProxy GUI 中配置) auth-method: NONE # 允许客户端使用 wildcard 域名指定目标服务器和版本。 # none: 不使用 wildcard 域名处理。 # public: 公共 wildcard 域名处理。 适用于外部客户端使用。 (例如:address.
.port..version..f2.viaproxy.127.0.0.1.nip.io (版本是可选的)) # internal: 内部 wildcard 域名处理。 适用于本地客户端使用。 (例如:original-handshake-address\7address:port\7version\7classic-mppass) wildcard-domain-handling: PUBLIC ``` 后端服务器 `server.properties` (仅显示相关选项): ```properties server-port=3001 online-mode=false ``` 后端服务器 `spigot.yml` (仅显示相关选项): ```yaml settings: bungeecord: true ``` 注意: - 后端服务器不需要 ViaVersion 插件。 (因为版本转换由 ViaProxy 处理) - 不要使用 [ViaProxyAuthHook](https://github.com/ViaVersionAddons/ViaProxyAuthHook),因为 ViaProxy 位于 BungeeCord 和后端服务器之间。 ## bStats BungeeViaPower 使用 [bStats](https://bstats.org/plugin/bungeecord/BungeeViaProxy/24459) 收集匿名统计数据。 您可以在 [这里](https://bstats.org/plugin/bungeecord/BungeeViaProxy/24459) 找到统计数据。 bStats 用于了解插件的使用情况并帮助改进它。 要禁用统计数据收集,请将 `plugins/bStats/config.yml` 中的 `enabled` 设置为 `false`。