Einrichten eines einfachen VPNs mit WireGuard und Raspberry Pi als Server

Da WireGuard Werden Sie Teil von zukünftiger Kern Linux 5.6. Ich beschloss, herauszufinden, wie ich dieses VPN am besten in mein System 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)
  • Telefon eingeschaltet Android, die für die gesamte Kommunikation ein VPN nutzen müssen.
  • Notizbuch Linux, die VPN nur innerhalb des Netzwerks verwenden sollten.

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), überlege ich ernsthaft, ob ich verwenden soll. WireGuard für alle meine Geräte, unabhängig davon, in welcher Umgebung sie laufen.

Softwareinstallation

WireGuard bietet vorkompilierte Pakete für die meisten Verteilungen Linux, Windows и macOSAnträge für Android iOS- und iOS-Geräte werden über App Stores vertrieben.

Ich habe die neueste Fedora-Version. Linux 31, und vor der Installation war ich zu faul, das Handbuch zu lesen. Ich habe die Pakete einfach so 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

Am Telefon Android Ich habe die Anwendung installiert. WireGuard VPN aus dem offiziellen Katalog des Google App Store.

Schlüssel installieren

Zur Authentifizierung von Knoten Wireguard Verwendet ein einfaches Verfahren mit privaten und öffentlichen Schlüsseln zur Authentifizierung von VPN-Knoten. VPN-Schlüssel können Sie ganz einfach mit folgendem Befehl generieren:

$ 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 wg-quick@wg0.service

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 wg-quick@wg0.service

Einrichtung des Clients für Android-Telefon

Für telefon Android Wir erstellen 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-Code in der Konsole ausgegeben. Er kann mit der App gescannt werden. Android VPN und die automatische Konfiguration des VPN-Tunnels.

Abschluss

Einstellung WireGuard einfach magisch im Vergleich zu OpenVPN.

Source: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz und VPS-VDS-Servern 🔥 Kaufen Sie zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster