端口转发
本页面包含如何设置端口转发的信息,以便在自托管时让 Geyser 正常工作。 还包含针对特定配置的指南,例如 Docker/Pterodactyl,或特定的 VPS/KVM 提供商,例如 OVH 或 Oracle Cloud。
如果您使用 Minecraft 服务器托管提供商(例如 Aternos 或 Nodecraft),您应该参考 setup 页面上的托管提供商设置。
在 Linux/Windows/macOS 上进行端口转发
要允许其他人在您的服务器上玩,您需要在托管 Geyser 的设备上设置端口转发。 此外,如果您希望服务器在您自己的家庭网络之外也能访问,您需要在路由器/调制解调器上转发端口(换句话说,允许并将该端口上的流量路由到正确的机器)。 请参阅 这里 或 这里 获取有用的指南。 请注意:如果您没有静态 IP 地址,您的 IP 地址可能会随时间变化。
某些 ISP(互联网服务提供商)会阻止某些端口,或者不允许您打开端口(例如使用 CGNAT,这不允许您使用动态 IP 打开端口)。 其他 ISP 可能会要求您为静态 IP 地址支付额外费用。 作为端口转发的替代方案,您可以使用 playit.gg 来创建隧道。
Windows
要在 Windows 上打开端口,您需要通过 Windows 防火墙打开端口。有多种方法可以做到这一点:
-
Powershell(推荐)要打开 UDP 端口(在我们的示例中,端口 19132),请在管理员 Powershell 中运行以下命令:
New-NetFirewallRule -DisplayName "Geyser" -Direction Inbound -Protocol UDP -LocalPort 19132 -Action Allow运行此命令会创建一个名为 "Geyser" 的规则,允许端口 19132 上的 UDP 流量。
-
具有高级安全性的 Windows Defender 防火墙 (GUI)
Linux
不同的 Linux 发行版,甚至不同的 VPS 提供商都附带并配置了不同的防火墙。在以下示例中,我们将使用 19132 作为要打开的端口,但您应该将其替换为您用于 Geyser 的端口。
-
ufw是 iptables 的简单防火墙前端,常用于 Ubuntu 和 Debian。要打开 UDP 端口,请运行以下命令:sudo ufw allow 19132/udp然后,使用
sudo ufw reload重新加载防火墙,并使用sudo ufw status查看所有打开的规则。 更多有用的指南:DigitalOcean,Baeldung -
firewalld通过运行以下命令添加 UDP 端口:sudo firewall-cmd --zone=public --permanent --add-port=19132/udp然后,使用
sudo firewall-cmd --reload重新加载防火墙,并使用sudo firewall-cmd --list-all查看所有打开的规则。 更多有用的指南:DigitalOcean -
iptables是许多 Linux 发行版使用的常见防火墙。要打开 UDP 端口,请运行以下命令:sudo iptables -A INPUT -p udp --dport 19132 -j ACCEPT然后,使用
sudo iptables-save保存防火墙,并使用sudo iptables -L查看所有打开的规则。 更多 iptables 的有用指南:DigitalOcean,Ubuntu
macOS
您需要在防火墙设置中禁用"阻止所有传入连接",因为这会阻止任何连接,并且不允许您设置例外。 要允许传入连接,请在收到 这些提示 时点击"允许"。 如果您仍然遇到问题,请参阅 Apple 的官方指南 这里 来在 macOS 上打开端口。
使用 Docker 或 Pterodactyl
除了在服务器的防火墙(以及适用的话,您的路由器/ 调制解调器)中转发端口外,您还需要在 Docker/Pterodactyl 中分配端口。
Pterodactyl
确保在 Pterodactyl 面板的"网络"选项卡中为服务器分配端口,此外还要转发端口。 请参阅 这里 获取更多信息。

还有不同的 Geyser 蛋可用于 Pterodactyl,可在 这里 找到。
如果您无法在 Pterodactyl 面板中分配端口,您需要联系您的服务器主机为您分配一个,或者尝试使用现有的端口分配。
Docker
为了让 Geyser 在 Docker 下工作(例如使用 Itzg 的 Docker 镜像),您需要在 docker-compose 文件中添加 Geyser 的 UDP 端口。这可以通过在 ports 部分添加以下内容来完成:
ports:
- "25565:25565"
- "19132:19132/udp"
需要额外的 /udp 后缀,以便端口在 UDP 上暴露。如果您想在同一 端口上运行 Java 服务器和 Geyser,以下内容将起作用:
ports:
- "25565:25565"
- "25565:25565/udp"
或者,在 docker run 命令中添加另一个端口,使用 -p 19132:19132/udp 标志。
特定 VPS/KVM 提供商的问题
某些提供商,例如 OVH、Oracle Cloud 和 SoYouStart,在默认情况下/大多数情况下都有阻止 UDP 端口的防火墙。
OVH 和 SoYouStart
默认情况下,OVH 的防火墙需要在允许 UDP 连接之前对服务器进行 TCP ping。这对于 Geyser 是不可能的,因此您需要禁用防火墙。
如果您无法访问这些防火墙设置,但被链接到此页面,请联系您的服务器主机并向他们提供此链接 - 他们可能在内部使用 OVH。
要验证/临时解决它:
尝试通过 Web 浏览器连接到您的服务器 IP 和端口 - 例如,http://test.geysermc.org:19132。连接不会起作用,但然后尝试在同一设备上通过 Bedrock 连接,它应该会起作用。
或者,尝试先在 Java 版上连接到服务器,然后在同一设备上用 Bedrock 连接。
要解决它:
OVH:
- 导航到
Network interfaces - 点击表格中您的 IP 旁边的
...按钮 -> 然后点击...和Configure the GAME firewall->Add rule->Other protocol(或minecraftPocketEdition如果可用) - 将您的 Geyser 端口添加到
outgoing port中。
SoYouStart (OVH 的子公司):
- 点击 IP 选项卡。
- 点击公共 IP 地址右侧的齿轮;选择"Game mitigation"。
- 选择"添加规则"。
- 在下拉列表中选择"minecraftPocketEdition"并输入目标 UDP 端口。
- 保存并等待几秒钟,使更改生效。
OVH/SoYouStart 游戏防火墙不兼容问题
OVH GAME 过滤器类型 minecraftPocketEdition 目前不起作用,您必须使用 Other 类型。
如果您想继续使用过滤器类型 minecraftPocketEdition,您可以通过在 Java 服务器(或 Geyser 独立代理)的启动标志中添加 -DGeyser.RakSendCookie=false 来禁用不兼容的安全功能。
有关更多信息,请参阅:
Oracle Cloud/OCI
默认情况下,Oracle Cloud 会阻止除 SSH 和 RDP 之外的所有传入流量。这必须在 Oracle Cloud 本身和运行 Geyser 的 Compute Instance 中解决。
以下步骤假设您使用的是 Java 服务器和 Geyser 的默认端口,并且应相应调整。
- 在 OCI 控制台中找到您的 Compute Instance
- 点击实例的虚拟云网络(这将在"实例详细信息"下)
- 在左侧,选择"安全列表"
- 选择一个安全列表。默认情况下只存在一个安全列表。我们将规则添加到哪个安全列表并不重要。
- 选择"添加入站规则"
- 为 Java 配置规则(可选)
- 将"源 CIDR"设置为
0.0.0.0/0 - 将"目标端口范围"设置为
25565-25565 - 选择"另一个入站规则"
- 将"源 CIDR"设置为
- 为 Geyser 配置规则
- 将"源 CIDR"设置为
0.0.0.0/0 - 将"目标端口范围"设置为
19132-19132 - 将"IP 协议"设置为 UDP
- 将"源 CIDR"设置为
- 选择"添加入站规则"
Oracle Linux
运行以下命令以允许 Minecraft 和 Geyser 通过操作系统防火墙:
sudo firewall-cmd --add-port=25565/tcp --permanent
sudo firewall-cmd --add-port=19132/udp --permanent
sudo firewall-cmd --reload
Ubuntu
运行以下命令以允许 Minecraft 和 Geyser 通过操作系统防火墙:
sudo ufw allow 25565/tcp
sudo ufw allow 19132/udp