首页 > 解决方案 > 无法从外部 IP 访问 Minecraft 服务器

问题描述

https://i.stack.imgur.com/DBAaT.png

概述

这是一个一般错误,但我无法找到问题并因此找到解决方案。我在我的localhost ( 192.168.0.2) 上的 port上托管了一个 Minecraft 服务器25565。它可以通过其内部 IPlocalhost192.168.0.2)从主机访问,但无法从外部 IP101.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上转发。

UDP和TCP转发证明

const { createServer } = require('http')

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

防火墙

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

Wireshark 和 Nmap

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

在我的树莓派上nmap -p 25565 -T4 -Pn -A -v 192.168.0.2在我的树莓派上 ( 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

主机 - 本地地址

主机本地

主机 - 外国地址

接待外籍人士

树莓派 - 本地地址

拉斯皮本地

树莓派 - 国外地址

拉斯皮外国

概括

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

更新

答案可能就在这里。虽然我不确定。可能是NAT Loopback问题。

脚注

对于通过 VPN 从移动设备访问 的Node.JS HTTP 服务器,它输出在此处输入图像描述

对于从主机设备访问的Node.JS HTTP 服务器,它输出 在此处输入图像描述

对于Minecraft服务器,它输出 在此处输入图像描述

标签: serverfirewallminecraftnatwindows-firewall

解决方案


NAT 环回(Hairpinning)

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

解决方案

有两种解决方案:大多数路由器不支持的伪装 NAT 规则和使用内部 IP。此外,升级路由器固件可能会解决问题,但不太可能。就我而言,Technicolor 调制解调器具有完整的 NAT 环回支持,但我无法获得。

解决方案 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

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

解决方案?

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

TL;博士

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


推荐阅读