中文 | 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。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 warningsApache 2.0