Minecraft 服务器端口转发:开放它、修好它,还是跳过它
你在自己的电脑上跑着一个 Minecraft 服务器,你自己进得去,朋友却连不上。端口转发是常见的答案 —— 但它不是唯一的答案,也不是对每个人都管用,而且很多"该做的都做了"的人,其实是被几条街之外、由自己的网络运营商所做的某件事挡在了门外。
所以这篇指南做三件事。它告诉你怎样把端口转发做对,包括那个大多数人都做错的测试。它在转发不生效时帮你诊断,并在它永远不可能生效时坦白告诉你。最后,它介绍了完全不开任何端口、也能让朋友进来的几种办法。
先看这里:你属于哪一种情况?
四种情况,四个不同的答案。找到你自己的那一种,直接跳过去 —— 它们的成因几乎毫不重叠,读错分支只会白白浪费一个晚上。
| 你的情况 | 该看哪一节 |
|---|---|
| 我只想让朋友能连上,而且还什么都没试过 | 正确地做端口转发 |
| 我转发了端口,但还是不行 | 为什么没生效 —— 先做下面那个两分钟的检查 |
| 我压根不想在路由器上开端口 | 隧道,完全不需要改动路由器 |
| 动手之前,我想先知道这样做安不安全 | 端口转发安全吗? |
最值得先做的两分钟检查
有一件事决定了端口转发在你这里到底能不能成,而它只需要两分钟。在你碰任何一项路由器设置之前先做它,因为如果结果不对,本页第一个分支里的任何操作都帮不了你。
- 打开路由器的管理页面,找到它自称拥有的 WAN 地址或互联网地址。它在状态页或概览页上,通常标注为 WAN IP、Internet IP 或 IPv4 address。
- 在同一网络下的浏览器里搜索 "what is my IP",记下返回的那个地址。
- 对比这两个地址。如果一致,说明你有一个真正的公网地址,只要设置正确,端口转发就能生效。如果不一致,说明运营商在中间对你的流量做了转换,你在自己路由器上开的端口根本到不了互联网 —— 该怎么办,见为什么没生效。
正确地做端口转发
每台路由器的菜单布局都不一样,这个功能也有好几个名字 —— Port Forwarding、Virtual Server、NAT Forwarding、Applications and Gaming。但要做成的事在哪里都一样:告诉路由器,到达 Minecraft 端口的流量要交给运行服务器的那台机器。
- 先给服务器所在的机器一个固定的局域网地址。这一步经常被跳过,也正是转发规则一周后失效的原因。路由器分配的局域网地址是临时的,今天是
192.168.1.42的电脑,重启之后可能变成192.168.1.57—— 而规则仍然指向旧地址。两种解决办法:在路由器里为那台电脑加一条 DHCP 保留,或者在电脑上设置一个位于路由器 DHCP 范围之外的静态地址。保留是更稳妥的一种,因为路由器仍然是唯一的事实来源。 - 创建转发规则。内部端口和外部端口都设为服务器的端口。协议:Java 用 TCP(25565),Bedrock 用 UDP(19132)。目标:刚才固定下来的那个局域网地址。如果路由器一定要填端口范围,起止都填同一个数字。
- 再让它通过这台机器的防火墙。路由器现在会把流量送到电脑上,而电脑自己的防火墙照样可能把它丢掉。在 Windows 上,为这个端口 —— 或者为运行服务器的 Java 可执行文件 —— 在 Windows Defender Firewall 里加一条入站规则。这是一条正确的转发规则看起来毫无作用的第二大常见原因。
- 从你的网络外部测试。不要用客厅里的浏览器测。把手机的 Wi-Fi 关掉,让它走移动数据,然后尝试连接那个地址;或者在服务器运行时用一个在线端口检测工具。两种方法测的是同一件事:外面的世界能不能进得来。
只要外部检查通过,朋友们就用你的公网地址加端口来连接 —— Java 版是 your.public.ip:25565。如果运营商会不时更换你的公网地址(大多数家庭宽带都会),一个免费的动态 DNS 域名可以给你一个始终跟着地址走的固定主机名。
已经转发了端口,却还是连不上
按顺序逐条排查。这个顺序是按照每一条最终成为答案的概率排的,而前两条排除起来完全不花钱。
1. 你是在自己的网络内部测试的
上面已经讲过,而它确实是最常见的假警报:hairpinning 在标准里是"必须",却被许多路由器忽略,所以在自家客厅里测试自己的公网地址,即使配置完全正确也可能失败。在改动任何别的东西之前,先用移动数据重测一次。
2. 服务器机器的局域网地址变了
如果原本能用、后来突然不行了,几乎总是这个原因。规则还指着电脑已经不再持有的那个地址。加一条 DHCP 保留,让它不会再漂移。
3. 运营商级 NAT —— 唯一没有变通办法的那一条
如果路由器里的 WAN 地址和 "what is my IP" 报告的地址对不上,说明你的流量在到达互联网之前就被运营商转换了,你在自己路由器上开的端口,对外面的世界来说根本不存在。这一点可以直接从路由器上读出来:
| 路由器里的 WAN 地址 | 它意味着什么 | 端口转发能生效吗? |
|---|---|---|
100.64.x.x – 100.127.x.x | Shared Address Space,由 RFC 6598 专门为运营商级 NAT 保留,并明确规定不可在互联网上路由 | 不能。你的路由器上没有任何设置能做到。 |
10.x.x.x、172.16.x.x – 172.31.x.x、192.168.x.x | 这是一个私有地址,说明你的上游还有第二台路由器,或者一台工作在路由模式下的运营商光猫 —— 也就是双重 NAT | 能,前提是先解决双重 NAT(见下) |
| 与 "what is my IP" 结果一致的地址 | 真正的公网地址 | 能 |
| 看起来像公网、但与 "what is my IP" 不一致的地址 | 上游仍然有东西在做转换 —— 按运营商级 NAT 来处理 | 不能 |
运营商级 NAT 之所以存在,是因为 IPv4 地址不够每家分一个,于是运营商让许多客户共用一个公网地址。这不是故障,也没有谁做错了什么。你的选择是:向运营商申请一个公网 IPv4 地址 —— 不少运营商都提供,有时免费,有时作为付费增值项 —— 或者干脆不再需要它,用隧道,或者用托管服务器。
4. 双重 NAT:两台路由器,一条链路
路由器 WAN 侧出现私有地址,意味着你的路由器插在另一台路由器上 —— 通常是运营商提供的那个盒子,它工作在路由模式而不是纯粹的猫模式。你的规则没错,只是流量在第二台设备那里就停住了。三条出路,最好的排在前面:把运营商的盒子改成 bridge mode 或 modem mode,让你的路由器直接拿到公网地址;或者在上游那台设备上把同一个端口再转发一次,指向你的路由器;或者把服务器直接挪到上游设备后面。
5. 机器自己的防火墙
路由器转发了,电脑却把它丢了。为端口或者服务器可执行文件加一条入站规则,然后再从外部测一次。
6. 协议错了,或者端口错了
Java 是 TCP 25565,Bedrock 是 UDP 19132。两者不能互换,而躲在 TCP 转发后面的 Bedrock 服务器从内部看完全健康,实际上却根本连不上。如果你的服务器是 Bedrock,需要注意的差异远不止端口 —— Bedrock 服务器指南从头到尾都讲到了。
如果上面的检查说明你处在运营商级 NAT(carrier-grade NAT)之后,那就没有任何路由器设置能解决它 —— 服务器必须放在一个拥有自己地址的地方。托管的本质就是这个:一台拥有真实公网 IP 的机器,无论你的电脑开不开机它都在线。HytHost 的 Minecraft 托管每月 €2.59 起。
查看 Minecraft 托管方案端口转发安全吗?
简短的答案:向一台你会持续更新的服务器开放一个端口,是没问题的,互联网上每一台 Minecraft 服务器都是这么做的。风险不在于那个开着的端口本身 —— 而在于端口后面监听着什么,以及你家里的地址现在就是服务器地址这件事。两者都可控,都不构成被吓退的理由。
一个开放的端口究竟做了什么
一条转发规则只把一个程序暴露到互联网上:在那个端口上监听的那一个。它不会打开你的电脑、你的文件,也不会打开家里的其他设备。但它确实意味着,任何找到这个地址的人都可以向那一个程序发送任何内容 —— 所以端口后面的软件,必须是你会持续打补丁的软件。
真实的先例,讲准确一点
人们最常搬出的 Minecraft 例子是 Log4Shell —— CVE-2021-44228,评分 10.0 严重,公布于 2021 年 12 月 10 日 —— Mojang 当天就发布了公告,确认 Java Edition 受影响。有必要把它的原理讲准确,因为流传最广的那种说法,恰恰在这里最关键的地方是错的。
微软自己的分析记录的攻击方式是:攻击者连接到一台存在漏洞的服务器,并发送一条精心构造的游戏内消息,随后在服务器上、以及在已连接的存在漏洞的客户端上执行代码。两个方向都是真实的。但在所有有记录的案例中,攻击者都必须先连接并进行交互 —— 仅仅开着一个端口,什么也不会被执行。教训不是"不要开端口",而是"把端口后面的东西保持更新";在当时,这意味着升级到 1.18.1,或者应用 Mojang 为旧版本发布的那个启动参数。
没有补丁可打的那项代价
最值得认真想清楚的那部分,根本不是漏洞:你的公网地址成了服务器地址,你邀请的每个人都拿到了它,他们再转给别人的每个人也一样。针对托管服务器的拒绝服务攻击打的是那台服务器;针对家庭宽带的,则会让整个家庭断网,而且你在自己这一侧无法过滤,因为线路早已被打满。一个地址一旦流出去,就再也收不回来。在线率指南讲了这在长期意味着什么;实用的结论是:对五个朋友来说这笔交易划算,对一台公开服务器来说很不划算。
真正让它安全的做法
让服务器保持在最新版本;打开白名单,只让你邀请的人进来;把 online-mode 保持在默认值,让账号得到验证;在你动手折腾之前先备份世界。这四条就是全部清单,它们连同确切的设置一起写在服务器搭建指南的安全设置一节里。做到这些,一个转发出去的端口就是件再普通不过的事。
不开端口也能让朋友进来
隧道会把一个属于隧道服务商的地址给到外面的世界,然后通过你的电脑主动向外建立的连接,把流量从那里送到你电脑上的服务器。路由器上什么都不用改,这也正是它能在端口转发无能为力的运营商级 NAT 之后依然可用的原因。代价是:现在链路上多了一个第三方,而免费方案有着实实在在的限制。
人们会去搜的三个名字,以及它们各自的官方文档今天的说法:
| 隧道 | Java(TCP 25565) | Bedrock(UDP 19132) | 朋友需要装东西吗? | 免费档的坑 |
|---|---|---|---|---|
| playit.gg | 支持 | 支持 | 不需要 | 共享的全球路由,不能选区域 —— playit 自己就提醒过,北美玩家有可能被绕到 Singapore。用自己的域名要付费。 |
| ngrok | 支持 | 不支持 —— 完全没有 UDP | 不需要 | 开一个 TCP 端点,即使保持免费也要在账户里绑定付款方式;不付费的话,每次重启地址都会变。 |
| Hamachi | 支持 | 厂商未做说明 | 需要 —— 每个玩家都要 | 免费网络上限 5 人(含你自己),也就是四个朋友,而且每个人都得安装并加入。 |
playit.gg
唯一同时覆盖两个版本的选择。Java 和 Bedrock 在免费档里都是内置预设,所以跑在 UDP 上的 Bedrock 服务器不花钱也能用 —— 这在同类产品里很少见,也是选它的主要理由。玩家拿到的是 playit 分配的地址而不是你的地址,而且只有你一个人需要安装东西。诚实地说说它的限制:免费隧道走的是共享的全球路由,playit 自己的文档提醒玩家可能被送到很远的数据中心,并把这条路径描述为延迟会层层累加的四跳;选择区域和使用自己的域名都要付费。免费账户可以分配四个端口。
ngrok
用于 Java 没问题,用于 Bedrock 则完全没用 —— ngrok 支持 HTTP、HTTPS、TCP 和 TLS,并明确说明它不做 UDP。免费档有两个细节,如果没人提醒你就会被绊住:开一个裸 TCP 端点需要在账户里添加付款方式,尽管它仍然免费;而地址是每次启动隧道时随机分配的,所以除非你付费购买一个保留地址,否则朋友们每次都得拿新地址。顺带退休一个谣言:那句被反复转述的"免费 ngrok 隧道两小时后就断"已经过时了 —— ngrok 现行文档说明免费端点可以无限期保持在线。
Hamachi
三者中最老的一个,也是工作方式不同的那一个:它根本不是通向公网地址的隧道,而是一个虚拟局域网。所有人加入同一个私有网络,然后像在同一个房间里一样连接。这个差别就是它的全部故事,好的一面和坏的一面都是。
它还活着 —— GoTo Group 以 LogMeIn 品牌在运营它,发行说明里有 2026 年的条目 —— 免费档也还在,但一个网络上限是五名成员,含你自己。也就是四个朋友。而且和 playit.gg 或 ngrok 不同,每个玩家都要安装客户端并加入网络,对一群青少年来说,计划通常就死在这一步。技术层面上它是一个完整的虚拟网卡,默认通过 UDP 撮合连接,所以并不局限于 TCP —— 但 GoTo 的文档从未提到 Minecraft、Bedrock 或 19132 端口,所以请把"Hamachi 上跑 Bedrock"当作未经验证,而不是官方支持。GoTo 在自己的帮助页面里还提醒:为 "high-speed, low-latency LAN environments" 设计的应用在它上面可能表现不佳。
隧道的代价是什么
主要是延迟。本来直接送到你家的流量,现在要先去服务商那里,而在免费档上你很少能选那是哪里。五个朋友的生存世界里没人会察觉;但凡对时机敏感的玩法,就察觉得到。另一项代价是:你服务器的可用性现在取决于一个第三方的免费档是否继续以同样的条件存在 —— 而正如上面这几个隧道所显示的,这并不是可以想当然的事。
什么时候,托管服务器才是诚实的答案
并不是每个读者都需要这个,假装人人都需要是不诚实的 —— 很多人用一台闲置电脑跑一个不错的服务器跑了好几年。但确实有四种情况,上面那场仗要么打不赢,要么不值得打;与其让你继续去调一台帮不上忙的路由器,不如直说:
- 你处在运营商级 NAT 之后。这是在路由器层面唯一没有变通办法的一条。隧道和托管服务器是仅有的两条路,而其中只有一条能给你一个自己掌控的地址。
- 你希望电脑关机时世界依然可以进。跑在台式机上的服务器,只在台式机醒着时存在。如果大家玩的时间不一样,这就是问题的全部,任何端口设置都解决不了。
- 你不太愿意把家里的地址交出去。尤其是当服务器要公开,或者进来的人是你孩子的朋友而不是你的朋友时。
- 玩家不止几个人。家庭宽带的上行链路,以及一台同时还在干别的事的电脑,两者都会开始显出吃力,而这种吃力表现出来的样子,很像游戏本身出了问题。
会改变的是:地址变成数据中心的地址而不是你家的,它自己保持在线,针对它的攻击也不会让你全家断网。托管方案还会把这一页里那些琐碎活儿一并拿走 —— 不用转发,不用动态 DNS,不用防火墙规则。HytHost 的服务器运行在 NVMe 存储上,99.9% 在线率 SLA,前面有 Voxility DDoS 过滤,在线客服的服务时间为早上 8 点到晚上 11 点(基希讷乌时间)。如果你电脑上已经有一个世界,迁移只是复制一个文件夹,而且我们可以替你完成。
如果你还完全没有搭起服务器,那就先看如何搭建 Minecraft 服务器 —— 本页假设你已经有一台在跑的服务器,只差连接这一步。
一个不会变的地址,无论你的电脑开不开机它都在线,而你家里的 IP 完全不必牵涉进来。从自建服务器迁移世界是免费的,方案每月 €2.59 起。
查看 Minecraft 托管方案常见问题
只有当服务器跑在你自己的机器上、而玩家在你家网络之外时才需要。连着同一个 Wi-Fi 的玩家不用端口转发也能进;托管服务器则完全不需要,因为它本来就有公网地址。如果你不想动路由器设置,playit.gg 这类隧道可以在不开放任何端口的情况下达到同样的效果。
开放一个端口只把一个程序暴露到互联网上 —— 也就是服务器 —— 而不是这台机器的其余部分,也不是家里的其他设备。两项真实的代价是:端口后面的软件必须保持更新;以及你家里的 IP 地址成了服务器地址,一旦分享出去就收不回来。保持服务器版本最新、打开白名单、并让 online-mode 保持开启,可以覆盖第一项;第二项则是一个关于"谁会进来"的判断题。
Java Edition 默认监听 TCP 25565 端口,由 server.properties 中的 server-port 设置。Bedrock Dedicated Server 使用 UDP 19132 端口,IPv6 为 19133。协议和端口号同样重要:躲在 TCP 转发后面的 Bedrock 服务器看起来运行正常,实际上根本连不上。
按可能性从高到低:测试是在同一个网络内部做的,而由于许多路由器没有实现 hairpinning,即使配置完全正确也可能失败;服务器机器的局域网地址变了,规则指向了错误的设备;网络运营商使用了运营商级 NAT,这是任何路由器设置都无法绕过的;上游还有第二台路由器;机器自己的防火墙把流量丢掉了;或者规则用错了协议,与你实际运行的版本不匹配。
把路由器管理页面上显示的 WAN 地址,和 "what is my IP" 搜索报告的地址对比一下。如果不一致,说明流量在上游被转换了。地址落在 100.64.0.0 到 100.127.255.255 之间则可以确定:RFC 6598 把这个段作为 Shared Address Space 专门保留给运营商级 NAT,它在互联网上不可路由。
可以,有两种办法。隧道会给出一个属于隧道服务商的地址,并通过它自己向外建立的连接把流量送到你的机器,路由器完全不用动 —— 这在运营商级 NAT 之后同样可用。或者把服务器放到托管上,它本来就有公网地址。两者都有代价:隧道在链路上加入了一个第三方和额外延迟,托管则要花钱。
不会。转发规则只是一条路由规则,不会带来可测量的延迟。真正影响游戏体验的是线路本身 —— 家庭宽带的上行要和家里其他所有活动共享,所以服务器要和串流、通话、下载抢带宽。真正会增加延迟的选项是隧道,因为流量要先跑到隧道服务商那里,才会到达服务器。
直接绕开路由器
一台拥有自己公网地址的 Minecraft 服务器,无论你的电脑开不开机它都在线 —— 不用转发,不用动态 DNS,不会撞上 CGNAT 的死胡同,你家里的 IP 依然只属于你。包含 DDoS 过滤和一键备份,把现有世界搬过来也免费。
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hours这篇指南对你有帮助吗?