Platform: Windows
Build: 2025.12.X25
Issue: 在 IPv6 网络环境下运行服务器时,客户端可以通过 TCP 连接到服务器(显示为可连接状态),但实际的 UDP 游戏数据传输失败,导致客户端无法正常加入游戏或游戏状态无法同步。
根本原因分析:
Windows 系统默认启用了 IPv6 临时地址(Privacy Extensions)。当服务器启动时:
- TCP Socket 监听在服务器的永久 IPv6 地址上(如:
240e:355:7f0d:8a00:9a8f:e0ff:fe69:867d)
- 但当服务器回复客户端的 UDP 数据包时,系统自动选择了临时 IPv6 地址作为源地址(如:
240e:355:7f0d:8a00:3c33:11b3:6a2d:711a)
- 客户端收到来自"陌生"地址的 UDP 回复,认为这不是合法的游戏服务器,拒绝通信并返回
ICMPv6 Port Unreachable
技术细节:
- TCP 连接正常:三次握手成功,连接状态固定了双方地址
- UDP 通信失败:无状态协议 + IPv6 临时地址选择策略 = 源地址不一致
- 影响:所有使用 IPv6 连接的客户端都无法正常游戏
Steps to reproduce:
- 在支持 IPv6 的网络环境中启动 Mindustry 服务器(Windows/Linux)
- 客户端(任意平台)尝试通过 IPv6 地址连接服务器
- 观察结果:
- 服务器列表中能看到服务器(TCP 连接成功)
- 但尝试加入游戏时会卡住或失败(UDP 通信失败)
- 或者能看到服务器但状态不同步
验证方法:
使用 Wireshark 抓包可观察到:
- 客户端 UDP 请求发往服务器永久地址
- 服务器 UDP 回复来自临时地址
- 客户端回复 ICMPv6 Port Unreachable
抓包数据
抓包数据(备链)
确认:
附加信息:
这个问题会影响所有启用了 IPv6 临时地址的系统(Windows 默认启用,Linux 通常也启用)。随着 IPv6 普及率的提高,这个问题会越来越常见。建议优先修复,因为这是核心网络功能问题。
Platform: Windows
Build: 2025.12.X25
Issue: 在 IPv6 网络环境下运行服务器时,客户端可以通过 TCP 连接到服务器(显示为可连接状态),但实际的 UDP 游戏数据传输失败,导致客户端无法正常加入游戏或游戏状态无法同步。
根本原因分析:
Windows 系统默认启用了 IPv6 临时地址(Privacy Extensions)。当服务器启动时:
240e:355:7f0d:8a00:9a8f:e0ff:fe69:867d)240e:355:7f0d:8a00:3c33:11b3:6a2d:711a)ICMPv6 Port Unreachable技术细节:
Steps to reproduce:
验证方法:
使用 Wireshark 抓包可观察到:
抓包数据
抓包数据(备链)
确认:
附加信息:
这个问题会影响所有启用了 IPv6 临时地址的系统(Windows 默认启用,Linux 通常也启用)。随着 IPv6 普及率的提高,这个问题会越来越常见。建议优先修复,因为这是核心网络功能问题。