Print
Category: OPNsense
Hits: 50355

Das Zusammenklicken von Serverinstanzen beim Cloudanbieter Hetzner geschieht denkbar einfach. So stehen Betriebssysteme wie Debian oder auch Firewall Appliances wie pfsense zur Verfügung, welche man je nach eigenen Bedürfnissen eingebunden werden können. Das Hinzufügen weitere Server geschieht in Sekunden, genauso können snapshots angelegt werden, die uns im Notfall wieder zur vorherigen Konfiguration zurückführen. Der nächste logische Schritt ist es nun all diese Vorteile mit der heimischen Proxmox Umgebung zu verbinden. Im Ergebnis entsteht eine Hybrid-Cloud, dessen Server man beliebig und je nach Zweck ausrollen und verwenden kann.

Die Kommunikation zwischen unseren Instanzen verläuft über eine einfach zu konfigurierende Wireguard VPN Verbindung. Der jeweilige Endpoint unseres site-to-site Tunnelnetzwerks bildet eine pfsense bei unserem Cloudanbieter und eine OPNsense in einer Proxmox Umgebung auf der Gegenseite. Zudem sind die Netzteilnehmer unser Proxmox Konfiguration per VLAN angebunden. Die Zusammensetzung des VLAN Setups entspricht der Art und Weise wie in der Anleitung dargestellt (Proxmox - Bonds/Bridges/VLANs) Um unser gesammtes Setup zu testen installieren wir in der Hetzner Cloud einen Pihole Server, welcher ganz ohne öffentliche IP Adresse auskommt und über die pfsense kommuniziert.


1.) Vorbereitungen

1.1) Netzwerk erstellen
1.2) Server hinzufügen
1.3) ISO Image einbinden
1.4) initiale pfsense Einrichtung

2.) Konfiguration der pfsense

2.1) Grundlegendes
2.2) WireGuard auf der pfsense installieren
2.3) Tunnelkonfiguration auf der pfsense Oberfläche
2.4) Firewall einrichten
2.5) Tunnelinterface konfigurieren
2.6) Firewallregeln für Tunnel konfigurieren
2.7) Gateway hinzufügen
2.8) Statische Route hinzufügen

3.) Konfiguration der Opnsense

4.) Tunnelkonfiguration auf der pfsense

5.) Installation von pihole

5.1) Server ausrollen
5.2) Route anlegen
5.3) Hetzner Gateway hinzufügen
5.4) Internet Konnektivität herstellen
5.5) Nameserver hinzufügen
5.6) Netzwerkadapter dauerhaft konfigurieren
5.7) Docker installieren
5.8) Pihole installieren

1.) Vorbereitungen

1.1) Damit unsere Server später auch miteinander kommunizieren können, erstellen wir zunächst ein Netzwerk. In der Hetzner Cloud bewegen wir uns nach "Networks" -> "Netzwerk erstellen". Folgende Einstellungen müssen festgelegt werden:

Sobald der Netzwerkbereich erstellt ist, wird automatisch ein Subnetz mit dem Bereich 10.50.0.0/16 angelegt.

1.2) Als nächstens rollen wir einen Server aus, welcher uns für die Einrichtung der pfsense dienen wird. Unter "Server" -> "Server hinzufügen" verwenden wir folgende Einstellungen:

Um den Server abschließend Fertigzustellen klicken wir auf die Schaltfläche "kostenpflichtig erstellen"

1.3) ISO Image einbinden und Installationsprozess anstoßen

Nachdem der Server erstellt worden ist, binden wir das pfsense ISO-Image ein. Dazu durchlaufen wir die folgenden Schritte:


1.4) Initiale pfsense Einrichtung

2.) Konfiguration der pfsense

2.1) Grundlegendes

Zurück auf der Weboberfläche der pfsense lassen wir uns die Firewallregeln unserer WAN Schnittstelle anzeigen. Die dort hinterlegte Regel wurde automatisch erstellt und versetzt uns in die Lage die Weboberfläche über den Port 443/80 zu erreichen. Dies gilt so lange bis wir kein LAN Interface hinzufügen, welches wir jetzt nachholen werden. Dazu bewegen wir uns auf der Hetzner Cloud Oberfläche zum Menüpunkt "Server" -> "Networking" -> "Netzwerk anhängen" -> und wählen das weiter oben schon erstellte Netzwerk 10.50.0.0/16 aus. An dieser stelle wählt die Hetzner Cloud Umgebung automatisch die IP 10.50.0.2 für unsere pfsense Instanz aus. Das Gateway ist weiterhin unter der IP 10.50.0.1 erreichbar. Die Firewall erkennt nun das angehängte Netzwerk als LAN Netzwerk, welches sofort unter Interfaces -> Assignments auf der pfsense Oberfläche sichtbar wird. Dort verwenden wir den Schaltfläche "Hinzufügen". Auf der folgenden Seite aktivieren wir die Schnittstelle mit "enable" und verwenden DHCP für die Adressvergabe.
Pfsense erkennt ab diesem Zeitpunkt das ein lokales Netzwerk vorhanden ist und sperrt den Zugang über das WAN Netzwerk. Um sich wieder verbinden zu können müssen wir den Befehl "pfctl -d" in der Konsole verwenden, welche temporär alle Regeln deaktiviert. Wir fügen eine Firewallregel unter "Firewall" -> "Rules" -> "WAN" hinzu.

