无法从外部 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
在同一网络上的我的移动设备上访问,但在主机的浏览器上 超时 。此外,它在 TCP 和 UDP.
上转发
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 Pi,nmap -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 - 国外地址
总结
我怀疑这一定是由于我对 nmap 和 wireshark 的试验导致的防火墙入站连接问题。遗憾的是,我无法找到它。我错过了什么吗?
更新
答案可能是here。虽然我不确定。可能是 NAT Loopback 问题。
脚注
当我尝试从外部地址连接时没有服务器日志记录,即没有连接尝试的证据
此局域网上还有其他服务器
MC Server Status returns 正确的信息。 (服务器可见)
This article 给出了内部到外部到内部连接的可能性。
"The LH1000 does not support NAT which means that even if the ports are open you can not connect to a device on your network from another device on your network using the public address of the modem and the port number of the device."
在做下面的测试时,我没有同时调用Node.JS和MC服务器。
这有点类似于我无法从外部 ip (101.xxx.xx.xx
) ssh 到我的 raspberry pi 的问题。我可以只能通过内部IP连接到它(192.168.0.69
)
这是Minecraft游戏输出的日志
附带说明一下,带有过滤器 udp.port == 25565 || tcp.port == 25565
的 Wireshark 有三个不同的输出。
对于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
这不是问题的解决方案,只是避免了问题。可以在 localhost
和 192.168.0.2
上访问 Minecraft 服务器,但不能在外部 IP 上访问。
解决方案?
可以从不同的适配器访问网络地址。如果端口转发到 Wi-Fi(不同于以太网适配器),则尝试从以太网连接访问它可能会让您绕过错误。
TL;DR
我的路由器不支持从内部地址访问自己的网络。更改规则或避免从其外部 IP 访问它。
概览
这是一个一般错误,但我无法找到问题所在,因此无法找到解决方案。我在端口 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
在同一网络上的我的移动设备上访问,但在主机的浏览器上 超时 。此外,它在 TCP 和 UDP.
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 Pi,nmap -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
总结
我怀疑这一定是由于我对 nmap 和 wireshark 的试验导致的防火墙入站连接问题。遗憾的是,我无法找到它。我错过了什么吗?
更新
答案可能是here。虽然我不确定。可能是 NAT Loopback 问题。
脚注
当我尝试从外部地址连接时没有服务器日志记录,即没有连接尝试的证据
此局域网上还有其他服务器
MC Server Status returns 正确的信息。 (服务器可见)
This article 给出了内部到外部到内部连接的可能性。
"The LH1000 does not support NAT which means that even if the ports are open you can not connect to a device on your network from another device on your network using the public address of the modem and the port number of the device."
在做下面的测试时,我没有同时调用Node.JS和MC服务器。
这有点类似于我无法从外部 ip (
101.xxx.xx.xx
) ssh 到我的 raspberry pi 的问题。我可以只能通过内部IP连接到它(192.168.0.69
)这是Minecraft游戏输出的日志
附带说明一下,带有过滤器
udp.port == 25565 || tcp.port == 25565
的 Wireshark 有三个不同的输出。
对于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
这不是问题的解决方案,只是避免了问题。可以在 localhost
和 192.168.0.2
上访问 Minecraft 服务器,但不能在外部 IP 上访问。
解决方案?
可以从不同的适配器访问网络地址。如果端口转发到 Wi-Fi(不同于以太网适配器),则尝试从以太网连接访问它可能会让您绕过错误。
TL;DR
我的路由器不支持从内部地址访问自己的网络。更改规则或避免从其外部 IP 访问它。