Den Anfang haben die vielen online Werbeeinschaltungen gemacht. Dann kamen Browser Add-Ons, um das Problem wieder in den Griff zu bekommen. Schlussendlich bin ich dann doch wieder bei Pi-Hole gelandet. Dieses mal aber gleich als Docker Container und davon gleich ein ganzer Schwarm.
Die Standardkonfiguration genügt natürlich nicht, denn ich möchte noch folgende Funktionen:
- DNS over HTTPS (vgl.: DoH)
- DNS request im round robin Verfahren an verschiedene DNS Provider
- DNS Verkehr generell filtern
- Wartung weitgehend automatisieren von
- Positivlisten und Ausnahmen
- Filterlisten nach regulären Ausdrücken
- Negativlisten
Daraus ist dann meine ‚docker-compose.yml‘ Datei geworden. Es werden zwei Container geladen – Cloudflared und Pihole. Pihole filtert und nimmt die Clientanfragen intern entgegen. Cloudflared reicht die Anfragen nach draussen via DoH weiter und verteilt diese auch zwischen den aufgeführten Servern. (Anm.: das ist nur eine gut gemeinte Verschleierung, aber die Anfrage selber ist schon verschlüsselt und somit nicht im Klartext lesbar.)
version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
cloudflared:
container_name: cloudflared
# Restart on crashes and on reboots
restart: unless-stopped
image: cloudflare/cloudflared
command: proxy-dns
environment:
- "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query,https://9.9.9.9/dns-query,https://149.112.112.9/dns-query"
# Listen on an unprivileged port
- "TUNNEL_DNS_PORT=5053"
# Listen on all interfaces
- "TUNNEL_DNS_ADDRESS=0.0.0.0"
# Attach cloudflared only to the private network
networks:
default:
ipv4_address: 172.16.0.3
pihole:
container_name: pihole
# pihole container repository including update database from file
image: jacklul/pihole:latest
environment:
# set a secure password here
WEBPASSWORD: 'XXXXXXXXXXXX'
DNS1: '172.16.0.3#5053'
DNS2: 'no'
# Volumes store your data between container upgrades
volumes:
- '/data/pi-hole/etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
- '/etc/localtime:/etc/localtime:ro'
- '/data/pi-hole/pihole-updatelists/:/etc/pihole-updatelists/'
cap_add:
- NET_ADMIN
restart: unless-stopped
networks:
default:
# static IP address for pi-hole
ipv4_address: 172.16.0.2
networks:
default:
driver: bridge
ipam:
config:
# your chosen docker network here
- subnet: 172.16.0.0/24
Datei und Verzeichnis für die Updatelisten anlegen – analog zum Pfad aus der yml Datei (vgl.: docker-compose.yml).
root@firewalla:~# ls -als /data/pi-hole/pihole-updatelists/pihole-updatelists.conf
4 -rw-r--r-- 1 root root 324 Dec 7 11:03 /data/pi-hole/pihole-updatelists/pihole-updatelists.conf
Die yml Datei für den Pihole Docker hat den folgenden Inhalt:
ADLISTS_URL="https://v.firebog.net/hosts/lists.php?type=tick https://raw.githubusercontent.com/you/adlists/master/my_adlists.txt"
WHITELIST_URL="https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/whitelist.txt"
REGEX_BLACKLIST_URL="https://raw.githubusercontent.com/mmotti/pihole-regex/master/regex.list"
Die aktuellen Images holen mit:
pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker-compose pull
pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker image prune
Die Container starten
pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker-compose up -d --remove-orphans
Die alten Container und Versionen entsorgen, wenn alles funktioniert
pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker image prune
Der Benutzer „pi“ ist anscheinend bei Firewalla ein Überbleibsel. Die aktuelle Hardware unterscheidet sich doch ein wenig von einem Raspberry Pi.
Damit ist der Käse für einen Docker Container geschnitten. Schwarm und Konsorten beschreibe ich vielleicht ein nächstes Mal. Genauso, wie das Problem mit den Zertifikaten von Subdomainen, die in den letzten 24 Stunden ausgestellt wurden. Google beschäftigt sich zum Beispiel damit. Aber das ist ein eigenes Thema.
Quellen:
https://pi-hole.net
https://www.docker.com
https://github.com/jacklul/pihole-updatelists
https://github.com/cloudflare/cloudflared