Ein einfacher VPN mit WireGuard und Raspberry Pi als Server einrichten

Da WireGuard Teil der künftigen Kernelversion 5.6 von Linux wird, habe ich beschlossen, zu untersuchen, wie ich dieses VPN am besten mit meinem LTE-Router/Hotsport auf einem Raspberry Pi.

Ausrüstung

  • Raspberry Pi 3 mit LTE-Modul und öffentlicher IP-Adresse. Hier wird der VPN-Server (im weiteren Verlauf als edgewalker)
  • Android-Smartphone, das das VPN für alle Kommunikationen verwenden soll
  • Linux-Laptop, der das VPN nur im Netzwerk nutzen soll

Jedes Gerät, das sich mit dem VPN verbindet, sollte in der Lage sein, sich mit allen anderen Geräten zu verbinden. Zum Beispiel sollte das Smartphone in der Lage sein, sich mit dem Webserver auf dem Laptop zu verbinden, wenn beide Geräte Teil des VPNs sind. Wenn die Einrichtung einfach genug ist, könnte man auch in Erwägung ziehen, den Desktop über Ethernet mit dem VPN zu verbinden.

Angesichts der Tatsache, dass kabelgebundene und drahtlose Verbindungen mit der Zeit zunehmend unsicher werden (gezielte Angriffe, KRACK-Angriff auf WPA2 und Dragonblood-Angriff auf WPA3), erwäge ich ernsthaft, WireGuard für all meine Geräte zu nutzen, unabhängig von der Umgebung, in der sie betrieben werden.

Installation der Software

WireGuard bietet vorab compilierte Pakete für die meisten Distributionen von Linux, Windows und macOS. Anwendungen für Android und iOS sind über die App-Kataloge verfügbar.

Ich habe die letzte Fedora Linux 31, und bevor ich die Installation durchführte, war ich zu faul, um das Handbuch zu lesen. Ich fand einfach die Pakete wireguard-tools, installierte sie und konnte dann nicht verstehen, warum nichts funktioniert. Weitere Recherchen zeigten, dass mir das Paket wireguard-dkms (mit dem Netzwerk-Treiber) fehlte, und es war nicht im Repository meiner Distribution vorhanden.

Hätte ich die Anleitung gelesen, hätte ich die richtigen Schritte unternommen:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Auf meinem Raspberry Pi habe ich die Distribution Raspbian Buster installiert, dort ist das Paket bereits vorhanden: wireguard, wir installieren es:

$ sudo apt install wireguard

Auf meinem Android-Telefon habe ich die Anwendung WireGuard VPN aus dem offiziellen Google App Store installiert.

Schlüsselinstallation

Zur Authentifizierung der Knoten verwendet Wireguard ein einfaches Schema von privaten/öffentlichen Schlüsseln zur Authentifizierung der VPN-Knoten. Sie können VPN-Schlüssel leicht mit dem folgenden Befehl erstellen:

$ wg genkey | tee wg-laptop-private.key | wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key | wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key | wg pubkey > wg-mobile-public.key

Das ergibt drei Schlüsselpaare (sechs Dateien). Lassen Sie uns die Dateien in den Konfigurationen nicht verlinken, sondern den Inhalt hierher kopieren: jeder Schlüssel ist eine Zeile in base64.

Erstellung der Konfigurationsdatei für den VPN-Server (Raspberry Pi)

Die Konfiguration ist ziemlich einfach, ich habe die folgende Datei erstellt /etc/wireguard/wg0.conf:

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

[Peer]
# Laptop
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# Mobiltelefon
PublicKey = 
AllowedIPs = 10.200.200.3/32

Ein paar Anmerkungen:

  • An den entsprechenden Stellen müssen die Zeilen aus den Schlüsseldateien eingefügt werden.
  • Mein VPN-Netzwerk verwendet einen internen Bereich. 10.200.200.0/24
  • Für die Befehle PostUp/PostDown habe ich das externe Netzwerkinterface wwan0 angegeben, bei Ihnen könnte es anders sein (zum Beispiel eth0).

Das VPN-Netzwerk lässt sich leicht mit dem folgenden Befehl starten:

$ sudo wg-quick up wg0

Eine kleine Anmerkung: Als DNS-Server habe ich verwendet dnsmasq mit Bindung an das Netzwerkinterface br0, ich habe auch die Geräte hinzugefügt wg0 in die Liste der erlaubten Geräte. In dnsmasq geschieht dies durch das Hinzufügen einer neuen Zeile mit dem Netzwerkinterface zur Konfigurationsdatei /etc/dnsmasq.conf, zum Beispiel:

interface=br0
interface=wg0

Zusätzlich habe ich eine iptables-Regel hinzugefügt, um den Traffic zum hörenden UDP-Port (51280) zuzulassen:

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Jetzt, da alles funktioniert, können wir den automatischen Start des VPN-Tunnels einrichten:

$ sudo systemctl enable wg-quick@wg0.service

Konfiguration des Clients auf dem Laptop

Auf dem Laptop erstellen wir eine Konfigurationsdatei /etc/wireguard/wg0.conf mit den gleichen Einstellungen:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Hinweise:

  • Statt edgewalker sollten Sie die öffentliche IP oder den Host des VPN-Servers angeben
  • Nachdem wir AllowedIPs findet man 10.200.200.0/24, verwenden wir das VPN nur für den Zugriff auf das interne Netzwerk. Der Traffic zu allen anderen IP-Adressen/Servern wird weiterhin über die 'normalen' offenen Kanäle geleitet. Außerdem wird der vorab konfigurierte DNS-Server auf dem Laptop verwendet.

Zur Testung und für den automatischen Start verwenden wir dieselben Befehle wg-quick und systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Einrichten des Clients auf einem Android-Smartphone

Für Android-Telefone erstellen wir eine sehr ähnliche Konfigurationsdatei (nennen wir sie mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Im Gegensatz zur Konfiguration auf dem Laptop muss das Telefon unseren VPN-Server als DNS-Server verwenden (Zeile DNS), und den gesamten Traffic über den VPN-Tunnel leiten (AllowedIPs = 0.0.0.0/0).

Anstelle der Dateiübertragung auf das mobile Gerät kann diese in einen QR-Code umgewandelt werden:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

Der QR-Code wird in der Konsole als ASCII ausgegeben. Er kann mit der Android-VPN-App gescannt werden, um den VPN-Tunnel automatisch einzurichten.

Fazit

Die Einrichtung von WireGuard ist einfach beeindruckend im Vergleich zu OpenVPN.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster