Richten Sie ein selbst gehostetes VPN mit Wireguard ein
Ein VPN (Virtual Private Network) ermöglicht es dem Benutzer, sich aus der Ferne mit einem privaten Netzwerk zu verbinden, 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 weitere Verwendung von VPN besteht darin , beim Zugriff auf das Internet Anonymität zu erlangen oder 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 Wireguard . 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 wireguard
installiert sowohl Wireguard Server als auch Client. Führen Sie den folgenden Befehl sowohl auf dem Server-Computer als auch auf dem Client-Computer aus.
sudo apt install wireguard
Serverkonfiguration
Sicherheitsschlüssel
Wir müssen eine Reihe von öffentlichen/privaten Schlüsselpaaren generieren, um die Wireguard-Verbindung zu authentifizieren und zu sichern. 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 dafür ist, dass der Zugriff auf das Verzeichnis /etc/wireguard
für normale Benutzer verhindert ist und der Verzeichniszugriff für einen normalen Benutzer nicht nur mit sudo-Berechtigungen erreicht werden kann.
Als nächstes setzen wir die Dateierstellungsmaske auf077
. Dies bedeutet, dass jedes Mal, wenn eine neue Datei in diesem Ordner von einem beliebigen Prozess erstellt wird, ihre 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 so, dass nur der Eigentümer der Datei alle Berechtigungen für die Datei hat und alle anderen keine Berechtigungen haben.
In der nächsten Zeile generieren wir das öffentliche/private Schlüsselpaar für den Server. Sie werden in Dateien private_key
und public_key
. Um die Schlüssel anzuzeigen, führen Sie Folgendes aus:
cat private_key
cat public_key
Kopieren Sie den privaten Schlüssel, wir benötigen ihn im nächsten Schritt.
Hinweis: Teilen Sie Ihren privaten Schlüssel niemals öffentlich!
Konfigurationsdatei
Erstellen wir eine Konfigurationsdatei für den Wireguard Server. Sie können einen beliebigen Namen für die Datei wählen. wg0.conf
In diesem Beispiel erstellen wir eine Datei .
vim wg0.conf
Fügen Sie der Datei Folgendes hinzu.
[Interface]
Address = 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 als der IP-Adresse des Servers konfigurieren . 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
Der hervorgehobene Teil ist die IP-Adresse
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 Benutzernetzwerk unterschiedlich sein, wlan0
oder wlp2s0
falls der Benutzer über eine WLAN-Karte mit einem WiFi-Netzwerk verbunden ist.
Ersetzen Sie das in PostUp
und PostDown
mit Ihrem Interface; 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 den iptables
Befehl, um IP-Regeln so festzulegen, dass 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 Sie vim verwenden, drücken Sie Esc , geben Sie dann ein :wq
und drücken Sie die Eingabetaste , um zu speichern und zu beenden.
Wenn Sie eine ufw
Firewall auf dem Server verwenden, müssen wir UDP-Verbindungen zum Port für den VPN-Server 51190 zulassen.
ufw allow 51190/udp
Starten des Dienstes
Nachdem die Konfiguration nun abgeschlossen ist, können wir den Wireguard VPN-Dienst starten.
Führen Sie Folgendes aus, damit der Dienst beim Booten gestartet wird:
systemctl enable [email protected]
Beachten Sie, dass hier wg0
der Name der Konfigurationsdatei steht.
Um den Dienst zu starten , führen Sie Folgendes aus:
service [email protected] start
Überprüfen Sie, ob der Dienst erfolgreich gestartet wurde:
service [email protected] status
Stellen Sie mit dem IP-Befehl sicher, dass die in der Konfigurationsdatei erstellte Schnittstelle gestartet wurde.
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
Führen Sie Folgendes aus, um das öffentliche/private Schlüsselpaar für den Client zu generieren :
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
Die öffentlichen und privaten Schlüssel für den Client werden nun jeweils in Dateien client_private_key
und client_public_key
.
Überprüfen Sie, ob sie erstellt wurden, indem Sie den cat
Befehl verwenden.
cat client_private_key
cat 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 einem beliebigen Namen. Wir werden es mit dem Namen wg0-client
für dieses Beispiel erstellen .
vim wg0-client.conf
Fügen Sie die folgende Konfiguration hinzu.
[Interface]
# IP Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
PublicKey =
Endpoint = :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
in diesem Beispiel für den Client.
Fügen Sie den im vorherigen Schritt generierten privaten Clientschlüssel in Zeile 4 des obigen Konfigurationscodes hinzu.
Unter 'Peer' fügen wir Informationen zu dem Wireguard VPN-Server hinzu, mit dem wir uns verbinden möchten.
Geben Sie den öffentlichen Schlüssel des Servers ein. Geben Sie die zuvor notierte IP-Adresse des Servers und den Port im angegebenen Format für Endpoint ein . 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 Sie vim verwenden, drücken Sie Esc , geben Sie dann ein :wq
und drücken Sie die Eingabetaste , um zu speichern und zu beenden.
Aktivieren Sie den Client-Dienst , damit er bei jedem Start ausgeführt wird, und starten Sie ihn.
systemctl enable [email protected]
service [email protected] start
Überprüfen Sie, ob der Dienst gestartet wurde.
service [email protected] 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.
Gehen Sie zurück zum Server. Zuerst stoppen Sie den VPN - Dienst .
service [email protected] stop
Öffnen Sie als Nächstes die Konfigurationsdatei, um die Konfiguration für den Peer (Client) hinzuzufügen .
vim /etc/wireguard/wg0.conf
Hängen Sie die folgenden Zeilen an die Datei an.
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
Nun starten Sie den VPN - Dienst .
service [email protected] 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
Öffnen Sie als Nächstes einen Webbrowser und öffnen Sie eine beliebige Website , um zu überprüfen, ob Sie vom Clientcomputer 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 https://ipinfo.io/ip
Jawohl. 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.
Abschluss
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 zu Problemen führen kann, wenn Ihr Wireguard-Setup Fehler auslöst oder nicht wie erwartet funktioniert.
Dennoch 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 .