In den bisherigen Beiträgen zur Konfiguration von Proxmox berücksichtigten wir zunächst nur das Hinzufügen von Bridges zu unserem Setup. Auch war es bisher so, dass nur eine Netzwerkkarte die Kommunikation übernahm. Im Folgenden setzen wir eine Dual Netzwerkkarte mit zwei Netzwerkports in unseren Host ein. Damit sind wir in der Lage zwei Verbindungen zu einem Bond zusammenzufassen, welches in der Terminologie als Link Aggregation bezeichnet wird.
Einem Bond liegen in unserem Fall zwei Netzwerkinterfaces zu Grunde, welche auch für das Management unserer PVE zur Verfügung stehen. Wo vormals die vmbr0 als standardmäßige Bridge konfiguriert war, tritt an dessen Stelle nun ein bond0, welches IP Adresse und Gateway übernimmt. Außerdem werden neben einem Bond auch VLANs zu unserem Setup hinzugefügt.

Schematisch sieht unser Setup wie folgt aus:

Unser Vorhaben gliedert sich wie folgt:

1. Herstellen der Anfangskonfiguration
2. Herstellen der erweiterten Konfiguration
3. Konfiguration der OPNsense
4. Eingliederung der VMs in unser Setup
5. Konfiguration der Firewall-Regeln
6. Konfiguration des Switches

verwendete Hardware: Netgear GS308EP


1. Herstellen der Anfangskonfiguration

Im ersten Schritt stellen wir eine Anfangskonfiguration her mit nur einem Bond und einer Bridge vmbr0. In der PVE sähe das aus wie folgt:



1.1 Hinzufügen eines Bonds

"Network" -> "Create" -> "Linux Bond"

  • Name: bond0
  • slaves: Name der Netzwerk-Devices z.B. enp3s0f0 / enp320f01
  • Bond mode: balance-xor
  • Hash policy: layer2+3


1.2. Hinzufügen einer Bridge

"Netzwerk" -> "Create" -> "Linux Bridge"

  • Name: vmbr0
  • IPv4: 192.168.2.155/24 (gleiche Management IP wie gehabt)
  • Gateway: unverändert
  • VLAN aware: aktiv
  • Bridge ports: bond0
  • Comment: Proxmox Management

2. Herstellen der erweiterten Konfiguration

In der erweiterten Konfiguration fügen wir unserem Setup VLANs und weitere Bridges hinzu. Im Ergebnis sollte dies wie folgt aussehen

2.1. Hinzufügen von weiteren Linux VLANs

"Network" -> "Create" -> "Linux VLAN"

  • Name: bond0.1 (Hinweis: an dieser Stelle müssen VLANs zu einem bestehenden Interface hinzugefügt werden. Dazu setzen wir das in Schritt 1 geschaffene bond0 Interface ein)

Es können nach Belieben weitere VLANs auf Basis unseres bond0 hinzugefügt werden, etwa bond0.10, bond0.20, bond0.30, etc.


2.2 Hinzufügen weiterer Linux Bridges

Sind alle VLANs in Schritt 2.1 hinzugefügt worden, können auf Basis der VLANS die zugehörigen Bridges erstellt werden.

"Network" -> "Create" -> "Linux Bridge"

  • Name: vmbr1
  • Bridge ports: bond0.10

Genauso verfährt man auch mit der nächsten Bridge. Je nachdem wie viele VLANs wir zur Verfügung haben, können weitere Bridges hinzugefügt werden.

  • Name: vmbr2
  • Bridge ports: bond0.20

etc.

3. Konfiguration der OPNsense

3.1 Hinzufügen der Bridges

In unserer PVE Umgebung werden nun sämtliche Netzwerkbrücken, die wir unter Punkt 2.1 erstellt haben, der OPNsense hinzugefügt. Dazu klicken wir unter "Add" -> "Network Device"
und wählen nacheinander einzeln jede vorhandene Bridge aus. Im Ergebnis sollte es so sein, dass wir der OPNsense die gleiche Anzahl an Netzwerk Devices wie vorhandene Bridges hinzufügen.

3.2 Assign Interfaces

Danach wechseln wir zur Konsole der OPNsense und wählen die Option "Assign interfaces" aus. Dann vergeben wir für jedes Interface ein Netzwerknamen. Sind alle Eingaben getätigt, erhalten wir folgendes Bild

3.3 Vergabe der IP-Adressen

Nun wählen wir eine VM aus, welche Zugang zur LAN Schnittstelle der OPNsense besitzen soll. Dazu reicht es aus das "Network Device" mit der entsprechenden Bridge zu versehen, hier vmbr1. Nach dem Aufrufen der Konfigurationsoberfläche im Browser, welche uns nun zur Verfügung steht, wechseln wir zur Option "Interfaces" -> [OPT1] und tätigen folgende Einstellungen:

  • Enable: enable Interface
  • IPv4 Configuration Type: Static IPv4
  • IPv4 address: 192.168.20.1/24

Wurden in Schritt 2.2 weitere Bridges, etwa vmbr3, hinzugefügt wird wie für das Interface [OPT1] verfahren. Für die weiteren Interfaces werden IP-Adressen entsprechend der VLAN ID vergeben. Also für [OPT2] die Adresse 192.168.30.1/24, usw. Zusätzlich müssen jedes Interface (hier: [LAN] und [OPT1]) der DHCP Server eingerichtet werden. Dazu wechseln wir zu "Services" -> "DHCPv4" -> [LAN] und setzen den Haken auf "enable". Weiter unten braucht es noch die Einstellung zur Range, welche wir frei wählen können. Gleichermaßen verfahren wir mit den restlichen Interfaces.


4. Eingliederung der VMs in unsere Setup

Damit unsere VMs in das richtige VLAN Netz eingegliedert werden, müssen sie mit der entsprechenden Bridge versehen werden. Dazu gehen wir unter "pve" -> "VM" bzw. Container" -> "Network" und editieren das Netzwerkinterface unter Verwendung der richtigen Bridge.

5. Konfiguration der Firewall-Regeln

Für die Kommunikation der VMs ist es erforderlich, dass die Firewallregeln geändert werden. Zu Testzwecken reicht es aus, den ein- und ausgehenden Datenverkehr mit Hilfe einer "allow all" Regel zu versehen. Anschließend sollte von Seiten der VMs ein Ping ins Internet erfolgreich sein.

6. Konfiguration des Switches:

Bei der Verwendung eines Netgear Switches GS308EP, wie es bei unserem Setup der Fall ist, ist die Konfiguration in wenigen Schritten erledigt. Sind beide Netzwerkinterfaces der Proxmox Hosts mit dem Switch verbunden, können wir die Link Aggregation aktivieren. Die Einstellungen dazu sind unter der Option Switching -> Link Aggregation zu finden. Sind beispielsweise die Ports 1 und 2 für das LAG verwendet worden, sieht die Konfiguration wie folgt aus:

Für die Konfiguration der VLANs verwenden wir "Einfaches 802.1Q-VLAN". Die bei der LAG Einstellung benutzten Ports 1 und 2 müssen nun als Trunkport eingerichtet werden. Zusätzlich
müssen je nachdem welche Endgeräte für die VLANs verwendet werden sollen, die VLAN IDs vergeben werden.

Das folgende Proxmox Setup soll aufzeigen, wie grundlegende Netzwerkkomponenten in Proxmox eingerichtet werden. Neben dem Bereitstellen von VMs und Containern sind es auch die Bridges, welche beim Aufbau eines Netzwerks ein zentraler Bestandteil bilden. Proxmox erfordert in seiner aktuellen Version die Konfiguration einer Bridge für jede VM, welche im PVE erstellt wird. Auch ist es möglich, mehrere VMs über die gleiche Bridge anzubinden, sodass der beteiligte Datenverkehr über eben diese Bridge verläuft.

Eine Bridge kann einer physischen Netzwerkkarte zugeordnet werden, sodass ein Datenverkehr z.B. ins Internet möglich ist. Wird eine Bridge ohne physische Zuordnung konfiguriert kann kein Datenverkehr von angeschlossenen VMs außerhalb einer Node stattfinden. Die Bridge fungiert in diesem Fall als ein Switch. Die Nomenklatur zur Benennung von Bridges beginnt mit der Bezeichnung vmbrX. Bei Neuinstallation einer PVE Umgebung wird standardmäßig eine Bridge mit dem Namen vmbr0 erstellt.

In unserer Beispielkonfiguration sollen zwei Bridges die Kommunikation zwischen den VMs separieren. Dabei wird eine Bridge vmbr0 einem physikalischen Netzwerkadapter zugeordnet. An dieser hängen zwei VM, 1 und 2, welche direkt über einen Switch außerhalb der PVE Node kommunizieren können. Eine zweite Bridge, vmbr1, fungiert als einfacher Switch ohne physikalische Zuordnung. An vmbr1 sind die VMs 4 und 5 angeschlossen, welche den Datenverkehr über die Firewall, VM3, weiter an die Bridge vmbr0 leitet. Dementsprechend besitzt die Firewall zwei Netzwerkadapter, net0 und net1.

Durch die Verwendung weiterer Bridges, etwa vmbr2, können weitere isolierte Gruppen von Netzwerkteilnehmern geschaffen werden. Wird an unserer Firewall ein weiterer Netzwerkadapter hinzugefügt, kann dieser wiederum mit einem weitern Switch kommunizieren. Die neue Gruppe von VMs wären wie die Teilnehmer an vmbr1, isoliert.


Zur Umsetzung unseres Vorhabens gehen wir folgende Schritte durch:

1. Hinzufügen einer Bridge, vmbr1
2. Installation/Konfiguration der OPNsense Firewall
3. Anschluss weitere VMs an unser Setup


1. Hinzufügen einer Bridge, vmbr1

Zunächst fügen wir unserem Proxmox VE eine neue Bridge hinzu. Dazu klicken wir unter "pve" -> "System" -> "Network" auf "Create" und wählen
"Linux Bridge" aus. Wir belassen im neunen Fenster alle Eigenschaften wie vorgegeben und wählen "Create".

2. Installation/Konfiguration der OPNsense Firewall

  • Um die OPNsense, welche wir als Firewall verwenden, zu installieren, erstellen wir zuerst eine eine VM, indem wir auf den Button "Create VM" klicken
  • Im neuen Fenster muss ein beliebiger Name für die Firewall vergeben werden, etwa OPNsense.
  • Nun binden wir das ISO-Image ein, indem wir dessen Storage auswählen. Dazu muss zuvor, falls noch nicht geschehen, das ISO Image zunächst hochgeladen werden. Alles andere belassen wir auf den Voreinstellungen
  • Ebenso übernehmen wir die Einstellungen bei den verbliebenen Reitern und Bestätigen unsere Auswahl mit "Confirm"
  • Nach Erstellung unserer VM fügen wir unserer VM einen weiteren Netzwerkadapter hinzu. Dazu klicken wir unter dem Menüpunkt "Hardware" und "Add" auf "Network Device". Anschließend wählen wir die neu hinzugefügte Bridge, vmbr1, aus und klicken auf "Add"
  • Wir starten unsere VM und wechseln unsere Ansicht zur Console. Nach Durchlaufen des Bootvorgangs und Eingabe von Benutzername/Passwort (installer/opnsense) starten wir den Installationsprozess. Zunächst gelangen wir zur Installerseite, welche uns auffordert das Tastaturlayout auszuwählen. Anschließend wählen wir den UFS Installationsmodus aus und installieren OPNsense auf unsere Harddisk, welche wir ebenfalls auswählen. Nachdem wir zweimal bestätigen startet der Installationsprozess. Ist dieser beendet müssen wir einen Reboot durchführen.

Nach Durchlaufen der Installation und Eingabe von Benutzername/Passwort (root/opnsense) erhalten wir eine Übersicht der verwendeten Netzwerkadapter vtnet1 und vtnet0.

In unserem Fall verwendet das LAN Netzwerk vtnet1 und das WAN Netzwerk vtnet0. Die Zuordnung kann ggf. unter "Assign interfaces" angepasst werden. Dazu wählen den Menüpunkt (1) und durchlaufen die Konfiguration wie folgt:

Enter an option: 1

Do you want to configure LAGGs now? [y/N]:n
Do you want to configure VLANs now? [y/N]:n

Valid inerfaces are:

vtnet0
vtnet1

Enter the WAN interface name or 'a' for auto-detection:vtnet0

Enter the LAN interface name or 'a' for auto-detection:vtnet1

Enter the Optional interface 1 name or 'a' for auto-detection:Enter

The interfaces will be assigned as follows:

WAN -> vtnet0
LAN -> vtnet1

Do you want to proceed? [y/N]:y

Unter dem Unterpunkt "Set interface IP address" passen wir nach Bedarf die IP-Adresse des LAN und WAN Netzwerks an. In unserem Fall wurden für den WAN Netzwerk die Anfangseinstellungen korrekt eingesetzt, die wir deshalb übernehmen können. Exemplarisch sind die Einstellungen für das WAN Interface weiter unten angegeben. Die Einstellungen für das LAN Netzwerk können wie folgt gesetzt werden:

Enter an option: 2

Available interfaces:

1 - LAN (vtnet1 - static)
2 - WAN (vtnet0 - dhcp, dhcp6)

Enter the number of the interface to configure: 1

Configure IPv4 address LAN interface via DHCP? [y/N] n

Enter the new LAN IPv4 address. Press <ENTER> for none:
> 192.168.50.1

Subnet masks are entered as bit counts (like CIDR notation).
e.g. 255.255.255.0 = 24
255.255.0.0 = 16
255.0.0.0 = 8

Enter the new LAN IPv4 subnet bit count (1 to 32):
24

For a WAN, enter the new LAN IPv4 upstreeam gateway address.
For a LAN, press <ENTER> for none: Enter

Configure IPv6 address LAN interface via WAN tracking? [Y/n]n
Configure IPv6 address LAN interface via DHCP6? [y/N]n

Enter the new LAN IPv6 address. Press <ENTER> for none:Enter

Do you want to enable the DHCP sever on LAN? [y/N]:y

Enter the start address of the IPv4 client address range:192.168.50.50
Enter the end address of the IPv4 client address range:912.168.50.150

Do you want to change the web GUI protocol from HTTPS to HTTP? [y/N] n
Do you want to gernerate a new self-signed web GUI certificate? [y/N] n
Restore web GUI access defaults? [y/N] n

Enter an option: 2

Available interfaces:

1 - LAN (vtnet1 - static)
2 - WAN (vtnet0 - dhcp, dhcp6)

Enter the number of the interface to configure: 2

Configure IPv4 address WAN interface via DHCP? [y/N] y

Configure IPv6 address WAN interface via DHCP6? [y/N] n

Do you want to change the web GUI protocol from HTTPS to HTTP? [y/N] n
Do you want to gernerate a new self-signed web GUI certificate? [y/N] n
Restore web GUI access defaults? [y/N] n


Die OPNsense gibt die Konfiguration wie folgt wider:



3. Anschluss weitere VMs an unser Setup


Nach vollendeter Konfiguration der Firewall können nun je nach Belieben weitere VMs dem Netzwerk hinzugefügt werden. Für den Zugriff auf die Firewall ist es nötig eine VM im LAN Netzwerk der Firewall einzurichten. Dazu konfigurieren wir den Netzwerkadapter so, dass dieser Teilnehmer Mitglied des LAN Netzwerks wird, indem wir den Netzwerkadapter unter "Hardware" -> "Network Device" -> "Edit" auf "vmbr1" stellen. Sollen weitere Netzwerkteilnehmer hinzugefügt werden verfahren wir gleichsam und ändern jeweils den Netzwerkadapter.

Die Schritte zur Einbindung einer Hetzner Storage Box in Proxmox lassen sich wie folgt darstellen:

1. Bereitstellung der Storage Box im Hetzner Robot
2. Vorrausetzungen für die Nutzung der Storage Box in der FRITZBox/Hetzner Robot herstellen
3. Einbinden der Storage Box in Proxmox.

1. Zunächst loggen wir uns in die Hetzner Cloud Konsole ein und manövrieren danach zum "Hetzner Robot". Unter dem Eintrag "Bestellung"
und "Storage Boxes BX" können wir je nach Bedarf die Größe unseres Speicherplatzes auswählen. Ist die neue Storage Box bestellt, taucht er in der Rubrik "Storage Box" im Hetzner Robot auf.


2.1 Samba/CIFS Option aktivieren

Voraussetzung bei der Nutzung des SMB/CIFS Storage Option unter Proxmox ist die Aktivierung der entsprechenden Funktion in Hetzner Robot. Dort muss unter dem Menüpunkt "Storage Box" der "Samba-Support" aktiviert werden.


2.2 NetBIOS-Filter deaktivieren

Bei Einsatz einer FRITZBox als Router ist wie folgt vorzugehen: Um den NetBIOS Filter zu deaktivieren gehen wir auf den Menüpunkt "Internet". Dann klicken wir auf den Unterpunkt "Filter" und anschließend auf die Registrierkarte "Listen". Nun lassen wir uns die Einstellungen "globale Filtereintellungen" anzeigen. Es erscheint die Option "NetBIOS-Filter aktiv", welche wir deaktivieren. Zum Schluss klicken wir auf "Übernehmen" um die Einstellungen zu speichern.

Was ist der NetBIOS-Filter und warum muss er deaktiviert werden? Das NetBIOS Übertragungsprotokoll dient dem Austausch von Datenpaketen innerhalb eines Netzwerks. Die heutige Implementierung von NetBIOS verwendet das TCP/IP Protokoll, welches die Nutzung auch außerhalb lokaler Netzwerke erlaubt. Der NetBIOS-Filter ist bei einer FRITZBox standardmäig aktiviert und blockiert die entsprechenden Datenpakte zwischen den Benutzern im Heimnetz und dem Internet. Von dieser Sperre betroffen sind die TCP- und UDP-Ports 139 und 445. Verfolgen lässt sich der Traffic leicht anhand einer Firewall wie OPNsense. Die Liveansicht der Protokolldaten ergibt so eine praktische Übersicht über Trafficnutzung per NetBIOS. Es bliebt jedoch zu berücksichtigen, dass bei Nichtverwendung von NetBIOS im Heimnetz eine Deaktivierung von NetBIOS aus Sicherheitsgründen angeraten ist.

3. Sind die Voraussetzungen in Router und Hetzner-Robot erfüllt, können wir mit der Einbindung der Storage Box in Proxmox beginnen. Unter "Datacenter" klicken wir auf den Menüunterpunkt "Storage" und anschließend auf "Add" und auf die Option SMB/CIFS. Auf dem nun erscheinenden Dialogfeld müssen wir die Daten eingeben, die uns die Storage Box bei Hetzner vorgegeben werden:

    • ID:<beliebiger Bezeichnung für die StorageBox>
    • Server:u******.your-storgaebox.de
    • Username:u******
    • Password:******
    • Share:backup <vorgegeben im Hetzner Robot>
    • Nodes:<z.B. pve>

  • Enable: aktiv
  • Content:<z.B. Disk image>
  • Domain:<leer>

Pihole zu einem lauffähigen Werbeblocker zu verwandeln gibt es viele Möglichkeiten. Doch zunächst zu der Frage, was ist Pihole bzw. was bietet es. Pihole ist in erster Linie ein leichtgewichtiger DNS Sever, welcher Webanfragen im heimischen Netzwerk entgegennimmt. Es übernimmt im Netzwerk sozusagen einen Sortierer, welcher intern mit Blocklisten arbeitet und auf diese Weise Werbeanfragen blockiert. Seine Benutzerfreundlichkeit erhält es durch eine durchdachte GUI, mit welcher die Verwaltung aller Einstellungen leicht von statten geht. Eine besonders praktische Möglichkeit bietet sich an, wenn man Pihole mit Docker kombiniert. Gerade Pihole als kleines Programm ist dazu prädestiniert die Vorteile, die Docker mitbringt auszunutzen. Aber was geschieht, denn Docker auf einen Virtualisierer wie Proxmox trifft? Auch dies ist möglich und das Ergebnis ist, dass sich ein Docker Host als Linux Container unter Proxmox sehr gut realisieren lässt. Welche Schritte nun notwendig sind, um Pihole auf dieser Umgebung einzurichten wird im Folgenden aufgezeigt.

1. LXC Container in Proxmox erstellen
2. Docker installieren
3. Portainer installieren
4. Pihole einrichten


1. LXC Container in Proxmox erstellen

Zunächst beginnen wir mit dem Herunterladen des Container Templates, indem wir unter "Storage" -> "Container Templates" -> auf "URL Herunterladen" oder "Hochladen" klicken, je nachdem wo sich die Datei befindet. Ist das Template erfolgreich heruntergeladen, erstellen wir unter "Erstelle CT" den Container mit den folgenden Eigenschaften:

  • Hostnamen vergeben
  • unprivilegierter Container
  • Kennwort vergeben und bestätigen
  • Template auswählen, welches wir weiter oben heruntergeladen haben, etwa debian-11-standard
  • Diskgröße: 20 GB
  • 1 Cores
  • 2048 MiB Speicher, 512 MiB Swap
  • IPv4: DHCP
  • Abschließen

Nach dem Erstellen des Containers stellen wir sicher, dass unter "Container" -> "Optionen" -> "Features" -> "keyctl" und "Nesting" ausgewählt sind. Anschließend starten wir den Container



2. Docker installieren

Um Docker installieren zu können schalten wir uns auf die Konsole des Containers mit unserem oben eingerichteten Benutzernamen/Passwort. Anschließend verwenden wir den Updatebefehl, um unseren Container auf den neusten Stand zu bringen:

apt update && apt upgrade -y

Um Docker einrichten zu können brauchen wir vorab folgende Programmteile, welche uns erlauben, HTTPS über den Packmanager zu nutzen.

apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Dann fügen wir den offiziellen GPG Schlüssel von Docker hinzu:

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Mit dem folgenden Befehl verwenden wir den Stable channel von unserem Repository

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

Um die Änderungen anzuwenden aktualisieren wir den Packetindex und installieren die neuste Version der Docker Engine.

apt-get update

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

Um sicherzustellen, dass Docker korrekt installiert wurde, laden wir uns mit folgendem Befehl das "Hello World" Image herunter.

docker run hello-world

3. Portainer installieren

Um Portainer nutzen zu können, wird zunächst ein Volume bereitgestellt, welches von Portainer für die Datenablage verwendet wird. Anschließend erzeugen wir den Portainer Container mit dem zweiten Befehl.

docker volume create portainer_data

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=unless-stopped -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

4. Pihole einrichten

Bevor wir mit der Installation von Pihole beginnen, erstellen wir mit dem folgenden Befehl zunächst zwei Volumes, die später von Pihole verwendet werden.

docker volume create pihole_app
docker volume create dns_config

Um im späterem Verlauf der Installation keine Fehlermeldung zu erhalten, müssen wir den Port 53 auf unserem Docker Server freigeben. Dazu rufen in Proxmox die Konsole von Docker auf und verwenden folgende Befehle:

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved

Anschließend konfigurieren wir die Datei /etc/resolv.conf

nano /etc/resolf.conf

und fügen diese Zeile hinzu

nameserver 8.8.8.8

und kommentieren die verleiben Nameserver aus.

Sind die Vorarbeiten erledigt, gehen wir in der Portainer Oberfläche auf "Containers" -> "Add Container". Dort vergeben wir zunächst einen Namen für unseren neunen Container. Danach müssen wir unser Image auswählen. Dazu geben wir folgendes ein:

pihole/pihole:latest

Als nächstens klicken wir auf "publish a new network port" und legen folgende Portkonfiguration an:

Host: 443 -> Container: 443 (TCP)
Host: 53 -> Container: 53 (TCP)
Host: 53 -> Container: 53 (UDP)
Host: 67 -> Container: 67 (UDP)
Host: 80 -> Container: 80 (TCP)

Anschließend gehen wir auf den Reiter "Volumes" unter "Advanced container settings" und verbinden unsere zuvor angelegten Volumes mit den Containern (auf "Bind" klicken). Dies muss folgendermaßen konfiguriert sein:

map addintional volume:


/etc/dnsmasq.d (/path/in/container)
/var/lib/docker/volumes/dns_config/_data (/path/on/host)

/etc/pihole (/path/in/container)
/var/lib/docker/volumes/pihole_app/_data (/path/on/host)


Als letztens fehlen noch die Umgebungsvariablen. Diese setzen wir wie folgt, indem wir unter "Env" klicken und dann zweimal auf "add environment variable" klicken. Als Namen setzen wir TZ (Timezone)
und WEBPASSWORD. Als Wert vergeben wir im ersten Fall Europe/Berlin und als zweites das Password für die Weboberfläche von Pihole.

Nachdem der Pihole Container läuft, können wir die weiter oben veränderte resolv.conf Datei auf den neusten Stand bringen, indem wir unserem Nameserver wie folgt setzen

nameserver 127.0.0.1

Der Pihole Server ist ab sofort unter http://<docker-IP>/admin erreichbar

Einzelnachweise:
https://docs.docker.com/engine/install/debian/
https://adamtheautomator.com/pihole-docker/
https://www.youtube.com/watch?v=9zL64m2RiRo
https://github.com/pi-hole/docker-pi-hole/#running-pi-hole-docker
https://github.com/portainer/portainer/issues/1918

Die Version 7 von Proxmox existiert schon etwas länger, hatte das Update aber bisher noch nicht auf der Prioritätenliste. Nun soll es aber soweit sein. Unser Updateprozess gliedert sich in zwei Schritte. Zunächst stellen wir sicher, dass wir das letzte Update unserer PVE Version eingespielt haben. Erst danach können wir das Update zur Proxmox VE 7.x durchführen. Wer bereits auf die letzte Version 6 geupdatet hat, kann den ersten Schritt überspringen.


1. Proxmox Update VE 6.x zur letzten Version 6.4

Um Unterbrechungen zu vermeiden, loggen wir uns in die Proxmox VE via ssh ein. Danach prüfen wir, ob unsere "sourcres.list" Datei korrekt eingerichtet ist. Dazu starten wir nano und öffnen die entsprechende Datei.

nano /etc/apt/sources.list

Die Datei sollte wie folgt aussehen:

deb http://deb.debian.org/debian buster main contrib

deb http://deb.debian.org/debian buster-updates main contrib

# security updates
deb http://security.debian.org buster/updates main contrib

Fehlende Einträge sind bei Bedarf zu ergänzen. Wir speichern die Datei und aktualisieren unsere Repositories mit

apt update

Danach setzten das Update auf die neuste 6.4er Version mit

apt dist-upgrade

in Gang. Im Anschluss rebooten wir unserer System und kontrollieren mit

pveversion -v

ob die Versionen die geupdatet worden sind.

2. Update Proxmox PVE 6.4 zu 7.x

Vorabbedingungen:

- Wie bereits in unserem ersten Schritt beschrieben, ist ein Update auf die letzte Proxmox VE 6.4 Version notwendig.

- Bei Nutzung von Hyper-converged Ceph gilt zuerst das Octopus Update durchzuführen. In unserem Fall nutzen wir kein Ceph, daher kann dieser Hinweis übersprungen werden.

- Ein weiterer Hinweis richtet sich an die Benutzer von Proxmox Backup Server, welche diesen auf dem selben Host laufen lassen, wie Proxmox VE. Denn in diesem Fall muss der Release für die Version Proxmox Backup Server 2.0 abgewartet werden.

- ist ein Cluster vorhanden, sollte dieser ohne Fehler lauffähig sein.

- Selbstredend ist, dass von allen vorhandenen VMs und CTs Backups angelegt werden müssen.

- Weiterhin sind wenigstens 4 GiB freier Festplattenplatz notwendig.

- Zur Kenntnisnahme bekannter Probleme bei der Durchführungen des Updates

Bevor wir zum eigentlichen Update zur Version 7 kommen, starten wir das Tool

pve6to7

Dazu starten wir mit Putty eine ssh Verbindung zur Proxmox VE und starten das Programm.

Die Ausgabe sollte ohne Fehlerhinweise durchlaufen. Sollten noch Gastbetriebssysteme aktiv sein, müssen diese heruntergefahren werden, damit keine Warnhinweise mehr auftreten. Ansonsten werden durch dieses Tool keine systemrelevanten Änderungen an der Proxmox VE durchgeführt.

Als nächsten Schritt empfiehlt sich für die von Proxmox verwendeten MAC-Adressen ein Hardcoding, welches sich für Benutzer von ifupdown2 jedoch erübrigt. An dieser Stelle sei die Installation von ifupdown2 für alle diejenigen angeraten, welche dies bisher noch nicht durchgeführt haben. Die Installation ist denkbar einfach und eine Anleitung ist unten verlinkt.

Anschließend empfiehlt sich das erneute aufrufen von apt update und apt dist-upgarde, um sicher zu gehen, dass wir auf dem neusten Stand sind.

Nun folgt das Update unserer Repositories hin zur Nutzung von Bullseye mit folgenden Befehl:

sed -i 's/buster\/updates/bullseye-security/g;s/buster/bullseye/g' /etc/apt/sources.list

Um die neuen Einträge unserer Repositories zu laden geben wir erneut

apt update

ein. Um nun unserer Update auf die Proxmox VE 7 zu starten brauchen wir folgenden Befehl

apt dist-upgarde

Die während des Updates erscheinenden Meldungen zur Behandlung von bestehenden Konfigurationsdateien bestätigen wir mit der Standardoption "N". Damit werden diese ohne Änderungen übernommen. Zudem tauchen im Verlauf zwei Dialogfenster auf. Dabei wird zum einen abgefragt, ob bestimmte Dienste während der Installation automatisiert gestoppt werden dürfen. Zum Anderen wird sichergestellt, ob die bestehende Konfiguration des ssh Dienstes beibehalten werden soll, was wir bestätigen können. Abschließend starten wir unser System mit folgenden Befehl neu:

reboot

Nach dem Durchlaufen des Updates können verwaiste Installationsdateien mit

apt autoremove

gelöscht werden.

Um sicher zu gehen, dass wir die neue Proxmox Version installiert haben, geben wir

pve --version

ein. Die Ausgabe sollte uns bestätigen, dass die Installation von PVE vollständig durchgelaufen ist.


Einzelnachweise:

https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0
https://pve.proxmox.com/wiki/Downloads#Update_a_running_Proxmox_Virtual_Environment_6.x_to_latest_6.4
https://technium.ch/proxmox-ifupdown2-installieren-tutorial/

Allein schon aus sicherheitstechnischen Überlegungen ist es angeraten, verfügbare Updates zeitnah einzupflegen. Tut man dies nicht, setzt man sich unnötig Risiken aus. Dabei steigt der Arbeitsaufwand für Aktualisierungen mit der Anzahl der verfügbaren Updates. Nutzt man Docker als Containerlösung, bietet sich Watchtower als Updatesoftware an, welcher voll automatisiert nach Updates für laufende Container sucht und diese updatet. Gerade beim Bereitstellen von Microservices ist damit ein wirksames Mittel gegen unübersichtliche Updatemaßnahmen gefunden. Ein anderes wirksames Tool zum Verwalten von Containern unter Docker ist Portainer. Portainer bietet dem Anwender eine graphische Benutzeroberfläche, welche gerade beim Verwalten von vielen Containern nützlich ist und für Übersichtlichkeit sorgt. Werden beide Tools kombiniert, ist das Verwalten von Containerupdates leicht zu bewerkstelligen. Selbst wenn einmal ein Update fehlschlägt, so ist dies weniger schlimm als der Einsatz ungepatcher Systeme, welche als Einfallstor für potenzielle Angreifer dienen könnten.

Das Einrichten von Watchtower ist mit nur einem Befehl möglich. Natürlich muss Docker-Daemon zunächst einmal installiert sein. Die Anleitung dazu, wie man Docker unter Proxmox einrichtet, ist z.B. auf dem Youtube-Kanal "apfelcast" zu finden. Deshalb gehe ich an dieser Stelle nicht näher auf die einzelnen Schritte der Einrichtung ein.

Der Befehl für die Installation von Watchtower lautet dann wie folgt:

docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/
docker.sock \
containrrr/watchtower

Ist der Befehl eingegeben, beginnt Watchtower mit der Arbeit und sucht für alle installierten Container Updates. Sind Updates vorhanden, werden diese heruntergeladen und die Container mit dem Update neu gestartet.

Die Option "-d" bewirkt, dass der Container im Hintergrund läuft. Der Name hinter dem Zusatz "--name" ist frei wählbar. Der Zusatz von "-v" ist wichtig für die Kommunikation von Watchtower mit der Docker API, da nur so ein Monitoring der Container möglich ist.  Sollen nur selektiv Container für Updates eingebunden werden, können diese als Argument hinter dem Befehl eingereiht werden. Geschieht dies nicht, werden sämtliche Container berücksichtigt. Normalerweise arbeitet Watchtower als Daemon, soll aber stattdessen ein einmaliger Updateprozess initiiert werden, hilft die Option "--run-once". Das Argument zum Schluss übergibt den Namen des Containers, welcher unter containrrr/watchtower in der Docker-Hub-Registry zu finden ist. Interessant ist auch die Möglichkeit zur Benachrichtigung über Email, dessen Einrichtung ebenso einfach über die Kommandozeile erfolgt. Dazu reicht es aus, an den obigen Befehl folgende Zeilen hinzuzufügen:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=email \
  -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress(at)gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress(at)gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress(at)mail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password \
  -e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \
  containrrr/watchtower

Wer diesem Beispiel folgt, benötigt ein Gmail Account, welcher leicht anzulegen ist. Zu berücksichtigen ist, dass der Google Dienst für die Benutzung unsicherer Geräte eingerichtet sein muss, um zu funktionieren. Ist dies erfolgt, sendet Watchtower Statusmitteilungen an die hinterlegte Email Adresse.

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.