Da WireGuard dem zukünftigen Linux-Kernel 5.6 wird, habe ich beschlossen, mir anzusehen, wie ich dieses VPN am besten mit meinem .
Ausrüstung
- Raspberry Pi 3 mit LTE-Modul und öffentlicher IP-Adresse. Hier wird der VPN-Server eingerichtet (im Folgenden wird er genannt edgewalker)
- Ein Android-Telefon, das das VPN für alle Kommunikationen verwenden soll
- Ein Linux-Laptop, der das VPN nur im Netzwerk nutzen soll
Jedes Gerät, das sich mit dem VPN verbindet, sollte in der Lage sein, mit allen anderen Geräten zu kommunizieren. Zum Beispiel sollte das Telefon in der Lage sein, sich mit dem Webserver auf dem Laptop zu verbinden, wenn beide Geräte Teil des VPN-Netzwerks sind. Wenn die Einrichtung einfach genug ist, kann man darüber nachdenken, auch den Desktop (per Ethernet) mit dem VPN zu verbinden.
Angesichts der Tatsache, dass kabelgebundene und drahtlose Verbindungen im Laufe der Zeit immer weniger sicher werden (, und ), erwäge ich ernsthaft, WireGuard für all meine Geräte zu verwenden, unabhängig davon, in welcher Umgebung sie betrieben werden.
Installation der Software
WireGuard bietet für die meisten Linux-, Windows- und macOS-Distributionen. Die Apps für Android und iOS sind über die jeweiligen App-Stores erhältlich.
Ich habe die neueste Fedora Linux 31, und bevor ich die Installation begann, war ich zu faul, die Anleitung zu lesen. Ich fand einfach die Pakete wireguard-tools, installierte sie und konnte dann nicht verstehen, warum nichts funktioniert. Weitere Nachforschungen ergaben, dass ich das Paket wireguard-dkms (mit dem Netzwerktreiber) nicht installiert hatte, und es war nicht im Repository meiner Distribution verfügbar.
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 bereits das Paket wireguard, installieren wir es:
$ sudo apt install wireguardAuf dem Android-Telefon habe ich die App aus dem offiziellen Google App Store installiert.
Installation der Schlüssel
Für die Authentifizierung der Knoten verwendet WireGuard ein einfaches System aus privaten/öffentlichen Schlüsseln zur Authentifizierung der VPN-Knoten. Sie können die VPN-Schlüssel ganz einfach 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.keyDas gibt uns drei Schlüsselpaaren (sechs Dateien). Lassen Sie uns nicht auf die Dateien in den Konfigurationen verweisen, sondern den Inhalt hierher kopieren: jeder Schlüssel ist eine Zeile in base64.
Erstellen einer 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]
# Handy
PublicKey =
AllowedIPs = 10.200.200.3/32Ein 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/PostDownhabe ich die externe Netzwerkschnittstelle wwan0 angegeben, bei Ihnen kann es eine andere sein (zum Beispiel eth0)
Das VPN-Netzwerk lässt sich leicht mit folgendem Befehl aktivieren:
$ sudo wg-quick up wg0 Eine kleine Detail: als DNS-Server habe ich verwendet dnsmasq gebunden an die Netzwerkschnittstelle br0, ich habe auch Geräte hinzugefügt wg0 zur Liste der erlaubten Geräte. In dnsmasq erfolgt dies durch Hinzufügen einer neuen Zeile mit der Netzwerkschnittstelle in die Konfigurationsdatei /etc/dnsmasq.conf, zum Beispiel:
interface=br0
interface=wg0Außerdem habe ich eine iptable-Regel hinzugefügt, um den Datenverkehr zum hörenden UDP-Port (51280) zu erlauben:
$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPTJetzt, da alles funktioniert, können wir den automatischen Start des VPN-Tunnels festlegen:
$ sudo systemctl enable wg-quick@wg0.serviceKonfiguration des Clients auf dem Laptop
Auf dem Laptop erstellen wir eine Konfigurationsdatei /etc/wireguard/wg0.conf mit denselben Einstellungen:
[Interface]
Address = 10.200.200.2/24
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820Hinweise:
- Anstelle von edgewalker sollte die öffentliche IP oder der Host des VPN-Servers angegeben werden
- Wenn wir installiert haben
AllowedIPsauf10.200.200.0/24, nutzen wir VPN nur für den Zugriff auf das interne Netzwerk. Der Datenverkehr zu allen anderen IP-Adressen/Servern wird weiterhin über "normale" offene Kanäle geleitet. Auch der vordefinierte DNS-Server auf dem Laptop wird verwendet.
Für Tests und den automatischen Start verwenden wir die gleichen Befehle wg-quick und systemd:
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.serviceKonfiguration des Clients auf einem Android-Telefon
Für das Android-Telefon 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 sollte das Telefon unseren VPN-Server als DNS-Server nutzen (Zeile DNS), sowie den gesamten Verkehr über den VPN-Tunnel leiten (AllowedIPs = 0.0.0.0/0).
Anstelle der Übertragung der Datei auf das mobile Gerät kann sie in einen QR-Code umgewandelt werden:
$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.confDer QR-Code wird als ASCII in die Konsole ausgegeben. Er kann aus der Android VPN-App gescannt und der VPN-Tunnel automatisch konfiguriert werden.
Ausgabe
Die Konfiguration von WireGuard ist einfach magisch im Vergleich zu OpenVPN.
Quelle: habr.com
