Nur eine öffentliche IPv4? So habe ich mein Proxmox-Homelab mit DNAT aufgebaut

2–4 Minuten

Verfasst von

in

, ,

Wer einen dedizierten Server bei Anbietern wie Hetzner mietet, bekommt je nach Tarif häufig nur eine einzige öffentliche IPv4-Adresse. Das reicht für den Anfang völlig aus – bis man anfängt, mehrere virtuelle Maschinen zu betreiben.

Genau an diesem Punkt stand ich irgendwann selbst.

Mein Homelab wuchs immer weiter: Webserver, Docker-Container, KI-Dienste, Monitoring und zahlreiche weitere Anwendungen liefen inzwischen auf verschiedenen VMs und LXC-Containern. Alle sollten erreichbar sein, aber eine zusätzliche öffentliche IPv4 wollte ich dafür nicht kaufen.

Also musste eine andere Lösung her.

Das Problem

Mein Server besitzt lediglich eine öffentliche IPv4-Adresse.

Gleichzeitig wollte ich:

  • mehrere virtuelle Maschinen betreiben
  • Dienste sauber voneinander trennen
  • möglichst wenig direkt im Internet exponieren
  • trotzdem einzelne Ports gezielt veröffentlichen

Ein klassisches Bridging aller VMs ins öffentliche Netz kam für mich deshalb nicht infrage.

Die Idee

Statt jeder VM eine öffentliche IP zu geben, habe ich ein komplett internes Netzwerk aufgebaut.

Der Proxmox-Host fungiert dabei gleichzeitig als Router.

Das Ergebnis sieht vereinfacht so aus:

Internet
        │
        ▼
Öffentliche IPv4
        │
   Proxmox Host
        │
 ┌──────────────┐
 │ internes LAN │
 │ 10.0.0.0/24  │
 └──────────────┘
   │    │     │
   ▼    ▼     ▼
Plesk Docker Jellyfin

Alle virtuellen Maschinen besitzen ausschließlich private IP-Adressen.

Nur der Host selbst besitzt die öffentliche IPv4-Adresse.

DNAT übernimmt die Weiterleitung

Damit Dienste trotzdem von außen erreichbar sind, leite ich die benötigten Ports gezielt weiter.

Beispielsweise:

  • Port 80 → Webserver
  • Port 443 → Reverse Proxy
  • weitere Ports nur dann, wenn sie wirklich benötigt werden

Der gesamte Datenverkehr läuft zunächst auf dem Host auf und wird anschließend an die passende VM weitergeleitet.

Dadurch bleibt die eigentliche Infrastruktur vollständig intern.

Warum ich dafür ein eigenes Skript geschrieben habe

Anfangs bestand meine Firewall-Konfiguration aus einzelnen iptables-Befehlen.

Mit jeder neuen VM kamen weitere Regeln hinzu.

Irgendwann wurde das Ganze unübersichtlich.

Deshalb habe ich ein eigenes Bash-Skript geschrieben.

Dieses erstellt automatisch:

  • eigene iptables-Chains
  • DNAT-Regeln
  • FORWARD-Regeln
  • SNAT/MASQUERADE
  • Portweiterleitungen

Neue Regeln können dadurch wesentlich einfacher ergänzt werden.

Statt dutzende Befehle einzeln auszuführen, genügt es, das Skript anzupassen und erneut auszuführen.

Das spart Zeit und verhindert viele typische Konfigurationsfehler.

Vorteile meines Setups

Nachdem das Netzwerk einmal eingerichtet war, ergaben sich einige Vorteile:

Mehr Sicherheit

Da sämtliche VMs ausschließlich interne IP-Adressen besitzen, ist keine davon direkt aus dem Internet erreichbar.

Nur explizit freigegebene Dienste können von außen angesprochen werden.

Klare Trennung

Webserver, Docker-Container und andere Anwendungen laufen unabhängig voneinander.

Dadurch lassen sich einzelne Systeme einfacher warten oder neu aufsetzen.

Nur eine öffentliche IPv4 notwendig

Der vermutlich größte Vorteil:

Ich benötige trotz zahlreicher virtueller Maschinen nur eine einzige öffentliche IPv4-Adresse.

Das spart zusätzliche Kosten und vereinfacht die Netzwerkstruktur erheblich.

Skalierbar

Neue VMs erhalten einfach eine freie interne IP-Adresse.

Soll später ein weiterer Dienst veröffentlicht werden, wird lediglich eine neue Portweiterleitung ergänzt.

Die eigentliche Netzwerkinfrastruktur bleibt unverändert.

Würde ich es heute wieder so machen?

Definitiv.

Mein Homelab ist inzwischen deutlich größer geworden als ursprünglich geplant.

Trotzdem funktioniert das Netzwerkprinzip heute noch genauso zuverlässig wie am ersten Tag.

Das interne NAT-Netz sorgt für eine klare Trennung zwischen Internet und meinen virtuellen Maschinen und ermöglicht es mir, neue Dienste schnell bereitzustellen, ohne jedes Mal über zusätzliche öffentliche IP-Adressen nachdenken zu müssen.

Ausblick

In einem zukünftigen Beitrag werde ich mein DNAT-Skript genauer vorstellen und erklären, wie sich damit neue Portweiterleitungen in wenigen Minuten hinzufügen lassen.

Vielleicht stelle ich das Skript anschließend auch als kleines Open-Source-Projekt auf GitHub zur Verfügung.


Wie löst ihr dieses Problem?

Setzt ihr ebenfalls auf ein internes NAT-Netz oder verwendet ihr zusätzliche öffentliche IPv4-Adressen beziehungsweise geroutete Subnetze? Ich freue mich auf eure Erfahrungen und Ideen in den Kommentaren.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert