Si eres padre o simplemente te gustan los videojuegos en red sin duda conocerás Minecraft. Mi hijo de 8 años y muchos compañeros de su colegio son jugadores habituales. Si tienes hijos pequeños te gustará controlar a que servidores y con quien juegan en red. No hay mejor manera que crear uno mismo el servidor y enterarse de todo lo que pasa dentro. Para crear un servidor Minecraft necesitamos contratar un VPS con IP pública y descargar el software gratuito del servidor Minecraft.
Este tutorial está hecho para Oracle Cloud Infrastructure. Si prefieres Azure o algún otro gigante de servicios Cloud el proceso será muy parecido ya que también cuentan con una Virtual Cloud Network sobre donde corren los VPS. Otro tipo de proveedores mas sencillos nos alquilan una máquina virtual a la que te conectas por SSH o un panel web. En estos solo hay que hacer los ajustes de firewall del lado VPS, ya que no existe o no tenemos control alguno de la VCN.
El servidor de Minecraft requiere tener abierto el puerto 25565 para protocolo tcp y udp. Cómo esto es una instancia de servidor Ubuntu que corre en Oracle Cloud Infrastucture debemos abrir puertos desde la web para la propia infraesctructura y también desde el propio VPS Ubuntu.
Abrir puertos en OCI ya lo hemos visto en otras ocasiones en esta serie de artículos. Debemos ir al portal de Oracle Cloud y dentro de
nuestra insfraestructura en el menú Networking->Virtual Cloud Networks->miVCN->Security List Details en la sección Resources
picamos la opción de Ingress Rules para crear nuevas reglas de entrada. Se han de crear 2 reglas de entrada para el puerto 25565 en
tcp y udp para todas las fuentes de origen 0.0.0.0/0
Si no queda claro repasa el artículo Configuración de OCI, parte 2, dedicado al Firewall en OCI que encontrarás en esta web.
También necesitamos crear las reglas de entrada desde el propio firewall del VPS. En mi caso es un VPS con Ubuntu 20.04 y
trae predeterminado el firewall iptables. Aunque el firewall ufw viene instalado está sin activar. Sin duda ufw es más
sencillo de configurar pero para practicar un poco iptables lo haremos un "poco más difícil".
Si también decides usar iptables introduce estas líneas:
# Cambio a usuario root
sudo su
# Regla avanzada de seguridad. Limitar ataques sencillos DoS para que desde una misma IP no se hagan
mas de 10 conexiones. Esto no vale para ataques DDoS que usan miles de IP
iptables -I 1 INPUT -p tcp --syn --dport 25565 -m connlimit --connlimit-above 10 -j DROP
# Abrir puerto tcp
iptables -I 2 INPUT -p tcp --dport 25565 -j ACCEPT
# Abrir puerto udp
iptables -I 3 INPUT -p udp --dport 25565 -j ACCEPT
# Hacer los cambios persistentes
/sbin/iptables-save > /etc/iptables/rules.v4
El software original para crear el servidor lo encontramos en: https://www.minecraft.net/es-es/download/server
Desde esta web copiamos la ruta al archivo de la última versión.
Desde la terminal nos situamos en el directorio donde queremos descargarlo. En este ejemplo guiado escogeré el directorio
/opt
que recuerdo que es el indicado para alojar programas de terceras partes que no se instalan de la
manera estándar. Dentro crearemos un directorio llamado servidorminecraft.
root@ubuntusrv1:/home/ubuntu# cd /opt
root@ubuntusrv1:/opt# mkdir minecraftserver
root@ubuntusrv1:/opt# cd minecraftserver
root@ubuntusrv1:/opt/minecraftserver#
La descarga la hacemos con el comando wget
pegando la ruta a continuación.
root@ubuntusrv1:/opt/minecraftserver# wget https://launcher.mojang.com/v1/objects/e00c4052dac1d59a1188b2aa9d5a87113aaf1122/server.jar
--2022-07-19 15:24:52-- https://launcher.mojang.com/v1/objects/e00c4052dac1d59a1188b2aa9d5a87113aaf1122/server.jar
Resolving launcher.mojang.com (launcher.mojang.com)... 152.199.21.175, 2606:2800:233:1cb7:261b:1f9c:2074:3c
Connecting to launcher.mojang.com (launcher.mojang.com)|152.199.21.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45538778 (43M) [application/zip]
Saving to: ‘server.jar’
server.jar 100%[==================================================================>] 43.43M 80.5MB/s in 0.5s
2022-07-19 15:24:52 (80.5 MB/s) - ‘server.jar’ saved [45538778/45538778]
El comando wget
es muy transparente informando de todo el proceso de la descarga: resolución de nombres de dominio,
estado de la conexión con el servidor de destino, tamaño del archivo solicitado y otros datos.
Me llama la atención la velocidad de descarga que hay entre servidores. Una transferencia de 80.5MB/s es mucho más rápido de lo que estoy
acostumbrado a ver cuando descargo un archivo a mi portátil o al móvil.
Ahora ya tenemos el programa de servidor Minecraft. El siguiente paso es arrancarlo. Los archivos con extensión .jar son ejecutables
Java que requieren tener instalado la plataforma de desarrollo para Java, conocida como OpenJDK (Java Development
Kit). OpenJDK incluye entre muchas herramientas Java Runtime Environment, pieza necesaria para ejecutar
archivos .jar. Existe también OracleJDK pero es con licencia de pago incluso para servidores sin fines de lucro.
Un servidor Minecraft vainilla(original sin complementos) podría funcionar únicamente instalando JRE pero como podemos tener problemas
si decidimos añadir módulos optaremos por la versión JDK.
Para comprobar que tenemos en nuestro VPS Java instalado desde la terminal entramos java -version
.
ubuntu@ubuntusrv2:~$ java -version
Command 'java' not found, but can be installed with:
sudo apt install default-jre # version 2:1.11-72, or
sudo apt install openjdk-11-jre-headless # version 11.0.15+10-0ubuntu0.20.04.1
sudo apt install openjdk-16-jre-headless # version 16.0.1+9-1~20.04
sudo apt install openjdk-17-jre-headless # version 17.0.3+7-0ubuntu0.20.04.1
sudo apt install openjdk-8-jre-headless # version 8u312-b07-0ubuntu1~20.04
sudo apt install openjdk-13-jre-headless # version 13.0.7+5-0ubuntu1~20.04
Como ves me responde que no lo tengo instalado y me sugiere como instalarlo según la versión. He marcado en naranja la
más nueva de las disponibles.
No olvides que es recomendable antes de instalar nada actualizar el sistema. Podemos en una sola línea ejecutar el
update y upgrade
La secuencia de comandos sería la siguiente:
#actualizar sistema
sudo apt update && sudo apt upgrade -y
#instalar java
sudo apt install openjdk-17-jre-headless
Tras la instalación, si consultamos la versión de Java la respuesta es OpenJDK 17.
ubuntu@ubuntusrv1:~$ java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.20.04.1)
OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing)
Ahora el VPS ya es capaz de ejecutar archivos .jar. Para arrancar el servidor debemos estar situados sobre el directorio donde
descargamos el archivo server.jar
. Recuerda que en esta guía es en el directorio /opt/minecraftserver
.
Aunque el prompt ya nos indica en que directorio estamos también podemos usar el comando pwd
por si no nos aparece esta
información.
Por comodidad, para no tener que poner sudo
en cada instrucción me cambio a root con la orden sudo su
root@ubuntusrv1:/opt/minecraftserver# pwd
/opt/minecraftserver
Si listamos el directorio debemos tener el archivo server.jar
root@ubuntusrv1:/opt/minecraftserver# ls
server.jar
Llegó el momento de ejecutar el servidor. Como interesa que el software del servidor Minecraft se quede en ejecución aunque cerremos
sesión usaremos el comando screen
para crear multiples sesiones en una terminal. Este comando es fundamental para entrar
y salir de la sesión sin que se altere nada de lo que se está ejecutando. Si arrancas el servidor Minecraft sin
hacer uso de las sesiones de screen
se detendrá el programa al abandonar la sesión SSH.
Para crear una instancia de screen simplemente desde la terminal entramos screen
. En Ubuntu
viene instalado por defecto. Si no estuviera daría error y lo podriamos instalar con sudo apt install screen
root@ubuntusrv1:/opt/minecraftserver# screen
Nos saldrá un texto informativo de 2 páginas. Pulsamos la tecla "Espacio" 2 veces y ya estamos en otra sesión dentro
de la sesión de terminal que teníamos inicialmente. Para listar las sesiones de screen
usamos el parámetro
-ls
root@ubuntusrv1:/opt/minecraftserver# screen -ls
There is a screen on:
7838.pts-1.ubuntusrv1 (07/20/22 18:16:44) (Attached)
1 Socket in /run/screen/S-root.
root@ubuntusrv1:/opt/minecraftserver#
El número de 4 cifras creado al azar nos sirve para identificar la sesión y poder asociarnos, salir, borrarla, etc
Podemos practicar con las sesiones haciendo algún cambio, entrando y saliendo para ver los cambios. Como ejemplo vamos a cambiar de directorio, salimos de esta sesión screen y si todo va bien volveremos a estar en el último directorio que tenía la sesión inicial.
root@ubuntusrv1:/# cd /home
root@ubuntusrv1:/home#
Ahora nos separamos con:
root@ubuntusrv1:/home# screen -d 7838
[remote detached from 7838.pts-1.ubuntusrv1]
root@ubuntusrv1:/opt/minecraftserver#
Volvemos a estar fuera de la sesión de Screen pero ésta todavía existe. Para eliminarlo podemos hacerlo con:
root@ubuntusrv1:/opt/minecraftserver# screen -X -S 7838 quit
# Listar posibles sesiones
root@ubuntusrv1:/opt/minecraftserver# screen -ls
No Sockets found in /run/screen/S-root.
Otras formas de eliminar sesiones con screen kill xxxx
siendo xxxx el número prefijo de la sesión y también
con exit
que cerraría la sesión actual y saltaría a la sesión padre. Aquí solo comento un poco por encima
algunas posibilidades de este potente comando en este tutorial de servidor Minecraft para entender lo que hace y porqué se usa.
Realmente el servidor Minecraft funcionaría sin screen
pero estaría limitado el servidor a esa tarea y no
podriamos cerrar sesión. Buscando un poco por internet encontrarás mas usos de este comando. Puede ser interesante
la opción de crear multiples ventanas para cada sesión o los atajos de teclado para moverse entre sesiones. Por el
momento no profundizo más en este tema.
Este comando no es nada intuitivo y requiere un poco de práctica. De los comandos mínimos para defenderse a destacar que pulsando de manera continua "ctrl + a" cambiamos entre pantallas. Mejor aún es pulsar "ctrl + a" y a continuación "shift + 2" mostrará una lista de las pantallas existentes. Con los cursores y la tecla "ENTRAR" cambiamos a la pantalla que nos interese.
Cerramos el paréntesis de screen y retomamos la ejecución del servidor. En estos momentos el
VPS no tiene ninguna sesión abierta. (Hemos eliminado todas las creadas durante la explicación de screen. Se puede
comprobar listando sesiones con screen -ls
). Vamos otra vez a ejecutar screen
en la terminal y
sobre la nueva sesión ejecutamos server.jar.
Recuerda situarte en el directorio /opt/minecraftserver
previamente creado.
root@ubuntusrv1:/opt/minecraftserver$ screen
root@ubuntusrv1:/opt/minecraftserver$
# En el directorio actual se encuentra el software Minecraft Server
root@ubuntusrv1:/opt/minecraftserver$ ls
server.jar
Para ejecutar el archivo .jar usaremos el comando java
:
java -Xms1024M -Xmx1024M -jar server.jar nogui
Los parámetros usados son:
Si tu VPS lo permite y quieres tener un servidor multijudador de muchos jugadores puedes plantearte subir la memoria a 2048 o 4096MB.
La primera vez que se ejecuta el servidor saldrá un error porque no hemos aceptado la licencia.
[12:09:57] [ServerMain/WARN]: Failed to load eula.txt
[12:09:57] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
Haciendo un ls
vemos que eula.txt se encuantra en la raiz del directorio donde se ejecutó el servidor.
Fácilmente lo solucionamos
con nano eula.txt
cambiando la línea donde dice "eula=false" para que diga "eula=true".
root@ubuntusrv1:/opt/minecraftserver$ ls
eula.txt libraries logs server.jar server.properties versions
Tras esto ya podemos ejecutar el servidor y ahora sí que arrancará pero antes vamos a personilizar algunos detalles del juego.
Las posibilidades de configuraciones de un servidor Minecraft son casi infinitas. Existen webs especializadas para crear gran variedad de mundos de diferentes tamaños, materiales, peligros, etc. Como iniciación a una pequeña parte de lo que se puede hacer vamos a editar el archivo server.properties. Buscaremos algunas variables y los cambiaremos a nuestro gusto. Para saber que hacen y que valores puedes poner en server.properties puedes consultar https://minecraft.fandom.com/es/wiki/Server.properties
Las variables que contienen cadenas si usan caracteres latinos como ñ o acentos se debe romper con \u y el código unicode. De la misma forma hay unos códigos para poner colores. Lo más cómodo es usar alguno de los muchos editores online que existen. En este ejemplo usé https://minecraft.tools/en/motd.php para picar el texto en castellano con acentos, ñ, colores, etc y desde allí me copio la conversión con unicode.
Tras los cambios ahora sí que ejecutamos el servidor con la misma sentencia de antes:
java -Xms1024M -Xmx1024M -jar server.jar nogui
En unos segundos tendremos el servidor en ejecución. Para unirse a una partida en red desde el juego seleccionamos Multijugador y en la nueva pantalla Conexión directa o Añadir Servidor. Deberemos entrar la IP o dominio del VPS.
Cuando un jugador se une al mundo desde la consola del servidor nos aparece su nombre. Nosotros como administradores del servidor podemos controlar muchos detalles del mundo y de los jugadores: enviar mensajes, hacer que llueva o se haga de noche, eliminar un jugador si no se comporta, etc. Pero todo esto ya son temas que deberás investigar en las páginas dedicadadas a administrar servidores Minecraft.
Esta guía es solo un punto de entrada al universo Minecraft.