server - 无法从外部 IP 访问 Minecraft 服务器
问题描述
概述
这是一个一般错误,但我无法找到问题并因此找到解决方案。我在我的localhost ( 192.168.0.2
) 上的 port上托管了一个 Minecraft 服务器25565
。它可以通过其内部 IP(localhost和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
我在同一网络上的移动设备上访问,但在主机的浏览器上超时。此外,它同时在TCP和UDP上转发。
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
概括
我怀疑这一定是由于我对nmap和wireshark的试用导致防火墙问题的入站连接。可悲的是,我无法找到它。我错过了什么吗?
更新
答案可能就在这里。虽然我不确定。可能是NAT Loopback问题。
脚注
服务器为重生之夜 v2.76.2
当我尝试从外部地址连接时没有服务器日志记录,即没有连接尝试的证据
此 LAN 上还有其他服务器
MC 服务器状态返回正确的信息。(服务器可见)
本文给出了内部到外部到内部连接是问题的可能性。
“LH1000 不支持 NAT,这意味着即使端口打开,您也无法使用调制解调器的公共地址和设备的端口号从网络上的其他设备连接到网络上的设备。”
在进行下面的测试时,我没有同时调用 Node.JS 和 MC 服务器。
这有点类似于我无法从外部 ip (
101.xxx.xx.xx
) SSH 到我的树莓派的问题。我只能通过内部ip(192.168.0.69
) 连接到它附带说明一下,带有过滤器的Wireshark
udp.port == 25565 || tcp.port == 25565
具有三种不同的输出。
对于通过 VPN 从移动设备访问 的Node.JS HTTP 服务器,它输出
解决方案
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 上访问localhost
,192.168.0.2
但不能在外部 IP 上访问。
解决方案?
可以从不同的适配器访问网络地址。如果端口转发是到 Wi-Fi(与以太网适配器不同),则尝试从以太网连接访问它可能会让您绕过错误。
TL;博士
我的路由器不支持从内部地址访问自己的网络。更改规则或避免从其外部 IP 访问它。
推荐阅读
- unity3d - (统一)最好多次复制组件或使其成为公共静态?
- mysql - 如何将日期格式更改为逗号分隔列?
- javascript - 网站功能自动启动和停止工作
- scala - Akka Actor 消息传递延迟
- javascript - Javascript按等级列表对数组进行排序
- javascript - 如何在 JavaScript 中的 switch 中测试正则表达式的结果
- android - 如何在 Room Database Android 中的嵌套关系中插入数据和检索数据
- wpf - 带有嵌套列表的 ItemsControl 布局 - self 下的每个包装器
- openssl - 签署文件并使用 OpenSSL 进行验证
- python - 在 Visual Studio 代码调试器中隐藏终端选项卡