无法从外部 IP 访问 Minecraft 服务器

No access from foreign IP to Minecraft server

概览

这是一个一般错误,但我无法找到问题所在,因此无法找到解决方案。我在端口 25565 上的 localhost (192.168.0.2) 上托管了一个 Minecraft 服务器。它可以通过其内部IP本地主机192.168.0.2)从主机访问但无法从 外部 IP (101.xxx.xx.xx).

访问

您是否尝试过打开和关闭它?

是的。我已经重新启动了我的主机。服务器也说

[14:32:14] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Starting Minecraft server on *:25565

所以一定是真的。

转发端口?

我可以通过设备上托管的简单 Node.JS 服务器验证端口 是否对 HTTP 开放。此 可以 通过 101.xxx.xx.xx:25565 在同一网络上的我的移动设备上访问,但在主机的浏览器上 超时 。此外,它在 TCPUDP.

上转发

const { createServer } = require('http')

createServer((req, res) => {
    console.log('Request', req.url)
    res.end('Ok')
}).listen(25565)

防火墙

此外,我修改了我的防火墙:Windows 和杀毒软件。我关闭了 Avast Web Shield,它阻止了无法识别的外部互联网连接,并按照这两个教程添加了 firewall exceptions for Java and port exceptions。我允许我的 Telstra Arcadyan 调制解调器 保留其防火墙,因为我仍然可以从外部地址访问我的内部网络。

Wireshark 和 Nmap

我怀疑是内部连接的问题所以我使用了nmap。我 运行 它在主机和网络上的另一个设备上,我的 Raspberry Pi (192.168.0.69).

我的Raspberry Pinmap -p 25565 -T4 -Pn -A -v 192.168.0.2我的raspberry pi(192.168.0.69)返回

25565/tcp open minecraft Minecraft 1.12.2 (Protocol: 127, Message: Rebirth of the Night! (Optifine 1.12.2), Users: 0/6)

此外,相同的命令但具有不同的目的地(WAN IP),返回相同的消息。

在我的主机 Windows 设备 上,内部 IP (192.168.0.2) 的结果相同,但外部 IP (101.xxx.xx.xx)返回 filtered。这就是我认为存在防火墙的主要原因。

25565/tcp filtered minecraft

主机 - 本地地址

主机 - 国外地址

Raspberry Pi - 本地地址

Raspberry Pi - 国外地址

总结

我怀疑这一定是由于我对 nmapwireshark 的试验导致的防火墙入站连接问题。遗憾的是,我无法找到它。我错过了什么吗?

更新

答案可能是here。虽然我不确定。可能是 NAT Loopback 问题。

脚注

对于Node.JS从带有VPN的移动设备访问的HTTP服务器,输出

对于从主机设备访问的Node.JSHTTP服务器,输出

对于Minecraft服务器,输出

NAT 环回(发夹)

我的路由器 (Telstra Arcadyan LH1000) 不支持 NAT 环回,其中可以从内部 IP 访问网络的外部地址。它直接将连接重写到客户端拒绝的另一个网络地址(在我的例子中是它自己),因为它不希望重写。

解决方案

有两种解决方案:大多数路由器不支持的伪装 NAT 规则使用内部 IP。此外,升级路由器固件可能会解决问题,但可能性不大。就我而言,Technicolor 调制解调器有 full NAT loop back support,但我买不到。

Solution 1

应将此规则添加到路由器(可通过 192.168.0.1 之类的方式访问)。

/ip firewall nat
    add chain=srcnat src-address=192.168.1.0/24 \
    dst-address=192.168.1.2 protocol=tcp dst-port=80 \
    out-interface=LAN action=masquerade

解决方案 2

这不是问题的解决方案,只是避免了问题。可以在 localhost192.168.0.2 上访问 Minecraft 服务器,但不能在外部 IP 上访问。

解决方案?

可以从不同的适配器访问网络地址。如果端口转发到 Wi-Fi(不同于以太网适配器),则尝试从以太网连接访问它可能会让您绕过错误。

TL;DR

我的路由器不支持从内部地址访问自己的网络。更改规则或避免从其外部 IP 访问它。