Skip to main content

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.

192.168.1.10/admin

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