setupmc.com

Minecraft-Port 25565 auf Hetzner und Linux öffnen

Prüfe Docker-Portfreigabe und Firewalls, wenn dein Server läuft, aber von außen nicht erreichbar ist.

Netzwerk
setupmc.com Team

Server läuft, aber Spieler können nicht verbinden

Prüfe die folgenden Punkte, wenn dein Minecraft-Container startet, aber von außen nicht erreichbar ist. Typische Symptome sind:

  • Connection refused
  • Verbindungs-Timeouts
  • lokal auf localhost funktioniert es, über die öffentliche IP aber nicht
  • docker compose ps sieht gesund aus, trotzdem kann niemand joinen

Minecraft Java benötigt eine eingehende Verbindung auf TCP-Port 25565.

Verbindung prüfen

  1. Prüfe, ob Docker 25565:25565 wirklich veröffentlicht.
  2. Prüfe, ob der Linux-Host auf Port 25565 lauscht.
  3. Prüfe, wie Docker mit deiner Host-Firewall zusammenspielt.
  4. Erlaube 25565/tcp in der Hetzner Cloud Firewall.
  5. Teste aus einem anderen Netzwerk.

Voraussetzungen

  • Ein laufender Minecraft-Java-Server in Docker oder Docker Compose
  • Eine öffentliche IPv4 oder IPv6 auf deinem Hetzner-Server
  • SSH-Zugriff auf den Linux-Host

Wenn der Server noch gar nicht ausgerollt ist, beginne mit Einrichten eines Minecraft-Servers auf einem Hetzner Cloud-Server mit Docker Compose.

Schritt 1: Prüfen, ob Docker den Spiel-Port überhaupt veröffentlicht

Prüfe zuerst die Portfreigabe in Docker. Wenn Docker den Port nie veröffentlicht hat, helfen Firewall-Änderungen nicht.

docker compose ps
docker ps --format 'table {{.Names}}\t{{.Ports}}'

Du solltest 25565/tcp auf dem Host sehen, zum Beispiel:

0.0.0.0:25565->25565/tcp
:::25565->25565/tcp

Wenn dort nichts veröffentlicht ist, korrigiere zuerst die Compose-Datei:

services:
  mc:
    image: itzg/minecraft-server:latest
    ports:
      - "25565:25565"

Danach neu anwenden:

docker compose up -d

Schritt 2: Prüfen, ob der Host auf 25565 lauscht

Bestätige als Nächstes, dass der Linux-Host den Port wirklich offen hat:

sudo ss -tlnp | grep 25565

Wenn der Befehl nichts zurückgibt, trifft meistens eines davon zu:

  • der Container läuft nicht
  • das Port-Mapping fehlt
  • der Dienst ist beim Start fehlgeschlagen

Dann zuerst die Logs ansehen:

docker compose logs -f

Schritt 3: Den Linux-Firewall-Pfad prüfen

Docker Engine erstellt eigene Paketfilter- und NAT-Regeln für veröffentlichte Ports. Bei einem normalen Linux-Bridge-Netzwerk wird der Datenverkehr zu 25565:25565 umgeleitet, bevor er die von UFW verwendeten INPUT- und OUTPUT-Chains erreicht. Ein veröffentlichter Container-Port kann deshalb erreichbar bleiben, obwohl UFW ihn eigentlich blockieren würde.

Du kannst die beabsichtigte Freigabe weiterhin in UFW dokumentieren:

sudo ufw allow 25565/tcp
sudo ufw status

Behandle diese Regel aber nicht als Beweis dafür, dass UFW den veröffentlichten Docker-Port kontrolliert. Prüfe den effektiven Pfad aus einem zweiten Netzwerk.

Wenn du Quell-IP-Beschränkungen direkt auf dem Linux-Host brauchst, nutze Regeln, die vor Dockers Freigabe für weitergeleiteten Traffic ausgewertet werden. Beim standardmäßigen iptables-Backend dokumentiert Docker dafür die DOCKER-USER-Chain. Beim nftables-Backend brauchst du eine eigene Forward-Chain mit passender Priorität. Deaktiviere Dockers Firewall-Verwaltung nicht nur, um UFW anders wirken zu lassen; das kann Container-Netzwerke beschädigen.

Entferne dabei nicht versehentlich deinen SSH-Zugang. Wenn deine Firewall sehr restriktiv ist, halte 22/tcp für deine Admin-IP offen.

Schritt 4: Die Hetzner Cloud Firewall öffnen

Hetzner Cloud Firewalls sitzen vor dem Server. Das heißt: Dein Linux-Host kann korrekt konfiguriert sein und der Traffic wird trotzdem vorher verworfen.

In der Hetzner-Konsole:

  1. Öffne dein Projekt.
  2. Gehe zu Firewalls.
  3. Erstelle oder bearbeite die Firewall, die am Minecraft-Server hängt.
  4. Füge eine eingehende Regel für TCP, Port 25565, Quelle 0.0.0.0/0 hinzu, wenn der Server öffentlich erreichbar sein soll.
  5. Wenn auch IPv6-Spieler joinen sollen, ergänze ::/0.

Für den ersten Test sollte die Regel bewusst einfach sein. Später kannst du andere Ports wie SSH enger absichern.

Schritt 5: Von außen testen

Teste nicht nur vom Host selbst aus. Nutze stattdessen:

  • das normale Minecraft-Spiel aus einem anderen Netz
  • einen Freund
  • einen Mobilfunk-Hotspot

Im Java-Spiel verbindest du dich mit:

DEINE_SERVER_IP:25565

Wenn das funktioniert, ist der Verbindungsweg sauber. Für eine schönere Serveradresse geht es mit Minecraft-Domain ohne Port: SRV-Record richtig einrichten weiter.

Häufige Fehler

SymptomWahrscheinliche UrsacheFix
docker ps zeigt keine veröffentlichten PortsCompose-Datei hat kein ports-Mapping"25565:25565" ergänzen und neu erstellen
UFW blockiert den Port, er ist aber trotzdem erreichbarVeröffentlichte Docker-Ports umgehen die normale UFW-VerarbeitungMit Hetzner Cloud Firewall oder Docker-tauglichen Forward-Regeln beschränken
UFW ist offen, öffentlich bleibt es trotzdem dichtHetzner Cloud Firewall blockiert nochDort ebenfalls 25565/tcp erlauben
Portscan zeigt geschlossen, Logs wirken normalFalsches ProtokollFür Java TCP verwenden
RCON funktioniert intern, Spieler können trotzdem nicht joinenNur der Verwaltungszugang ist offenDen eigentlichen Spiel-Port veröffentlichen, nicht nur RCON

Sicherheitshinweis

Öffne nur die Ports, die du wirklich für Spieler brauchst. Für einen normalen Minecraft-Java-Server ist das meist TCP 25565 und sonst nichts. Veröffentliche RCON nicht einfach mit, nur weil du Admin-Zugriff willst. Halte den Verwaltungszugang auf dem Host-System oder in einem privaten Docker-Netzwerk.

Auf Hetzner ist die Cloud Firewall die einfachste äußere Allowlist für öffentlichen Spiel-Traffic. Docker-taugliche Host-Regeln bleiben als zweite Schicht sinnvoll, aber ein UFW-Status allein beschreibt nicht die effektive Erreichbarkeit veröffentlichter Container-Ports.

Java-Konfigurator

Compose-Datei erstellen

Wähle Server-Software, Version und Einstellungen und lade deine Konfiguration herunter.

Java-Konfigurator öffnen

Häufige Fragen