世界杯加纳

教程:架设Java版服务器

本教程介绍的是架设Java版服务器。关于基岩版服务器的架设,请见“Tutorial:架设基岩版服务器”。

目录

1 警告

1.1 安全建议

2 Java

2.1 OpenJDK与OracleJDK的区别

2.2 JRE与JDK的区别

2.2.1 Java版本要求

2.3 无头Java

3 Java安装

3.1 Windows

3.1.1 Winget

3.2 macOS

3.3 Linux 发行版

3.3.1 Ubuntu、Raspbian、基于Debian的系统

3.3.2 Fedora、AlmaLinux、Rocky Linux、CentOS、基于RHEL的系统

3.3.3 openSUSE

3.3.4 Arch Linux

3.3.5 Gentoo

3.3.6 Solus

3.3.7 其他发行版

3.4 FreeBSD

4 Docker

4.1 获取Docker(适用于Linux、Mac和Windows)

4.2 Docker镜像

4.3 更新Docker镜像

4.4 在Synology Diskstation上使用Docker-Minecraft

5 运行Minecraft服务器

5.1 Java选项

5.2 Minecraft选项

5.3 示例命令行

5.4 使用screen工具运行服务端

6 配置环境

6.1 编写脚本用于启动服务器

6.1.1 Windows

6.1.2 macOS、Linux和FreeBSD

6.2 启动和维护脚本

6.3 配置Minecraft服务器

7 发布Minecraft服务器

7.1 局域网

7.2 端口转发

7.3 设置VPN

7.3.1 设置Hamachi

7.3.2 设置Radmin VPN(仅支持Windows)

8 连接到Minecraft服务器

8.1 关于IP地址的一些注意事项

8.2 服务端网络设置

8.2.1 针对接入NAT的家庭网络的服务器

8.2.2 针对使用家庭路由器的服务器

8.2.3 针对使用动态IP的服务器

8.2.4 局域网中的专用服务器

8.2.5 SRV记录

9 常见问题

10 视频和替代教程

11 参考

12 导航

本文章所述内容仅适用于Java版。

本教程将通过手把手的方式,一步步地帮助你建立属于你自己的Java版服务器。在本教程中,我们使用Mojang发布的供玩家免费下载的服务器端程序,该程序在大部分操作系统(比如Windows、Mac OS、GNU/Linux和BSD)上都可以运行。

更多有关Minecraft服务器的信息,请见服务器。

注意:

架设服务器会花费一些时间,并且需要一些技术知识。如果你没有基础的计算机和网络技能,请不要尝试架设服务器。最好的选择可能是在网络上寻找有关于如何设置服务器的教程(而不是这里)。

一台Minecraft服务器不需要一台高端机器,2核心的CPU足够开一个4、5人的小型服务器,但需要注意的是如果你想提高服务器性能,你需要的是更新的CPU架构和更高的主频,而不是更多的核心数量(例如一颗在2012年推出的有24核心但只有1.1GHz主频的至强处理器性能并不比最新的但核更少的处理器强大)。

如果你想长期开一个中大型服务器,Intel的酷睿和AMD的锐龙并不是明智之选,这些民用平台的处理器一般稳定性和拓展功能较差,且不支持稳定的ECC内存(DDR5除外),你需要的是Intel的至强W系列及至强可拓展处理器,或是AMD的线程撕裂者或霄龙处理器,这些适用于工作站或服务器的处理器一般稳定性强,但主频较低,在挑选时应选择较新且主频(或者睿频)在3GHz以上的处理器,且内存应在36GB以上且支持ECC。

只要你的电脑性能足够强劲,你可以在一台电脑上同时架设服务器并在该服务器上进行游戏。

对于很多玩家游玩的服务器,不建议将服务器连接到无线网络(WLAN,尤其是WWAN),最好还是把服务器接入到有线网络,例如以太网。

如果你只是想联机玩游戏,而不是自己开设服务器。可以考虑在Minecraft服务器列表中找到你想玩的服务器。

如果使用游戏中设置内的局域网游戏需要外网或者内网穿透亦或者端口映射,如果联机主机可以连接你的WLAN,可以直接输入地址连接而不用使用更复杂的操作让其他内网连接到你的服务器(使用端口映射对设备有一定危险性)地址的正确填写x.x.x.x:端口。

如果你不想在家中开设服务器,请查看Minecraft论坛上的服务器托管区。这样的话,你一般需要每月支付一定的费用(免费的托管服务很少,且一般无法保证质量),但是这样也免去了你维护服务器的烦恼,可以保持服务器一直在线,玩家可以随时进入服务器游玩。也可以购买VPS并在上面搭建服务器。

注:也有一些其他的定制服务器软件,大部分大型服务器都使用这些软件,但是这些软件并不受Mojang官方支持。

警告[编辑 | 编辑源代码]

注意

虽然我们鼓励探索和学习,但是请知晓没有充分认知到风险就运行服务器软件将会使你的系统更可能面临潜在的安全问题。如果你不确定的话,请务必采取相应措施以及寻求帮助指导。

鉴于你正在一步步地开启你自己的服务器,你应该要注意所有可能出现的危险。运行下面的所有教程应该不会导致你的系统出错,但是由于本wiki是所有人都可编辑的,且我们并不知道你的系统配置与软件运行情况,我们并不能保证你的系统一定不会出现问题。

为了确保你根据下面的教程架设服务器而不会出现问题,我们强烈推荐你至少要知道以下的内容:

命令行的使用以及编辑各种配置文件

基本的网络术语(IP、DHCP、端口等)

你的系统配置

你的网络配置

你的路由器配置(如果你想要其他人通过互联网连接到你的服务器)

安全建议[编辑 | 编辑源代码]

在架设服务器之前,建议遵循以下的安全实践:

只使用必要的权限运行Minecraft服务器。sudo或超级用户的权限过大,很可能导致安全漏洞。

关闭未使用的端口,并且只在需要的时候开放端口。这是抵御外部攻击的有效方式。只开放必要的端口,例如Minecraft服务器监听的端口。当不再使用端口后,应当及时关闭。

如果你使用SSH,必须设置某种认证方式,如密码或密钥。建议使用密钥认证身份,并且将密钥的私钥妥善保管。绝不要对外分享你的私钥!

如果可能,使用白名单来控制谁能访问服务器。白名单可以阻止陌生人随意进入服务器,并且阻止常见的恶意破坏。白名单可以通过whitelist.json或/whitelist配置。

妥善设置你的网络防火墙。

及时更新服务器软件,同时不要使用包含已知漏洞的版本。

定期备份服务器,防止数据丢失或损坏。

检查你的服务器插件和mod版本,有漏洞时及时更新。

在其他服务器上测试插件和mod,而不要使用你的主服务器来测试。

对个人或私有服务器,尽可能只将服务器开放至局域网。

Java[编辑 | 编辑源代码]

Java是一种静态类型的编程语言,用于编写在Java虚拟机(JVM)上运行的程序。JVM支持多种平台,这使得开发者只需编写一次代码,就可以在所有支持JVM的平台上运行该程序。进一步了解

此章节用于回答一些经常被问到的关于Java的问题,也会指导你作出有关Java的决定。

OpenJDK与OracleJDK的区别[编辑 | 编辑源代码]

OpenJDK与OracleJDK非常相似。OpenJDK是对Java的一种官方的开源参考实现。OpenJDK是一个开源代码库,几乎所有其他JDK都基于此构建。除了打包方式、许可证和一些表面上的差别外,OpenJDK与OracleJDK是一样的。

请注意:如果用于商业和生产用途,OracleJDK的OTN(Oracle技术网络)构建版本就需要一份付费的订阅才能使用。这似乎包含了运行Minecraft服务器的情况,即便是非盈利目的的。Oracle会提供他们自己的OpenJDK构建版,但是不会打包成那种易于安装的安装包格式。

