答:首先确认你要搭建的是新加坡mc服务器还是在本地机器上对新加坡玩家开放。无论哪种情况,基本前置包括:稳定的带宽(上行至少5Mbps以上建议),最低2GB内存(Java版1.16+建议4GB),合适的操作系统(Ubuntu/Debian/CentOS均可),以及正确的Java运行环境(OpenJDK 8/11/17 根据版本)。
此外,准备好Minecraft服务端jar(官方Vanilla、Spigot、Paper等)、SSH访问(若是VPS)和管理账号。为保证玩家连接稳定,建议选择位于新加坡或亚太节点的VPS提供商,或者使用具备弹性公网IP的机房机型。最后确认服务端配置文件(server.properties)里的server-port默认是25565,记住这是需要在路由器或云防火墙中做端口转发与端口映射的端口。
云平台通常涉及两层网络:云平台的安全组/防火墙与实例内操作系统防火墙。流程是:在云控制台放行外网端口(如安全组放行TCP/25565),然后在实例内确认服务监听和操作系统防火墙规则(如iptables/ufw/firewalld)。若使用容器则需在容器运行时做端口映射(docker run -p 外网端口:容器端口)。
在Linux实例上检查端口监听:使用 ss -ltnp | grep 25565 或 netstat -ltnp。若服务绑定到127.0.0.1,需要改为0.0.0.0或指定内网IP。放行端口(Ubuntu + ufw):ufw allow 25565/tcp。iptables例子(将外网端口转发到内网另一个端口):iptables -t nat -A PREROUTING -p tcp --dport 25565 -j REDIRECT --to-port 25566。
确认云提供商没有隐藏的网络ACL或DDoS防护会拦截连接;同时若使用Docker,命令如 docker run -d -p 25565:25565 --name mc itzg/minecraft-server 可直接把主机25565映射到容器25565。
首先在路由器管理界面找到“端口转发”或“端口映射”设置。添加一条规则,把外网端口25565(协议TCP)映射到内网Minecraft服务器的局域网IP(例如192.168.1.100)和对应端口25565。保存并重启路由器或应用配置。
很多家庭宽带处于双重NAT(运营商路由器 + 家用路由器),这会导致外网不可达。确认外网IP是否为公网IP(在路由器状态或访问“我的IP”网站查看)。若是私有IP,需申请公网IP或把运营商设备设置成桥接模式,或使用UPnP/反向隧道(如ngrok、frp)解决。
家庭环境建议使用有线连接与QoS优先级设置,确保Minecraft服务器的上行带宽稳定。还可以把端口映射到不同端口并在服务端写明或用DNS SRV记录隐藏端口(见后文),以便玩家直接用IP连接。
1)确认服务端已启动并监听正确端口:使用 ss -ltnp 或 netstat 检查。2)确认云控制台安全组/防火墙和实例内防火墙都放行该端口。3)从外网尝试telnet或nc:telnet your.ip 25565 或 nc -vz your.ip 25565,若无法连通说明网络链路问题。4)检查Minecraft服务端日志是否有绑定错误、版本不一致或白名单/在线模式问题。
使用traceroute/tcptraceroute判断路由链路是否到达目标,使用tcpdump抓包(如 tcpdump -i eth0 port 25565)查看是否有来自客户端的SYN到达服务器。若看到SYN但无响应,可能是防火墙或进程未正确绑定。
ISP屏蔽端口(少见但可能),双重NAT未处理,或者服务器绑定在IPv6而客户端使用IPv4。另一类问题是端口映射到容器但容器内部Minecraft配置端口不一致,需逐项核对应。
如果不想让玩家在连接时输入:端口号,可以使用DNS的SRV记录。Minecraft的SRV记录格式通常是:服务名为 _minecraft._tcp,目标为A记录的主机名,并在SRV中指定端口(如25566)。玩家使用域名时会自动读取端口。
示例:_minecraft._tcp.example.com. 3600 IN SRV 0 5 25566 mc1.example.com. 其中 mc1.example.com 有一个A记录指向你的公网IP。如果你要分流多个子服,可以对不同子域设置不同的SRV指向不同端口。
若想在一台机器上运行多个世界或多台后端服务器,推荐使用 BungeeCord、Velocity 或 HAProxy/Nginx TCP 代理做四层转发。外网只开放单一端口(如25565)到代理,代理内部根据玩家信息或域名对不同后端端口做映射,实现多端口分流与无缝跳转。