Sicherer Zugriff mit Wireguard Pi-VPN auf dem Raspberry Zero

Einleitung:

Warum sollte ich ein VPN aufsetzen? Das ist wohl eine einfache und logische Frage und kann gerade Anfängern in diesem Bereich ein wenig Grübeln bereiten. Ein VPN steht kurz für „Virtual Private Network“ und heißt nichts anderes als, dass es wir über eine gesicherte Verbindung von Außen auf unser internes Netzwerk zugreifen können.

Gerade wenn man sich in einem öffentlichen oder unbekannten WLAN befindet, möchte man nicht, dass gewisser Datenverkehr mitgelesen wird. Angefangen von Inhalten aus E-Mails bis hin zu Online-Banking. Klar, diese sollten so oder so über eine eigene Verschlüsselung verfügen doch auch da werden gewissen Daten „Plain„, sprich in Klartext übertragen. Diese Daten können von jedem Teilnehmer in diesem WLAN mitgelesen (Sniffer) werden. Um das zu verhindern, kann man sich über sein eigenes VPN verbinden und somit weiß man, wohin seine Daten gehen.

Sinn macht das ganze noch mehr, wenn es mit PiHole kombiniert wird. Dazu später mehr.

Hinweis:

Falls Ihr noch keinen DynDNS Anbieter habt, um von Außen (Internet) auf Euren Server zugreifen zu können, dann lest mal das hier: DynDNS Server mit ddnss.de

Was benötige ich?

Des Weiteren gehe ich davon aus, dass Ihr schon grundlegend das Image auf den Zero bekommen habt und es somit direkt losgehen kann. Sollte das noch nicht sein, so könnt ihr es dann an einer anderen Stelle nachlesen.

Installation von Wireguard

Die grundlegende Installation von Pi VPN mit Wireguard ist relativ simpel und geht auch ziemlich flott. Es erfolgt eine Script-Installation und deswegen ist es ein klein wenig anders.

Hinweis:

Die Installation fragt euch einige Dinge ab, die ich hier vorher abklären möchte. Somit drückt Ihr nur das, was auch Sinn macht. Mit der Tabulator-Taste (Tab) wechselt Ihr zwischen den Einträgen und mit Enter wird die Eingabe bestätigt.

  • 2x <Ok>
  • Bei DHCP Reservation <No>
  • Bei Static IP Address <Yes> (Unter der IP ist der Pi nun immer erreichbar)
  • Hinweis und Local Users mit <Ok> bestätigen
  • Benutzer <pi> auswählen und <Ok>
  • (*) Wireguard auswählen und <Ok>
  • Wireguard Port lassen wir auf 51820, <Ok>
  • Bestätigung des Ports mit <Ok>
  • Wenn bereits PiHole installiert ist, dann mit <Ok> einbinden
  • Bei: Public IP or DNS müsst Ihr Euren DNS eintragen und dann <Ok>
  • Afrage mit <Ok> bestätigen
  • Danach werden die Keys erstellt
  • Unattended Upgrades aktivieren <Yes>
  • <Yes> Bei Reboot und fertig die Laube

Hier aber jetzt die Befehle:

apt-get update
apt-get upgrade 
apt-get install raspberrypi-kernel-headers
cd ~
mkdir vpn
cd vpn
wget -O pivpn https://install.pivpn.io  
sudo bash pivpn 

Nachdem nun PiVPN und Wireguard installiert wurde, kann man mit der Konfiguration selbigen beginnen. Zuerst müssen wir prüfen, ob die ipv4 Weiterleitung aktivieren und dies passiert in der sysctl.conf. Also mit dem Nano öffnen und checken, on die Raute vor „net.ipv4.ip_forward = 1“ entfernt ist; sonst diese entfernen:

sudo su
nano /etc/sysctl.conf
Raute "#" vor: 'net.ipv4.ip_forward = 1' entfernen
Mit Strg + o speichern und mit Srg + x schließen
Zum prüfen dies eingeben:
sysctl net.ipv4.ip_forward

Jetzt geht es an’s Eingemachte und ab zur direkten Konfiguration von Wireguard. Prinzipiell müssen wir nur zwei Dateien bearbeiten und diese befinden sich im wireguard Ordner. Darin wird nun weiter gearbeitet und alles beartbeitbar gemacht.

cd /etc/wireguard
umask 077

Der nächste Schritt wird sein, die Schlüssel für den Server und dann für den Clienten zu erstellen. Hier könnt Ihr „baba“ durch Euren eigenen Namen ersetzen.

wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee baba-private.key | wg pubkey > baba-public.key

Es müssten nun die folgenden 4 keys erstellt wurden sein:

  • server-public.key [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=]
  • server-private.key [bbbbbbbbbbbbbbbbbbbbbbbbbb=]
  • baba-private.key [ccccccccccccccccccccccccccccccccc=]
  • baba-public.key [dddddddddddddddddddddddddd=]

Hinweis: Zur Vereinfachung wurden die erzeugten Schlüssel durch aaaa=, bbbb=, usw ersetzt. Ihr müsst natürlich Eure eigenen Schlüssel einsetzen. Diese findet Ihr heraus, indem Ihr für jeden Key in der Console folgendes eingebt:

cat server-public.key
cat server-private.key
cat baba-private.key
cat baba-public.key

Dann einfach mit der Maus markieren und mit der mittleren Maustaste kopieren. Mit einem Rechtsklick fügt Ihr den Inhalt in den Nano Editor ein. Zuerst bearbeiten wir die wg0.conf mit dem Nano Editor und fügen den unteren Inhalt da ein, bzw. ergänzen diesen.

nano wg0.conf

Die wg0.conf

Bitte Euren server-private.key in den oberen, „PrivateKey“ eintragen und Euren „baba-public.key“ in den unteren „PublicKey“ eintragen.

Hinweis: Mein Zero wird per WLAN betrieben und somit ist die Schnittstelle: wlan0. Solltet Ihr den Pi nutzen, oder auch den Zero per LAN-Kabel angeschlossen haben, so müsst Ihr die Schnittstelle auf eth0 ändern!

[Interface]
Address = 10.10.10.1/24
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
ListenPort = 51820
PrivateKey = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=

# Clients
#
# BaBa
#
[Peer]
PublicKey = dddddddddddddddddddddddddd=
AllowedIPs = 10.10.10.10/32

Jetzt erstellen wir die Benutzerkonfiguration. Diese muss für jeden Benutzer erstellt werden, welcher sich einmal mit dem VPN verbinden soll. Dazu geben wir ein und füllen diese anschließend mit folgenden Inhalt:

nano baba.conf

Inhalt der baba.conf

  • PrivateKey => Der private Schlüssel aus: baba-private.key
  • Address => Die Adresse, welche der Client im VPN bekommt
  • DNS => Da ich PiHole nutze, wir der Zero selbst als DNS Server angeben.
  • ==> Es geht auch die IP Eures Routers, oder 1.1.1.1 (Cloudflare), oder 8.8.8.8 (Google DNS)
  • PublicKey => Der public-Schlüssel aus: server-public.key
  • Endpoit => Hier muss Eure ext. IP oder Euer DNS-Name hinein
  • AllowedIPs => 0.0.0.0 schiebt den kompletten Traffic durch das VPN
  • PersistentKeepalive => Halte den Clienten für 25 Sekunden „am Leben“ (Bei Verbindungsabbruch)

Hinweis: Ich habe bei AllowedIPs eine zweiten IP-Adressen-Bereich eingegeben. Damit hat der Benutzer „BaBa“ die Möglichkeit, auch auf das interne Netzwerk zuzugreifen. Zum Beispiel die Fritzbox oder die NAS. Ihr könnt diesen Eintrag auch entfernen.

[Interface]
PrivateKey = ccccccccccccccccccccccccccccccccc=
Address = 10.10.10.10
DNS = 192.168.178.42

[Peer]
PublicKey = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=
Endpoint = DEINE-IP-ADRESSE:51820
AllowedIPs = 0.0.0.0/0, 192.168.178.0/24
PersistentKeepalive = 25

Haben wir alles geschafft, stoppen und starten wir das Netzwerk und lassen uns am Ende einen QR-Code anzeigen, um diesen mit unserem Android Smartphone abzufotografieren. Dazu nehmen wir die offizielle App: WireGuard

wg-quick down wg0
wg-quick up wg0
qrencode -t ansiutf8 < baba.conf

Hinweis: Selbstverständlich muss der Port: 51820 in Eurem Router freigeben werden, damit der Verkehr dadurch getunnelt werden kann!