Abgesichert und werbefrei – das geht auch unterwegs vom Handy oder Rechner. Insbesondere, wenn man sich in öffentlichen WLANs schützen möchte, kann man dies mit einem eigenen VPN realisieren. Damit dies auch noch mit einem Werbeblocker kombiniert wird, kann man sich auch vor Werbung, Tracking und Daten-Sammelwut von Providern schützen. Und das geht schneller und günstiger als man denkt.
In diesem Beispiel setzen wir einen Cloud-Server bei Hetzner auf. Mit meinem Gutschein-Code erhältst Du bei Registrierung ein Guthaben von 20 EUR. Da der Server, den wir dafür benötigen, nur € 2,96 im Monat kostet, bleibt genug Zeit, dies kostenlos auszuprobieren. Nutze diesen Gutschein-Code
Erstelle, wie im Video beschrieben, einen Server mit Ubuntu 20.04 & melde dich per SSH und root an. Zunächst aktualisiere den Server mit folgendem Befehl:
apt update && apt upgrade -y
Als erstes Paket installiere Unbound. Für die Installation gib folgenden Befehl ein:
apt install unbound
Danach lade die aktuellen root Hints (die Liste der offiziellen Root-DNS Server) herunter. Gib dazu folgendes ein:
curl -# https://www.internic.net/domain/named.root > /var/lib/unbound/root.hints
Jetzt muss eine Konfiguration für Unbound erstellt werden. Wechsele in das config Verzeichnis mit folgendem Kommando:
cd /etc/unbound/unbound.conf.d
Jetzt erstelle eine Konfigurations-Datei mit dem Namen 01-pihole.conf und öffne die in dem Nano Editor:
nano 01-pihole.conf
Diese Konfiguration wird dann beim Start von Unbound geladen. Da bei Pi-hole unter anderem der Port 53 schon in Gebrauch ist, muss die Basis-Konfiguration angepasst werden. Ich stelle Dir hierfür eine Konfiguration zur Verfügung. Kopiere den Inhalt und füge ihn in die 01-pihole.conf per copy & paste ein:
# https://nlnetlabs.nl/documentation/unbound/unbound.conf/ server: # Do not daemonize, to allow proper systemd service control and status estimation. do-daemonize: no # A single thread is pretty sufficient for home or small office instances. num-threads: 1 # Logging: For the sake of privacy and performance, keep logging at a minimum! # - Verbosity 2 and up practically contains query and reply logs. verbosity: 0 log-queries: no log-replies: no # - If required, uncomment to log to a file, else logs are available via "journalctl -u unbound". #logfile: "/var/log/unbound.log" # Set interface to "0.0.0.0" to make Unbound listen on all network interfaces. # Set it to "127.0.0.1" to listen on requests from the same machine only, useful in combination with Pi-hole. interface: 127.0.0.1 # Default DNS port is "53". When used with Pi-hole, set this to e.g. "5335", since "5353" is used by mDNS already. port: 5335 # Control IP ranges which should be able to use this Unbound instance. # The Server defaults permit access from official local network IP ranges only, hence requests from www are denied. access-control: 0.0.0.0/0 refuse access-control: 10.0.0.0/8 allow access-control: 127.0.0.1/8 allow access-control: 172.16.0.0/12 allow access-control: 192.168.0.0/16 allow access-control: ::/0 refuse access-control: ::1/128 allow access-control: fd00::/8 allow access-control: fe80::/10 allow # Private IP ranges, which shall never be returned or forwarded as public DNS response. # NB: 127.0.0.1/8 is sometimes used by adblock lists, hence DietPi by default allows those as response. private-address: 10.0.0.0/8 private-address: 172.16.0.0/12 private-address: 192.168.0.0/16 private-address: 169.254.0.0/16 private-address: fd00::/8 private-address: fe80::/10 # Define protocols for connections to and from Unbound. # NB: Disabling IPv6 does not disable IPv6 IP resolving, which depends on the clients request. do-udp: yes do-tcp: yes do-ip4: yes do-ip6: yes prefer-ip6: no # DNS root server information file. Update regularly via: "curl -# https://www.internic.net/domain/named.root > /var/lib/unbound/root.hints" root-hints: "/var/lib/unbound/root.hints" # Maximum number of queries per second ratelimit: 1000 # Defend against and print warning when reaching unwanted reply limit. unwanted-reply-threshold: 10000 # Set EDNS reassembly buffer size to match new upstream default, as of DNS Flag Day 2020 recommendation. edns-buffer-size: 1232 # Increase incoming and outgoing query buffer size to cover traffic peaks. so-rcvbuf: 4m so-sndbuf: 4m # Hardening harden-glue: yes harden-dnssec-stripped: yes harden-algo-downgrade: yes harden-large-queries: yes harden-short-bufsize: yes # Privacy use-caps-for-id: yes # Spoof protection by randomising capitalisation rrset-roundrobin: yes qname-minimisation: yes minimal-responses: yes hide-identity: yes identity: "Server" # Purposefully a dummy identity name hide-version: yes # Caching cache-min-ttl: 300 cache-max-ttl: 86400 serve-expired: yes neg-cache-size: 4M prefetch: yes prefetch-key: yes msg-cache-size: 50m rrset-cache-size: 100m
Die Datei anschliessend mit CTRL-X-Y abspeichern. Dach den Unbound-Dienst neu starten:
service unbound restart
Jetzt installieren wir Pi-hole. Folge den Anweisungen und bestätige alles mit OK (Enter):
curl -sSL https://install.pi-hole.net | bash
Nach der erfolgreichen Installation ändere das Passwort für das Pi-hole Webinterface:
pihole -a -p
Jetzt passen wir die DNS-Einstellungen von Pi-hole an. Im Standard benutzt ja Pi-hole einen Upstream DNS Server (z.B. Google DNS, Cloudflare etc.). Wir möchten aber Unbound als DNS Server benutzen. Melde Dich dazu am Pi-hole Webinterface an, gehe zu Settings / DNS und trage als Custom DNS Upstream Server 127.0.0.1#5335 ein. Wähle auf der linken Seite alle Server ab und setze den Haken bei Listen on all Interfaces, permit all origins. Danach drücke unten auf Save:
Jetzt installieren wir PiVPN. Die Installation erfolgt über einen einzigen Befehl:
curl -L https://install.pivpn.io | bash
Während der Installation wirst Du nach einem „non root“ User gefragt. Im Standard ist noch keiner installiert. In dem Verzeichnis dieses Users werden dann die VPN-Konfigurationen der VPN-Benutzer angelegt. In diesem Beispiel habe ich den User vpn genannt und ein Passwort vergeben.
Als VPN-Service wähle Wireguard aus und benutze den Standard-Port 51820. Die Frage, ob du Pi-hole im VPN nutzen möchtest, beantworte mit YES. Alles weitere mit Enter bestätigen und den Server nach Installation neu starten.
Nach dem Neustart können jetzt VPN-Benutzer angelegt werden. Dies geht mittels:
pivpn -a
Nach Eingabe des Namens wird der VPN Benutzer angelegt. Die Konfigurations-Datei liegt dann im Verzeichnis /home/vpn/configs
Möchte man die Config auf ein Handy einrichten, kann man sich bequem einen QR Code anzeigen lassen und diesen in der Wireguard APP einscannen. Mit folgendem Kommando kann man sich den QR-Code anzeigen lassen:
pivpn -qr
Wenn man die Konfigurations-Dateien auf einen Rechner übertragen möchte, nutzt man einfach ein SFTP Tool und verbindet sich auf seinen Server.
Da nun unser Pi-hole als öffentlicher DNS-Resovler im Internet verfügbar ist, findet dies unser Provider (hier Hetzner) mit Sicherheit nicht gut. Offene DNS-Resolver können potentiell für DNS Amplification Attacks missbraucht werden. Da wir bei unserem Cloud Server eine Firewall aktivieren können, haben wir somit die Möglichkeit, den Port 53 für den öffentlichen Zugriff zu sperren. Aktiviere die Firewall wie im Video beschrieben und erlaube Port 51820 UDP für die VPN Verbindung. Bitte auf keinen Fall Port 22 (SSH) entfernen, da Du sonst per SSH nicht mehr auf Deinen Server kommst. Wenn Du Deinen Pi-hole auch ohne VPN-Verbindung administrieren willst, öffne zusätzlich noch Port 80 TCP. Achte aber dann auf ein starkes Passwort!
Viel Spass beim Nachbauen.