Aluhut auf: Wireguard

Hier ein kleines Installations-Memo für Nachbastler – und zwar für einen zentralen Werbeblocker und recht sichere Surflösung.

Die Komponenten: Wireguard, pihole und cloudflared bzw. neu: adguard– das Ganze natürlich modern dockerized.

Überblick

Funktionieren soll das Ganze so:

  • mit einem normalen PC/Laptop/Tablet/Handy geht man online. Ist man nicht im lokalen Netz, so wird man per Wireguard (einer pfeilschnellen, sicheren und leicht zu konfigurierbaren VPN Alternative) dorthin verbunden
  • jeder Aufruf einer URL bedingt einem vorangegangenem DNS Aufruf – diesen zwingen wir zuerst nach pihole/adguard, welches uns auf einen Schlag *netzwerkweit* aller Werbeeinblendungen entledigt
  • pihole selbst schickt die DNS Anfragen aber nicht zum Provider, sondern verschlüsselt (DOH) zum DNS Provider unseres Vertrauens. Dazu bedienen wir uns cloudflared. (Hintergrund: DNS ist so ziemlich das letzte Internetprotokoll, welches unverschlüsselt abläuft. Daher weiß der Provider sehr gut, was man so treibt). Deshalb ist adguard die bessere Alternative da bereits eingebaut.

Voraussetzungen

  • Dockerhost: wie man sich eine Dockerinstallation zulegt, hängt von der Infrastruktur der Wahl ab: auf einem bestehenden Server, einem Raspberry, dem häuslichen NAS oder einer Cloudinstanz ist eigentlich egal und gut dokumentiert. Einfach googeln und aufsetzen. Tip: Das Image “portainer” eignet sich sehr gut zur grafischen Verwaltung von docker.
  • Wireguard Instanz: ein Raspi, Linuxserver (Kernel ab Version 5.6), NAS (zb. Qnap > QTS 5.0) oder Mikrotik-Router (ab Routeros 7) mit Wireguard Unterstützung
  • für remote/mobile Devices die Wireguard App (Windows, Android…)

Pihole

Der Einfachkeit halber gibts die Konfiguration der Container gleich als Kommando.

Pihole wird in Docker deployed mittels folgendem Befehls, eingegeben wenig überraschend auf der Konsole des Dockerhosts:

docker run -d --name pihole  -p 53:53 -p 8088:80 -p 67:67 -e TZ="Europe/Vienna" -e WEBPASSWORD="ADMINKENNWORT" -v pihole-etc:/etc/pihole -v pihole-dnsmasq:/etc/dnsmasq.d --restart always pihole/pihole:latest

Zur Erklärung: das Adminkennwort sollte natürlich geändert und die Ports (jeweils links vom Doppelpunkt!) bei Bedarf angepasst werden falls bereits was belegt sein sollte. Grundsätzliche Funktionsprüfung per Login über den Webport sowie beispielsweise via Befehlszeile und “nslookup” – dann auf den pihole zeigen lassen per “server IP:port” und zb. mal www.valki.com nachschauen lassen. Sollte laufen!

Cloudflared

Unseren Cloudflared Container erstellen wir mit:

docker run --name=cloudflared --env=TZ=Europe/Vienna --env=PORT=53 --env=DNS1=5.1.66.255 --env=UPSTREAM1=https://doh.ffmuc.net/dns-query  --env=METRICS=127.0.0.1:8080 --env=DNS2=136.144.215.158 --env=UPSTREAM2=https://doh.powerdns.org/dns-query --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  --net host --restart=always --detach=true visibilityspots/cloudflared:latest

Die per Environment-Variable konfigurierten Upstreams sind ffmuc.net sowie powerdns. Ersterer in Europa und nicht loggend. Natürlich kann hier auch was anderes eingetragen werden.

Als nächstes konfigurieren wir pihole so, dass als Upstream der eigene, verschlüsselnde cloudflared arbeitet. Dazu alle Upstream Server raus und die IP des eigenen, also der Cloudflared – IP eintragen.

Tip: Die Funktion “Conditional forwarding” würde es ermöglichen, dass die “lokalen” DNS Einträge des Routers an diesen gestellt werden und das lokale Netz nicht verlasse.

Bessere Alternative: Adguard

Update: Statt Pihole und Cloudflared kann man einfach einen Adguard Container als lokalen DNS Server erstellen.

docker run --name adguardhome --restart unless-stopped -v adguardwork:/opt/adguardhome/work -v adguardconf:/opt/adguardhome/conf -p 53:53 -p 67:67 -p 68:68  -p 3000:3000 -p 853:853  -p 784:784/udp  -p 8853:8853 -p 5443:5443 -p 80:80 -p 443:443 -d  adguard/adguardhome

Konfiguration erreicht man initial über Port 3000

Upstream DNS zb. folgendes eintragen (letzte Zeile fürs lokale LAN)

https://doh.applied-privacy.net/query
https://doh.ffmuc.net/dns-query
[/intranet.local/]192.168.2.1

Auch den Router als “Eigenen DNS Server” eintragen. Die Bootstrap DNS Server braucht das System nur beim initialen Lookup für die Upstream DNS.

DNS Rewrites (für Dienste, die lokal über eine andere IP erreichbar sind als von extern) werden über die Filter konfiguriert.

Firewall

Das wärs soweit schon, dass alles im LAN die DNS Anfragen über pihole -> cloudflared -> ffmuc laufen und somit auch für den Provider unsichtbar weil verschlüsselt aufscheinen. Zudem unauffällig über HTTPS auf 443.

Aber leider schummeln machen Browser und versuchen die Netzwerkeinstellungen zu ignorieren und versuchen selbst ihre “eigenen” DNS zu kontaktieren. Daher: ausgehender Traffic am Router/Firewall auf 53 tcp/udp blocken!

Bei Adguard nicht vergessen, die Bootstrap-Server von diesem Block ausnehmen!

Wireguard

Jetzt nur noch Wireguard installieren und konfigurieren. Installation ist bei Qnap NAS und Mikrotik Routern nicht notwendig weil schon präsent. Alternativ auf einem Host oder als Dockercontainer installieren. Achtung – auch hier benötigt man einen Kernel > 5.6 am Dockerhost.

Konfiguriert ist die Sache sehr einfach und splittet sich jeweils in den allgemeinen Teil und den jeweiligen Peer.

Allgemeiner Teil: Hier wird ein public/private Key generiert. Dann zuweisen jeweils einer IP in einem ungenutzten Netz für den Tunnel. Hier habe ich beispielsweise 192.168.30.x verwendet – natürlich darf keine IP doppelt vergeben sein.

Weiters wird der zu verwendete Port auf beiden Seiten angegeben (sollte auf der Firewall natürlich frei sein – udp) und als DNS bietet sich natürlich wieder unser pihole an.

Im Peer dann den public Key der gegenüberliegenden Seite eintragen.

Am Handy schaut das dann so aus:

Anfragen für Hosts die bei “erlaubte” IPs definiert sind, werden über den Tunnel geschickt – die anderen nicht. So könnte man sich zb nur für die LAN Adressen entscheiden. Oder in meinem Fall “alles” – somit surfe ich komplett über mein LAN und somit pihole/cloudflared bzw adguard. In den VPN Einstellung kann man zudem noch ein “keepalive” sowie ein hartes Blockieren von “nicht-VPN” Verbindungen auswählen.

Have fun!

Leave A Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.