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

Wann du genau diesen Guide brauchst

Diese Anleitung ist genau dann die richtige, wenn dein Minecraft-Container sauber startet, aber Spieler von außen nicht verbinden können. 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

Das Ziel ist klar: Minecraft-Java-Traffic muss TCP-Port 25565 aus dem Internet bis zu deinem Server durchkommen.

60-Sekunden-Check

  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.

FAQ

Sollte ich den Spiel-Port nur an eine einzelne IP binden?

Nur wenn du genau weißt, warum. Für die meisten Einzelserver ist das öffentliche Standard-Binding sinnvoll.

Was ist mit dem Query-Port?

Den brauchst du nur, wenn du Query bewusst einsetzt. Für normale Java-Spieler ist er nicht notwendig.

Nächste Schritte

Java-Konfigurator

Compose-Datei erstellen

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

Java-Konfigurator öffnen

Häufige Fragen