JRE与JDK的区别[编辑 | 编辑源代码]

JRE指的是“Java运行环境”。JDK指的是“Java开发工具包”。JRE被设计用来运行Java程序,而JDK则是被设计用来开发Java程序的。JDK中包含了JRE,而JRE中包含了JVM。这意味着如果你已经有了JDK,那样也同时有了JRE和JVM。原版Minecraft不需要JDK,但是有一些插件可能需要。

Java版本要求[编辑 | 编辑源代码]

某些版本的Java版服务器要求特定的最低Java版本。以下是Minecraft服务器的一些主要最低Java版本要求:

从1.12(17w13a)开始,运行Minecraft服务器的最低要求是Java 8。

从1.17(21w19a)开始,运行Minecraft服务器的最低要求是Java 16。

从1.18(1.18-pre2)开始,运行Minecraft服务器的最低要求是Java 17。

从1.20.5(24w14a)开始,运行Minecraft服务器的最低要求是Java 21,且操作系统要求为64位。

请注意,旧版的Minecraft可以运行在较新的Java版本上,例如Minecraft 1.16可以运行在Java 17上,Minecraft 1.18可以运行在Java 20上,反之亦然。

虽然服务器可以运行在旧版本的Java上,但建议使用最新版本,因为新版本可能带来更好的性能、更高的安全性和更少的漏洞。

无头Java[编辑 | 编辑源代码]

无头Java实际上是普通Java的删减版。它去除了对图形界面与鼠标、键盘方面的支持。无头Java通常被用在服务器或其他不需要图形界面的场合。

在Debian上,有几种Java虚拟软件包被使用。这些软件包都支持Java运行环境,且具有以下两种类型:无头的(没有图形界面)以及普通的。

”——Debian Wiki(译文)

Java安装[编辑 | 编辑源代码]

Windows[编辑 | 编辑源代码]

运行Minecraft服务器需要Java运行环境(JRE,或者直接叫Java)。考虑到安全性,建议使用最新版的Java。你可以通过以下方法之一检查是否为最新版:

打开Windows控制面板,找到Java(可能在“程序”类别中),然后点击“立即升级”。

下载Java Uninstall Tool。该软件会检查你安装的Java版本,并在必要时删除旧版本的Java。

打开命令提示符,输入java -version。如果显示出了版本号,可以与Oracle Java技术细节上的信息对比获取最新版本号。

如果你没有安装Java或你的Java版本较旧,你可以下载Adoptium的OpenJDK Temurin或微软的OpenJDK。

Winget[编辑 | 编辑源代码]

Winget是Windows官方的软件包管理工具,用于从Microsoft Store和Winget仓库安装程序。它在Windows 10和Windows 11中默认包含。

你可以使用Winget安装多个OpenJDK发行版。由于Minecraft服务器只需要JRE,因此安装完整的JDK包是可选的:

winget install EclipseAdoptium.Temurin.21.JRE 安装Adoptium Temurin 21 JRE。

winget install EclipseAdoptium.Temurin.8.JRE 安装Adoptium Temurin 8 JRE。

winget install Microsoft.OpenJDK.21 安装微软构建的OpenJDK 21。微软构建的OpenJDK 8 版本不可用。

macOS[编辑 | 编辑源代码]

请注意,Minecraft服务器在macOS 10.4及更早版本上可能无法正常运行,严重可能导致系统崩溃。

打开终端。

运行java -version来检查是否已安装Java。

如果没有安装Java,或需要安装其他特定版本,可以通过Homebrew安装:

首先运行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"来安装Homebrew。

然后运行brew tap homebrew/cask-versions准备安装特定版本的OpenJDK。

运行brew install --cask temurin@21安装Adoptium Temurin 21。

运行brew install --cask temurin@8安装Adoptium Temurin 8。

Linux 发行版[编辑 | 编辑源代码]

Linux存在许多不同的变体,称为发行版(distro)。其中一些发行版专门设计或更适合用于运行服务器。如果你正在部署专用服务器,建议使用以下发行版之一。

一般来说,Linux对开源程序更为友好。所以,请优先考虑使用开源程序,如OpenJDK。

Ubuntu、Raspbian、基于Debian的系统[编辑 | 编辑源代码]

可以使用apt安装OpenJDK:

安装前,建议运行sudo apt update更新软件包列表。

sudo apt install openjdk-21-jdk-headless 安装OpenJDK 21。

sudo apt install openjdk-8-jdk-headless 安装OpenJDK 8。

由于Debian的软件较老,目前其软件仓库中不包含OpenJDK 21,因此需要手动从此处下载deb包并安装。

wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb 下载deb包。

sudo dpkg -i jdk-21_linux-x64_bin.deb 安装JDK 21。注意这样安装的是JDK而不是OpenJDK。

去掉-headless部分的命令将安装Java的GUI组件。

Fedora、AlmaLinux、Rocky Linux、CentOS、基于RHEL的系统[编辑 | 编辑源代码]

可以使用dnf安装OpenJDK:

sudo dnf install java-21-openjdk-headless 安装OpenJDK 21。

sudo dnf install java-1.8.0-openjdk-headless 安装 OpenJDK 8。

去掉-headless部分的命令将安装Java的GUI组件。

openSUSE[编辑 | 编辑源代码]

可以使用zypper安装OpenJDK:

sudo zypper install java-21-openjdk 安装OpenJDK 21。

sudo zypper install java-1_8_0-openjdk 安装OpenJDK 8。

推荐使用openSUSE Leap,而非滚动发行的Tumbleweed,以确保服务器稳定性。

Arch Linux[编辑 | 编辑源代码]

OpenJDK发行版可以在Arch Linux仓库中找到。

可以使用pacman安装OpenJDK:

pacman -S jre21-openjdk-headless 安装OpenJDK 21。

pacman -S jre8-openjdk-headless 安装OpenJDK 8。

去掉-headless部分的命令将安装Java的GUI组件。

如果遇到问题,建议参考官方Arch Linux Wiki。

Gentoo[编辑 | 编辑源代码]

运行emerge --ask virtual/jdk。这将根据你的配置文件安装OpenJDK。

有关旧版本Java的信息,请参考Gentoo Wiki。

Solus[编辑 | 编辑源代码]

运行sudo eopkg install openjdk-21安装OpenJDK 21。

有关旧版本Java的信息,请参考Solus帮助中心。

其他发行版[编辑 | 编辑源代码]

请查看你所使用的发行版的文档,了解如何安装OpenJDK。

或者,你可以直接访问Java官网,下载适用于Linux的Java包。大多数发行版都可以使用这些包(32位或64位)。网站上提供了不同包的安装说明。

如果安装过程中提示输入密码,请输入你的密码。如果询问“Is this OK [Y/N]”,请输入Y并按下↵ Enter。

FreeBSD[编辑 | 编辑源代码]

在FreeBSD上可以通过pkg[1]安装OpenJDK:

pkg install openjdk21 安装OpenJDK 21[2]。

pkg install openjdk8-jre 安装仅JRE的OpenJDK 8[3]。

安装OpenJDK后,可能会看到OpenJDK需要fdescfs和procfs。为满足这些要求,你可以运行以下命令:

mount -t fdescfs fdesc /dev/fd 将fdescfs挂载到/dev/fd。

mount -t procfs proc /proc 将procfs挂载到/proc。

这些更改在系统重启后不会永久生效。要使其永久生效,你需要将这些挂载点添加到/etc/fstab文件中。使用文本编辑器(如nano或vi)打开该文件,并在/etc/fstab中插入以下行:

fdesc /dev/fd fdescfs rw 0 0

proc /proc procfs rw 0 0

最后,为确保可以立即使用新的Java二进制文件,请在命令行中运行rehash。

如果你想使用ports安装OpenJDK,请参考此文章以获取更多信息。pkg提供的软件包是ports的编译二进制文件[4]。

Docker[编辑 | 编辑源代码]

Docker是一个免费的基于容器的平台,可以使不同的Minecraft服务器实例和主机相互隔离开来。Docker本身和其容器仓库的所有者与Mojang没有任何隶属关系。

获取Docker(适用于Linux、Mac和Windows)[编辑 | 编辑源代码]

请参阅Docker安装文档。

Docker镜像[编辑 | 编辑源代码]

下载镜像:运行docker pull sirplexus/minecraft-server-standalone:latest。

设置容器:开放端口25565,分配1G内存,并命名为“MyServer”:docker container create --publish 25565:25565/tcp --name "MyServer" --env RAM=1G sirplexus/minecraft-server-standalone

启动容器:docker container start MyServer

更新Docker镜像[编辑 | 编辑源代码]

更新minecraft-server-standalone镜像:运行

docker pull sirplexus/minecraft-server-standalone:latest

在Synology Diskstation上使用Docker-Minecraft[编辑 | 编辑源代码]

注意

此方法适用于自托管的Minecraft世界,而不是独立版本。你需要从官方网站下载server.jar文件。

Docker是许多新Synology Diskstation的“附加软件包”之一,许多设备足以运行至少一个Minecraft实例。

在启动Docker之前,你需要先创建一个文件夹,里面包含你想启动的Minecraft版本,并将其重命名为“server.jar”,以及一个eula.txt文件。

在Synology Diskstation上配置Minecraft服务器的方法如下:

在Diskstation上安装并打开Docker。

在Registry中搜索“sirplexus”,找到“sirplexus/minecraft-server”。右键点击并选择“Download this image”。

下载完成后,你可以在镜像列表中找到该镜像。点击“Laungh”。

点击“Advanced settings”,进入“Volume”标签。添加之前创建的文件夹,并将“mound path”设置为“/srv/minecraft”。

进入“Port Settings”标签,分配一个“Local Port”。你可以通过这个端口连接到你的服务器。

点击“Apply”,“Next”,然后再次点击“Apply”以完成容器设置。

现在,你已经启动好了Minecraft服务器。IP地址是Diskstation的IP地址,端口号是你在第5步中设置的。

运行Minecraft服务器[编辑 | 编辑源代码]

运行Minecraft服务器的基本步骤是安装Java、运行服务器、接受EULA(最终用户许可协议),然后再次运行服务器。当你安装了Java并打开命令行后,后续的内容基本上都是一致的。

确认你的CPU、内存和硬盘空间满足服务器需求。

安装Java。不同的操作系统步骤不同,请参照下方相关内容。

从官网下载服务端。

为下载下来的jar文件新建一个文件夹,并把它放进去。这个文件夹会存储所有的配置和世界存档文件,所以不要在“下载”文件夹中直接运行。

打开一个命令提示符或一个终端界面。

检查Java是否可用。输入java -version就可以。

输入cd(切换工作目录),切换到你存放服务端jar文件的文件夹中。如果你打开了一个图形界面,也可以把这个文件夹拖动到终端窗口中。

输入java -jar minecraft_server.jar --nogui用来首次启动服务器(如果你的jar文件名不是“minecraft_server.jar”,把它换成实际的文件名即可)。

接受EULA。首次运行服务器时,会自动生成一个eula.txt。使用文本编辑器(如Windows中的记事本,Linux中的vim)打开eula.txt,将文件中的eula=false改为eula=true。这表示你已阅读并理解了EULA的内容,并会在使用服务端时遵守它。如果不这样做,服务器会在你尝试启动时立即关闭。

现在服务器已被配置好了。你可以再次使用java -jar minecraft_server.jar启动服务器了。如果你不想让服务器显示图形界面,在前面的命令后面添上一个空格和--nogui即可(有些人觉得这样做会让服务器更快)。你也可以使用下面所列出的一些选项。

现在,你应该已经启动了一个基本的服务器了。更多关于配置服务器的内容,参见配置环境。关于如何编写启动脚本的内容,参见编写脚本用于启动服务器。

Java选项[编辑 | 编辑源代码]

Java选项应添加在命令行中的java和-jar之间,或在启动脚本中。

内存限制

对运行Minecraft服务器来说,最重要的事情莫过于内存。你可以使用-Xmx选项设置服务器能被允许使用的内存量。通常-Xmx2G(最大内存2GB)对有5名玩家且使用默认模拟距离(5×212 = 2205个区块)的家庭服务器来说足够。但应根据实际设置调整。如果设置值太低,会导致垃圾回收频繁停止。如果设置值太高,在Java 8上垃圾回收可能会持续过长时间。

-Xms(初始化内存大小)只影响启动性能。但是你也可以设置它。如果你的服务器还运行其他程序,将其设置为最大内存大小的1/4(例如,-Xms512M),以确保良好的平衡:JVM在不需要这么多内存时,可以将部分内存归还给操作系统(虽然这个归还过程非常保守,长期性能影响较小)。如果服务器只运行Minecraft,可以将其设置为与最大内存大小相同,以禁用堆缩放,从而获得最快的启动速度。

对于一些版本的JRE,可以使用“soft max heap size”(-XX:SoftMaxHeapSize=1G)。JRE将尝试只使用那么多的内存,但如有必要,它将超过-Xmx设置的最大值。 如果你在服务器上运行许多东西,这可能会很有用。

GC

在Java 9及更高版本中,Minecraft使用的默认垃圾回收器是G1GC(Java 8中也有,但默认未启用)。官方Minecraft启动器使用的选项包括:-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M。当然,还有一些更好的选项,如brucethemoose的Minecraft性能选项和Aikar的垃圾回收器选项。

在Java 14及更高版本中还可以使用ZGC。它几乎没有延迟,停顿时间仅在毫秒级别。只需使用-XX:+UnlockExperimentalVMOptions -XX:+UseZGC,无需其他与GC相关的选项。除了-Xmx之外,调节选项不如其他GC设置那么重要(因为默认设置已经足够好),但如果愿意牺牲一些内存来减少延迟,可以尝试使用-XX:-ZProactive。

VM

如果你的服务器运行在64位的Solaris系统上,并且使用了64位Java,请添加-d64。

总之,一个合理的选项组合可以简化为-Xmx4G -Xms1G -XX:SoftMaxHeapSize=3G -XX:+UnlockExperimentalVMOptions -XX:+UseZGC。虽然通过复杂的选项可以进一步优化性能,但通过修改服务端可以获得更大的性能提升。实际上,所有关于服务器性能的深入讨论(如Aikar和brucethemoose)都假设进行了一定程度的修改。

Minecraft选项[编辑 | 编辑源代码]

关于服务端JAR文件的选项要写在命令中的-jar minecraft_server.jar后面。你可以在后面加上--help查看所有可以被传递给服务端的参数。下方列出了一些可用的命令行选项。

--bonusChest

在初次生成世界时,是否生成奖励箱。

--demo

指定服务器是否在演示模式下运行(给玩家显示一个“演示版”弹出信息。且演示结束后,玩家不能破坏、放置方块或者吃东西)。

--eraseCache

清除光照缓存等。与优化单人游戏世界时的选项相同。

--forceUpgrade

强制升级所有区块到服务器目前的版本(单人游戏世界也可用)。

--help

显示此帮助。

--initSettings

只初始化server.properties和eula.txt,然后退出。

--nogui

启动服务器时不显示图形界面。

你仍然可以与你的服务器交互,但如果启用,必须使用cmd或终端。

