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

Da WireGuard Teil des zukünftigen Linux 5.6-Kernels sein wird, habe ich mich entschlossen, herauszufinden , wie dieses VPN am besten in meinen LTE-Router / Access Point auf dem Raspberry Pi integriert werden kann .

Ausrüstung


  • Raspberry Pi 3 mit LTE-Modul und öffentlicher IP-Adresse. Es wird einen VPN-Server geben (im Folgenden als Edgewalker bezeichnet ).
  • Ein Android-Telefon, das für die gesamte Kommunikation ein VPN verwenden sollte
  • Linux-Laptop, der VPN nur innerhalb des Netzwerks verwenden sollte

Jedes Gerät, das eine Verbindung zum VPN herstellt, muss eine Verbindung zu allen anderen Geräten herstellen können. Beispielsweise sollte ein Telefon in der Lage sein, eine Verbindung zu einem Webserver auf einem Laptop herzustellen, wenn beide Geräte Teil eines VPN sind. Wenn die Einrichtung recht einfach ist, können Sie über eine Verbindung zu einem VPN und einem Desktop (über Ethernet) nachdenken.

Angesichts der Tatsache, dass drahtgebundene und drahtlose Verbindungen im Laufe der Zeit immer weniger sicher sind ( gezielte Angriffe , KRACK-Angriffe auf WPA2-Hacking und Dragonblood-Angriffe gegen WPA3 ), denke ich ernsthaft über die Möglichkeit nach, WireGuard für alle meine Geräte zu verwenden, unabhängig von der Umgebung, in der sie arbeiten.

Software Installation


WireGuard bietet vorkompilierte Pakete für die meisten Linux-, Windows- und MacOS-Distributionen. Android- und iOS-Anwendungen werden über Anwendungsverzeichnisse bereitgestellt.

Ich habe das neueste Fedora Linux 31 und war vor der Installation zu faul, um das Handbuch zu lesen. Ich habe gerade die Pakete gefunden wireguard-tools, sie installiert und konnte dann nicht verstehen, warum nichts funktionierte. Weitere Untersuchungen ergaben, dass ich kein Paket wireguard-dkms(mit einem Netzwerktreiber) installiert hatte und es sich nicht im Repository meiner Distribution befand.

Wenn ich die Anweisungen lesen würde, würde ich die richtigen Schritte unternehmen:

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

Ich habe das Raspbian Buster Distribution Kit auf dem Raspberry Pi installiert. Dort ist bereits ein Paket vorhanden wireguard. Installieren Sie es:

$ sudo apt install wireguard

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

Schlüsselinstallation


Für die Hostauthentifizierung verwendet Wireguard ein einfaches Schema für private / öffentliche Schlüssel zur Authentifizierung von VPN-Hosts. 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

Dies gibt uns drei Schlüsselpaare (sechs Dateien). Wir werden nicht auf die Dateien in den Konfigurationen verweisen, sondern den Inhalt hier 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 = <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 Kommentare:

  • An den entsprechenden Stellen müssen Sie Zeilen aus Dateien mit Schlüsseln einfügen
  • Mein VPN verwendet einen internen Bereich 10.200.200.0/24
  • Für Befehle PostUp/ PostDownIch habe eine externe Netzwerkschnittstelle wwan0, möglicherweise haben Sie eine andere (z. B. eth0)

Das VPN-Netzwerk kann einfach mit dem folgenden Befehl aufgehoben werden:

$ sudo wg-quick up wg0

Ein kleines Detail: Als DNS-Server, den ich für die dnsmasqBindung an eine Netzwerkschnittstelle verwendet habe br0, habe ich wg0der Liste der zulässigen Geräte auch Geräte hinzugefügt . In dnsmasq wird dazu eine neue Zeile mit einer Netzwerkschnittstelle zur Konfigurationsdatei hinzugefügt /etc/dnsmasq.conf, zum Beispiel:

interface=br0
interface=wg0

Außerdem habe ich die iptable-Regel hinzugefügt, um Datenverkehr zum empfangenden UDP-Port (51280) zuzulassen:

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

Jetzt, da alles funktioniert, können wir den VPN-Tunnel so einstellen, dass er automatisch startet:

$ sudo systemctl enable wg-quick@wg0.service

Client-Konfiguration auf dem Laptop


Erstellen Sie auf dem Laptop eine Konfigurationsdatei /etc/wireguard/wg0.confmit denselben 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

Anmerkungen:

  • Anstelle von edgewalker müssen Sie die öffentliche IP-Adresse oder den Host des VPN-Servers angeben
  • Mit der Einstellung AllowedIPsauf verwenden 10.200.200.0/24wir das 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. Ein vorkonfigurierter DNS-Server auf dem Laptop wird ebenfalls verwendet.

Zum Testen und zum automatischen Start verwenden wir dieselben Befehle wg-quickund systemd:

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

Einrichten eines Clients auf einem Android-Telefon


Erstellen Sie für ein Android-Telefon eine sehr ähnliche Konfigurationsdatei (nennen wir es 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 Konfiguration auf dem Laptop muss das Telefon unseren VPN-Server als DNS-Server (Zeichenfolge DNS) verwenden und den gesamten Datenverkehr durch den VPN-Tunnel ( AllowedIPs = 0.0.0.0/0) leiten .

Anstatt die Datei auf Ihr Mobilgerät zu kopieren, können Sie sie in einen QR-Code konvertieren:

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

Der QR-Code wird als ASCII an die Konsole ausgegeben. Sie können es über die Android VPN-App scannen und den VPN-Tunnel automatisch konfigurieren.

Fazit


Das Einrichten von WireGuard ist im Vergleich zu OpenVPN einfach magisch.

Source: https://habr.com/ru/post/undefined/


All Articles