wir speichern die Regel und wenden die Veränderungen an. Von nun an ist die Firewall über das WAN Interface wieder erreichbar.

2.2) WireGuard auf der pfsense installieren

Wir suchen unter "System" -> "Package Manager" -> "Available Packages" das passende Installationspaket. Das Paket mit dem Namen "WireGuard" wird über die Schaltfläche "Install" installiert. Anschließend gehen wir über "VPN"->"Wireguard" -> "Settings" zu den Einstellungen und aktivieren mit "Enable WireGuard" das entsprechende Programmpaket.

2.3) Tunnelkonfiguration auf der pfsense Oberfläche

Unter dem Menüpunkt "VPN" -> "Wireguard" -> "Tunnels" verwenden wir den Button "Add Tunnel". Zunächst vergeben wir eine Bezeichung für die Tunnelverbindung, z.B. "VPN / Proxmox".
In dem Feld "Listen Port" tragen wir den Standardport für Tunnelverbindungen ein, nämlich 51820. Dannach lassen wr uns das Schlüsselpaar aus private und public key generieren. Als nächstens benennen wir das Tunnelnetzwerk welches zwischen Server und Client verwendet werden soll, etwa 10.50.1.1/24

2.4) Firewall Ports öffnen

Damit die verwendeten Ports beim Aufbau des Tunnels auch geöffnet sind, muss die folgenden Regel eingerichtet werden. Dazu öffnen wir unter "VPN" -> "Rules" -> "WAN" die Firewallregeln.

(alle anderen Einstellungen verbleiben unverändert, danach speichern wir ab und wenden die Änderungen an)


2.5) Tunnelinterface konfigurieren

Nachdem die Konfiguration des Tunnels wie unter Punkt 2.3 beschrieben angelegt worden ist, erscheint unter dem Menüpunkt Interfaces -> Interface Assignments ein neues Tunnelinterfaces, welches wir mit "Add" hinzufügen. Um die nötige Konfiguration des Interfaces anzupassen wählen wir den Menüpunkt "OPT1" und vergeben den entsprechenden Interfacenamen, z.B. "ProxmoxWireguard"
Zudem wählen wir "Static IPv4" bei der Adressvergabe aus. Unter dem Punkt "Static IPv4 Configuration" vergeben wir die IP Adressbereich aus, hier 10.50.1.1/24.

2.6) Firewallregeln für Tunnelinterface anlegen

Durch das Anlegen eines Tunnelinterfaces ändern sich die Auswahlmöglichkeiten bei den Firewallregeln. Dort erscheint nun das neue Interfaces mit dem Namen, welchen wir angegeben haben, hier "ProxmoxWireguard". Ratsam ist eine Regel zu setzen, welche sämtlichen Datenverkehr aus dahinterliegenden Netzerken durch das Tunnelinterface zulässt. Dazu belassen wir nach der Erstellung der Regel alle Einstellungen auf "any", auch das Protokoll wird auf "any" eingesellt. Abschließend speichern wir die Regel ab und aktivieren diese.

2.7) Gateway hinzufügen

Damit die pfsense das umliegende Netzwerk in der Cloud erreichen kann, brauchen wir ein Gateway. Dazu klicken wir auf "Add" und nehmen die folgenden Einstellungen vor, welche wir abspeichern:

2.8) Statische Route hinzufügen

In unserem Fall befindet sich Proxmox im Netzwerk 192.168.2.0/24, welches wir jedoch hier nicht benutzen. Stattdessen verwenden wir das dahinter liegende VLAN Netzwerk mit der Netzwerkadresse 192.168.10.0/24, welches wir als Destination Network eingeben. Unter Gateway tragen wir unser Gateway ein, welches wir im vorherigen Schritt erstellt haben.

3.) Konfiguration der opnsnese

WireGuard muss zuerst auf unserem Peer (OPNsense) über den Paketmanager eingerichtet werden. Um einen neuen Peer zu erstellen klicken wir unter "Endpoints" auf "add". Im Auswahlfenster nehmen wir folgende Einstellungen vor:

Als nächstens legen wir unsere lokale Konfiguration an, indem wir auf der OPNsense die Auswahl mit "Local" -> "Add" aufrufen. Dort verwenden wir folgende Daten:

4.) Tunnelkonfiguration auf der pfsense:

Falls noch nicht geschehen, ist es nötig die Interface Keys in der pfsense zu generieren. Dazu bewegen wir uns zu "VPN" -> "WireGuard" -> "Tunnels" -> "Edit". Dort generieren wir den public key wie auch den priavte key. Bevor wir abspeichern vergeben wir noch einen Namen für den Tunnel. Der public key dient uns nun für den Enpoint der OPNsense, welchen wir unter "Endpoint" in der opnsense einfügen. Zurück zur pfsense. Dort konfigurieren wir unseren Peer wie folgt:

Nach Abschluss der Tunnelkonfiguration steht unsere Verbindung und es sollten zumindest ein kB an Daten bereits über die Schnittstelle laufen.

5.) Pihole Installation

5.1) Server ausrollen

Nachdem unser Setup samt Netzwerktunnel soweit ausgerollt ist, können wir damit beginnen Serverkomponenten in der Hetzner Cloud hinzuzufügen. Besipielhaft soll dies anhand eines pihole geschehen welchen wir wie gehabt auf einen Debian CX11 Server laufen lassen. Die Besonderheit ist nun, dass wir an dieser Stelle die öffentlichen Adressen abwählen können, denn unsere Kommunikation soll ausschließlich die pfsense übernehmen. Wir brauchen deshalb nur das private Netzwerk, welches wir auswählen und mit dem vorhanden Cloudnetzwerk 10.50.0.0/16 verbinden. Alle weiteren Optionen können unverändert bleiben.

5.2) Route anlegen

Damit unser Traffic vom pihole oder auch jede andere Komponente über die pfsense kommuniziert müssen wir eine Route anlegen. Dazu wählen wir unter "Networks" -> "HetznerCloud" -> "Netzwerk" auswählen -> "Routen" -> "Route hinzufügen". Dort geben wir als Ziel 0.0.0.0 ein und wählen als Gateway 10.50.0.2 (entspricht unserem LAN Netzwerk der pfsense)

5.3) Hetzner Gateway hinzufügen

Damit die Daten des neuen Nerzwerkteilnehmers auch über das Hetzner Gateway und dann zur pfsense laufen, muss noch eine weitere route angelegt werden. Wir öffnen dazu die Konsole und setzen die route mit folgendem Befehl:

ip route add default via 10.50.0.1

5.4) Internetkonnektivität herstellen

Damit unser Server auch über das Internet kommunizieren kann, müssen wir zunächst eine "Outbound NAT" Regel einrichten. Dazu gehen wir unter "Firewall" -> "NAT" -> "Outbound" und wählen "Hybird Outbound NAT" aus und speichern die Auswahl ab. Dann wählen wir "Add" (Add new mapping to the end of the list) und setzen die Optionen

5.5 Nameserver hinzufügen

Um nun auch Internetadressen auflösen zu können müssen wir die Nameserver hinzufügen. Dazu öffnen wir die Konfigurationsdatei mit dem folgenden Befehl und fügen die Adressen hinzu.

nano /etc/resolv.conf

nameserver 1.1.1.1
nameserver 8.8.8.8

5.6 Netzwerkadapter dauerhaft konfigurieren

Soll nun dauerhaft  auch nach einem reboot die default route wie auch die nameserver hinterlegt werden, muss die Interfaces Konfigurationsdatei wie folgt angepasst werden. Den dazugehörigen Netzwerkadapter lautet in diesem Fall ens10 und kann mit dem Befehl ip a nachgeschlagen werden. Anschließend speichern wir ab und starten das Netzwerk neu. Mit ip route pfrüfen wir ds Ergebnis.

nano /etc/network/interfaces

auto ens10
iface ens10 inet dhcp
up ip route add default via 10.50.0.1
dns-nameserver 1.1.1.1

systemctll restart networking.service

ip route

5.7 Docker Installation

sudo apt update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo apt install apparmor-utils


5.8 Pihole installieren

Nachdem Docker auf unserem System installiert ist, brauchen wir das unter github.com/pi-hole/docker-pi-hole zu findende Installationscript. Dieses fügen wir in eine .yml Datei ein und speichern ab. Anchließend starten wir das Installtionscript.

nano docker-compose.yml

docker-compose up -d

Ab diesem Punkt werden nun DNS Anfragen über unseren pihole Server beantwortet.