Nachdem mein Artikel über die Konfiguration einer Router-VM (OPNSense, pfSense) basierend auf Proxmox aus dem Jahr 2017 noch immer durch die Decke geht, ich aber immer mehr Rückfragen zum Artikel erhalte, möchte ich heute eine aktualisierte Version veröffentlichen.
Zielstellung
Am Ende dieser Anleitung ist es unser Ziel, unsere auf dem Proxmox-Server laufenden virtuellen Maschinen mit Hilfe unserer Router-VM abzuschirmen und so die Sicherheit zu erhöhen bzw. auch ein internes Netz aufzubauen, in das man sich per VPN einwählen könnte – somit kann man auch sensible Daten (z.B. ein DMS o.ä.) auf dem Proxmox-Server lagern.
Voraussetzungen
Vor Beginn müssen ein paar Voraussetzungen geschaffen sein:
- dedizierter Server bei Hetzner
- eine Zusatz-IP für OPNSense-VM mit MAC-Adresse (bestellbar im Hetzner Robot)
- lauffähiges Proxmox-System inkl. VM mit installiertem OPNSense-System
- ein Subnetz, gerouted auf die OPNSense-VM (via Support-Ticket an Hetzner)
Sind diese Voraussetzungen erfüllt, können wir mit der Konfiguration starten; hier noch eine kurze Übersicht der im Tutorial verwendeten IP-Adressen.
Verwendung | IP-Adresse | Subnetzmaske | Gateway |
---|---|---|---|
Haupt-IP-Adresse des Servers | 135.181.79.34 | 255.255.255.192 | 135.181.79.1 |
IP-Adresse der OPNSense-VM | 135.181.188.126 | 255.255.255.248 | 135.181.188.121 |
Subnetz /29 | 135.181.188.192 / 29 | 255.255.255.248 | 135.181.188.126 |
Da es im alten Artikel öfter vorkam, dass nicht ganz klar war, welche IP-Adresse nun wohin gehört, werde ich in den folgenden Konfigurationen keine Ersetzungen vornehmen, sondern mit realen IP-Adressen arbeiten.
Proxmox-Konfiguration
Die Proxmox-Konfiguration an sich ist relativ simpel. Im Prinzip kann sie sogar über das Webinterface durchgeführt werden, ich bleibe aber bei den Konfigurationsdateien. Hier meine /etc/network/interfaces
:
auto lo
iface lo inet loopback
iface enp35s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 135.181.79.34/32 ## HAUPT-IP DES SERVERS
gateway 135.181.79.1 ## GATEWAY DER HAUPT-IP
bridge-ports enp35s0
bridge-stp off
bridge-fd 0
pointopoint 135.181.79.1 ## GATEWAY DER HAUPT-IP
up sysctl -w net.ipv4.ip_forward=1
up sysctl -w net.ipv4.conf.enp35s0.send_redirects=0
auto vmbr1
iface vmbr1 inet manual
bridge-ports none
bridge-stp off
bridge-fd 0
Wir legen hier also die Bridge mit der Haupt-IP des Servers an, damit die Maschine im Internet erreichbar ist. Des Weiteren legen wir ein neues Interface vmbr1
an, welches für das interne Netzwerk hinter der OPNSense gedacht ist. Hier muss mein Server nicht erreichbar sein und hat deshalb auch keine IP-Adresse auf vmbr1
, hier kann natürlich aber auch eine private IP-Adresse vergeben werden.
Das war es auch schon – ehrlich! Jetzt würde ich die Proxmox-Maschine neustarten, damit die neue Konfiguration sauber geladen wird. Weiter geht’s dann mit der Konfiguration der OPNSense.
OPNSense-Konfiguration
Konfiguration der WAN-/LAN-Interfaces
Die Konfiguration der OPNSense ist im Prinzip relativ selbsterklärend. Wir legen die VM mit zwei Netzwerkschnittstellen im Proxmox an – vmbr0
für das WAN-Interface und vmbr1
für das LAN-Interface.
Über das Webinterface konfigurieren wir zuerst die WAN-Schnittstelle der OPNSense:

Hier müssen letztlich nur die von Hetzner im Robot bereitgestellten Daten für die zusätzliche IP-Adresse eingetragen werden. Die Konfiguration der LAN-Schnittstelle sollte folgendermaßen aussehen:

Natürlich kann hier ein völlig anderes, privates Netz genommen werden (z.B. 192.168.0.0/24).
Damit ist die Konfiguration der LAN- und WAN-Schnittstelle abgeschlossen.
Konfiguration des Subnetzes
Um unserer OPNSense auch unser Subnetz beizubringen, ist es notwendig, die einzelnen IP-Adressen im Menüpunkt Interfaces -> Virtual IPs -> Settings
einzurichten. Hier ist jede einzelne IP-Adresse aus unserem Subnetz zu hinterlegen. Ein Beispiel:

Nun sind alle IP-Adressen des Subnetz der OPNSense bekannt und man kann damit beginnen, eine VM öffentlich erreichbar zu machen.
Konfiguration der virtuellen Maschinen
Die virtuellen Maschinen werden im Proxmox mit nur einer Netzwerk-Schnittstelle angelegt: vmbr1
. Somit erhalten unsere virtuellen Maschinen nur eine interne IP-Adresse (z.B. 10.0.8.20) und sind eigentlich auch nur über diese Adresse erreichbar. Möchte man eine virtuelle Maschine nun öffentlich erreichen (z.B. als Webserver) muss man ein NAT einrichten.
Was ist ein NAT?
Die Abkürzung NAT steht für Network Address Translation – zu deutsch: Netzwerkadressübersetzung. Kurz gesagt ist es ein Verfahren, dass in Routern (wie unserer OPNSense) eingesetzt wird, um lokale Netzwerke mit dem Internet verbinden. Man übersetzt quasi die interne IP-Adresse in eine öffentliche IP-Adresse.
1:1 NAT
Damit wir nicht jeden Port händisch weiterleiten müssen (wir geben ja sowieso nur bestimmte Ports in der Firewall frei), nutzen wir für dieses Tutorial ein 1:1 NAT. Über den Menüpunkt Firewall -> NAT -> One-to-One
legen wir unsere erste NAT-Regel an:

