跳转到主要内容

端口转发

本页面包含如何设置端口转发的信息,以便在自托管时让 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)

    1. 在开始菜单中搜索"具有高级安全性的 Windows Defender 防火墙",然后打开它。(图片)
    2. 点击左侧边栏中的"入站规则"。(图片)
    3. 点击右侧边栏中的"新建规则..."。(图片)
    4. 选择"端口"作为规则类型,然后点击"下一步"。(示例)
    5. 选择"UDP"和"特定本地端口",然后输入您要打开的端口(在我们的示例中为 19132)。点击"下一步"。(示例)
    6. 选择"允许连接",然后点击"下一步"。(示例)
    7. 选择您要应用规则的配置文件(例如"域"、"专用"、"公用"),然后点击"下一步"。(示例)
    8. 输入规则的名称(例如"Geyser"),然后点击"完成"。(图片)

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 面板的"网络"选项卡中为服务器分配端口,此外还要转发端口。 请参阅 这里 获取更多信息。

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:

  1. 导航到 Network interfaces
  2. 点击表格中您的 IP 旁边的 ... 按钮 -> 然后点击 ... 和 Configure the GAME firewall -> Add rule -> Other protocol (或 minecraftPocketEdition 如果可用)
  3. 将您的 Geyser 端口添加到 outgoing port 中。

SoYouStart (OVH 的子公司):

  1. 点击 IP 选项卡。
  2. 点击公共 IP 地址右侧的齿轮;选择"Game mitigation"。
  3. 选择"添加规则"。
  4. 在下拉列表中选择"minecraftPocketEdition"并输入目标 UDP 端口。
  5. 保存并等待几秒钟,使更改生效。

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 的默认端口,并且应相应调整。

  1. 在 OCI 控制台中找到您的 Compute Instance
  2. 点击实例的虚拟云网络(这将在"实例详细信息"下)
  3. 在左侧,选择"安全列表"
  4. 选择一个安全列表。默认情况下只存在一个安全列表。我们将规则添加到哪个安全列表并不重要。
  5. 选择"添加入站规则"
  6. 为 Java 配置规则(可选)
    • 将"源 CIDR"设置为 0.0.0.0/0
    • 将"目标端口范围"设置为 25565-25565
    • 选择"另一个入站规则"
  7. 为 Geyser 配置规则
    • 将"源 CIDR"设置为 0.0.0.0/0
    • 将"目标端口范围"设置为 19132-19132
    • 将"IP 协议"设置为 UDP
  8. 选择"添加入站规则"

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