启动 Minecraft Java 版服务器时,默认端口是 25565,因此玩家只需输入域名即可加入。但如果你运行在非默认端口上(例如一台机器上有多个服务器,或 VPS 分配了端口),玩家就必须输入 play.example.com:25577,既难记又显得不专业。最干净的解决办法是创建 DNS SRV 记录,它会自动告诉 Minecraft 客户端该连接到哪个主机和端口,玩家始终只需输入 play.example.com。
什么是 SRV 记录以及它如何工作
SRV(Service)记录是 RFC 2782 定义的标准 DNS 记录,用于指明某项"服务"运行在哪个主机和端口上,而不像普通 A 记录那样只指向一个 IP。SRV 记录携带优先级(priority)、权重(weight)、端口(port)和目标(target)。Minecraft Java 客户端总是先查找名为 _minecraft._tcp.<玩家输入的名称> 的 SRV 记录;一旦找到,就会连接到指定端口,玩家完全无需知道端口号。
关键在于 SRV 记录并不直接指向 IP,而是指向一个主机名(target),该主机名还需通过 A 记录(IPv6 则用 AAAA)解析。因此配置永远分为两步。
第一步:先为主机创建 A 记录
首先需要一个指向服务器 IP 的主机名,例如创建子域 mc.example.com 指向真实 IP。
; A 记录 — 将主机名指向服务器 IP
mc.example.com. 3600 IN A 203.0.113.45
; 若有 IPv6 则再加 AAAA
mc.example.com. 3600 IN AAAA 2001:db8::45
这个 mc.example.com 名称将在下一步作为 SRV 记录的目标。请记住:目标只能是主机名,切勿直接填写 IP 地址。
第二步:为 Java 版创建 SRV 记录
Minecraft Java 的 SRV 记录由以下部分组成:服务为 _minecraft,协议为 _tcp,其后是玩家将输入的子域(例如 play)。以下是 BIND 风格的区域文件行:
; SRV 记录 — 优先级 权重 端口 目标
; 完整名称:_minecraft._tcp.play.example.com
_minecraft._tcp.play IN SRV 0 5 25577 mc.example.com.
这一行的含义是:当玩家输入 play.example.com 时,客户端应连接到主机 mc.example.com 的 25577 端口,优先级为 0,权重为 5。注意目标始终以点(.)结尾,以标示它是完全限定域名(FQDN)。
SRV 记录中各字段的含义
| 字段 | 示例值 | 含义 |
|---|---|---|
| Service | _minecraft | 服务名,始终以下划线开头;Minecraft 固定使用此值 |
| Proto | _tcp | 协议;Java 用 _tcp(基岩版用 _udp) |
| Name | play | 玩家输入的子域;留空或用 @ 表示根域名 |
| TTL | 3600 | 缓存时间(秒);越低更新越快,但查询更频繁 |
| Priority | 0 | 数值越低越优先;用于排序多台服务器,通常设 0 |
| Weight | 5 | 优先级相同时按权重分配负载,通常设 5 |
| Port | 25577 | 服务器实际监听的端口 |
| Target | mc.example.com. | 目标主机名;必须有 A/AAAA 记录并以点结尾 |
Minecraft SRV 记录的黄金法则:Service = _minecraft,Proto = _tcp(Java),Target = 可解析的主机名而非 IP。只要记住这三点,其余不过是各个 DNS 面板的细节差异。
在 DirectAdmin、Cloudflare 和注册商处如何填写
每个 DNS 面板呈现 SRV 字段的方式各不相同:有的拆成独立的输入框,有的合并成一行。这正是人们最容易出错的地方。
DirectAdmin
在 DirectAdmin 中,进入 DNS Management 并选择记录类型 SRV。通常在 Name 框填入 _minecraft._tcp.play,在 Value 框填入 0 5 25577 mc.example.com.(优先级 权重 端口 目标)。部分版本会单独拆出 Priority 字段,此时 Value 只填 5 25577 mc.example.com.。
Cloudflare
Cloudflare 将字段拆分得很清楚,分别有 Service(_minecraft)、Protocol(TCP)、Name(play 或 @)、TTL、Priority、Weight、Port 和 Target 各自的输入框。逐个直接填写即可,并应将记录设为仅 DNS(灰色云朵),因为 Cloudflare 代理不支持 Minecraft 端口。
域名服务商 / 注册商
许多注册商将所有内容合并成一行,或要求填写完整的 Name;有些会在你选择 SRV 类型时自动补上 service/proto。请阅读各面板的示例,如果系统已自动添加,就不要重复填写 _minecraft._tcp。
在 AsiaGB,我们通过 DirectAdmin 管理 DNS,且不强制使用 Cloudflare,因此你可以直接在 DNS Management 中自行添加 SRV 记录。Linux VPS 套餐每月 500 泰铢起,采用 SSD,并提供 99% 的正常运行时间保证。
用 dig 或 nslookup 验证 SRV 记录
配置完成后不要想当然认为已生效——务必先查询确认。在 Linux/macOS 上使用 dig:
$ dig SRV _minecraft._tcp.play.example.com +short
0 5 25577 mc.example.com.
# 或查看完整输出
$ dig SRV _minecraft._tcp.play.example.com
# 在 Windows 上使用 nslookup
> nslookup -type=srv _minecraft._tcp.play.example.com
如果结果显示的优先级、权重、端口和目标与你设置的完全一致,说明 SRV 记录已发布。随后运行 dig A mc.example.com,确认目标也解析到正确的 IP。
DNS 传播与 TTL
新记录或修改过的记录需要时间传播到全球,具体取决于 TTL,可能从几分钟到 48 小时不等。若预计会频繁改动,可先设置较低的 TTL(如 300 秒),待稳定后再调高。等待期间如果 dig 仍看不到记录,可直接查询公共解析器,例如 dig SRV _minecraft._tcp.play.example.com @1.1.1.1。
基岩版与 Java 版的区别
基岩版(Bedrock)同样支持 SRV 记录,但使用 _udp 协议和默认端口 19132,格式为 _minecraft._udp.play。不过实话实说,许多基岩版客户端会忽略 SRV 记录,尤其是主机和移动端,导致行为不稳定。更可靠的做法是让基岩版玩家在添加服务器界面的 Port 字段直接输入端口。
; 基岩版 SRV 示例(并非所有客户端都支持)
_minecraft._udp.play IN SRV 0 5 19133 mc.example.com.
常见陷阱与误解
SRV 记录并不能隐藏服务器的 IP。任何人查询 DNS 都能看到目标,并立即将其解析为真实 IP,因此 SRV 不是 DDoS 防护。要隐藏真实 IP 需要单独的代理/抗 DDoS 服务——那是完全不同的话题。
- 不要在目标字段填 IP——它必须是带 A 记录的主机名。
- 不要忘记 BIND 区域文件中目标末尾的点,否则会变成
mc.example.com.example.com。 - 如果服务器已在根域名的 25565 端口上运行,则完全不需要 SRV 记录。
- 非常老的 Minecraft 版本(1.3 之前)不支持 SRV,但现在几乎无人使用。
步骤快速总结
- 创建 A 记录,使
mc.example.com指向服务器的 IP。 - 创建 SRV 记录
_minecraft._tcp.play,指向目标mc.example.com.并填入真实端口。 - 用
dig SRV或nslookup -type=srv验证。 - 按 TTL 等待传播,之后玩家只需输入
play.example.com。
这样玩家就能凭简短域名连接你的 Java 版服务器,再也无需记住端口号了。
常见问题 (FAQ)
创建 SRV 记录前必须先创建 A 记录吗?
是的,必须先创建,因为 SRV 记录指向的是主机名(target)而非直接指向 IP。该主机名(例如 mc.example.com)必须有一条能解析到真实 IP 的 A 记录(IPv6 则为 AAAA),否则即使 SRV 记录完全正确,客户端也无法连接。
我设置了 SRV 记录后为什么玩家还要输入端口?
常见原因包括:目标填成了 IP 而非主机名、区域文件中目标末尾漏了点、重复填写了 service/proto,或 DNS 尚未传播。请先用 dig SRV _minecraft._tcp.play.example.com 检查;若看不到记录,就按 TTL 等待,或直接查询 1.1.1.1。
SRV 记录能隐藏 IP 以防御 DDoS 吗?
不能。SRV 记录会暴露目标,普通的 DNS 查询即可将其解析为真实 IP,因此它不是 DDoS 防护。要隐藏真实 IP 需要单独的代理或抗 DDoS 服务,那与 SRV 记录是完全不同的机制。
基岩版能像 Java 版一样使用 SRV 记录吗?
理论上基岩版支持,使用 _minecraft._udp 和默认端口 19132,但许多基岩版客户端(尤其是主机和移动端)会忽略 SRV 记录,因此并不可靠。更稳妥的做法是让基岩版玩家在添加服务器时自行在 Port 字段输入端口号。
准备好开设您的 Minecraft 服务器了吗?
AsiaGB Linux VPS(SSD、DirectAdmin、99% 在线率)每月 500 泰铢起,泰国与新加坡数据中心低延迟,适合任何规模的 Minecraft 服务器。
查看 VPS 套餐