Beste Methode, Pi-Hole in Container Station einzurichten

Ursprünglich habe ich Pi-Hole in Container Station mit der von QNAP bereitgestellten vordefinierten App eingerichtet.

Aber damit bekommt man nicht die allerneueste Version und das Aktualisieren ist ziemlich umständlich.

Ich habe einen Container mit der neuesten Version von Pi-Hole neu aufgebaut, aber das Aktualisieren ist immer noch nicht bequem und jedes Mal, wenn ich den Server neu starte oder den Container neu starte, muss ich das Passwort zurücksetzen. Aufgrund meiner jüngsten Erfahrungen mit SimpleHelp, dank @Weedy, habe ich beschlossen, meine eigene Pi-Hole-Anwendung zu erstellen und den Speicher außerhalb der .qpkg-Verzeichnisstruktur zu setzen. Hier ist mein YAML-Code, basierend auf der App, die QNAP erstellt:


services:
  pihole:
    image: pihole/pihole:latest
    networks:
      qnet-network:
        ipv4_address: 192.168.1.4
    environment:
      WEBPASSWORD: *MyPassword*
      TZ: Chicago
    volumes:
      - /share/Container/pihole:/etc/pihole
      - etc-dnsmasq.d:/etc/dnsmasq.d
    restart: unless-stopped

networks:
  qnet-network:
    driver_opts:
      iface: eth3
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: eth3
      config:
        - subnet: 192.168.0.0/23
          gateway: 192.168.1.1

volumes:
  etc-dnsmasq.d:

Also ein paar Dinge:

1.) Das in environment gesetzte WEBPASSWORD scheint nichts zu bewirken. Das ist nicht das benötigte Passwort.

2.) Obwohl ich jetzt alle meine Dateien in meinen normal zugänglichen Ordner verschoben habe, muss ich das Passwort bei jedem Start erneut zurücksetzen.

3.) In den letzten Tagen habe ich angefangen, Werbung zu sehen, und diese Pi-Hole-Anwendung läuft wirklich langsam. Die Webseite wird nicht wie gewohnt angezeigt und heute Morgen, nachdem ich das Passwort zurückgesetzt hatte, wurde nicht erkannt, dass ich es zurückgesetzt hatte. Es scheint, als könnte nichts auf die Festplatte geschrieben werden.

Was mache ich falsch?

Welche Art von Ressourcen gibst du dem Container?
Du findest dies unter den erweiterten Einstellungen für Ressourcen, wenn du eine App in CS erstellst.

Unbegrenzt. Genau wie Sie.

Was zeigen die Anwendungsprotokolle, gibt es irgendwelche Fehler?

Als Test kannst du auch versuchen, die Limits auf die von Pi-hole empfohlenen Einstellungen zu setzen. Ich bin mir nicht sicher, ob das hilft oder nicht. Aber ich lasse die Limits normalerweise nicht auf „unbegrenzt“, nur für den Fall, dass die App Probleme hat und alle Ressourcen des NAS beansprucht, was dazu führen könnte, dass das NAS abstürzt.

Ich müsste die Protokolle im Detail ansehen, was ich bisher nicht getan habe.

Ich frage mich wirklich, ob mit meinem YAML-Code etwas nicht stimmt und wie ich die Anwendung so installieren kann, dass ich das Passwort nicht bei jedem Start zurücksetzen muss.

Okay, ich habe ein wenig damit herumgespielt und ein paar Dinge ausprobiert.
Zuerst habe ich die Datei in compose.yaml umgewandelt und mit der Container Station-Anwendung „Create“ bereitgestellt. Ich habe die Ressourcen auf 2 CPUs und 2 GB RAM gesetzt.
Außerdem wurde das Passwort-Feld in FTLCONF_webserver_api_password umbenannt, deshalb hat es in deiner Datei nicht funktioniert.

Ich habe die Ports geändert, damit sie nicht mit anderen Apps kollidieren, die ich bereits bereitgestellt habe. Möglicherweise musst du den Netzwerk-Teil anpassen, damit es funktioniert.

Ich nutze Pi-hole nicht, daher kann ich keine Last hinzufügen, um zu sehen, ob es nach ein paar Tagen abstürzt.

services:
  pi-hole:
    container_name: pihole-server
    image: pihole/pihole:latest
    stdin_open: true
    tty: true
    volumes:
      - /share/change to correct path/pihole:/etc/pihole
      - etc-dnsmasq.d:/etc/dnsmasq.d
    environment:
      FTLCONF_webserver_api_password: "test!test1"
      TZ: NewYork
    ports:
    - "753:53/tcp"
    - "753:53/udp"
    - "767:67/udp"
    - "780:80/tcp"
    - "7443:443/tcp"
volumes:
  etc-dnsmasq.d:

Danke. Ich werde es ausprobieren.

Ich wurde herbeigerufen…

Wie marcoi schon angemerkt hat, macht dein compose.yaml nicht das, was es soll.
Wahrscheinlich, weil QNAP typische QNAP-Dinge macht und es nicht mit dem generischen Upstream-Release kompatibel ist.

Du solltest versuchen, das Upstream-Compose zu finden und dann herausfinden, was du anpassen musst, damit es mit QNAPs Docker funktioniert.


SOOOO, etwas, das ich mich bei Anwendungen/Diensten wie pihole schon immer gefragt habe: Was zum Teufel soll man eigentlich mit NAT machen?
Vor allem bei DNS-Auflösung. Wollen wir nicht eine LAN-IP? Und dass sonst nichts im Weg ist?

Also danke @NA9D, dass du mich dazu gebracht hast, das Template zu installieren, denn jetzt habe ich ein paar Dinge über QNAP gelernt.


OKAY, ALSO QNAP-STANDARDEINSTELLUNGEN

version: "3"

services:
  pihole:
    image: pihole/pihole:2022.12.1
    networks:
      qnet-network:
        ipv4_address: ${QNET_STATIC_IP}
    environment:
      WEBPASSWORD: ${WEB_PASSWORD}
      TZ: ${TZ}
    volumes:
      - etc-pihole:/etc/pihole
      - etc-dnsmasq.d:/etc/dnsmasq.d
    restart: unless-stopped

networks:
  qnet-network:
    driver_opts:
      iface: ${QNET_INTERFACE}
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: ${QNET_INTERFACE}
      config:
        - subnet: ${QNET_SUBNET}
          gateway: ${QNET_GATEWAY}

volumes:
  etc-pihole:
  etc-dnsmasq.d:

Wie wir sehen, wird explizit ein Release von 2022 verlangt.
Du und marcoi habt beide :latest verwendet, ich habe keine Ahnung, welcher Tag empfohlen wird, aber ich benutze auch oft :latest für mich selbst.

Ich nehme an, das ist korrekt

Warum nutzen wir einen benannten Mount, wenn wir schon etwas in /share eingerichtet haben?

Kein Wunder, dass sich die Konfigurationsoptionen seit 2022 geändert haben

Das wird später sicher lustig, weil es hier um DNS geht.

Also gehe ich zu docs.pi-hole.net

# Mehr Infos unter https://github.com/pi-hole/docker-pi-hole/ und https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      # DNS-Ports
      - "53:53/tcp"
      - "53:53/udp"
      # Standard-HTTP-Port
      - "80:80/tcp"
      # Standard-HTTPS-Port. FTL generiert ein selbstsigniertes Zertifikat
      - "443:443/tcp"
      # Auskommentieren, wenn Pi-hole als DHCP-Server genutzt wird
      #- "67:67/udp"
      # Auskommentieren, wenn Pi-hole als NTP-Server genutzt wird
      #- "123:123/udp"
    environment:
      # Passende Zeitzone für deinen Standort setzen, siehe
      # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones, z.B.:
      TZ: 'America/Chicago'
      # Passwort für Weboberfläche setzen. Wenn keines gesetzt wird, wird ein zufälliges Passwort vergeben
      FTLCONF_webserver_api_password: 'correct horse battery staple'
      # Bei Nutzung des Docker-Standard-`bridge`-Netzwerks sollte der DNS-Listening-Modus auf 'all' gesetzt werden
###      FTLCONF_dns_listeningMode: 'all'
    # Volumes speichern deine Daten zwischen Container-Upgrades
    volumes:
      # Zum Persistieren der Pi-hole-Datenbanken und der allgemeinen Konfigurationsdatei
      - /share/Container/pihole/config:/etc/pihole
      # Auskommentieren, wenn eigene dnsmasq-Konfigurationsdateien dauerhaft gespeichert werden sollen. Für die meisten, die mit Pi-hole v6 neu starten, nicht nötig. Wer von v5 upgradet und dieses Verzeichnis zuvor genutzt hat, sollte es beim ersten v6-Start aktiviert lassen, um eine vollständige Migration zu ermöglichen. Danach kann es entfernt werden. Benötigt Umgebungsvariable FTLCONF_misc_etc_dnsmasq_d: 'true'
      #- /share/Container/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
    cap_add:
      # Siehe https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
      # Erforderlich, wenn Pi-hole als DHCP-Server genutzt wird, sonst nicht nötig
      - NET_ADMIN
      # Erforderlich, wenn Pi-hole als NTP-Client genutzt wird, um die Systemzeit des Hosts setzen zu können
      - SYS_TIME
      # Optional, falls Pi-hole mehr Rechenzeit bekommen soll
      - SYS_NICE
    restart: always

Jup, das ist anders. Sieht auch so aus, als könnten wir das zweite Bind-Mount weglassen.

ABER ich denke, wir müssen das qnet-network-Zeug behalten. Also vielleicht so etwas wie…

# Mehr Infos unter https://github.com/pi-hole/docker-pi-hole/ und https://docs.pi-hole.net/
networks:
  qnet-network:
    driver_opts:
      iface: eth0
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: eth0
      config:
        - subnet: '10.0.0.0/24'
          gateway: '10.0.0.1'

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    networks:
        qnet-network:
            ipv4_address: '10.0.0.10'
    hostname: pihole
    ports:
      # DNS-Ports
      - "53:53/tcp"
      - "53:53/udp"
      # Standard-HTTP-Port
      - "80:80/tcp"
      # Standard-HTTPS-Port. FTL generiert ein selbstsigniertes Zertifikat
      - "443:443/tcp"
      # Auskommentieren, wenn Pi-hole als DHCP-Server genutzt wird
      #- "67:67/udp"
      # Auskommentieren, wenn Pi-hole als NTP-Server genutzt wird
      #- "123:123/udp"
    environment:
      # Passende Zeitzone für deinen Standort setzen, siehe
      # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones, z.B.:
      TZ: 'America/Chicago'
      # Passwort für Weboberfläche setzen. Wenn keines gesetzt wird, wird ein zufälliges Passwort vergeben
      FTLCONF_webserver_api_password: 'correct horse battery staple'
      # Bei Nutzung des Docker-Standard-`bridge`-Netzwerks sollte der DNS-Listening-Modus auf 'all' gesetzt werden
###      FTLCONF_dns_listeningMode: 'all'
      #### Weil QNAP (ich habe einen eigenen User für alle Docker-Sachen)
      PIHOLE_UID: 1000
      PIHOLE_GID: 1001
    # Volumes speichern deine Daten zwischen Container-Upgrades
    volumes:
      # Zum Persistieren der Pi-hole-Datenbanken und der allgemeinen Konfigurationsdatei
      - /share/Container/pihole/config:/etc/pihole
      # Auskommentieren, wenn eigene dnsmasq-Konfigurationsdateien dauerhaft gespeichert werden sollen. Für die meisten, die mit Pi-hole v6 neu starten, nicht nötig. Wer von v5 upgradet und dieses Verzeichnis zuvor genutzt hat, sollte es beim ersten v6-Start aktiviert lassen, um eine vollständige Migration zu ermöglichen. Danach kann es entfernt werden. Benötigt Umgebungsvariable FTLCONF_misc_etc_dnsmasq_d: 'true'
      #- /share/Container/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
    cap_add:
      # Siehe https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
      # Erforderlich, wenn Pi-hole als DHCP-Server genutzt wird, sonst nicht nötig
      - NET_ADMIN
      # Erforderlich, wenn Pi-hole als NTP-Client genutzt wird, um die Systemzeit des Hosts setzen zu können
      - SYS_TIME
      # Optional, falls Pi-hole mehr Rechenzeit bekommen soll
      - SYS_NICE
    restart: always

Es läuft! Viel Erfolg mit dem Rest @NA9D


@SteveKo Was ist so besonders an driver: qnet? Es scheint einfach ein weiteres macvlan zu sein, nur dass ihr das ganze IPV6 rausgerissen habt. Das ist irgendwie Mist :confused:

Ich brauche wirklich, dass ihr euch um IPV6 kümmert, ich habe es satt, ständig kämpfen zu müssen, damit überhaupt irgendwas halbwegs funktioniert.

Also alle Port-Definitionen (753:53/tcp usw.), die @marcoi hinzugefügt hat, waren nur für seine eigenen Tests und nicht für den normalen Gebrauch.

Das Netzwerkzeug ist einfach. Du setzt den Container in den Bridge-Modus, weist ihn deiner Netzwerkkarte (NIC) zu und gibst ihm eine IP-Adresse. Dann machst du kein spezielles NAT oder irgendetwas anderes. Deshalb habe ich das Netzwerkzeug da drin.

Mein größtes Problem liegt vielleicht gar nicht am Container. Es scheint in letzter Zeit jeden Morgen so zu sein, dass Pi-Hole wirklich träge ist. Das könnte daran liegen, dass ich zwischen Mitternacht und 7 Uhr morgens ein RAID-Scrubbing durchführe. Das muss ich noch herausfinden.

Und warum braucht man IPV6 in einem LAN? IPV4 ist so viel einfacher und ich kann mir die Adressen tatsächlich merken! :smiley:

Das ist richtig bezüglich der Ports, ich habe einfach 7 hinzugefügt, um sicherzustellen, dass es meine anderen laufenden Apps nicht beeinträchtigt.

Hallo, wir haben dieses Problem an unser internes Team weitergeleitet und werden ein Update für die Version in Container Station einplanen.

Bezüglich des Docker-Problems, auf das Sie stoßen: Falls Sie es für notwendig halten, eröffnen Sie bitte ein Support-Ticket, damit wir uns das Problem per Fernzugriff ansehen können. Möglicherweise finden wir eine Lösung, wie wir Ihnen helfen können.

Vielen Dank!

ICH persönlich brauche kein Support-Ticket.
QTS/QuTS im Allgemeinen benötigt funktionierendes IPV6.

Ich habe vieles manuell umgangen. Aber es ist immer noch nicht perfekt.
Warum muss ich ip6table_nat.ko manuell erstellen? Warum wird Docker mit blockiertem IPv6 ausgeliefert? Warum wird die Regelgenerierung für ip6tables hart deaktiviert?

Bitte behebt IPV6. Danke.

Ich könnte nicht mehr zustimmen. Ich kann einfach keine Container verwenden, die IPv6 erfordern, auf meinem QNAP, und das ist wirklich ärgerlich.

Ich betreibe PIhole seit ein paar Jahren in einem Container, ohne Probleme. Jetzt möchte ich jedoch den DHCP-Server nutzen. Wie es aussieht, werden DHCP-Anfragen aber nicht an den Container weitergeleitet. Gibt es eine Möglichkeit, die Ports 67/68 weiterzuleiten? Ich kann solche Einstellungen in Qnaps Implementierung von Container Station nicht finden.

Wenn Sie den DHCP-Server verwenden möchten, sollten Sie Ihren pi-Hole-Container im Bridge-Modus einrichten und ihm eine neue feste IP-Adresse zuweisen, die außerhalb Ihres DHCP-Pools liegt. Ich würde mich nicht auf die „NAT“-Funktion verlassen, die QNAP bereitstellt, um in das Container-LAN zu routen. Der DHCP-Server muss sich in Ihrem LAN befinden.

Hier ist meine Compose-Datei. Die Netzwerkeinstellungen habe ich in Compose gesetzt.

services:
  pihole:
    image: pihole/pihole:latest
    networks:
      qnet-network:
        ipv4_address: 192.168.1.4
    environment:
      FTLCONF_webserver_api_password:
      TZ: America/Chicago
    volumes:
      - /share/Container/pihole:/etc/pihole
      - etc-dnsmasq.d:/etc/dnsmasq.d
    restart: unless-stopped

networks:
  qnet-network:
    driver_opts:
      iface: eth3
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: eth3
      config:
        - subnet: 192.168.0.0/23
          gateway: 192.168.1.1

volumes:
  etc-dnsmasq.d: