Skip to content

Latest commit

 

History

History
110 lines (86 loc) · 5.09 KB

README_zh.md

File metadata and controls

110 lines (86 loc) · 5.09 KB

Transfer Server Router 由 AXFJ 制作

中文 | English

v2.1.0 —— Route Minecraft server simply。支持多端口监听(每个端口独立 SLP 信息)、SLP 远端透传、YAML 配置(不兼容 v1 旧格式),重新设计了防御与日志,并新增转移层黑白名单与自定义踢出消息。

简介

Transfer Server Router 是一个极其轻量级的 Minecraft 服务器路由工具。玩家登录时,它会发送客户端 Transfer 数据包(等同原版 /transfer 命令),让客户端立刻重新连接到配置的目标服务器。可用于服务器入口分流,或 虚拟局域网下强制玩家使用公网 IP 的场景。

支持的客户端版本: 1.21.11(774)、26.1/26.1.1/26.1.2(775)、26.2(776)、26.3(777)

目标服务器设置: 在目标服务器 server.properties 中设置 accepts-transfers=true,否则被转移的玩家会被目标服断开。所有端口共用一个 Target。目标服版本需与客户端版本一致,否则转移后会被目标服拒绝。

特性

  • 多端口监听(Sources):每个端口独立绑定,所有端口共用同一个 Target。
  • 每个端口独立的 SLP 信息:可选从远端 Minecraft 服务器透传服务器列表信息(MOTD、人数、图标等)配置。
  • 黑白名单:按玩家名(不区分大小写)或 IP 匹配
  • 多版本登录
  • 防御:每 IP 登录速率限制、单连接最长存活时间、可配置的红色踢出消息。

配置文件(tsr_server.yml)

首次运行会在工作目录生成 tsr_server.yml。v2 不再读取旧的 tsr_server.properties(若存在会打印警告)。

Target: mc.example.com:25565

Sources:
  # 静态 SLP:该端口展示自己的服务器列表信息
  - Bind: 127.0.0.1:25565
    SLP:
      Mode: static
      Motd: "A Minecraft Server"
      VersionName: "1.21.11"
      Protocol: 774
      MaxPlayers: 20
      OnlinePlayers: 0
      PlayerList: []
    # 转移层白名单:只有这些玩家/IP 会被转移
    Access:
      Mode: whitelist
      Players: ["Steve", "AXFJ"]
      Ips: ["127.0.0.1", "10.0.0.0/8", "2001:db8::/32"]
      WhitelistKickMsg: "You are not whitelisted"
      # BlacklistKickMsg: "You are blacklisted"   # Mode: blacklist 时使用

  # 透传 SLP:该端口转发远端服务器的列表信息
  - Bind: 127.0.0.1:25566
    SLP:
      Mode: passthrough
      Remote: sz.frp.one:6767
      CacheTTL: 5
      Motd: "远端不可用时的回退 MOTD"
      VersionName: "1.21.11"

Defense:
  PerIP-Login-1s: 1
  PerIP-MaxConnTime: 15
  KickMsg: "Rate limit reached! Please wait for a moment before connecting."

配置键说明

配置键 说明
Target 目标服务器 host:port(所有 Sources 共用)。
Sources[].Bind 监听地址 ip:port,不可重复。
Sources[].SLP.Mode static 或 passthrough。
Sources[].SLP.Motd 静态模式的 MOTD(也作为透传失败的回退)。
Sources[].SLP.VersionName 对不受支持客户端展示的版本名。
Sources[].SLP.Protocol 对不受支持客户端展示的协议号。
Sources[].SLP.MaxPlayers / OnlinePlayers 静态人数。
Sources[].SLP.PlayerList 可选的示例玩家名(最多 12 个)。
Sources[].SLP.Remote 透传模式的远端 host:port(必填)。
Sources[].SLP.CacheTTL 透传缓存秒数(默认 5)。
Sources[].Access.Mode 转移层模式:off(默认)、whitelist 或 blacklist。
Sources[].Access.Players 需要匹配的玩家名(不区分大小写,单个最长 16 字符)。
Sources[].Access.Ips 需要匹配的 IP/CIDR:1.2.3.4、10.0.0.0/8、::1、2001:db8::/32。
Sources[].Access.WhitelistKickMsg 白名单拒绝时的红色提示(默认 You are not whitelisted)。
Sources[].Access.BlacklistKickMsg 黑名单拒绝时的红色提示(默认 You are blacklisted)。
Defense.PerIP-Login-1s 每 IP 每秒最大登录请求数(SLP 不受限)。
Defense.PerIP-MaxConnTime 单连接最长存活秒数。
Defense.KickMsg 被踢客户端看到的消息(红色显示)。

说明:

  • 对受支持的客户端版本,SLP 总是回显客户端自身协议号(保证列表显示兼容),透传模式会保留远端的版本名称。
  • 透传结果按端口缓存 CacheTTL 秒;失败时打印警告并回退到静态数据。
  • 访问规则在 Login Start 之后判定(此时已知玩家名),且在登录速率限制之前;被拒绝的登录会收到按模式区分的红色消息(WhitelistKickMsg / BlacklistKickMsg)登录断开。SLP 不受访问规则过滤。
  • 两个内部安全上限用于抗连接洪泛,不可配置:全局 512 并发、每 IP 32 并发。

控制台命令

  • stop —— 优雅关闭(最多等待 3 秒在途连接)
  • status —— 当前连接数 / 跟踪 IP 数 / 端口数 / 支持版本
  • help

构建与测试

cargo build --release
cargo test
cargo clippy --all-targets -- -D warnings

许可证

Apache 2.0