So richten Sie WireGuard VPN-Server und -Client unter Ubuntu 20.04 ein

Richten Sie ein selbst gehostetes VPN mit Wireguard ein

EIN VPN (virtuelles privates Netzwerk) ermöglicht dem Benutzer die Remote-Verbindung zu einem privaten Netzwerk, als ob der Computer des Benutzers direkt mit dem privaten Netzwerk verbunden wäre. Die Technologie wurde ursprünglich entwickelt, um den Fernzugriff auf das interne private Netzwerk eines Unternehmens für Mitarbeiter zu ermöglichen, die sich nicht am Standort des internen Netzwerks befinden.

Am Standort des internen Netzwerks wird ein VPN-Server bereitgestellt. Dieser Server befindet sich im öffentlichen Netz und ist für den Mitarbeiter über einen VPN-Client erreichbar. Für die Verbindung mit dem VPN-Server ist eine Authentifizierung erforderlich. Die Kommunikation zwischen VPN-Server und VPN-Client wird über ein Tunneling-Protokoll abgesichert. Beachten Sie, dass diese Kommunikation verschlüsselt sein kann oder nicht, aber normalerweise ist sie in den meisten VPN-Protokollen verschlüsselt.

Eine andere Verwendung von VPN besteht darin, Anonymität beim Zugriff auf das Internet erlangen oder um geografische Beschränkungen beim Zugriff auf einige Websites zu umgehen. In solchen Fällen ist das Netzwerk, mit dem sich der Benutzer verbinden möchte, kein privates Netzwerk, sondern das Internet.

Im Laufe der Jahre wurden viele VPN-Protokolle entwickelt. Diese Protokolle verwenden verschiedene Tunneling-Protokolle und Verschlüsselungsalgorithmen für die Kommunikation zwischen Server und Client.

Ein solches Protokoll, das in letzter Zeit weit verbreitet ist, ist Drahtschutz. Wireguard ist leichter, einfacher und leistungsfähiger als bekannte traditionell verwendete VPN-Protokolle wie OpenVPN, IPSec. Es ist bereits für Windows, Mac OS und eine Vielzahl von Linux-Distributionen implementiert. Unter Linux ist es als Kernel-Modul implementiert. Es ist in den offiziellen Repositories von Ubuntu 20.04 verfügbar.

In diesem Artikel erfahren Sie, wie Sie einen Wireguard VPN-Server und -Client in Ubuntu 20.04 einrichten.

Installation

Für diesen Artikel richte ich einen Wireguard Server auf einem Ubuntu 20.04 Linode und einen Wireguard Client auf meinem lokalen Rechner mit Ubuntu 20.04 ein.

Das Paket Drahtschutz installiert sowohl Wireguard Server als auch Client. Führen Sie den folgenden Befehl aus sowohl auf dem Server-Rechner als auch auf dem Client-Rechner.

sudo apt installiere Wireguard

Serverkonfiguration

Sicherheitsschlüssel

Wir müssen eine Reihe von öffentlichen/privaten Schlüsselpaaren generieren um die Wireguard-Verbindung zu authentifizieren und abzusichern. Dies kann mit den folgenden Befehlen erfolgen:

sudo su cd /etc/wireguard umask 077 wg genkey | tee private_key | wg pubkey > public_key

Beachten Sie, dass wir alle Konfigurationsaufgaben als Superuser ausführen. Der Grund ist, dass der Zugriff auf das Verzeichnis /etc/wireguard wird für normale Benutzer verhindert, und ein Verzeichniszugriff kann nicht nur mit sudo-Berechtigungen für einen normalen Benutzer erhalten werden.

Als nächstes setzen wir die Dateierstellungsmaske auf 077. Dies bedeutet, dass jedes Mal, wenn in diesem Ordner von einem beliebigen Prozess eine neue Datei erstellt wird, deren Berechtigungen automatisch mit 077 maskiert werden. Wenn in diesem Ordner eine Datei mit den Berechtigungen 777 erstellt wird, wird sie automatisch maskiert und die Berechtigungen werden effektiv 700. Dies geschieht, damit nur der Eigentümer der Datei alle Berechtigungen für die Datei hat und alle anderen keine Berechtigungen haben.

In der nächsten Zeile, wir generieren das öffentliche/private Schlüsselpaar für den Server. Sie werden in Dateien gespeichert Privat Schlüssel und Öffentlicher Schlüssel. Um die Schlüssel anzuzeigen, führen Sie Folgendes aus:

Katze privater_Schlüssel Katze öffentlicher_Schlüssel

Kopieren Sie den privaten Schlüssel, wir brauchen ihn im nächsten Schritt.

Notiz: Geben Sie Ihren privaten Schlüssel niemals öffentlich weiter!

Konfigurationsdatei

Erstellen wir eine Konfigurationsdatei für den Wireguard Server. Sie können einen beliebigen Namen für die Datei wählen. Wir erstellen eine Datei wg0.conf in diesem Beispiel.

vim wg0.conf

Fügen Sie der Datei Folgendes hinzu.

[Schnittstelle] Adresse = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

Fügen Sie den privaten Schlüssel ein, den wir zuvor in Zeile 5 des obigen Codes kopiert haben.

Wir müssen Wireguard in einem anderen (virtuellen) Subnetz konfigurieren als die IP-Adresse des Servers. Hier habe ich 10.20.43.1 für den Server verwendet und werde 10.20.43.2 für den Client verwenden. Hier kann jedes Subnetz verwendet werden. Um die IP-Adresse des Servers und der Schnittstelle zu erhalten, führen Sie Folgendes aus:

ifconfig

Notieren Sie die IP-Adresse des Servers. Dies ist während der Client-Konfiguration erforderlich.

Die vom Server verwendete Schnittstelle, wie im Bild oben zu sehen, ist eth0. Der Schnittstellenname kann je nach Netzwerk des Benutzers unterschiedlich sein wlan0 oder wlp2s0 falls der Benutzer über eine WLAN-Karte mit einem WiFi-Netzwerk verbunden ist.

Ersetze das in PostUp und PostDown mit Ihrer Schnittstelle; in diesem Beispiel ist es eth0.PostUp und PostDown Direktiven werden verwendet, um anzugeben, welche Befehle ausgeführt werden sollen, wenn der Server startet bzw. stoppt. In unserem Beispiel verwenden wir die iptables Befehl zum Festlegen von IP-Regeln, sodass die IP-Adresse des Servers von den Clients geteilt wird. Die Regeln werden gelöscht, sobald der Server stoppt.

Speichern und beenden Sie die Datei. Wenn du vim verwendest, drücke Esc, dann tippe :wq und drücke Eingeben zu speichern und zu beenden.

Wenn Sie a . verwenden ufw Firewall auf dem Server müssen wir UDP-Verbindungen zum Port für VPN-Server 51190 zulassen.

ufw erlauben 51190/udp

Starten des Dienstes

Nachdem die Konfiguration nun abgeschlossen ist, können wir den Wireguard VPN-Dienst starten.

Ermöglichen Um den Dienst beim Booten zu starten, führen Sie Folgendes aus:

systemctl enable wg-quick@wg0

Beachten Sie, dass hier wg0 ist der Name der Konfigurationsdatei.

Anfangen den Dienst ausführen:

service wg-quick@wg0 start

Verifizieren dass der Dienst erfolgreich gestartet wurde:

service wg-quick@wg0 status

Stellen Sie sicher, dass die Schnittstelle Wir haben die in der Konfigurationsdatei erstellte Datei mit dem IP-Befehl gestartet.

ip a show wg0

Der Wireguard VPN-Server ist nun eingerichtet und läuft. Lassen Sie uns jetzt den Client konfigurieren.

Client-Konfiguration

Die Client-Konfiguration für Wireguard entspricht mehr oder weniger einer Server-Konfiguration. Wir generieren die Schlüssel für den Client und erstellen dann eine Konfigurationsdatei.

Sicherheitsschlüssel

Um den öffentlichen/privaten Schlüssel zu generieren Paar für den Client, führen Sie aus:

sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key

Der öffentliche und der private Schlüssel für den Client werden nun jeweils in Dateien generiert client_private_key und client_public_key.

Überprüfen Sie, ob sie erstellt wurden, indem Sie verwenden Katze Befehl.

Katze client_private_key Katze client_public_key

Kopieren Sie den angezeigten privaten Schlüssel, da wir ihn der Konfigurationsdatei für den Client hinzufügen müssen.

Konfigurationsdatei

Erstellen Sie die Konfigurationsdatei mit beliebigem Namen. Wir werden es mit dem Namen erstellen wg0-Client für dieses Beispiel.

vim wg0-client.conf

Fügen Sie die folgende Konfiguration hinzu.

[Interface] # IP-Adresse und privater Schlüssel der Client-Adresse = 10.20.43.2/24 PrivateKey = [Peer] # Öffentlicher Schlüssel, IP-Adresse und Port des Servers PublicKey = Endpunkt = :51190 AllowedIPs = 0.0.0.0/0, : :/0

Geben Sie die Subnetzadresse für den Client ein. Wie zuvor beschrieben, verwenden wir 10.20.43.2 für den Client in diesem Beispiel.

Fügen Sie den privaten Schlüssel des Clients hinzu im vorherigen Schritt in Zeile 4 im obigen Konfigurationscode generiert.

Unter „Peer“ fügen wir Informationen zum Wireguard VPN-Server hinzu wir wollen uns verbinden.

Geben Sie den öffentlichen Schlüssel des Servers ein. Geben Sie die IP-Adresse des Servers, die wir zuvor notiert haben, und Port im angegebenen Format gegen Endpunkt. Dies ist der Port, den wir in der Serverkonfigurationsdatei angegeben haben und auf dem der VPN-Dienst auf dem Server gestartet wurde.

Erlaubte IPs sollten wie angegeben (0.0.0.0/0) eingegeben werden, damit jede Anfrage an eine dynamische öffentliche IP, die vom Client verwendet wird, immer an den VPN-Server weitergeleitet wird.

Speichern und beenden Sie die Datei. Wenn du vim verwendest, drücke Esc, dann tippe :wq und drücke Eingeben zu speichern und zu beenden.

Aktivieren Sie den Client-Dienst mit jedem Boot laufen, und starten Sie es.

systemctl aktivieren wg-quick@wg-client service wg-quick@wg-client start

Verifizieren wenn der Dienst gestartet wurde.

service wg-quick@wg-client status

Peer zum Server hinzufügen

Jetzt haben wir den VPN-Server und -Client in Betrieb genommen. Es wird jedoch kein sicherer Tunnel zwischen den beiden hergestellt, es sei denn, wir stellen eine Peer-to-Peer-Verbindung zwischen Server und Client her.

Geh zurück zum Server. Zuerst, Stoppen Sie den VPN-Dienst.

service wg-quick@wg0 halt

Öffnen Sie als Nächstes die Konfigurationsdatei, um Konfiguration für den Peer hinzufügen (Klient).

vim /etc/wireguard/wg0.conf

Anhängen die folgenden Zeilen zur Datei.

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

Jetzt, Starten Sie den VPN-Dienst erneut.

service wg-quick@wg0 start

Das ist es! Dies ist die gesamte Konfiguration, die für die Einrichtung des Wireguard VPN-Clients und -Servers erforderlich ist. Lassen Sie uns nun unser VPN testen.

Testen des VPN

Lassen Sie uns zunächst einen einfachen Ping vom Client zum Server durchführen, um sicherzustellen, dass die VPN-Tunnelkommunikation funktioniert. Führen Sie Folgendes auf dem Client aus:

Ping 10.20.43.1

Nächste, Öffnen Sie einen Webbrowser und öffnen Sie eine beliebige Website um zu überprüfen, ob Sie vom Client-Rechner aus eine Verbindung zum Internet herstellen können. Sie können Ihre Internetverbindung auch über die Befehlszeile mit überprüfen wget.

wget 

Nun haben wir die Tunnelkonnektivität und die Internetkonnektivität überprüft. Wenn beide funktionieren, müssen wir jetzt sicherstellen, dass der gesamte Internetverkehr, der zum Client kommt, über den Server läuft.

Dazu müssen wir lediglich die IP-Adresse des Clients überprüfen, wie sie vom Internet aus gesehen wird. Eine Möglichkeit, dies zu tun, besteht darin, zu whatsmyip.org zu gehen. Oder über die Befehlszeile können wir mit Curl einen anderen ähnlichen Dienst namens IP-Info abfragen.

Führen Sie Folgendes auf dem Client-Rechner aus

curl //ipinfo.io/ip

Ja. Dies ist die öffentliche IP-Adresse des Linode, auf dem der VPN-Server gehostet wird. Auf diese Weise wird mit VPN Anonymität erreicht, da im gesamten Internet jetzt die IP des VPN-Servers und nicht Ihres Computers gesehen wird.

Fazit

Die einfache Einrichtung ist einer der wichtigsten Vorteile von Wireguard gegenüber herkömmlicher VPN-Software wie OpenVPN, deren Einrichtung ein höheres Maß an Netzwerk- und Routing-Kenntnissen erfordert. Es fehlt jedoch eine detaillierte offizielle Dokumentation für Wireguard, die Probleme verursachen könnte, wenn Ihr Wireguard-Setup Fehler auslöst oder nicht wie erwartet funktioniert.

Trotzdem ist Wireguard eine ausgezeichnete Wahl, wenn Sie ein selbst gehostetes VPN für die sichere Kommunikation über das Internet wünschen. Um mehr über Wireguard und die verwendeten Protokolle und Technologien zu erfahren, können Sie die offizielle Website besuchen.