Nun ist, sofern entsprechende Firewall-Regeln gelten – die virtuelle Maschine mit der internen IP 10.0.8.30
auch auf der externen IP 135.181.188.199
erreichbar. Auf die Konfiguration der entsprechenden Firewall-Regeln möchte ich hier nicht weiter eingehen, das sollte sitzen, wenn man diese Anleitung durcharbeitet.
Falls ihr IPv6 ebenfalls nutzen wollt, schaut doch mal in diesen Artikel.
Wir haben es geschafft und unser Proxmox-/OPNSense-Setup erfolgreich zum Laufen gebracht! Gerne beantworte ich Rückfragen zum Artikel, nehme Hinweise entgegen und freue mich natürlich auch über jedes Lob.
Bitte habt Verständnis, dass ich tiefergehende Fragen und Probleme nicht kostenfrei in den Kommentaren oder per Mail beantworten kann – gerne übernehme ich die Installation und Konfiguration eurer Server zu einem günstigen Preis!
Hi Dominik,
super Artikel! Bin darauf gestoßen da ich selbst so ein Setup bereits länger laufen habe.
Es gibt jedoch eine Sache die ich bisher nicht optimal gelöst bekommen habe:
Geclusterte OpnSense im HA.
Hast du das bereits laufen? Wenn du Lust hast, kontaktier mich gerne, können uns sicherlich austauschen. Ich hab auch direkt innerhalb des Proxmox Clusters bei Hetzner mehrere K8S Cluster laufen, rennt super.
Viele Grüße
Hallo Dominik,
super beschriebene Anleitung danke dafür!
Beim Start des vmbr0 interface bekomme ich die Fehlermeldung:
sysctl: cannot stat /proc/sys/net/ipv4/conf/eth0/send_redirects: No such file or directory
Ich habe bei mir auch kein eth0 interface, sollte hier enp35s0 stehen?
@Moritz Busch
Ja dort musst du dein Netzwerkinterface eintragen.
Hallo Moritz,
du hast ja bereits eine Antwort von Nico erhalten – danke dafür!
Danke für den Hinweis, ich habe eth0 ausgebessert. 🙂
Grüße,
Dominic
Hallo Dominic,
vielen Dank für deine Anleitungen.
Ich habe eine Frage zur Netzwerkkonfiguration.
In vielen Anleitungen zum Thema Proxmox wird immer zwischen Routed- und Bridged-Setup unterschieden. Für mich sieht die Konfigdatei nach einem Mix daraus aus (vmbr0 wird gebridged + IP Forwarding). Welche Auswirkungen entstehen dadurch? Ich muss an dieser Stelle auch zugeben, dass ich noch nicht ganz verstanden habe, warum Proxmox mit den vmbr-Bridges arbeitet und wie das ganze läuft.
Und noch eine allgemeine Frage: Bin ich der einzige der anscheinend nicht in der Lage ist, mittels iptables zu natten? Ich habe eine zusätzliche IP-Adresse, und mein Problem ist u. a., das, schätzungsweise durch mein Routed-Setup, mein HTTPS-Server, den ich auf dem Proxmox Host zu einem Container nat’te, auch unter der zusätzlichen IP-Adresse verfügbar ist.
Freundliche Grüße,
Johann
Hallo Dominic.
Danke für die tolle Anleitung, habe schon einige Anleitungen im Internet gefunden, aber keine ist so ausführlich und gut beschrieben.
Eine Frage habe ich noch zum Punkt
ein Subnetz, gerouted auf die OPNSense-VM (via Support-Ticket an Hetzner)
Wenn ich zB. schon ein Subnetz /29 von Hetzner bestellt habe muss ich dieses dann via Support-Ticket an Hetzner routen zur zusätzlichen öffentlich IP-Adresse (135.181.188.126) verstehe ich das richtig?
Dankeschön im Voraus & mach bitte weitere so tolle Beiträge zu Proxmox!
LG Chris
Hallo Chris,
danke für deine lieben Worte, freut mich sehr, dass meine Anleitung dir hilft!
Zu deiner Frage: du musst das Subnetz durch ein Support-Ticket bei Hetzner auf die öffentliche Zusatz-IP deiner OPNSense routen lassen.
Beste Grüße und viel Erfolg,
Dominic
Moin auch von mir! Zur Info: Das Routing zus. gebuchter Subnetze ist auch selber im Robot konfigurierbar (analog zur Vorgehensweise des Setzens einer MAC Adresse für eine Einzel-IP). Hier steht für die Ziel-IP ein Dropdown zur Verfügung, welches neben der Haupt-IP auch etwaige öffentliche Zusatz-IPs enthält, sofern diese vorhanden sind).
Danke für den Hinweis, vermutlich wurde das von Hetzner zwischenzeitlich angepasst, um die Tickets dafür abzustellen. 🙂
Gerne! Ist momentan auch nur beim Bestellprozess eines Subnetzes im Robot so, im Nachhinein (noch) nicht frei rekonfigurierbar.
Hallo Dominic,
bitteschön gerne, so eine tolle Arbeit muss doch gelobt werden. 🙂
Super perfekt das habe ich jetzt gemacht.
Noch eine Frage wie komm ich denn auf das Webinterface von der OPNSense? Erreiche ich die dann über die zusätzliche Öffentliche IP-Adresse? Oder über eine IP-Adresse im Subnetz /29?
Danke im Voraus.
LG Chris
Hallo Chris,
über die öffentliche IP kommst du in der Standardkonfiguration der OPNSense gar nicht ans Webinterface; das würde ich auch aus Sicherheitsgründen definitiv nicht empfehlen…
Solltest du dennoch die Firewall entsprechend konfigurieren wollen, kommst du über die zusätzliche IP-Adresse. Ich würde jedoch z.B. über ein VPN (kann die OPNSense von Haus aus) auf das interne Interface der OPNSense zugreifen – da sind auch dann keine Firewallregeln für den Zugriff auf’s Webinterface nötig.
Warme Grüße aus Bad Kreuznach,
Dominic
Hallo Dominic,
ok verstehe man kommt also nur von LAN auf die OPNSense was jetzt auch Sicherheitstechnisch Sinn ergibt. 😉
Ich hab mir jetzt eine VM (Win10) erstellt und die Netzwerkkarte mit vmbr1 hinzugefügt. Wollte dann von dort aus über den Webbrowser auf die OPNSense zugreifen, leider funktioniert das Netzwerk aber auf der VM (Win10) nicht. Schön langsam gebe ich es auf 🙁
Denke ich komme hier nochmals zwecks Support auf dich zu. Hast du eine Preisübersicht zwecks Support-Stunden?
Dankeschön
LG aus dem hitzigen Wien 😉
Chris
Hi Dominic – thanks for this great article. One addition: on the WAN side you also need to input the separate MAC address in OPNsense. The MAC address can be requested / found in Hetzner Robot
Hallo Dominic,
super Anleitung – ich freue mich schon darauf, das auszuprobieren.
Hallo,
erstmal vielen Dank für die Anleitung. Ich habe heute Proxmox PVE7 auf einem Hetzner Server geladen. Um Zugang zur Proxmox GUI zu erhalten muss noch die MAC Adresse eingegeben werden. Das sieht dann für die vmbr0 Bridge so aus:
auto vmbr0
iface vmbr0 inet static
address 176.x.xx.144/27
hwaddress b4:2e:99:ca:59:55 –> kann man abfragen über „ip link show“
gateway 176.x.xx.129
bridge-ports eno1
bridge-stp off
bridge-fd 0
pointopoint 176.x.xx.129
up sysctl -w net.ipv4.ip_forward=1
up sysctl -w net.ipv4.conf.eno1.send_redirects=0
Grüße
Rafael
Hallo Dominic,
ziemlich cooler Artikel – hat alles reibunglos funktioniert. Danke dir für deine hervorragende Arbeit. Wie sieht es aus, wenn ich ohne ein Subnetz arbeiten möchte – also die Dienste der VMs über die IP des Gateway erreichbar machen möchte?
Beispiel: Web, Mail, DB, Gameserver, etc.
Wäre das noch etwas, was man in einem Artikel anschneiden könnte bzw. realisierbar ist? Gern auch per Mail.
Grüße
Hallo!
Bitte hab Verständnis dafür, dass ich die hier angebotenen Anleitungen tatsächlich nur nach „Lust und Laune“ verfasse und zusammentrage.
Ich verdiene mit solchen Arbeiten meinen Lebensunterhalt und kann daher öffentlich eher nicht auf individuelle Anforderungen eingehen.
Bis dann,
Dominic
Hallo Dominic,
super Anleitung! Leider wird das Szenario durch die Preisverdopplung für IPv4-Adressen seitens Hetzner spätestens Anfang 2022 ziemlich teuer. Zumindest für eine private „Spielumgebung“.
Hab aber nichts gegen Hetzner, bin dort seit 10 Jahren Kunde und letztlich geben die ja auch nur die Kosten weiter, die sie durch die IPv4-Knappheit haben…
Gruß
Sebastian
Hallo,
super Artikel, vielen Dank dafür. Kannst du etwas dazu sagen, wie ein zweiter Proxmox Server in Hetzner eingerichtet werden muss? Die Interface Konfiguration ist mir nicht ganz klar dann bei Hetzner.
Viele Grüße
Benjamin
Ich weiß nicht genau, was du meinst, wenn ich ehrlich bin…
Ich glaube, ich steh gerade ein bißchen auf dem Schlauch… wofür die zusätzliche IP-Adresse und wofür das zusätzliche Subnet?
Oder ist das nur, weil es so natürlich „schöner“ ist, aus Security-Gesichtspunkten aber nicht nötig (sondern mittles NAT und/oder reverse-proxy basierend auf dem Ziel-Port u. a. abbildbar)?
Wie auch immer, vielen Dank für die Anleitung! Hilft mir schon alleine deshalb, weil es zeigt, dass ich nicht der einzige bin, der die Idee hat (und vermutlich auch nicht der einzige, dem die Firewall-Funktionen von Proxmox nicht ganz schmecken) und ich alleine deshalb ein gutes Stück näher dran bin, die „interne“ (also zwischen linker und rechter Gehirnhälfte) Debatte zwischen VM-Router „ja oder nein“ abzuschließen.
Hallo,
da die Hetzner IPs mittlerweile sehr teuer sind, kann ich die Frage meines Vorredners nur unterstützen. Geht das ganze auch mit einer IP-Adresse, also ohne zusätzliche IP?
Gruss,
Micha