Obwohl es diesen Mini-Computer schon seit geraumer Zeit gibt, bin ich erst vor kurzem auf ihn aufmerksam geworden und bin über die Einsatzmöglichkeiten erstaunt.
Ich habe aktuell zwei "Projekte", einen "MP3-Server" für die Stereoanlage sowie einen eigenen lokalen DNS-Server. Hier geht es um den DNS-Server, primär als Filter gegen Werbung und Tracking im internen Netzwerk. Grundlage ist das Projekt "Pi-Hole®". Es gibt auch eine Dokumentation dazu.
Mein Heimnetzwerk läuft unter 192.168.178.x. Der Router, eine FritzBox 7560 als Standard-Gateway, auch als Zeitserver und als (weiterer) DNS-Server ist die 192.168.178.1.
Ich verwende hier einen Raspberry Pi 3B+ in dem originalen weiß/himbeerfarbenen Gehäuse und eine Micro-SD-Karte Sandisk Ultra 32GB (SDHC, UHS-1, Class 10) sowie das originale Raspberry-Pi-Netzteil in Weiß. Das ist eine ungefähre Investition von 65 Euro (Stand 01/2019).
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt
arm_freq_min=500
sdram_freq_min=200
gpu_freq_min=100
temp_limit=75
never_over_voltage=1
NTP=192.168.178.1
FallbackNTP=0.de.pool.ntp.org 1.de.pool.ntp.org
Nun die Installation des Pi-Hole starten, dabei wird ein umfangreiches Installationsmenu durchlaufen (auch in der SSH):
Mit der bis hierhin beschriebenen Konfiguration hat man einen hervorragend funktionierenden Werbefilter, der zwischen 10% und 50% Traffic schon vor den Clients im Heimnetz filtert. Wenn man noch einen Schritt weitergehen möchte, kann man (ebenfalls auf demselben Raspberry Pi) einen eigenen DNS-Server aufsetzen, den Pi-Hole zuerst anfragt und der erst wenn er keine Antwort kennt, externe DNS-Server abfragt. Dies erhöht die Sicherheit noch einmal einen Schritt, obwohl dadurch (vor allem anfangs) die Netzwerkabfragen etwas verlangsamt. Dieser weitere Schritt wird auch in einer speziellen Pi-Hole-Dokumentation auf Basis des DNS-Servers Unbound separat erklärt.
Hier ebenfalls Schritt für Schritt:
server:
# If no logfile is specified, syslog is used
# logfile: "/var/log/unbound/unbound.log"
verbosity: 0
# Port for Usage in Pi-Hole as 127.0.0.1#5353
port: 5353
do-ip4: yes
do-udp: yes
do-tcp: yes
# May be set to yes if you have IPv6 connectivity
do-ip6: no
# Use this only when you downloaded the list of primary root servers!
root-hints: "/var/lib/unbound/root.hints"
# Trust glue only if it is within the servers authority
harden-glue: yes
# Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
harden-dnssec-stripped: yes
# Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no
# Reduce EDNS reassembly buffer size.
# Suggested by the unbound man page to reduce fragmentation reassembly problems
edns-buffer-size: 1472
# TTL bounds for cache
cache-min-ttl: 3600
cache-max-ttl: 86400
# Perform prefetching of close to expired message cache entries
# This only applies to domains that have been frequently queried
prefetch: yes
# One thread should be sufficient, can be increased on beefy machines
num-threads: 1
# Cache Memory rrset should have double size as msg
msg-cache-size: 50m
rrset-cache-size: 100m
# Accelerate UDP with multithreading
so-reuseport: yes
# Ensure kernel buffer is large enough to not loose messages in traffic spikes
so-rcvbuf: 1m
# Ensure privacy of local IP ranges
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
access-control: 192.168.0.0/16 allow
forward-zone:
name: "."
forward-addr: 1.1.1.1@53#one.one.one.one
forward-addr: 1.0.0.1@53#one.one.one.one
forward-addr: 84.200.69.80@53#resolver1.dns.watch
forward-addr: 84.200.70.40@53#resolver2.dns.watch
forward-addr: 46.182.19.48@53#dns2.digitalcourage.de
forward-addr: 9.9.9.9@53#dns.quad9.net
forward-addr: 8.8.8.8@53#dns.google
Nun müsste alles laufen wie zuvor, nur dass (seit Aktivierung des Unbound) das erste Mal aufgerufene Seiten etwas länger benötigen, bis sie geladen werden. Dies ist ein gutes Zeichen dafür, dass Unbound arbeitet!
Auf dem "einfachen Weg" haben wir die Standardversion von Unbound installiert, für die es ein vorgefertigtes Installationspaket gibt. Leider wird damit nur Version 1.6.0 installiert, die keine Verbindung mittels DNS over TLS zu externen DNS-Servern über Port 853 herstellen kann.
Links für den schwierigen Weg:
Ich habe sehr lange suchen und probieren müssen, um es zu schaffen, auf dem Raspberry Pi "from scratch" die allerneueste Unbound-Version 1.9.0 (vom 5.2.2019) installieren und aktivieren zu können:
server:
# If no logfile is specified, syslog is used
# logfile: "/var/log/unbound/unbound.log"
verbosity: 0
username: ""
chroot: ""
# Port for Usage in Pi-Hole as 127.0.0.1#5353
port: 5353
do-ip4: yes
do-udp: yes
do-tcp: yes
# May be set to yes if you have IPv6 connectivity
do-ip6: no
# Use this only when you downloaded the list of primary root servers!
root-hints: "/var/lib/unbound/root.hints"
tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt"
# Trust glue only if it is within the servers authority
harden-glue: yes
# Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
harden-dnssec-stripped: yes
# Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no
# Reduce EDNS reassembly buffer size.
# Suggested by the unbound man page to reduce fragmentation reassembly problems
edns-buffer-size: 1472
# TTL bounds for cache
cache-min-ttl: 3600
cache-max-ttl: 86400
# Perform prefetching of close to expired message cache entries
# This only applies to domains that have been frequently queried
prefetch: yes
# One thread should be sufficient, can be increased on beefy machines
num-threads: 1
# Cache Memory rrset should have double size as msg
msg-cache-size: 50m
rrset-cache-size: 100m
# Accelerate UDP with multithreading
so-reuseport: yes
# Ensure kernel buffer is large enough to not loose messages in traffic spikes
so-rcvbuf: 1m
# Ensure privacy of local IP ranges
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
access-control: 192.168.0.0/16 allow
forward-zone:
name: "."
forward-tls-upstream: yes
forward-addr: 1.1.1.1@853#one.one.one.one
forward-addr: 1.0.0.1@853#one.one.one.one
forward-addr: 84.200.69.80#resolver1.dns.watch
forward-addr: 84.200.70.40#resolver2.dns.watch
forward-addr: 46.182.19.48@853#dns2.digitalcourage.de
forward-addr: 9.9.9.9@853#dns.quad9.net
forward-addr: 8.8.8.8@853#dns.google
Nun müsste alles laufen wie zuvor, nur dass (seit Aktivierung des Unbound) das erste Mal aufgerufene Seiten etwas länger benötigen, bis sie geladen werden. Dies ist ein gutes Zeichen dafür, dass Unbound arbeitet!
Unter Heimnetz / Netzwerkeinstellungen / IPV4-Adressen (etwas weiter unten) in den DHCP-Adressen die Adresse des Pi-Hole (hier 192.168.178.2) als lokaler DNS-Server eintragen. Damit verteilt das DHCP den lokalen DNS-Server automatisch mit im Netz und man muss nichts an den Clients einstellen!