Seit WireGuard
Ausrüstung
- Raspberry Pi 3 mit LTE-Modul und öffentlicher IP. Es wird einen VPN-Server geben (im Folgenden wird er so genannt). Kantenwanderer)
- Ein Android-Telefon, das für die gesamte Kommunikation ein VPN verwenden muss
- Linux-Laptop, der VPN nur innerhalb des Netzwerks verwenden muss
Jedes Gerät, das eine Verbindung zu einem VPN herstellt, muss sich mit jedem anderen Gerät verbinden können. Beispielsweise sollte ein Telefon eine Verbindung zu einem Webserver auf einem Laptop herstellen können, wenn beide Geräte Teil eines VPN-Netzwerks sind. Wenn die Einrichtung einfach genug ist, können Sie darüber nachdenken, eine Verbindung zu einem VPN und einem Desktop (über Ethernet) herzustellen.
Angesichts der Tatsache, dass kabelgebundene und kabellose Verbindungen mit der Zeit immer weniger sicher werden (
Softwareinstallation
WireGuard bietet
Ich habe das neueste Fedora Linux 31 und war zu faul, das Handbuch vor der Installation zu lesen. Habe gerade die Pakete gefunden wireguard-tools
, installierte sie und konnte dann nicht herausfinden, warum nichts funktionierte. Weitere Untersuchungen ergaben, dass ich das Paket nicht installiert hatte wireguard-dkms
(mit einem Netzwerktreiber) und es befand sich nicht im Repository meiner Distribution.
Wenn ich die Anleitung gelesen hätte, hätte ich die richtigen Schritte unternommen:
$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools
Ich habe die Raspbian Buster-Distribution auf meinem Raspberry Pi installiert, es gibt bereits ein Paket wireguard
, es installieren:
$ sudo apt install wireguard
Ich habe die App auf meinem Android-Handy installiert
Schlüssel installieren
Zur Authentifizierung von Knoten verwendet Wireguard ein einfaches privates/öffentliches Schlüsselschema zur Authentifizierung von VPN-Knoten. Mit dem folgenden Befehl können Sie ganz einfach VPN-Schlüssel 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
Dadurch erhalten wir drei Schlüsselpaare (sechs Dateien). Wir werden nicht auf Dateien in Konfigurationen verweisen, sondern den Inhalt hierher kopieren: Jeder Schlüssel ist eine Zeile in Base64.
Erstellen einer Konfigurationsdatei für einen VPN-Server (Raspberry Pi)
Die Konfiguration ist recht einfach, ich habe folgende Datei erstellt /etc/wireguard/wg0.conf
:
[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
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 = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32
[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32
Ein paar Anmerkungen:
- An den entsprechenden Stellen müssen Sie die Zeilen aus den Dateien mit den Schlüsseln einfügen
- Mein VPN verwendet den internen Bereich
10.200.200.0/24
- Für Mannschaften
PostUp
/PostDown
Ich habe eine externe Netzwerkschnittstelle wwan0, Sie haben möglicherweise eine andere (zum Beispiel eth0)
Das VPN-Netzwerk lässt sich ganz einfach mit dem folgenden Befehl aufrufen:
$ sudo wg-quick up wg0
Ein kleines Detail: Als DNS-Server habe ich verwendet dnsmasq
mit der Netzwerkschnittstelle verbunden br0
, ich habe auch Geräte hinzugefügt wg0
zur Liste der erlaubten Geräte hinzufügen. In dnsmasq geschieht dies durch das Hinzufügen einer neuen Zeile mit der Netzwerkschnittstelle zur Konfigurationsdatei /etc/dnsmasq.conf
zum Beispiel:
interface=br0
interface=wg0
Außerdem habe ich eine iptable-Regel hinzugefügt, um Datenverkehr zum überwachenden UDP-Port (51280) zuzulassen:
$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT
Da nun alles funktioniert, können wir den automatischen Start des VPN-Tunnels registrieren:
$ sudo systemctl enable [email protected]
Konfiguration des Laptop-Clients
Erstellen Sie auf dem Laptop eine Konfigurationsdatei /etc/wireguard/wg0.conf
mit den gleichen Einstellungen:
[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820
Notes:
- Anstelle von Edgewalker müssen Sie eine öffentliche IP oder einen VPN-Serverhost angeben
- Indem man es einstellt
AllowedIPs
auf10.200.200.0/24
, wir nutzen das VPN nur für den Zugriff auf das interne Netzwerk. Der Datenverkehr zu allen anderen IP-Adressen/Servern erfolgt weiterhin über „normale“ offene Kanäle. Dabei wird auch der vorkonfigurierte DNS-Server auf dem Laptop genutzt.
Für den Test und den automatischen Start verwenden wir dieselben Befehle wg-quick
и systemd
:
$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]
Einrichten eines Clients auf einem Android-Telefon
Für ein Android-Telefon erstellen wir eine sehr ähnliche Konfigurationsdatei (nennen wir sie mobile.conf
):
[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820
Im Gegensatz zur Laptop-Konfiguration muss das Telefon unseren VPN-Server als DNS-Server verwenden (string DNS
) sowie den gesamten Datenverkehr durch den VPN-Tunnel leiten (AllowedIPs = 0.0.0.0/0
).
Anstatt die Datei auf Ihr Mobilgerät zu kopieren, können Sie sie in einen QR-Code umwandeln:
$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf
Der QR-Code wird als ASCII an die Konsole ausgegeben. Es kann über die Android-VPN-App gescannt werden und automatisch einen VPN-Tunnel einrichten.
Abschluss
Das Einrichten von WireGuard ist im Vergleich zu OpenVPN einfach magisch.
Source: habr.com