nogui与此选项的作用相同,主要用于向后兼容非常旧的服务器版本,但更加推荐使用--nogui,因为它的格式与其他选项更一致。

--port <整数>

指定服务器监听的端口,无论在server.properties中设置的端口值是什么(默认值为-1)。

--safeMode

加载存档时只使用原版数据包。

--serverId <字符串>

为服务器指定一个服务器ID。

--singleplayer <字符串>

指定服务器以离线模式运行(<字符串>需要指定一个值,但此值的具体用途未知,可能是由Mojang内部所使用的)。

--universe <字符串>

指定查找world文件夹的位置(默认为.,即当前目录)。

--world <字符串>

指定一个level.dat所在文件夹的名称。

--jfrprofile

初始化Java Flight Recorder。仅1.18及以上版本可用。

旧命令行选项

一些选项能在旧版中使用,但是已在新版本中被移除或被替换了。

-o true

使服务器以在线模式运行,只有经过认证的用户才能进入(新版本中,将server.properties中的"online-mode"改为"true"等同于此选项)。

示例命令行[编辑 | 编辑源代码]

运行一个名称为cold的存档文件夹,监听在1337端口上且最大1GB内存的服务器:java -Xmx1G -jar minecraft_server.jar --port 1337 --nogui --world cold。

使用screen工具运行服务端[编辑 | 编辑源代码]

当使用ssh连接至服务器时,如果直接启动服务端,那么关闭ssh窗口后,正在运行的服务端程序也会被终止,此时就需要用到screen工具。

首先运行screen,再运行服务端启动命令,此时关闭ssh窗口就不会终止服务端的运行。

如需回到服务端界面,先运行screen -ls列出正在运行的会话,再运行screen -r <会话名称>就可以回到之前的界面。

配置环境[编辑 | 编辑源代码]

编写脚本用于启动服务器[编辑 | 编辑源代码]

实际上,我们不需要在每次启动服务器的时候输入命令。我们可以把命令写进一个文件里,然后执行它。

Windows[编辑 | 编辑源代码]

在Windows中,脚本称为“批处理文件”。在服务器jar文件所在的文件夹中,创建一个文本文档,命名为start.bat,然后右键点击“编辑”,再将下面的内容粘贴到里面:

@ECHO OFF

java -Xms1024M -Xmx2048M -jar minecraft_server.jar --nogui

pause

然后双击这个文件启动你的服务器。你可能会收到“Class_Not_Found”和“ServerGuiConcole”错误信息,直接忽略这些错误。然后你就可以看到“Server Thread/INFO”这样的内容,这表示你的服务器启动了。

如果在玩家游玩过程中发送中文消息服务器控制台显示是乱码,可以尝试在第二行上面插入chcp 65001。

脚本中的pause命令会保持窗口开启,这样是为了让你能在服务器停止时更方便地知道到底发生了什么。

macOS、Linux和FreeBSD[编辑 | 编辑源代码]

这些系统在命令行中都使用一种被称为“POSIX shell script”的脚本语言。在放服务器jar文件的文件夹中创建一个文本文件,命名为start.sh,然后写入以下内容:

#!/bin/sh

cd "$(dirname "$0")"

exec java -Xms1G -Xmx1G -jar server.jar --nogui

然后保存文件。执行chmod a+x start.sh(或者你放置此脚本的路径)使其可执行。你可以通过双击此文件或者在文件夹中输入./start.sh(如果在文件夹外,请输入完整路径)命令启动服务器。

如果你想像Windows中一样能在服务器关闭后保留窗口,请删除脚本中的exec一词,并在末尾加上read -n 1 -p "Waiting..."一行。此更改对从图形界面双击打开的服务器有效果。

启动和维护脚本[编辑 | 编辑源代码]

另外,你也可以尝试使用下面列出的脚本实现对Minecraft服务器的管理和启动、关闭自动化:

Minecraft Server Control Script (MSCS)适用于UNIX和Linux平台的Minecraft服务器。有以下功能:

运行多个Minecraft实例。

启动、停止和重启单个或多个实例。

创建、删除、禁用和启用实例。

第三方服务器支持:Forge、BungeeCord、SpigotMC等。

自动备份、删除(X天前)和重启实例。

详情参见:MSCS的Github。

Minecraft Server Manager是一个适用于原版服务端和Bukkit的全面的启动脚本(支持Debian系统,例如Ubuntu)。

MSM可以定期创建可兼容World Edit的备份。

可配置用于提醒玩家的消息,例如“将在10秒内关闭服务器!”。

可以在终端内执行游戏内命令(例如“say”、“op”和“whitelist”)。

支持Tab键补全命令,使学习更简单。

查看完整功能:MSM的GitHub。

服务器架设脚本

FreeBSD启动脚本

OpenBSD启动脚本

Ubuntu启动脚本

rfwadmin是一个适用于Linux的具有Web界面的启动脚本。有很好的用于快速保存和加载存档的Web界面。

Minecraft Systemd Service是一个完全集成systemd的Minecraft服务:

适用于CentOS和Fedora。

使用大量的只读和不可访问的权限来保护服务器。

使用rcon执行安全的重启和停机操作。

为了更方便的管理,可以与Minecraft Command Center Script一起组合使用。

Arch Linux服务器管理脚本

配置Minecraft服务器[编辑 | 编辑源代码]

编辑server.properties文件(格式可参见服务端配置文件格式 § server.properties)。请使用纯文本编辑器修改此文件(例如记事本)。可能不需要做额外配置,默认生成的内容也可以启动服务器。

如果你要成为管理员(op)或添加管理员,请在服务器控制台或GUI上输入/op <玩家或玩家实体目标选择器>命令。此命令会把你指定的用户的UUID添加到ops.json文件中。管理员权限不会随着用户名的更改而消失,因为存储的是你的UUID而不是用户名。

管理员可以执行命令。换句话说,管理员有权限控制游戏的某些方面(例如传送玩家)。

ops.json的内容:[

{

"uuid": "",

"name": "",

"level": 4,

"bypassesPlayerLimit": false

}

]

如果在你的server.properties中设置了开启白名单,你可以在服务器控制台或GUI上使用/whitelist add <玩家或玩家实体目标选择器>命令把玩家添加进whitelist.json文件中(由于过渡到UUID系统的原因,不建议直接修改此文件的内容)。

发布Minecraft服务器[编辑 | 编辑源代码]

在成功配置并启动Minecraft服务器后,需要将其发布,使其他玩家可以通过互联网或本地网络查看并加入服务器。

发布Minecraft服务器有多种方法:

局域网[编辑 | 编辑源代码]

本章节介绍的是专用服务器上的局域网连接。关于向局域网开放单人游戏世界,请见“Tutorial:本地局域网联机”。

参见:局域网

局域网是用于在有限区域内(如家庭、校园或办公楼)连接设备并进行通信的计算机网络。当你的设备通过以太网或无线方式连接到路由器时,它便参与了路由器的局域网,这包括所有其他连接到同一路由器的设备。因此,通过局域网,你可以连接并与网络上的其他设备或托管的应用程序进行通信,例如Minecraft服务器。

网络中的每个设备都会获得一个唯一标识符,称为内部IP地址(或本地IP)。设备上的应用程序通过端口监听并与局域网中的其他设备通信。

在设备上启动Minecraft服务器时,Minecraft服务器会向服务器主机请求一个特定的端口号,以便与网络中的其他设备进行通信。服务器主机会分配并监听请求的端口,将来自该端口的所有连接指向Minecraft服务器进行处理。Minecraft服务器的默认端口是25565,但可以在server.properties文件中修改。

当你通过局域网托管Minecraft服务器时,玩家可以通过输入服务器主机的内部IP地址和端口号来本地连接。例如,如果服务器主机的内部IP地址是192.168.1.2,端口号是25565,玩家应使用地址192.168.1.2:25565连接到服务器。

请注意,玩家需要连接到Minecraft服务器所在的局域网才能连接到你的服务器。

端口转发[编辑 | 编辑源代码]

如果你有一台路由器,并且想让用户通过路由器连接进来时,就需要使用端口转发。如果你只是想架设一台内部服务器,那么你就不需要做这样的事。请注意:端口转发可能会导致安全风险。

不同路由器设置端口转发的方式不同。如果你不知道如何在你的路由器设置端口转发,可以尝试在网络上找适用于你路由器型号的教程。

此示例适用于TP-Link家庭路由器的新版界面。

进入你路由器的管理界面,找到端口转发页,然后点击新建服务或自定义服务。选择一个“协议类型”,“TCP”表示只转发TCP协议,“UDP”只转发UDP协议,而“ALL”则两者都转发。内部端口和外部端口都填写25565(如果你服务器不是标准端口,可以按需填写)。IP地址则填写你Minecraft服务器的内部IP地址,其余保持不变即可。

要获取你电脑的IP地址,请按以下步骤操作:

Windows

按⊞ Win + R打开“运行”,输入cmd然后↵ Enter,打开命令提示符。在命令提示符中输入ipconfig然后↵ Enter。找到对应你使用的网络适配器上的IPv4地址(有线连接的一般是“以太网”,无线连接的一般是“WLAN”)。一个IP地址的形式应该是xxx.xxx.xxx.xxx,然后把这样的内容记录下来。注意不要包含任何除了数字或点的部分。

OS X上IP地址的显示位置

Mac

打开在logo下的菜单,找到“系统首选项”,然后选择“网络”。你的IP地址应该会显示在右侧(应该是xxx.xxx.xxx.xxx形式)。将它复制下来即可。

Linux

你可以使用网络诊断中心(有一些发行版有)。或者在终端中执行ip a,此命令会输出你所有网络接口的IP地址,找到例如inet xxx.xxx.xxx.xxx的内容,将xxx.xxx.xxx.xxx的部分复制下来即可。

如果你获得了你的IP地址,请把它输入到前面转发设置中的“IP地址”中。

填写好这些需要的信息后,请点击“保存”(或者其他类似意思的按钮)。这样你就成功的设置了端口转发。当你启动Minecraft服务器时,需要把server.properties中的IP地址一项留空。

其他人需要通过你的外部IP地址来连接到你的服务器。你可以通过例如IP Chicken的网站获取外部IP地址。如果你不想用IP地址连接,可以使用动态DNS服务,例如NoIP DynDNS。

接下来可以配置并连接了。

设置VPN[编辑 | 编辑源代码]

该段落的内容不代表Mojang Studios或Minecraft Wiki的官方意见。

注意

使用虚拟专用网络可能对连接至Mojang服务器、Minecraft服务器,或者你的互联网本身造成影响。

在你和你的朋友之间设置服务器的另一种方法是设置虚拟专用网络。由于希望连接到服务器的所有用户必须下载外部软件以加入或创建服务器,因此该方法可能会被认为是不推荐而且不方便的。另外一种可行的办法是端口转发。可用于建立虚拟专用网络的免费简单程序是Hamachi(不支持M系Mac处理器)和Radmin虚拟专用网络。这是另外一种免费开源且支持大多数操作系统的方案,但是配置较困难。Hamachi免费版只允许5个玩家连接。

设置Hamachi[编辑 | 编辑源代码]

在希望加入服务器的每台计算机上安装Hamachi,包括主机。下载地址: Windows / Mac Linux (32位与64位.deb和.rpm包均可找到。欲在Gentoo上安装,使用net-misc/logmein-hamachi)

在主机上创建新的Hamachi网络。

主机安装并配置Minecraft服务器软件(server.jar):server.properties中的服务器IP字段保留为空(默认情况下)。

主机将新创建的Hamachi网络凭证传递给每个玩家。

玩家连接到主机的Hamachi网络。

当所有机器都连接在同一个Hamachi网络中,主机将其机器的Hamachi IPv4地址提供给玩家。

每个玩家使用主机的IPv4地址输入到“直接连接”框里。

请注意,Hamachi占用了已经被IANA分配的IP块(25.0.0.0/8)。所以,Hamachi有可能会和互联网冲突。

设置Radmin VPN(仅支持Windows)[编辑 | 编辑源代码]

其配置方法和Hamachi的很相像。

在这里下载Radmin VPN。

创建网络:在本地计算机上安装Radmin VPN后,按“创建网络”按钮。 设置网络名称和密码,然后按“创建”按钮。

现在新网络将出现在主窗口。给朋友发送连接信息,然后运行Minecraft。

连接:Radmin程序启动后按“加入网络” - >在对话框中按输入网络名称和从主机网络的密码 - >“加入” - >新网络及其节点将显示在主窗口中。 - > 在Minecraft中连接到主机。(如同配置Hamachi的第七步)

如果Radmin VPN上的连接已经建立,但你没有看到游戏中的其他玩家,则需要调整防火墙,或者直接关闭防火墙。

连接到Minecraft服务器[编辑 | 编辑源代码]

如果你是在作为服务端的电脑上玩Minecraft,先选择“多人游戏”,输入“localhost”或者是“127.0.0.1”,而不是你的IP地址。

这是不推荐的。除非你有一个性能良好,内存比较大的电脑。(服务器4GB,客户端2GB,其余的给系统)

在你的局域网内的玩家可以通过内网IP来连接到你的服务器(因为玩家在局域网内,所以你不需要端口转发)。

从互联网连接的玩家(也就是不在你的局域网中的玩家)必须使用你的外部IP来连接。你必须为这些从外部连接的玩家使用端口转发。

(部分支持IPv6的客户端和服务端,客户端可以直接通过IPv6地址访问服务端。)

特定网络适配器上的IP地址可以通过在命令提示符中输入“ipconfig”或者通过此网站来查看。如果在server.properties文件中指定了非25565的端口,则需要在地址栏中加上端口号。地址(IP和端口)看起来应该像192.168.0.168:25565这样。

关于IP地址的一些注意事项[编辑 | 编辑源代码]

除非你为正在做服务器的电脑设定一个静态IP,否则的话,内部IP地址是有可能改变的。这会影响到端口转发规则并使得它们失效。不同的路由器有不同的设置静态IP的方法。你可以从你的设备的说明书或者在线文档中获得更多的帮助。

如果你有连接到你外部IP的玩家,你应该明白如果你没有从你的Internet服务商处获得一个静态IP,那么你的外部IP是会变化的。你可以使用类似MyWANIP的工具来定时的检查你的外部IP。此外,你可以尝试使用DDNS服务,这会允许你使用一个固定的域名,而不是动态的IP地址。不管你的外部IP地址是否改变,这个域名会指向你当前的外部IP地址(即,当你的外部IP改变时,DNS会自动更新)。

在解决服务器故障时,你可以尝试在运行服务器的机器上使用客户端来调试,使用本地IP地址(localhost)、内网IP地址(例如192.168.x.x)或者公网IP都是可以的。

如果你在公网上连接你服务器的公网IPv4地址时有问题,可以尝试使用IPv6地址来连接。你仅应在测试服务器是否在线时执行此操作。对于其他玩家而言,还是最好使用你的IPv4地址来连接。

服务端网络设置[编辑 | 编辑源代码]

服务器需要开启防火墙相应端口(默认为25565)才能使服务端正常工作。

确认网络设置正确并使用在线工具如You Get Signal确定服务端在国际互联网的IP。测试端口应与服务端设置的端口一致(默认为25565),测试时请启动服务端。

服务器有可能会遭到恶意攻击,在服务器投入使用以前,请务必做好物理保护及数据备份工作,否则有可能会带来经济及精神上的损失。

针对接入NAT的家庭网络的服务器[编辑 | 编辑源代码]

如果家庭路由器的服务器接入NAT网络,那么他在启动后外网的玩家是无法连接的。

购买路由器,进入路由器配置页面(一般是192.168.1.1:80或192.168.0.1:80)查看WAN IP记录下来,使用搜索引擎搜索IP,将该IP与之前的WAN IP对比,若相同则为一般有IP,若不同则为接入NAT的家庭网络。

这种情况,你可以使用内网穿透类应用,如花生壳,或协商运营商请求许可获取公网IP的资格。

针对使用家庭路由器的服务器[编辑 | 编辑源代码]

如果服务器位于一个家庭路由器的局域网内,则需要在路由器设置相应的端口映射法则。

关于端口映射的具体设置,可以访问portforward.com。从网站给出的列表中选择你使用的路由器型号,网站将给出设置端口映射的相应步骤(有广告,可跳过)。调制解调器、路由器等网络器材附带的说明文件也可能包括了设置端口映射的相关信息。

部分路由器提供了DMZ选项,与端口映射有同样效果,但遭到攻击的可能性相比使用端口映射更大(DMZ主机暴露在外网,不受路由器安全设置保护)。新手使用请咨询熟悉的业内人士。

一般来说可以首先尝试使用UPnP进行端口映射,大部分路由器都支持并默认开启该功能。可以使用诸如miniupnpc软件包的upnpc命令一类的程序进行映射。

针对使用动态IP的服务器[编辑 | 编辑源代码]

由于大部分家庭用户(部分服务器代理的服务器也没有固定IP)使用ADSL或PPPoE等方式接入互联网,此种情况下的服务器无论通过路由器与否,IP地址是不定的。解决此问题可以使用动态DNS服务,届时玩家只需要知道服务器使用的域名即可连接到服务器。

请联系网络供应商(家庭用户)或服务器代理商确定正在使用的网络接入方式。

使用动态DNS需要进行以下准备工作:

获得一个域名,可以从dot.tk或Oray等网站获得免费域名,也可以支付一定费用注册;

选择一个动态DNS服务商,注册账号并按服务商提供的操作方法设置服务器及域名,维基百科有部分动态DNS的服务商列表

使用动态DNS需要一定网络理论及实践的基础,新手在做出决定前,请先咨询熟悉的业内人士。

设置动态DNS请按照服务商的指示对服务器、路由器(仅限使用路由器的用户)进行设置。

路由器设置需要进入管理页面进行操作,新手请参照说明文档或在业内人士的指导下进行。

局域网中的专用服务器[编辑 | 编辑源代码]

这一段的内容只适用于Classic(v0.30)服务器。

管理员不能在内网中通过一台另一台机器进入那台架设了服务器的机器,这是一个普遍性的问题。典型的情景是:你有一台专用服务器,而且有另一台供你玩游戏的机器。而它们同时连接到同一个路由器或交换机下,且内部IP为“192.168.x.x”。通常,通过服务器生成的URL连接时,会返回“服务器离线”的错误信息。

要解决这个问题,你需要在你的URL、书签以及其他你用来连接的东西后面加上?override=true

例如:http://www.minecraft.net/classic/play/4c3bebb1a01816acbe31c5ece1570da5?override=true

以前(1.8 beta和网站更新前)上面要加的东西是&override=true。这一点并没有被Mojang在网站Applet页面上说明,导致出现了很多误用。在此更新前,通过网站连接到你自己的URL会导致出现在Applet窗口底部出现“If you can't connect, try this link instead.”的红色文字,返回的是同样以“&override=true”结尾的连接。

注:Beta服务器没有这样的情况,你应该能通过内部或外部IP连接上服务器。

SRV记录[编辑 | 编辑源代码]

从Java版1.3开始支持玩家可以在不输入端口号的情况下连接到一个使用非标准端口号的服务器。相关的信息是作为一种服务被记录在DNS上的SRV记录中的。SRV记录告知客户端实际上应该连接的主机名和端口。一些动态DNS(DDNS)服务和大多数的静态DNS服务都会允许你设置这样的记录。[5]

假设现为example.com这个根域设置SRV解析记录,游戏服务器运行端口为65312,子域server.example.com已经解析到游戏服务器,玩家通过mc.example.com加入游戏。

那么当设置SRV记录时,应当参照下列规则:

SRV记录的名称应当设置为_minecraft._tcp.mc.example.com,其中mc.example.com是玩家加入游戏时需要输入的域名。该域名可以为根域。

某些DNS服务提供商可能自动补全名称后的.example.com,此时仅需输入_minecraft._tcp.mc即可。

按需设定记录的优先级和权重。一般情况下将优先级设定为5,权重设定为0。

将端口号设定为服务器运行的端口号。在本例中为65312。

将目标设定为解析到游戏服务器的域名,在本例中为server.example.com。

某些DNS服务提供商可能要求直接填写记录值而非独立的四个字段。此时需将上述四项按顺序填入记录值中,中间以空格分割。在本例中,记录值为5 0 65312 server.example.com。

为了使记录尽快生效,可以将TTL值设置的尽可能小。

若要手动检查SRV记录,可以运行nslookup(Windows)或dig(Linux)命令。在本例中,得到的回复类似下面的内容:

> nslookup -q=srv _minecraft._tcp.mc.example.com

Server: UnKnown

Address: [REDACTED]

Non-authoritative answer:

_minecraft._tcp.mc.example.com SRV service location:

priority = 5

weight = 0

port = 65312

svr hostname = server.example.com

常见问题[编辑 | 编辑源代码]

问:如果我有一个没在这里提到的问题,我应该怎么办?

答:你可以在Minecraft Forums上发帖说明你的问题。为了能帮到你,请提供以下信息:

使用的操作系统

Java版本

一台还是多台电脑

问题的具体描述

你为解决问题已尝试的步骤

你遇到的任何错误

(如果可以的话)问题的截图

其他可能有助于帮你解决问题的内容(一般也不会有多少。注意不要提供密码)

如果我们解决了你的问题,请说明具体解决问题的地方和方法。这可以对其他人有所帮助(也能帮我们解决常见问题)!

问:在Windows上双击批处理文件启动服务器,命令提示符窗口闪退且服务器没有启动。

答:请在你的批处理文件最后加上pause再运行。如果显示的是无效路径,这可能是你Java可执行文件或者服务端jar文件的路径不正确导致的。把批处理文件路径里的/jre7/换成/jre6/,确定运行环境在/Program Files/里还是在/Program Files (x86)/里,或者根据自己电脑的情况对路径进行相应调整。多说一句,运行服务端需要JRE运行环境,而不是浏览器里的Java插件。

也可能是你没有修改你的eula.txt文件。在双击你的minecraft_sever.jar文件后,你会看到文件夹内有个eula.txt文件。用记事本打开这个文件

(https://account.mojang.com/documents/minecraft_eula).

Datum Uhrzeit

eula=false

将最后一行修改为

eula=true

然后保存并退出。重新双击服务器启动的批处理文件应该就可以正常启动了。

问:当我尝试启动服务器时,服务器显示"Failed to bind to port!"。

答:可能是路由器端口映射设置有误,确认路由器为Minecraft开放的端口(默认为25565)正确地映射到你的服务器上。如果你的服务器是直接接入网络的且网络服务商不开放你所设置的端口,将server.properties文件中的server-port=25565中的“25565”改为其他可用端口号。

或者是你在server.properties文件中的IP地址一项中设置了IP地址。如果这个IP地址不与你系统上任何接口上的地址一致,服务端会显示这样的信息。如果把此项留空,你就可以在所有接口上绑定。这样,你和内网内的人就可以通过localhost或内网IP地址连接到服务器了。

此外,问题也可能是由于你尝试使用一个已被占用或无权限绑定的端口(小于1024的端口需要root或管理员特权才能使用)导致的。要解决这个问题,你可以尝试修改server.properties文件中的server-port=25565一行。

注:你应该避免使用下列端口,这些端口在有些ISP那里是被封禁的。并且,为了安全考虑,最好不要用root用户运行服务器(适用于Linux系统且端口小于1024的情况):

21(由大多数FTP服务器使用)

22(由SSH服务器使用)

25(由邮件服务器使用,用于SMTP协议)

53(由DNS服务器使用)

80(由大多数Web服务器使用)

110(由邮件服务器使用,用于POP3协议)

115(由简单文件传输协议使用)

143(由邮件服务器使用,用于IMAP协议)

443(由Web服务器使用的SSL端口)

3306(由大多数MySQL服务器使用)

一般要避免使用端口号低于1024的端口,因为这些端口是“公认端口”,用于在IANA处注册的重要服务;另外因为安全原因,一些网络服务商还会屏蔽3306(MySQL服务器默认使用)端口等。除此之外,49152-65535段端口属于“动态端口”范围,没有被注册占用。

此类问题亦有可能是操作者疏忽导致服务端未关闭就再次开启了服务端,典型的错误操作有:Windows中直接双击了核心jar,Linux中使用守护进程运行Java等,导致服务端在后台运行而操作者未注意的情况。遇到此类问题可先检查占用该端口的进程,获取控制或将其结束,再启动服务端。

问:我尝试在Solaris/OpenSolaris上运行服务器,但是出现了以下错误:

java.io.InterruptedIOException: Operation interrupted

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(SocketInputStream.java:129)

at java.net.SocketInputStream.read(SocketInputStream.java:182)

at java.io.FilterInputStream.read(FilterInputStream.java:66)

at gq.a(SourceFile:131)

at ji.g(SourceFile:197)

at ji.c(SourceFile:17)

at oq.run(SourceFile:84)

2011-05-31 16:57:26 [INFO] /:44673 lost connection

答:只有Solaris系统在线程中断连接时会发生这种异常,这种异常可以通过改变启动命令来避免:

java -Xmx1G -Xms32M -XX:-UseVMInterruptibleIO -XX:+UseConcMarkSweepGC \

-XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts\

-jar minecraft.jar nogui

这样的命令让Java使用一种可中断的IO栈来防止异常发生。

问:当我尝试连接到我的服务器上,服务器显示:

Connection lost

The server responded with an invalid server key

答:此错误通常在服务端发送了一个客户端不能识别的功能时出现,这可能是由于使用了不能识别的服务器软件、不平衡的客户端/服务器版本或修改过的客户端导致的。

问:为什么我不能破坏或放置方块!?

答:联系服主关闭保护出生点的功能,或离出生点远一些,除非你是服务器的op,或者该服务器中没有op,否则在该功能开启时你不能在出生点附近放置或破坏方块。

问:我的服务器运行正常,但是我不能连接上去!

答:这可能是由一连串问题导致的。请按照上方提供的模板发帖询问。

问:如何给服务器更多内存?

答:修改启动命令行中的“-Xmx1G -Xms1G”部分中的数字。“-Xms”部分指定的是服务器启动时使用的内存量,而“-Xmx”部分指定的是服务器最大可以使用的内存量。

-Xmx1G -Xms2G = 1GB

-Xmx2G -Xms1G = 2GB

等等。

问:为什么服务器CPU经常满载?

答:这可能是由于GUI(图形界面)窗口导致的。在启动命令行加入nogui可以禁用这个窗口。

问:我要怎么获取服务器的IP地址?

答:请参阅连接到Minecraft服务器一节。

问:我设置了端口转发,并且允许java.exe通过防火墙,但仍然不起作用!

答:你的调制解调器有可能运行在路由模式下。你可能会从ISP处拿到调制解调器和路由器二合一的设备。

要验证这一点,请查看你路由器上显示的WAN IP,如果这个IP是一个私有IP,那么你需要登录到ISP提供给你的调制解调器的管理界面,然后把端口转发中的IP地址设置为你路由器的WAN IP。

问:我关闭了路由器/调制解调器上的防火墙,为什么它还是不能正常工作?但是,端口转发网站报告说它们能“看到”我??这是什么情况?

答:关闭路由器/调制解调器上的防火墙实际上会禁用端口转发。端口转发本身是防火墙规则的一部分。如果在某个端口(例如25565)上没有设置规则,防火墙就会忽略或丢弃连接尝试(因此,你会遇到连接超时的问题)。如果有规则存在,它会将连接转发到配置为接收初始连接尝试的服务器上。

当你禁用路由器/调制解调器防火墙,并在端口转发检测网站上检测你的公共(非RFC 1918)IP地址时,网站会访问你的路由器/调制解调器,你的路由器/调制解调器会响应,所以端口转发网站表示它能“看到”你。这也是不建议禁用防火墙的原因之一:你可能误以为外部的玩家可以直接连接到你服务器上的Minecraft服务器,实际上他们只是尝试连接到路由器/调制解调器本身。

要解决这个问题,你应该确认你的端口转发规则是否正确。你可以使用Minecraft服务器状态检查器来检查网络是否正确配置,例如:Minecraft Server Status。以便外部的Minecraft客户端能够通过你的路由器/调制解调器连接到你的服务器。

注:你可能需要注意Minecraft Query - 它可能使用第4层,即传输层的UDP协议来查询你的服务器。许多教程仅建议你进行TCP端口转发(本教程建议你同时转发这两项)。

问:什么是连接超时和连接被拒绝?

答:简单来说,连接超时是指防火墙忽略了连接尝试(即忽略了带有SYN标志的初始连接包)。连接被拒绝则是指端口上没有进程在监听,因此操作系统会通知客户端(在标准的客户端-服务器模型中)连接尝试失败。

所有Windows计算机(家庭版)和几乎所有的SOHO路由器的默认配置是丢弃或超时连接。

这被称为“隐形模式”,请参考superuser。 简单来说,这样设置可以避免攻击者发现目标计算机的存在。通过连接尝试超时,攻击者可能忽略该计算机。

你可以通过这篇serverfault的文章在来了解更多关于连接被拒绝的信息。

因此,如果你遇到连接超时错误,通常是防火墙的问题。你可能需要在Windows防火墙中允许Java,或进行端口转发。如果错误信息是连接被拒绝,可能是你的Minecraft服务器没有正确启动,或者你关闭了路由器上的防火墙而不是进行端口转发。

如果你还有疑问,或者你不会使用命令提示符/终端,你可以在Minecraft论坛上寻求帮助。

“连接过滤”和“连接关闭”分别表示连接超时和连接被拒绝。

视频和替代教程[编辑 | 编辑源代码]

这里给出了一些其他的Minecraft服务器架设教程:

Windows

How to make a Minecraft Server in under 10 Minutes! (Port Forward Guide Too!)

How to Make a Minecraft Server in 2020 (1.15.2) | 5:43 Pt. 2 - Easy: Port Forward | 3:11

How to create a Minecraft Server in 2020 tutorial

Mac OS X

How to SET UP MINECRAFT SERVER on Mac OS

Port Forward (easy method)

Alternative video tutorial on setting up a Minecraft server with Mac

Linux

Linux tutorial for more advanced users

How to Install Minecraft Server on CentOS

How to make a Minecraft Server on Ubuntu for beginners

其他

How to Set Up Port Forwarding

How to Port Forward any Minecraft Server (1.6.2)

Alternative port forwarding tutorial for Windows (with pictures)

一体化教程

Course: How to Make a Server

参考[编辑 | 编辑源代码]

↑ https://www.digitalocean.com/community/tutorials/how-to-install-java-on-freebsd-10-1

↑ https://www.freshports.org/java/openjdk21/

↑ https://www.freshports.org/java/openjdk8-jre/

↑ https://www.freshports.org/faq.php#port

↑ https://www.noip.com/support/knowledgebase/how-to-add-a-srv-record-to-your-minecraft-server-remove-the-port-on-the-end-of-the-url/

导航[编辑 | 编辑源代码]

编教程

新手教程

下载、安装与购买

成功地启动游戏

菜单屏幕

游戏术语

计量单位

不该做的事

新手生存

新手指南

第一天

第二天

第三天

提示与技巧

饥饿管理

生存注意事项

庇护所

庇护所

沙漠

微型

最佳居住生物群系

最佳建筑材料

建筑与结构

房屋类型

导航

综合

无聊的时候做什么

跑酷

空置域

伪和平

节省时间的小窍门

在水下利用TNT破坏方块

成就指南[仅BE]

进度指南[仅JE]

最佳附魔指南

拓殖

战斗

完成冒险

双持

探索洞穴

利用碰撞箱

使用地图

测量距离和角度

采矿技术

钻石

化石

远古残骸

下界快速旅行

下界传送门

支柱跳跃

幻翼防护

生成骑士

穿越和破坏基岩

防卫僵尸围城[仅JE]

考古

不可破坏的末地水晶

使用更少的末地水晶重生末影龙

透视镜

挂机池

整理物品

潜影盒储存

物品运输

生物运输

自动化烧炼

选择燃料

爆炸室

凋灵笼

光速船[仅BE]

无材料消耗转换药水类型[仅BE]

在超平坦世界中管理史莱姆

Minecraft和教育

视频

游戏直播

村民和交易

村庄生存

创建村庄

村庄机制

治愈僵尸村民

村民养殖

村民交易所

流浪商人陷阱

建筑

给工程添加美感

空气闸

建筑术语

建造游轮

建造大都市

建造过山车

建造安全的家园

建造水建筑

建造几何体

防御

家具

电梯

带釉陶瓦的图案

建造地板

像素艺术

牧场

屋顶类型

弧形屋顶

屋顶建造指南

暗门

建造居住地

水下建筑

墙壁和桥墩

水闸

调色板

建造蹦床

挑战

获得潮涌核心

冒险模式生存

挑战自定义地图

制作自定义地图

征服神殿和神庙

触发及战胜袭击

征服掠夺者前哨站

征服堡垒遗迹

征服林地府邸

征服海底神殿

征服试炼密室

征服下界要塞

征服末地城

探索深暗之域和远古城市

打败末影龙

打败凋灵

极限模式

超极限模式

在一个地区中长期生存下去

沙漠生存

在无限沙漠中生存

下界生存

从零开始下界生存

末地生存

雷暴生存

超平坦世界生存[仅JE]

岛屿生存

空岛生存

在和平难度中收集资源

速通

游荡生存

无限石头生存

愚人节版本生存[仅JE]

22w13oneBlockAtATime

24w14potato

农场

方块和物品

紫水晶

骨粉

仙人掌

农作物(小麦、胡萝卜、马铃薯、甜菜根、火把花和瓶子草)

西瓜、南瓜

紫颂果

圆石、石头或玄武岩

可可豆

泥土

滴水石锥

鸡蛋

花朵

蛙明灯

蜂蜜

海带

蘑菇

音乐唱片

下界疣

黑曜石

袭击农场

1.21前

海泡菜

甘蔗

甜浆果

原木、树苗和苹果

海龟鳞甲

藤蔓

羊毛

药水

经验

基岩

方块和物品复制

铁轨复制机[仅JE]

TNT复制[仅JE]

零刻作物催熟技术[仅BE]

生物

刷怪塔

怪物磨床

刷怪笼陷阱

动物(猪、牛、绵羊)

烈焰人

洞穴蜘蛛

苦力怕

闪电苦力怕

溺尸

末影人

山羊

守卫者

铁傀儡

岩浆怪

以物易物

潜影贝

史莱姆

鱿鱼

海龟

村民

女巫

流浪商人

凋灵骷髅

僵尸猪灵

悦灵

红石

基础红石

基本逻辑门

高频电路

计时器

抽奖箱

漏斗

通用物品分类器

机械

侦测器稳定器

密码锁

随机发生器

红石机械

红石音乐

红石技巧

鲁布·戈德堡机械

探测器

方块更新感应器

比较器更新感应器

昼夜探测器

矿车

矿车

火车站

储存

数字化存储系统

陷阱

陷阱

陷阱设计

雪傀儡防御炮

TNT大炮

活板门利用

活塞

活塞使用

活塞电路

无延迟科技

飞行器

半连接性[仅JE]

零刻活塞[仅JE]

无头活塞[仅JE]

高级红石

光照操纵

高级红石电路

算术逻辑

计算器

时钟

摩尔斯码

打印机

红石计算机

红石电报机

多人游戏

玩法

游玩服务器

PvP

Java版1.9前、基岩版

基地

隐藏箱子

起床战争

空岛战争

猎人游戏

服务器管理

防止恶意破坏

服务器监狱

服务器商店

雪球菜单

架设服务器

架设Java版服务器

架设基岩版服务器

服务器架设脚本[仅JE]

服务器启动脚本

FreeBSD启动脚本

OpenBSD启动脚本

Ubuntu启动脚本

WebSocket服务器[仅BE]

架设Mod服务器[仅JE]

架设Hamachi服务器

架设Spigot服务器

虚拟硬盘服务器

使用ngrok搭建服务器

架设ZeroTier服务器

本地局域网联机

服务器维护

使用LeviLamina架设服务器[仅BE]

技术性

Minecraft帮助FAQ

自定义皮肤

地图

自定义地图

下载地图

使用MCEdit刷新旧区块[仅JE]

强制打开存档[仅JE]

降级存档

资源包

制作资源包

纹理

音效和音乐

语言和文本

模型

加载资源包

数据包[仅JE]

制作数据包

实例:射线投射

视线魔法

自定义物品

安装数据包

自定义世界生成

自定义结构生成

自定义盔甲纹饰

附加包[仅BE]

基岩版开发指南

制作资源附加包

高级

基岩版实体文档

修改实体模型

制作行为包

自定义实体

自定义方块

自定义物品

自定义附加包语言文件

自定义音效

命令格式

仅Java版

生成下落的方块

文本组件

NBT命令标签

物品堆叠组件

记分板

SNBT

NBT路径

命令方块

结构方块

用命令操控实体

NBT与JSON

自定义命令触发

目标选择器

游戏安装

仅Java版

提高帧率

更新Java

修复Apache Log4j2漏洞

编写启动器

快照版本安装

获取崩溃报告

查看游戏日志

仅基岩版

Minecraft URL Scheme

汇报漏洞

在U盘中使用旧版启动器运行游戏

恢复损坏的地图数据

修复因数据包损坏的世界

在Google Drive上运行游戏

将游戏数据保存到Dropbox云端

仅限地图数据

在ChromeOS上运行Java版

过时教程

到达边境之地

获取崩溃报告(旧版)

无数据包生存

升级LWJGL

更新Minecraft

命令统计值

村民养殖(村庄与掠夺前)

村庄链

水道

水车

仅英文

自定义纹理包

基于门的铁傀儡陷阱

人工湖

矿车加速器

中继器重启系统

水梯

无延迟电路

教程

新手手册

高难度通关配装总结

成就指南

高塔指南

常见问题

教程

新手手册

基地建设指南

资源收集指南

单位阵容组合

注:作下划线标记的教程为中文原创教程。