Pihole / VPN

1 Hintergrund
Das Ziel des Projekts ist es Werbung zu blockieren und Tracking durch Dritte zu minimieren. Pi-Hole wird als DNS-Server für das gesamte lokale Netz fungieren. Zusätzlich soll der Dienst mittels eines VPN-Tunnels auch ausserhalb des Netzes genutzt werden können. Für das Einrichten beider Dienste verwenden wir bewährte Scripts, die die Inbetriebnahme erheblich erleichtern.
2 Material
Für dieses kleine Projekt benötigt man lediglich einen Raspberry Pi, eine Micro-SD-Karte und ein Ethernet-Kabel. Die Gesamtkosten liegen bei nicht mal CHF 100.00.
3 Betriebssystem auf Micro SD-Karte flashen
In diesem Projekt werden wir Raspbian Stretch Lite verwenden. Dies ist sozusagen das Standard-Betriebssystem für diese Einplatinencomputer.
Zunächst sollte das System heruntergeladen werden. Das macht man am besten von der offiziellen Website:
https://www.raspberrypi.org/downloads/
Sobald die Archivdatei heruntergeladen wurde, kann diese entpackt werden. Nun sollte man eine Image-Datei haben, welche sich auf die Micro SD-Karten flashen lässt. Hierzu öffnet man das Terminal und lässt sich, nach dem Einlegen der Micro SD Karte, die Datenträger anzeigen:
sudo fdisk -l
Die Micro SD-Karte sollte als /dev/mmcblk0p anzeigt werden. Jetzt navigieren wir im Terminal in den Ordner, in welchem die Image-Datei liegt und können wir das Image auf die SD-Karte flashen:
sudo dd status=progress if=Dateiname.img of=/dev/mmcblk0p bs=4M oflag=sync
Sobald der Vorgang abgeschlossen ist, kann man die Micro SD-Karte entfernen und in den Raspberry Pi einsetzten.
4 Konfigurationen - System
Folgendes muss jetzt für die Grundlegende Konfiguration des Systems vorgenommen werden. Zum einten benötigen wir eine fixe IP-Adresse, zum anderen wollen wir den SSH-Zugang offen haben und das Benutzerpasswort sollte geändert. Der Einfachheit halber schliessen wir dem Raspberry PI ein HDMI-Display und eine Tastatur an.
Sobald das Geräte am Strom angeschlossen ist, startet es auf und man kann sich mit dem Standardzugangsdaten einloggen.
Benutzername: | pi |
Passwort: | raspberry |
4.1 Benutzerpasswort ändern
Dass Passwort für den Benutzer "pi" kann mit dem folgeden Befehl geändert werden:
passwd
Nun muss das neue Passwort 2x eingegeben werden. Das Passwort wurde nun geändert.
4.2 Fixe IP-Adresse festlegen
In Raspbian werden fixe IP-Adressen in der Konfigurationsdatei "dhcpcd.conf" definiert. Wir öffnen die Datei mit einem Editor (hier mit nano):
sudo nano /etc/dhcpcd.conf
Davon ausgehend, dass wir dem Gerät die IP-Adresse 192.168.1.10 vergeben wollen und dieser über einen Router mit der IP 192.168.1.1 ins Internet gelangt, ergänzen wir diese Datei mit den folgenden Zeilen:
interface eth0 static ip_address=192.168.1.10/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.1
Mit Ctrl+o speichern und mit Ctrl+x schliesst man die Datei. Die IP-Adresse wird nach einem Neustart übernommen.
4.3 SSH-Zugang
Nun muss geprüft werden, ob der SSH-Daemon läuft. Dies erreicht man mit:
systemctl status ssh
Der Dienst läuft, wenn in der Zeiel "Active" der folgende Eintrag steht:
Active: active (running) since ...
Sollte hier "inactive (dead)" stehen, muss der Daemon erst noch gestartet und aktiviert werden. Dies kann so gemacht werden:
sudo systemctl start ssh sudo systemctl enable ssh
Der Daemon wird nun bei einem Neustart automatisch gestartet.
4.4 Update
Bevor mit der Inbetriebnahme von Pi-Hole begonnen wird, sollte das System noch aktualisiert werden. Wir benutzen den folgenden Befehl um die Paketlisten zu aktualisieren:
sudo apt-get update
Und spielen die neuen Updates ein:
sudo apt-get upgrade
Danach kann das System heruntergefahren werden:
sudo poweroff
5 Am Standort plazieren
Nachdem der Raspberry Pi heruntergefahren wurde, kann dieser nun an einer geeigneten Stelle platziert werden. Am besten neben dem Router. Er wird mit einem Ethernet-Kabel an den Router angeschlossen und kann wieder hochgefahren werden.
Nach einer kurzen Wartezeit kann mit einem Ping-Versuch getestet werden, ob die Netzwerkkonfiguration des Raspberry Pi korrekt war.
ping 192.168.1.10
Dann verbinden wir uns via SSH mit dem Gerät:
ssh pi@192.168.1.10
6 Installation Pi-Hole
Nun muss das Installationsscript für Pi-Hole heruntergeladen werden. Hierfür verwenden wir das Programm curl und pipen das Script, wie auf der offiziellen Website von Pi-Hole vorgeschlagen, direkt in die bash:
curl -sSL install.pi-hole.net | bash
Als nächstes werden alle Installationsschritte durchgegangen.
6.1 Erste Informationen
Als erstes gibt das Script einige Informationen aus, welche lediglich mit OK bestätigt werden können.
- This installer will transform your device into a network-wide ad blocker!
- The Pi-hole is free, but powered by your donations: pi-hole.net/donate.
- The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly.
In the next section, you can choose to use your current network settings (DHCP) or to manually edit them.
Wir haben bereits ein statische IP-Adresse definiert und das System entsprechend konfiguriert.
6.2 Select Upstream DNS Provider...
Wir werden als Upstream DNS Provider den DNS Server des ISP einsetzen. Dieser sollte in der Routerkonfiguration nachgesehen werden.
In der Auswahl scrollen wir runter, wählen "Custom" und gehen weiter. Danach werden wir aufgefordert den DNS Server einzutragen. Wir tragen hier also die IP-Adresse des ISP ein und gehen weiter. DNS Server können nach abgeschlossener Installation im Webinterface noch ergänzt oder geändert werden.
6.3 Pi-hole relies on third party lists in order to block ads...
Hier werden die Blocklisten ausgewählt, welche angewendet werden sollen. Wir lassen alle ausgewählt. Sollte eine URL blockiert werden, welche nicht blockiert sein sollte, kann diese später im UI auf der Whitelist eingetragen werden, damit diese nicht blockiert wird.
6.4 Select Protocols...
Da IPv4 immer noch der Standard ist, wählen wir hier lediglich "IPv4 Block ads over IPv4" und weiter.
6.5 Do you want to user your current network settings...
Da wir die Netzwerkeinstellungen bereit so konfiguriert haben, wie wir dies möchten, können wir dies mit Ja bestätigen.
6.6 Do you wish to install the web admin interface?
Um das Verwalten der Listen möglichst einfach zu gestalten, werden wir das Web Interface installieren. Den Schalter also auf "On" lassen und weiter.
6.7 Do you wish to install the web server (lighthttpd)?
Da auf dem Raspberry Pi kein Webserver in Betrieb genommen wurde, müssen wir diesen installieren, wenn wir das Web Interface nutzen möchten. Also auf "On" lassen und weiter.
6.8 Do you want to log queries?
Damit die Diagramme und Statistiken auf dem Webinterface angezeigt werden können, müssen die Queries geloggt werden. Wir lassen diesen Schalter, da wir eine genügend grosse Micro SD-Karte eingesetzt haben, auf "On".
6.9 Installiere Pakete
Nun werden alle nötigen Softwarepakete installiert und ensprechend konfiguriert. Her muss man nun abwarten, bis Meldung "Installation Complete!" erscheint.
Hier ist nun eine kurze Übersicht über einige Konfigurationen und auch die Informationen zum Login des Web Interface. Das Interface ist nun über die nachfolgende Adresse erreichbar.
6.10 Passwort für Web Interface
Das Passwort für das Webinterface kann direkt im Terminal geändert werden. Hierfür benötigen wir:
pihole -a -p
7 Routerkonfiguration
Damit der Dienst für alle Geräte im Netzwerk automatisch genutzt wird, müssen wir auf dem Router nun noch den DNS Server umstellen. Ansonsten müssten wir dies bei jedem Gerät von Hand vornehmen.
Hierzu öffnen wir das Web Interface des Routers und stellen den zu verwenden DSN Server auf 192.168.1.10. Pi-hole verwaltet jetzt die DNS-Anfragen des Netzwerkes. Dabei filtert er die Anfragen für Adressen auf den schwarzen Listen heraus und leitet die anderen zur Auflösung an den DNS Server des ISP weiter. Bei Netzwerken mit geringer Bandbreite kann es sein, dass einige Websites nun schneller geladen werden.
8 Installation PiVPN
Bevor mit der Installation begonnen wird, sollte ein DynDNS-Dienst eingerichtet werden. Da wir dies in der Konfiguration von PiVPN angeben müssen. Wir nehmen für die Konfiguration a.dyndns.com als Beispiel.
Jetzt können wir noch das Installationsscript von PiVPN ausführen, welches den Raspberry Pi auch noch in einen VPN Server verwandeln wird. Auch dieses laden wir mit curl und pipen es direkt in bash:
curl -L install.pivpn.io | bash
Das Script installiert beim Start als erstes einige benötigte Pakete.
8.1 Erste Informationen
Auch bei diesem Scrpit werden zu Beginn einige Informationen eingeblendet, die man beachten sollte.
- This installer will transform your Raspberry Pi into an OpenVPN server!
The PiVPN is a SERVER so it needs a STATIC IP ADDRESS to function properly.
In the next section, you can choose to use your current network settings (DHCP) or to manually edit them.Choose a local user that will hold your ovpn configurations.
8.2 Choose A User
Da wir keinen anderen User erstellt haben, nehmen wir den User "pi". Es empfiehlt sich aber bei Linux-Systemen grundsätzlich vorgängig ein sauberes Berechtigungskonzept mit verschiedenen Nutzern auszuarbeiten. Einige Dienste/Applikationen erstellen hierfür bei der Installation bereits Nutzer, welche lediglich für den betreffenden Dienst zuständig sind.
8.3 Unattended Upgrades
Wir werden informiert, dass wir die Möglichkeit haben automatische Updates zu aktivieren. Wir werden dies mit "Ja" bestätigen.
8.4 Choose a protocol...
Als nächstes muss das Protokoll welches für die Kommunikation genutzt wird. Dies lassen wir auf "UDP".
8.5 Default OpenVPN Port
Wir verwenden nicht den Standardport. Wir werden den Standardport "1194" um eine Zahl ergänzen, z.B. 4. Der festgelegte Port ist nun also "11944".
8.6 Encryption strength
Die Verschlüsselung lassen wir für dieses Beispiel auf 2048-bit. Wer es noch sicherer möchte, kann diese kann auch auf 4096-bit stellen. Das generien der Schlüssel dauert dann länger.
8.7 Version 2.4 improvements
Da wir immer die neusten Software-Versionen nutzen, kann dies mit "Ja" beantwortet werden.
8.8 Public IP or DNS
Da Heimnetzwerke im Normalfall nicht über eine statische IP-Adresse verfügen, werden wir hier DNS Entry auswählen.
8.9 What is the public DNS name of this Server?
Hier tragen wir nun die URL des vor der Installation eingerichteten DynDNS-Dienstes ein. Also in unserem Beispiel: a.dyndns.com
8.10 Select the DNS Provider for your VPN Clients
Hier muss nun wieder "Custom" gewählt werden, denn wir möchten den Router als DNS-Provider angeben, welcher wiederum Pi-Hole als DNS-Server verwendet. In unserem Beispiel hat der Router die IP 192.168.1.1
8.11 Reboot
Das Setup fragt, ob man einen Neustart durchführen möchte. Es ist empfehlenswert diesen durchzuführen.
9 openVPN Profile
Nun müssen Schlüssel für die Clients generiert werden. Auch das ist mit PiVPN automatisiert und kann einfach mittels nachfolgendem Befehl umgesetzt werden:
pivpn add
1. Clientnamen eingeben (z.B. client1)
2. Passwort für client1 eingeben
3. Passwort bestätigen
pivpn erstellt nun die Schlüssel und erstellt auch automatisch eine ovpn-Konfigurationsdatei, welche wir nun via Secure Copy auf unser System holen können. Als erstes beenden wir die SSH-Session mit exit. Danach kopieren wir die Datei auf unser System:
scp pi@192.168.1.10:/home/pi/ovpns/client1.ovpn /home/Benutzername/
10 VPN-Cients
Um Clients zu verbinden haben wir nun diverse Möglichkeiten. Das hängt von der Plattform ab. Für Smartphones (Android oder iPhone) kann aus dem App-Store die openVPN App installiert werden. Bei Windows-Systemen kann ein kleines openVNP-Tool installiert werden. Bei Linux-Systemen muss openVPN via Repository installiert und kann direkt über das Terminal mit dem folgenden Befehl gestartet werden:
sudo openvpn --config /Pfad/zur/Datei/client1.ovpn