Da WireGuard künftigen Kernelversion 5.6 von Linux wird, habe ich beschlossen, zu untersuchen, 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 (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 (, und ), 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 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 wireguardAuf meinem Android-Telefon habe ich die Anwendung 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.keyDas 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/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 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=wg0Zusä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 ACCEPTJetzt, da alles funktioniert, können wir den automatischen Start des VPN-Tunnels einrichten:
$ sudo systemctl enable wg-quick@wg0.serviceKonfiguration 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:51820Hinweise:
- Statt edgewalker sollten Sie die öffentliche IP oder den Host des VPN-Servers angeben
- Nachdem wir
AllowedIPsfindet man10.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.serviceEinrichten 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.confDer 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
