AdBlocker im LAN sind gut und wichtig. Und ein Docker Server kann sowieso nicht schaden. Wie man das am besten umsetzet möchte ich euch heute gerne zeigen.
Raspberry Pi – die günstige und kleine Hardware
Klein und günstig muss nicht immer teuer sein. Und ein Server muss nicht immer eine CPU von Intel oder AMD haben, denn neben der x86 Architektur gibt es auch ARM. Diese CPUs sind zwar ärmer an technischen Werten als normale Server CPUs, erfüllen aber trotzdem brav ihren Zweck und sparen dabei sogar Energie und Platz.
Für mein Setup hier reicht eigentlich ein Raspberry Pi 3 vollkommen aus, trotzdem würde ich das aktuellste Modell den Raspberry Pi 4 empfehlen da er einfach noch mehr Leistung hat und der 3er doch schon in die Jahre gekommen ist.
Meine simples Howto hier benötigt nicht viel Leistung. Der Docker Server an sich braucht nicht viel und der AdGuard Container läuft auch mit wenig Ressourcen trotz vieler Clients in meinem Netzwerk. Wieviel genug überwachen wir mit einem anderen Container dazu aber weiter unten mehr.
Raspberry Pi OS die Basis für Alles
Wie Raspberry Pi OS auf den Raspberry Pi kommt?
Ganz einfach auf der offiziellen Seite Raspberry Pi OS Lite runterladen (reicht aus da wir keinen Desktop benötigen) und auf eine passende SD Karte bringen. Im empfehle min. 16 GB bei einem Docker Setup. Die Container können schnell groß werden und der Preisunterschied zwischen 8GB und 16GB ist sehr gering.
Noch einfacher ist es unter Windows, MacOS oder Ubuntu einfach den Raspberry Pi Imager verwenden. Diesen findet man auch auf der offiziellen Seite und benötigt dann eigentlich nur mehr einen Card Reader um auf die SD Karte zugreifen zu können. Im Imager wählt man dann einfach unter „Raspberry Pi OS (other)“ das oben erwähnt „Raspberry Pi OS Lite (32-bit)“ aus. Der Imager lädt dann selbst das korrekte Image aus dem Internet und spielt es auf die SD Karte sobald man auf „Schreiben“ gedrückt hat.
Wenn die SD Karte fertig ist, einfach den Rasp zusammenbauen und die SD-Karte einstecken.
NICHT VERGESSEN: Unbedingt ein Keyboard und ein Display anstecken. Für die nächsten Schritte wird ein SSH Zugang benötigt welcher erst aktiviert werden muss.
Sobald der Rasp gebootet hat kann man sich mit dem Benutzer pi und dem Passwort raspberry einloggen. Wenn der Raspberry per Netzwerkkabel mit dem LAN verbunden ist sollte er im besten Fall per DHCP eine IP erhalten haben. Hat er das? einfach testen mit dem Befehl
ifconfig eth0
Wenn alles passt sollte es so aussehen:
pi@docker-pi:~ $ ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.66.24 netmask 255.255.255.0 broadcast 192.168.66.255 inet6 fe80::fcb5:7e51:d947:312d prefixlen 64 scopeid 0x20<link> ether b8:29:eb:cc:d8:97 txqueuelen 1000 (Ethernet) RX packets 3341733 bytes 1393090068 (1.2 GiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 1510899 bytes 242137709 (230.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Mein Docker-PI hat die IP 192.168.66.24 zugewiesen bekommen, gleich mal notieren für die späteren Schritte. Jetzt gehen wir die Config für SSH an.
sudo raspi-config
Unter „6 Advanced Options“ den Punkt „A1 Expand Filesystem“ ausführen. Sobald dieser fertig ist über <Back> wieder zurück auf die Hauptübersicht und „3 Interface Options“ auswählen. Dort dann „P2 SSH“ und mit <JA> bestätigen.
Ab jetzt ist der Raspberry aus dem LAN per ssh erreichbar, die Login Daten sind die selben wie wenn man direkt am Raspberry angesteckt ist. Aja das Display und Keyboard wird jetzt nicht mehr benötigt.
Zu guter Letzt jetzt noch ein update und dann gehen wir Docker an.
sudo apt update && sudo apt upgrade -y
der Docker Server
Da nun das Betriebssystem mit den neuesten Updates versorgt ist und der Raspberry im Netzwerk können wir uns um den Docker Server kümmern. Diese zu installieren ist eigentlich auch recht einfach und auch einzurichten gibt es nicht viel.
Die neuste Version des Docker Servers holen wir uns direkt vom Hersteller mittels
curl -sSL https://get.docker.com | sh
Um Docker-Compose nutzen zu können müssen wir ein bisschen was nach installieren mittels
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
und dann gleich Docker-compose installieren mit dem Befehl
sudo pip3 install docker-compose
jetzt aktivieren wir noch den Docker Server beim startup und schon kann’s losgehen
sudo systemctl enable docker
Portainer steuert den Docker
Ich könnte jetzt erklären wie man den Docker Server per ssh steuert, aber es geht auch einfacher. Portainer, welcher in einen Container innerhalb des Docker Servers läuft, bietet eine geniale Management Oberfläche für die Arbeit mit dem Docker Server. Auch diesen Container können wir ganz einfach starten, eine genauere Beschreibung findet man direkt hier auf der Portainer Seite.
Wer die Beschreibung nicht lesen will, kann einfach folgendes machen:
sudo docker volume create portainer_data
Damit wird das Volume für unseren container erstellt und der Contrainer gleich hiermit hochgefahren
sudo docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
und ist auch schon unter der IP des Raspberry’s auf Port 8000 und 9000 erreichbar. In meinem Fall: http://192.168.66.24:9000
Der Portainer selbst ist eigentlich selbsterklärend, man bekommt in einem übersichtlichen Webinterface den Zustand des Raspberry’s dargestellt und zeigt alle laufenden Container. Man kann auch bestimmte Contrainer Vorlagen nutzen um schnell z.b. einen NGINX oder Apache2 Webserver hochzufahren. Wir jedoch kümmern uns jetzt endlich um den AdGuard.
AdGuard im Container
Okay jetzt läuft Docker und auch Portainer für die eine schöne GUI, jetzt muss eigentlich nur mehr der AdGuard in den Container. Zuerst legen wir mal die Verzeichnisse am Host (Raspberry) an. Am besten gleich direkt im home dir von pi mit
mkdir /home/pi/adguard/work mkdir /home/pi/adguard/conf
Die beiden Verzeichnisse nutzen wir dann im Container.. aja der Container, zuerst mal das aktuellste Image holen
sudo docker pull adguard/adguardhome
Und dann starten wir auch gleich den Container
docker run --name adguardhome \ --restart unless-stopped \ -v /home/pi/adguard/work:/opt/adguardhome/work \ -v /home/pi/adguard/conf:/opt/adguardhome/conf \ -p 53:53/tcp -p 53:53/udp \ -p 67:67/udp -p 68:68/udp \ -p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp \ -p 853:853/tcp \ -p 784:784/udp -p 853:853/udp -p 8853:8853/udp \ -p 5443:5443/tcp -p 5443:5443/udp \ -d adguard/adguardhome
MOMENT… wofür sind die Ports? Brauch ich die alle?
Nun Ja, eigentlich nicht. aber gehen wir kurz auf die Ports ein. Alle in fett geschrieben Ports sind basic und sollten auf jeden Fall genutzt werden.
-p 53:53/tcp -p 53:53/udp\ => Ist notwendig da AdGuard ja als DNS Server dienen soll
-p 67:67/udp -p 68:68/udp\ => wird eigentlich nur benötigt wenn der AdGuard auch DHCP Server sein soll
-p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp\ => Nur notwendig um das AdGuard Webinterface erreichen zu können .. hierfür reicht eigentlich -p 80:80/tcp der Rest wird nur benötigt wenn AdGuard als HTTPS/DNS-over-HTTPS Server zum Einsatz kommt.
-p 853:853/tcp\ => Nur wenn AdGuard als DNS-over-TLS Server fugieren soll.
-p 784:784/udp -p 853:853/udp -p 8853:8853/udp\ => und hier nur wenn DNS-over-QUIC auch eine Funktion von AdGuard sein soll.
-p 5443:5443/tcp -p 5443:5443/udp\ => Und wenn er auch noch DNSCrypt server sein soll dann lasst diese Ports auch drinnen.
So und jetzt nur mehr die wichtigsten Befehle, falls man über die CLI den AdGuard Container starten, stoppen oder vielleicht sogar löschen will:
Start: sudo docker start adguardhome
Stop: sudo docker stop adguardhome
Löschen: sudo docker rm adguardhome
Und Wie geht ein Update? … EASY
docker pull adguard/adguardhome docker stop adguardhome docker rm adguardhome
Also mit pull das neueste image holen, mit stop den Container löschen und mit rm den Container löschen. KEINE Angst, die Configs bleiben vorhanden. Der Container muss dann wie oben angeführt wieder gestartet werden.
Jetzt können wir über den Browser unseres Vertrauens auf das AdGuard Webinterface zugreifen. Auf die Config gehen ich dann im nächsten Beitrag ein… aja und nicht vergessen: die IP des Adguard euren Clients im Netzwerk mitzuteilen. Also am besten per DHCP die IP als DNS Server verteilen. Als 2ten DNS könnt ihr die IP eures Routers lassen oder vielleicht in einem anderen Container Pi-Hole installieren 😉