Aller au contenu

Runbook 04 : VM serveur de jeux (Minecraft moddé)

Objectif : VM Debian dans la DMZ GAMES, serveur Minecraft NeoForge géré par systemd, isolé du reste du réseau.

1. Réseau GAMES dans OPNsense

  1. VLAN 70 sur vtnet0, interface GAMES, 10.0.70.1/24, pas de DHCP (serveur en IP fixe). Save, puis Apply.
  2. Alias RFC1918 : 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
  3. Règles GAMES (port source any partout) : DNS et NTP vers GAMES address, Block vers RFC1918, Pass vers any. Voir ADR-0004.

2. VM

Paramètre Valeur Raison
ID / nom 200 / games
OS Debian 13 netinst amd64 (empreinte vérifiée)
CPU 6 cœurs, type host Tick mono-thread + ramasse-miettes et génération de chunks
RAM 10 Go, ballooning désactivé La JVM gère mal la mémoire retirée à chaud
Disque SCSI, discard, iothread, SSD
Réseau vmbr0, tag 70, VirtIO, pare-feu Proxmox désactivé
Démarrage ordre 2, délai 30 s OPNsense démarre d'abord

Priorité CPU d'OPNsense : VM 100 → Processors → CPU units à 1000 (100 par défaut) : le routeur garde la main si le CPU sature.

3. Installation Debian

  • Réseau manuel : 10.0.70.10/24, passerelle et DNS 10.0.70.1.
  • Mot de passe root vide (l'utilisateur reçoit sudo).
  • Partitionnement guidé, ext4 (ADR-0008).
  • Logiciels : uniquement serveur SSH et utilitaires usuels (pas d'environnement de bureau : surface d'attaque).
  • Après installation : sudo apt install qemu-guest-agent, retrait de l'ISO, snapshot post-install.

Vérification de la DMZ

Depuis la VM Attendu
ping 1.1.1.1 ✅
ping deb.debian.org ✅ (DNS)
ping 10.0.1.10 ❌
ping 192.168.1.1 ❌

4. Serveur Minecraft

sudo apt install openjdk-21-jre-headless unzip
sudo useradd --system --create-home --home-dir /opt/minecraft --shell /usr/sbin/nologin minecraft
  • Server pack téléchargé depuis un navigateur (le site du modpack bloque wget), copié par scp.
  • Fichiers décompressés en tant qu'utilisateur minecraft (sudo -u minecraft …) ; en cas de doute : sudo chown -R minecraft:minecraft /opt/minecraft.
  • user_jvm_args.txt : -Xmx8G (2 Go laissés au système et à la mémoire hors tas).
  • server.properties : online-mode=true, white-list=true, enforce-whitelist=true, simulation-distance 6 à 8.
  • Boucle de relance éventuelle du script de démarrage désactivée : systemd s'en charge.

/etc/systemd/system/<serveur>.service :

[Unit]
Description=Serveur Minecraft
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
WorkingDirectory=/opt/minecraft/<dossier>
ExecStart=/bin/bash startserver.sh
Restart=on-failure
RestartSec=30
TimeoutStopSec=180

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now <serveur>
journalctl -u <serveur> -f

Dépannage rencontré

Symptôme Cause Correction
DNS en échec depuis la DMZ, IP fonctionnelle Règles DNS/NTP avec un port source à 53/123 Port source any
wget du server pack : 403 Page web protégée, pas un lien de fichier Téléchargement navigateur + scp
Serveur stable à la main, arrêt après ~30 s sous systemd Fichiers créés en root, service lancé en minecraft chown -R, tests manuels toujours avec sudo -u minecraft

Diagnostic d'un service : systemctl status (code de sortie : 1 = application, 137 = tué / mémoire, 143 = arrêt demandé), journalctl -u, logs/latest.log.

Critères de réussite

  • [ ] Service actif, redémarré automatiquement après reboot de la VM.
  • [ ] Connexion depuis le LAN à 10.0.70.10.
  • [ ] Isolation de la DMZ vérifiée.