3 min read

Nginx Proxy Manager und Pi-hole: Netzwerkumbau

In diesem Artikel geht es um den Rückbau des pfSENSE Projektes in meinem Heimnetzwerk und meine aktuell genutzte Technik.

Wie man unschwer an meinen bisherigen Artikeln erkennen konnte, nutzte ich pfSENSE und HAProxy als Reverse Proxy. Jedoch habe ich mich für einen Rückbau des pfSENSE Routers entschieden. Aktuell betreibe ich mein Heimnetzwerk (also Proxmox, TrueNAS und weitere private Geräte) nur hinter der FRITZ!Box, ohne eine zweite Firewall:

Hier eine Aufstellung der Aufgaben, die pfSENSE übernahm und mein Ersatz für diese:

pfSENSE Ersatz
Lokales DNS Pi-Hole lokales DNS
DHCP Fritz!Box
HAProxy Nginx Proxy Manager
ACME Certs Nginx Proxy Manager
pfBlockerNG Pi-Hole
VLANs -
Firewall -


Diese Tabelle zeigt, dass ich die am meisten genutzten Features von der pfSENSE mit Pi-Hole und Nginx Proxy Manager auffange. Meine Separierung des Netzwerks in zusätzliche VLANs (hauptsächlich zur Trennung von Smart Home Geräten und VMs genutzt) und die Firewall fällt jedoch weg. Nun aber der eigentliche Grund für die Umstellung:
Ich hatte in der pfSENSE kein IPv6 aktiviert. Die Fritz!Box habe ich dann vor wenigen Wochen entsprechend umkonfiguriert, aber auf der pfSENSE Firewall wollte IPv6 einfach nicht funktionieren. Und getreu des KISS-Prinzips habe ich mich dann entschieden, die Firewall zurückzubauen und auf die oben genannten Dienste zu wechseln.
Mir ist es nicht aufgefallen, dass ich IPv6 in 2022 komplett deaktiviert hatte. Ich hatte lediglich mit einem Dienst Probleme: ⁣
Ab und an funktionierte die Verbindung zur Seite von Komoot nicht. Es erschien ein Verbindungsfehler beim Aufrufen der Seite. Nach einigen Minuten und erneutem Neuladen konnte ich sie aber wieder erreichen. Für eine viel zu lange Zeit war mir nicht klar woran das Verhalten lag, heute ist klar: Der Load Balancer hat sowohl IPv4 als auch IPv6-Only Hosts, auf denen die Seite läuft. Zwischen diesen wurde ich dann dynamisch weiterverwiesen, was den spontanen Verbindungsverlust erklärt.

Nun gehe ich noch auf die beiden genutzten Projekte ein.

Nginx Proxy Manager

Hierzu ist eigentlich nicht viel zuzusagen, außer dass es direkt problemlos funktionierte.
Anfangs habe ich probiert ein ähnliches Setup wie auf meinem VPS einzurichten (Certbot + Nginx), dann entschied ich mich aber doch zu diesem Projekt, primär wegen der simplen Einrichtung:

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of 
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

  watchtower:
    container_name: watchtower
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_SCHEDULE=0 15 12 * * *
      - WATCHTOWER_CLEANUP=true
      - TZ=Europe/Berlin
      - WATCHTOWER_NOTIFICATIONS=email
      - WATCHTOWER_NOTIFICATION_EMAIL_FROM=peterge98@mailbox.org
      - WATCHTOWER_NOTIFICATION_EMAIL_TO=mail@peterge.de
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.mailbox.org
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=465
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=MAIL
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=PASSWORD
      - WATCHTOWER_NOTIFICATIONS_HOSTNAME=blog.peterge.de
      - WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG=remote
    restart: unless-stopped

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
docker-compose.yml

Nach dem Start ist auf Port 81 die WebUI verfügbar, in der ich dann meine Proxy-Hosts, Access Lists, SSL Zertifikate und User angelegt habe.

Pi-Hole

Auch hier war das Setup unglaublich simpel. Lediglich dieser Command installiert die Software im LXC Container:
curl -sSL https://install.pi-hole.net | bash

Anschließend habe ich Pi-Hole als DNS in meiner Fritz!Box eingerichtet. Zusätzlich dazu habe ich noch im Webinterface Local DNS Records angelegt und alle Origins für DNS Anfragen erlaubt, da ich nicht vorhabe Pi-Hole zu exposen.
Als Upstream DNS nutze ich wie immer die empfohlenen DNS-Server von Mike Kuketz: https://www.kuketz-blog.de/empfehlungsecke/#dns

Update: 08.12.2022

Mittlerweile habe ich meine Pi-Hole Instanz auch als DHCP Server in meinem Heimnetzwerk aktiviert. Es gab ein kleines Problem: Mein Pi-Hole Server (LXC) bekam von Proxmox die IP 10.0.4.102/24 zugewiesen. Demnach führte das Aktivieren eines DHCP Servers mit der Range von 10.0.0.20-10.0.0.200 natürlich zu Problem, da dieser Bereich nicht im selben Subnetz liegt. Beim Ändern der IP auf 10.0.4.102/16.
Was der Grund dafür war: Die Fritz!Box hat standardmäßig ja fritz.box als Domäne und keine einfache Möglichkeit diese zu ändern. Nun kann ich ein ping awx machen und automatisch antwortet awx.gerhards.lan, also so wie mit pfSENSE auch :)

Update: 06.01.2023

Und nun habe ich auch (hoffentlich!) das letzte kleine Problem in meinem Setup behoben. Ich konnte per Reverse Proxy freigegebene Seiten aus meinem Heimnetz (= dasselbe in dem sich die Server befinden) nicht erreichen. Ich erhielt andauernd eine DNS-Rebind-Schutz Warnung der Fritz!Box. Jedoch lag hier ein anderer Fehler zugrunde, und ich habe die ganze Zeit die falsche Schraube untersucht:
Ich hatte Pihole als DHCP Server für IPv4 aktiv und die Fritz!Box hatte den IPv6 DHCP Server noch eingeschaltet, über welchen die Verbindung zu externen, aber eigentlich lokalen, Seiten nicht funktionierte.


Das sind die relevanten, von mir getroffenen Änderungen an beiden gehosteten Diensten. Ich muss sagen, dass der Umbau besser geklappt hat als ich vorher angenommen habe, aber trotzdem viel Zeit für die Neueinrichtung gefressen hat und ich am Ende ein vergleichbares Setup zu vorher habe (+IPv6 ! :D).

Autor: peterge