Hetzner und Proxmox: pfSense als Gateway

For a english version of this article follow this link.

Ich nutze, wie viele meiner Leser wissen, einige Hetzner-Server im Zusammenspiel mit der Virtualisierungslösung Proxmox.

Um das Setup ein bisschen sicherer zu gestalten und nicht auf die Hetzner-Firewall angewiesen zu sein, habe ich mich vor kurzem darum gekümmert, meine virtuellen Maschinen hinter einer pfSense-VM abzuschirmen. Die Netzwerkkonfiguration war dabei nicht ganz trivial und daher möchte ich meinen Lesern einen kleinen Einblick geben.

Voraussetzungen

  • dedizierter Hetzner-Server (hier: EX41-SSD)
  • lauffähiges Proxmox-System
  • eine Zusatz-IP für die pfSense-VM mit MAC-Adresse (Hetzner-Robot)
  • Subnetz, gerouted auf die pfSense-VM

Sobald diese Voraussetzungen erfüllt sind, können wir uns an die Konfiguration des Systems machen.

Proxmox-Konfiguration

Die Proxmox-Konfiguration sieht bei mir wie folgt aus (/etc/network/interfaces):

auto lo
iface lo inet loopback

iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  <SERVER-HAUPT-IP>
        netmask  255.255.255.255
        gateway  <SERVER-HAUPT-GATEWAY>
        pointopoint <SERVER-HAUPT-GATEWAY>
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

        up ip route add 192.168.0.0/16 via 138.201.203.59 dev vmbr0
        up ip route add 172.16.0.0/12 via 138.201.203.59 dev vmbr0
        up ip route add 10.0.0.0/8 via 138.201.203.59 dev vmbr0

        up sysctl -w net.ipv4.ip_forward=1
        up sysctl -w net.ipv4.conf.eth0.send_redirects=0

# Virtual switch for DMZ
# (connect your firewall/router KVM instance and private DMZ hosts here)
auto vmbr1
iface vmbr1 inet manual
        bridge_ports none
        bridge_stp off
        bridge_fd 0

Die Server-Haupt-IP und das Server-Haupt-Gateway könnt ihr aus dem Hetzner Robot auslesen – hier gibt es eigentlich nicht viele Fehlerquellen.

pfSense-Konfiguration

WAN-/LAN-Konfiguration

Die pfSense-Konfiguration ist nicht wirklich komplizierter. Im Proxmox-Interface erstellen wir die VM mit zwei Netzwerkdevices, eins davon gebunden an vmbr0 – unser WAN-Interface – und eins an vmbr1 – das LAN-Interface.

Nach der pfSense-Installation weisen wir die Interfaces in der pfSense entsprechend zu und konfigurieren das WAN-Interface:

pfSense WAN-Konfiguration

Die Konfiguration des LAN-Interfaces sollte selbsterklärend sein – privates Subnetz, kein Gateway.

Virtual IP Address

Um unser Subnetz hinter der pfSense nutzen zu können, müssen wir nun noch jede zu nutzende IP unter „Firewall -> Virtual IPs“ eintragen. Hier ist es möglich, alle IP-Adressen des Subnetzes einzutragen, wir brauchen keine Broadcast- oder Host-Adresse.

Interne IP-Adressen

Wir sind nun in der Lage, unseren Clients im LAN ihre IP-Adressen zu verteilen. Entweder man nutzt hierfür den DHCP-Server der pfSense und vergibt im einfachsten Fall statische Reservierungen oder mann konfiguriert die Clients per Hand.

Ich habe mich für die DHCP-Variante entschieden, auf die Konfiguration möchte ich hier aber nicht weiter eingehen, da das ziemlich selbsterklärend ist.

1:1 NAT

Um unsere internen Clients nun auch aus dem Internet erreichen zu können, müssen wir noch das 1:1 NAT konfigurieren.

1:1 NAT configuration

Firewall-Konfiguration

Zum Schluss ist es nun die Sache des Administrators, die Firewall korrekt zu konfigurieren. Hier gibt es so viele Lösungsansätze, dass ich darauf nicht weiter eingehen möchte – welche Ports wohin geöffnet werden, muss der Betreiber der Firewall selbst entscheiden.

ICMP-Ping-Regel

Ich finde es ganz angenehm, die Erreichbarkeit eines Hosts von außen mit einem ping prüfen zu können. Hierzu lege ich immer als erstes diese Regel in der pfSense-Firewall an:

pfSense ICMP Ping Rule

Als Destination muss natürlich die interne IP bzw. das interne Subnetz angegeben werden.

Fazit

Die Konfiguration einer pfSense-VM bei Hetzner ist nicht ganz trivial, aber doch gut machbar. Ein wenig Trial & Error ist zwar dabei, aber das ist es ja bei Firewalls immer. Als kleinen Tipp möchte ich noch mitgeben, den Zugriff auf das Proxmox-Webinterface nicht zu früh zu sperren, damit man im Zweifelsfall noch Zugriff auf die pfSense-Konsole hat, wenn man sich verkonfiguriert.

Gerne beantworte ich Fragen oder nehme Hinweise zu meinem Setup entgegen. Perfekt ist es sicher nicht, das weiß ich, aber es funktioniert bei mir zuverlässig, weshalb ich darüber eigentlich ganz glücklich bin. Sollte dennoch jemand einen guten Tipp parat haben: gerne ab in die Kommentare damit!

IPv6-Konfiguration

Der IPv6-Konfiguration habe ich einen eigenen Artikel gewidmet.

20 Gedanken zu „Hetzner und Proxmox: pfSense als Gateway“

  1. Servus ,

    ein bestelltes Subnetz wird doch eigentlich auf die IP des Hosts geroutet von Hetzner aus, wie lass ich es dann auf eine zusatzIP routen?

    Antworten
  2. Also irgendwie wird mir nicht ganz Schlüssig:

    A: Das 1:1 NAT sollte das auf Any geroutet werden oder auf eine bestimmte Lan IP?
    B: Wie wird dann der DHCP konfiguriert das die VM’s eine Public IP erhalten ?

    Antworten
    • Deine Fragen deuten darauf hin, dass du das Prinzip von NAT nicht verstanden hast – bitte verzeih mir, wenn ich dir hier in den Kommentaren keine Schulung geben kann.

      Sobald du NAT verstanden hast, sollten sich deine Fragen erübrigen.

      Antworten
  3. Vielen Dank Herr Pratt, habe das Setup erfolgreich umsetzen können. Eine Kurze Frage aber noch, ist es 1zu1 identisch mit IPv6 machbar?

    Antworten
  4. Thank you very much for this info. To make it even more clear: the
    up route add -net 138.201.203.0 netmask 255.255.255.224 gw 138.201.203.1 vmbr0

    is your added network range for IPv4? Your „Subnetz, gerouted auf die pfSense-VM“

    tia

    Antworten
  5. Hallo,

    Ist das How to noch aktuell?

    Habe alles so konfiguriert aber komme nicht raus mit meiner PFSense Maschine.

    und sollte die IP in der PFSense Maschine nicht über eine 32iger Netzmaske laufen?

    Antworten
  6. Hallo,
    ich bin gerade auf die Anleitung gestossen.

    Ich habe eine frage zu der Zeile
    up route add -net 138.201.203.0 netmask 255.255.255.224 gw 138.201.203.1 vmbr0

    Muss diese so bleiben oder gegen irgendwas ausgetauscht werden?
    Was ist die 138.201.203.0 / 138.201.203.1 ???
    Vielen dank

    Antworten
  7. Hallo,

    ich hab auf meinem Server eine ähnliche Konfiguration mit dem Unterschied, dass ich auf eine zusätzliche einzel IP verzichtet habe.

    Sofern Interesse besteht, kann ich dies gerne mal Zusammenfassen und zur Verfügung stellen.

    Antworten
  8. Hey, ich konnte das Setup dank deiner ausführlichen Anleitung soweit nachbauen. Allerdings habe ich ein Problem, für welches ich noch keine Lösung finden konnte.
    Ich habe beispielsweise eine Gitlab Instanz hinter der Firewall am laufen. Push, Pull, etc. mach ich hier über SSH. Der Port ist geöffnet, von extern funktioniert auch alles. Ich kann allerdings von einer anderen VM (ebenfalls hinter der Firewall) keine SSH Verbindung aufbauen. Diese endet mit einem Timeout. Ein curl auf die Adresse bricht mit einem
    curl: (51) SSL: no alternative certificate subject name matches target host name ‚xxxx.de‘
    ab.

    Sobald ich in der /etc/hosts Datei einen Eintrag für die Domain auf die interne IP Adresse der VM mache, funktioniert es problemlos. Weißt du zufällig was ich hier in der Firewall umkonfigurieren muss? Tritt dieses Problem bei dir auch auf? Vielen Dank schonmal :)

    Antworten
    • Ich konnte das Problem inzwischen selbst lösen.

      Hierzu musste ich in OPNSense unter „Firewall“ > „Settings“ > „Advanced“ im Bereich „Network Address Translation“ die Haken „Reflection for 1:1“ und „Automatic outbound NAT for Reflection“ setzen.

      Antworten
  9. Hallo,

    also bei mir funktionieren die Einstellungen auch nicht. Ich hab nochmal alles mit dem Artikel abgeglichen. Leider kein Erfolg. Ich würde das ganze ja auch Bridge machen. Da komm ich zumindestens soweit das alles funktioniert aber dann sproratisch meine Haupt-IP nicht mehr erreichbar ist. Die VMs laufen weiter. Ich glaub ich muss doch zum ESXi wechseln. Hätte gerne das ganze mit dem Proxmox gemacht.

    Antworten
  10. Hallo zusammen,
    ist in der Konfiguration die IP 138.201.203.59 die Zusatz-IP ?
    Wie müsste diese angepasst werden, wenn ich zwei einzelne Zusatz-IPs nutzen möchte ?
    Vielen Dank

    Antworten
  11. Ich habe alles genau so gemacht aber leider ist die Verbindung sehr sehr langsam. Von den Clients hinter dem Nat ins Internet.

    Vielen Dank im Vorraus

    Antworten

Schreibe einen Kommentar zu PAscal Antworten abbrechen