Richten Sie ein einfaches VPN mit WireGuard und Raspberry Pi als Server ein

Seit WireGuard Werden Sie Teil von des zukünftigen Linux 5.6-Kernels habe ich beschlossen, herauszufinden, wie ich dieses VPN am besten in mein integrieren kann LTE-Router/Access Point auf Raspberry Pi.

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 (gezielte Angriffe, KRACK WPA2-Hackerangriff и Dragonblood-Angriff gegen WPA3), denke ich ernsthaft darüber nach, WireGuard für alle meine Geräte zu verwenden, egal in welcher Umgebung sie sich befinden.

Softwareinstallation

WireGuard bietet vorkompilierte Pakete für die meisten Linux-, Windows- und macOS-Distributionen. Apps für Android und iOS werden über App-Kataloge bereitgestellt.

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 WireGuard-VPN aus dem offiziellen Katalog des Google App Store.

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.confzum 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 auf 10.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

Kommentar hinzufügen