NPS穿透到本地Minecraft客户端连接服务器 域名连接失败问题

社区话题 Linux/macOS 与自动化运维 NPS穿透到本地Minecraft客户端连接服务器 域名连接失败问题

标签: ,

正在查看 1 条回复
  • 作者
    帖子
    • #1297

      追光
      管理员

      📝 重要故障排查日志:Minecraft 域名连接失败问题

      🔍 问题现象

      使用 IP:端口(如 43.143.133.170:2443)可正常连接 Minecraft 服务。

      使用 域名:端口(如 nps.n.newvfx.com:2443)无法连接,nc 或 Minecraft 客户端卡住无响应。

      nc -vz nps.n.newvfx.com 2443

      会导致卡住,无法正常连接

      服务器配置(NPS + 防火墙 + 端口监听)均正常,且相同配置在宝塔环境下工作正常。

      初步怀疑本地网络 DPI、AMH 安全策略、iptables、SRV 记录等,均被排除。

      🕵️‍♂️ 根本原因

      域名同时配置了 A(IPv4)和 AAAA(IPv6)记录,而本地网络或服务器不支持 IPv6 连接。
      客户端(Minecraft / nc)在解析域名时,优先尝试 IPv6 地址。
      服务器 未监听 IPv6 的 2443 端口(仅监听 :2443,即 IPv4)。
      本地网络 无 IPv6 通路,导致 IPv6 连接超时。
      客户端 未快速回退到 IPv4,表现为“连接卡住”。

      ✅ 验证方法
      bash
      1. 检查 AAAA 记录是否存在

      dig nps.n.newvfx.com AAAA +short

      2. 检查服务器监听情况

      ss -tuln | grep 2443

      输出:tcp LISTEN 0 4096 :2443 : → 仅 IPv4

      3. 强制 IPv4 测试(应成功)

      nc -4 -vz nps.n.newvfx.com 2443

      Connection to nps.n.newvfx.com port 2443 [tcp/powerclientcsf] succeeded!

      强制 IPv6 测试

      nc -6 -vz nps.n.newvfx.com 2443

      🛠️ 解决方案
      ✅ 推荐方案:删除 DNS 中的 AAAA 记录
      登录 DNS 管理平台(如 Cloudflare、阿里云、腾讯云)。

      删除 nps.n.newvfx.com 的 AAAA 记录。

      仅保留 A 记录 指向 IPv4 地址。

      生效后,域名连接恢复正常。

      ⚠️ 临时方案(不推荐长期使用):
      客户端强制使用 IPv4(如 nc -4)。
      系统级禁用 IPv6(影响全局网络)。

      📌 经验总结
      1. 若服务仅支持 IPv4,切勿配置 AAAA 记录。
      2. 双栈(IPv4 + IPv6)需两端同时支持,否则易引发连接回退延迟或失败。
      3. Minecraft、nc、telnet 等工具在双栈环境下优先使用 IPv6,行为与浏览器不同。
      4. 此类问题在纯 IPv4 网络中极易被误判为“防火墙”或“中间拦截”,实际是协议栈协商问题。

    • #1299

      追光
      管理员

      为什么客户端不快速回退到 IPv4?

      根因在于 不同系统/程序对 Happy Eyeballs(RFC 8305)算法实现不同。
      该算法本意是:IPv6 不可用时能快速回退 IPv4。但某些应用并未实现。

      🧩 典型差异

      程序 行为
      Java / Minecraft 默认不启用 Happy Eyeballs。先尝 IPv6,超时(30–60 秒)后才试 IPv4 → 表现为卡顿。
      传统 nc 串行尝试 IPv6 → 超时 → IPv4,无并行连接。
      curl / wget / 浏览器 实现 Happy Eyeballs,IPv4/IPv6 并行连接,谁先成功用谁。

      🕐 为什么 IPv6 连接“超时”?

      服务器若:
      • 没监听 IPv6 端口;
      • 防火墙 DROP 而非 REJECT;

      则客户端收不到响应,TCP SYN 会长时间超时。

      ✅ 解决方案
      1. 仅用 IPv4(推荐)

      java -Djava.net.preferIPv4Stack=true -jar Minecraft.jar

      2. 删除域名 AAAA 记录 → 客户端仅解析 IPv4。
      3. IPv6 返回 RST 而非 DROP

      ip6tables -A INPUT -p tcp --dport 2443 -j REJECT --reject-with tcp-reset

      📌 总结
      • Java/Minecraft 无 Happy Eyeballs → IPv6 超时再试 IPv4
      • IPv6 防火墙 DROP → 连接长时间卡住
      • 工具差异大(curl 快、nc 慢)

      ⚡ 若仅提供 IPv4 服务,请勿发布 AAAA 记录。
      “不自动回退”其实是“回退太慢”。

正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。