Seit WireGuard des zukünftigen Linux 5.6-Kernels habe ich beschlossen, herauszufinden, wie ich dieses VPN am besten in mein integrieren kann .
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 (, и ), 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 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 wireguardIch habe die App auf meinem Android-Handy installiert 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.keyDadurch 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/32Ein 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/PostDownIch 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=wg0Auß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 ACCEPTDa nun alles funktioniert, können wir den automatischen Start des VPN-Tunnels registrieren:
$ sudo systemctl enable wg-quick@wg0.serviceKonfiguration 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:51820Notes:
- Anstelle von Edgewalker müssen Sie eine öffentliche IP oder einen VPN-Serverhost angeben
- Indem man es einstellt
AllowedIPsauf10.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.serviceEinrichten 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.confDer 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
