In der heutigen Welt ist es entscheidend, dass Netzwerke sicher und effizient betrieben werden. Eine Möglichkeit, dies zu erreichen, ist der Einsatz eines NAT-Gateways (Network Address Translation). OPNsense ist eine Open-Source-Firewall- und Routing-Plattform, die sich ideal für diese Aufgabe eignet. In diesem Blogbeitrag zeige ich Ihnen Schritt für Schritt, wie Sie ein NAT-Gateway mit OPNsense in der Hetzner-Cloud initial einrichten und konfigurieren.
Requirements
- hcloud CLI
- Allgemeines Verständnis von Netzen
- Grundlegendes Verständnis von Linux Debian
Terminologie
- OPNSense server:
{router}
/{10.0.1.1}
- client server:
{client}
/{10.0.1.2}
- Hetzner Network:
{nat-network}
/{10.0.0.0/16}
- Hetzner subnet:
{10.0.1.0/24}
- Hetzner gateway:
{10.0.0.1}
Ressourcen erstellen
Zu Beginn werden wir damit beginnen, einige Ressourcen wie den Server, das Netzwerk und das Routing mit hcloud CLI zu erstellen. Wenn Sie nicht wissen, wie man die hcloud CLI verwendet, besuchen Sie einfach den Link und es wird erklärt.
Privates Netzwerk erstellen
Zunächst erstellen wir das private Netzwerk {nat-network}
mit dem IP-Bereich {10.0.0.0/16}
.
hcloud network create --name nat-network --ip-range 10.0.0.0/16
Das private Netzwerk benötigt ein Subnetz, in das wir unsere Server einbinden werden. Wir werden es innerhalb der Zone eu-central erstellen, die die Standorte {fsn1}
,{nbg1}
und {hel1}
umfasst.
hcloud network add-subnet nat-network --network-zone eu-central --type server --ip-range 10.0.1.0/24
Erstellen der Route
Da sich das private Netzwerk bei Hetzner im OSI Layer 3 befindet, muss der gesamte Datenverkehr immer zuerst durch das Hetzner-Gateway des privaten Netzwerks laufen. Damit dieser Verkehr jedoch unser OPNSense erreichen kann, benötigen wir eine Route. Die Route leitet dann den gesamten Verkehr vom Hetzner-Gateway zu unserer OPNSense weiter, von wo aus der Traffic dann weiter verarbeitet wird.
hcloud network add-route nat-network --destination 0.0.0.0/0 --gateway 10.0.1.1
Erstellen des router Servers
Wir werden nun unseren Router-Server erstellen, der der OPNSense-Server sein wird. Als erstes werden wir ihn mit dem {Debian 12 Image}
erstellen, da hetzner kein Image für OPNSense hat, mit dem wir den Server erstellen können. Der Typ ist ein {cx11}
, was für kleine bis mittelgroße Projekte ausreichend ist. Wir wollen kein IPv6 haben und es sollte in der Location {fsn1}
sein. es wird automatisch die {10.0.1.1}
IP im privaten Netzwerk bekommen.
hcloud server create --name router --type cx11 --image debian-12 --without-ipv6 --network nat-network --location fsn1
Erstellen des client Servers
Jetzt werden wir unseren Client-Server erstellen, der keine öffentliche IP4/IP6-Adresse haben wird – nur eine private IP aus unserem nat-Netzwerk. Wir erstellen ihn mit dem {debian-12-Image}
und der Server wird sich im {fsn1}
-Rechenzentrum befinden. Er ist auch vom Typ {cx11}
, denn wir werden später einfach einen nginx laufen lassen, um das NAT zu testen. Bitte notieren Sie sich das Root-Passwort dieses Servers, um später eine Verbindung herstellen zu können. Es wird automatisch die {10.0.1.2}
IP im privaten Netzwerk erhalten.
hcloud server create --name client --type cx11 --image debian-12 --without-ipv4 --without-ipv6 --network nat-network --location fsn1
Booten des OPNsense ISO\’s
Da es kein fertiges Image für OPNSense gibt, um einen Router zum Laufen zu bringen, müssen wir ihn selbst per ISO installieren. Wir müssen also das ISO an den Router-Server anhängen.
Um das richtige ISO zu finden, geben Sie einfach diesen Befehl ein, der eine Liste von OPNSense-ISOs zurückgibt. Die Versionen sind in absteigender Reihenfolge, Sie sollten also den untersten Namen wählen. In unserem Beispiel ist es {OPNsense-24.1-dvd-amd64.iso}
.
hcloud iso list -o columns=name | grep OPNsense
Jetzt können wir die richtige ISO-Datei an dem Router-Server einhängen:
hcloud server attach-iso router OPNsense-24.1-dvd-amd64.iso
Nachdem die ISO angehängt wurde, müssen wir den Server neu starten, damit die ISO gebootet wird:
hcloud server reset router
Nun können Sie die VNC-Konsole in der Hetzner Cloud Console verwenden, um die Installation selbst durchzuführen.
OPNsense vorbereiten
Wenn der Server hochfährt, wird er versuchen, alles automatisch zu konfigurieren – das funktioniert nicht gut! Warten Sie also, bis er fertig ist und melden Sie sich dann als {root}
mit dem Passwort {opnsense}
an, damit wir ihn selbst konfigurieren können.
Nun sehen Sie ein Menü mit mehreren Optionen, die Sie treffen können. Wir wählen zuerst {1) Assign interfaces}
und drücken {Enter}
:
Do you want to configure LAGGs now? -> N
Do you want to configure VLANs now? -> N
Enter the WAN interface name […] -> vtnet0
Enter the LAN interface name […] -> [PRESS ENTER]
Enter the Optional interface 1 […] -> [PRESS ENTER]
Do you want to proceed? -> Y
Nach einigen Sekunden sollten Sie wieder das Menü sehen. Jetzt wählen wir {2) Set interface IP address}
und drücken {Enter}
:
Enter the number of the interface to configure -> 1 (Should be WAN)
Configure IPv4 address WAN interface via DHCP -> Y
Configure IPv6 address WAN interface via DHCP -> N
Enter the new WAN IPv6 address […] -> [PRESS ENTER]
Do you want to change the web GUI protocol from HTTPS to HTTP? -> N
Do you want to generate a new self-signed web GUI certificate? -> Y
Restore web GUI access defaults? -> Y
Nachdem wir einige Standardeinstellungen konfiguriert haben, wählen wir nun die Option {0) Logout}
, um zurückzukehren, wo wir das Installationsprogramm selbst ausführen können, um OPNsense auf die Festplatte zu schreiben und es dauerhaft zu machen.
Wenn Sie Ihre Anmeldemaske erhalten haben, melden Sie sich nun mit den Anmeldedaten {installer}
als Login und {opnsense}
als Passwort an. Damit wird das Installationsprogramm gestartet.
OPNsense Installation
Wenn das Installationsprogramm geladen ist, sehen Sie zunächst Folgendes:
Nun müssen wir unsere Tastaturbelegung auswählen. In meinem Fall werde ich Deutsch verwenden. Ihr könnt euch mit den Pfeiltasten auf eurer Tastatur bewegen und mit der Leertaste auswählen. Dann kommt man automatisch wieder zu
{Test de.kbd keymap}
. Ich weiß, dass es die richtige ist, also können wir mit dem Pfeil nach oben auf Continue with de.kbd keymap gehen und die Leertaste drücken.
Nun müssen wir die Art der Installation auswählen:
In meinem Fall werde ich UFS verwenden, da Speicherredundanz eigentlich kein Teil davon ist – und auch wenn es so wäre, würde ich ZFS nicht auf einem Cloud-Server verwenden – eher würde ich 2 weitere Router einrichten und daraus ein HA-Setup machen.
Im nächsten Schritt müssen wir die Platte auswählen, auf der wir das Betriebssystem installieren wollen:
Da sie bereits vorausgewählt ist, werden wir unsere
{da0}
verwenden, die die Standardfestplatte unseres Servers ist. Jetzt müssen wir sie nur noch mit {YES}
bestätigen:
Nachdem wir die Installation auf
{da0}
bestätigt haben, beginnt die Vorbereitung und danach das Schreiben auf die Festplatte:
Zeit für einen Kaffee!Nachdem die Installation abgeschlossen ist, wird folgendes angezeigt:
Nun ist es an der Zeit, Ihr Root-Passwort zu ändern. Nachdem Sie das Passwort geändert haben, verwenden Sie den folgenden hcloud-Befehl, um das ISO zu entfernen.
hcloud server detach-iso router
Nun können wir den Server neu starten, um OPNsense zu booten. Bitte verwenden Sie die hcloud anstelle der VNC-Konsole.
hcloud server reset router
Nachdem der Server neu gestartet wurde, können wir nun mit der Einrichtung von OPNsense fortfahren.
OPNsense Wizard
Nachdem wir die Grundinstallation erfolgreich abgeschlossen haben, können wir nun mit der Einrichtung von OPNsense beginnen. Nachdem das System neu gebootet wurde, müssen wir uns erneut an der VNC-Konsole anmelden (mit unserem Root-Benutzer und Passwort) und die Option {8) Shell}
verwenden und die Firewall deaktivieren, damit wir auf die Web-UI zugreifen können:
pfctl -d
Sie können nun die öffentliche IP-Adresse Ihres OPNsense-Servers mit dem https-Protokoll aufrufen. Sie werden eine Sicherheitswarnung erhalten, da OPNsense ein selbstsigniertes Zertifikat verwendet. Ignorieren Sie dies einfach und melden Sie sich mit Ihren Root-Zugangsdaten an.
Nachdem Sie sich als root in der Web UI angemeldet haben, wird automatisch der Assistent gestartet, um einige grundlegende Konfigurationen von OPNsense vorzunehmen. Schauen wir uns an, was wir tun müssen:
Wenn der Assistent gestartet ist, klicken Sie einfach auf Weiter, um mit der Konfiguration von OPNsense zu beginnen.
Sie können einen eigenen Hostnamen und eine eigene Domäne definieren. In unserem Fall belassen wir es so, weil es eigentlich nicht relevant ist. Wir haben lediglich den primären und sekundären DNS-Server auf die rekursiven Nameserver von Hetzner konfiguriert, um DNS auflösen zu können. Sie können auch Cloudflare, Google oder jeden anderen rekursiven Nameserver verwenden. Den Rest können Sie so lassen, wie er ist.
Der nächste Schritt ist die Auswahl der Zeitzone. In meinem Fall habe ich Europa/Berlin gewählt.
Jetzt kommen wir zur grundlegenden WAN-Einrichtung. Der einzige wichtige Punkt ist die Deaktivierung der Option
{Block bogon networks}
am Ende der Konfiguration. Den Rest können Sie so lassen, wie er ist.
Wenn es um die Konfiguration des LAN geht, lassen wir es leer. Wir werden dies später tun, da wir sonst nicht auf die Web-UI zugreifen können. Zunächst benötigen wir eine Anti-Lockout-Regel.
Wenn Sie möchten, können Sie jetzt Ihr Root-Passwort ändern, falls Sie dies nicht bereits vor dem Neustart des Servers im Rahmen der Installation getan haben.
Jetzt haben wir den Assistenten beendet und müssen neu laden, um die Änderungen zu übernehmen. Aber Achtung! Die Firewall wird wieder eingeschaltet und wir können nicht auf die Web-UI zugreifen. Nachdem Sie auf Reload geklickt haben, besuchen Sie die VNC-Konsole erneut und geben Sie erneut
{pfctl -d}
ein, um wieder auf die Web-UI zugreifen zu können.
Bevor wir nun tiefer in die Konfiguration von OPNsense einsteigen, werden wir eine Anti-Lockout-Regel erstellen, damit wir trotzdem auf die OPNsense WebUI zugreifen können.
Gehen Sie zu: {Firewall -> Rules -> WAN}
und klicken Sie auf das orangefarbene +, um eine neue Regel hinzuzufügen. Im folgenden Screenshot sehen Sie, wie wir die Anti-Lockout-Regel erstellt haben:
Nachdem Sie die Regel wie im Screenshot beschrieben erstellt haben, speichern Sie die Regel und übernehmen Sie die Änderungen. Wenn die Benutzeroberfläche neu geladen wird (es dauert einige Sekunden), ohne dass die Benutzeroberfläche nicht abgerufen werden kann, haben Sie die Regel korrekt erstellt und wir können nun mit der Konfiguration des NAT fortfahren.
OPNsense NAT Setup
Wir können nun mit der Konfiguration des NAT beginnen. Da OPNsense möglicherweise das LAN als optionale Schnittstelle hinzufügen möchte, werden wir dies über die VNC-Konsole tun.
Besuchen Sie die VNC-Konsole, melden Sie sich als root an und wählen Sie die Option {1) Assign interfaces}
. Hier sind die Antworten auf die Fragen:
Do you want to configure LAGGs now? -> N
Do you want to configure VLANs now? -> N
Enter the WAN interface name […] -> vtnet0
Enter the LAN interface name […] -> vtnet1
Enter the Optional interface 1 […] -> [PRESS ENTER]
Do you want to proceed? -> Y
Jetzt wählen wir die Option {2) Set interface IP address}
. Hier sind die Antworten auf die Fragen:
Enter the number of the interface to configure -> 1 (Should be LAN)
Configure IPv4 address LAN interface via DHCP -> Y
Configure IPv6 address LAN interface via DHCP -> N
Enter the new WAN IPv6 address […] -> [PRESS ENTER]
Do you want to change the web GUI protocol from HTTPS to HTTP? -> N
Do you want to generate a new self-signed web GUI certificate? -> N
Restore web GUI access defaults? -> N
Wie ich bereits erwähnt habe, ist das private Netzwerk von Hetzner ein Layer 3 Netzwerk, daher müssen wir den gesamten Datenverkehr über das Hetzner Gateway routen, welches in unserem Fall die IP {10.0.0.1}
ist. Wir haben bereits eine Regel auf der Hetzner Cloud Console erstellt, um den gesamten Datenverkehr zum OPNsense zu leiten, aber wir müssen noch die Route erstellen, die das private Netzwerk für den OPNsense erreichbar macht:
Gehen Sie zu {System -> Routes -> Configuration}
und fügen Sie eine neue Route hinzu. Sehen Sie sich den Screenshot an, um zu erfahren, wie Sie die Route richtig einrichten:
Speichern und übernehmen Sie die Änderungen.
Jetzt müssen wir zu {Interfaces -> Settings}
gehen und {Disable hardware checksum offload}
deaktivieren ankreuzen und es speichern.
Gehen Sie nun zu {Firewall -> NAT -> Outbound}
und setzen Sie den Outbound NAT Mode auf {Hybrid Outbound NAT rule generation}
und speichern Sie die Änderungen.
NICHT ANWENDEN! Zunächst müssen wir eine Zuordnungsregel erstellen – klicken Sie dazu auf das orangefarbene + und richten Sie die Zuordnung wie im Screenshot gezeigt ein:
Die Änderungen immer noch nicht übernehmen!
Gehen Sie nun zu {Firewall -> Rules -> LAN}
und bearbeiten Sie die Regel mit der Beschreibung Default allow LAN to any rule. Ändern Sie die Source von {LAN subnets}
auf {any}
– speichern Sie und übernehmen Sie die Änderungen.
Nun können Sie erneut zu {Firewall -> NAT -> Outbound}
gehen und die Änderungen übernehmen.
Wir haben nun alle notwendigen Einstellungen vorgenommen, um OPNsense als NAT-Gateway für unsere Clients zu verwenden. Wir werden nun den Client vorbereiten.
Client Netzwerk Setup
Damit unser Layer-3-Routing korrekt funktioniert, benötigt der Client also noch eine Standardroute zum Netzwerk-Gateway {10.0.0.1}
. Um dies zu erreichen, müssen wir das Netzwerk des Clients konfigurieren.
Öffnen Sie eine neue Datei in {/etc/network/interfaces.d/}
– zum Beispiel mit dem Namen der Schnittstelle {ens10}
. Dort konfigurieren wir nun das Client-Netzwerk wie folgt:
auto ens10
iface ens10 inet dhcp
post-up ip route add default via 10.0.0.1
dns-nameservers 185.12.64.1 185.12.64.2
Jetzt müssen wir noch das Netzwerk neu starten, um die Änderungen zu übernehmen:
systemctl restart networking.service
Wenn Sie nun versuchen, einen Traceroute durchzuführen – zum Beispiel zu google.com:
traceroute google.com
dann werden Sie sehen, dass die Namensauflösung funktioniert und dass Ihre Anfrage an {10.0.0.1}
(Netzwerk-Gateway) gelangt, das sie an {10.0.1.1}
(unser OPNsense) weiterleitet und dann das Upstream-Gateway {172.31.1.1}
verwendet. Das bedeutet, dass alles wie am Schnürchen läuft.
Fazit
Die Einrichtung eines OPNsense als NAT-Gateway bei Hetzner ist eine leistungsstarke Lösung zur Verwaltung und Sicherung Ihres Netzwerkverkehrs. Wenn Sie die in diesem Leitfaden beschriebenen Schritte befolgen, können Sie ein robustes Gateway einrichten, das den Datenverkehr für Ihre Kunden innerhalb des Hetzner-Netzwerks effizient leitet.