WireGuard unter Ubuntu installieren

Ich brauchte ein VPN, um meine Dienste sicher aus dem Internet zu verwalten – also habe ich dieses Mal WireGuard ausprobiert und es ist wirklich toll. In diesem Beitrag zeige ich dir, wie du es auf einem Ubuntu Server installieren kannst.

Ich benutzte OpenVPN mehr als zehn Jahre. Allerdings wollte ich es dieses Mal vermeiden und stattdessen etwas verwenden, das einfacher, schneller und auf vielen Geräten verfügbar ist.Ich wollte WireGuard ausprobieren, seit es in den Linux-Kernel integriert wurde, noch mehr, als Clients für Windows, macOS, iOS und Android auftauchten.

Die Homepage von WireGuard fasst seine Vorzüge perfekt zusammen:

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be fastersimpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable.

https://www.wireguard.com/

Server-Installation

Für die Installation solltest du die Paket-Quellen aktualisieren und dann die benötigten Pakete installieren:

# sudo apt update
# sudo apt install wireguard

Schlüsselpaar erstelllen

Jeder VPN-Teilnehmer benötigt ein Schlüsselpaar (public / private key), welche wir gleich erstellen werden.

# sudo -i
# cd /etc/wireguard/
# umask 077; wg genkey | tee privatekey | wg pubkey > publickey

Mit dem Kommando wird der private und öffentliche Schlüssel erzeugt und in separaten Files abgelegt. ‚umask 077‘ bewirkt, dass die erstellten Files nur vom Owner gelesen werden können.

/etc/wireguard# ls -l
 total 12
 -rw------- 1 root root   45 Dec 10 17:45 privatekey
 -rw------- 1 root root   45 Dec 10 17:45 publickey

Als nächstes brauchen wir den Inhalt der beiden Files:

/etc/wireguard# cat privatekey
XX_this_hosts_private_key_XXXXXXXXXXXXXXXXX=

/etc/wireguard# cat publickey
XX_this_hosts_public_key_XXXXXXXXXXXXXXXXXX=

Erstellen der Server-Config

Die Server-Konfiguration setzt sich aus einem Interface-Part und einem oder mehreren Peer-Parts zusammen.

Der [Interface]-Part beinhaltet die Konfiguration für den lokalen Host (der Server in dem Fall) und umfasst zumindest folgende Einstellungen:

  • Address: die private IP-Adresse des lokalen Hosts innerhalb des VPNs
  • PrivateKey: der private Schlüssel des lokalen Hosts (see /etc/wireguard/privatekey)
  • ListenPort: der Port den WireGuard nutzen soll (Standard: 51820)

Unter [Peer] werden die Clients definiert welche mit dem Server verbinden sollen. Bevor wird unseren ersten Peer definieren können benötigen wir zuerst dessen Public Key. Weshalb dieser Teil später vervollständigt werden muss.

#### Settings for this host
# You should at least configure the following settings:
#   - Address:
#       the IP address this host will use within the VPN
#   - PrivateKey:
#       the private key from this host
#       (see /etc/wireguard/privatekey )
#   - ListenPort:
#       the port where Wireguard will listen for incoming
#       packets (optional)
[Interface]
Address = 10.0.0.1/24
PrivateKey = XX_this_hosts_private_key_XXXXXXXXXXXXXXXXX=
ListenPort = 51820

#### Settings for peers
# For each peer that will connect to this host a PublicKey and
# AllowedIPs have to be configured:
#   - PublicKey:
#       the public key of the client. Generate a key pair on the
#       client; just copy the PublicKey
#   - AllowedIPs:
#       the IP(s) that the client will use within the VPN (note
#       the /32 subnet)
[Peer]
PublicKey = XX_peer1_public_key_XXXXXXXXXXXXXXXXXXXXXXX=
AllowedIPs = 10.0.0.10/32

[Peer]
PublicKey = XX_peer2_public_key_XXXXXXXXXXXXXXXXXXXXXXX=
AllowedIPs = 10.0.0.11/32

Service aktivieren und starten

Um den WireGuard Service zu aktivieren:

# sudo systemctl enable wg-quick@wg0
# sudo systemctl start wg-quick@wg0

Service checken:

# systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-01-06 23:10:59 CET; 1 weeks 1 days ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 494 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 494 (code=exited, status=0/SUCCESS)

Firewall

Wenn du eine Firewall verwendest – das solltest du, wenn der Server im Internet steht – musst du den Port für WireGurad öffnen:

# sudo ufw allow 51820/udp

Der Client-Part

WireGuard unterstützt eine Vielzahl von Geräten und Betriebssystemen (siehe Liste). Jeder Client, der sich mit dem VPN verbinden möchte, benötigt eine Konfiguration, die der des Servers ähnlich ist:

  • Der ‚Interface‘-Teil – definiert wiederum die Konfiguration für den lokalen Host (in diesem Fall den Client)
    • PrivateKey: der private Schlüssel des Clients
    • Address: die IP-Adresse, die der Client innerhalb des VPNs verwenden soll
  • Peer – definiert den Server, zu dem die Verbindung aufgebaut werden soll
    • PublicKey: der öffentliche Schlüssel des Servers
    • AllowedIPs: die IPs, die von diesem Peer ankommen dürfen
    • Endpoint: die öffentliche IP-Adresse des Servers + Wireguard-Port
[Interface]
PrivateKey = XX_this_hosts_private_key_XXXXXXXXXXXXXXXXX=
Address = 10.0.0.10/24

[Peer]
PublicKey = XX_servers_public_key_XXXXXXXXXXXXXXXXX=
AllowedIPs = 10.0.0.0/24
Endpoint = 10.20.30.40:51820

Wenn du die Konfiguration des Clients abgeschlossen hast, musst du den öffentlichen Schlüssel des Clients zur Serverkonfiguration hinzufügen und den Dienst neu starten. Dann solltest du in der Lage sein, eine Verbindung mit dem Client aufzubauen.

MacOS Client

Als Beispiel zeige ich dir den Konfigurationsdialog des MacOS-Clients. Dieser Client erzeugt automatisch ein Schlüsselpaar für dich, so dass du nur noch die restlichen Details von oben ergänzen musst.

Screenshot of MacOS config file

Wenn beide Seiten korrekt konfiguriert sind, solltest du dich erfolgreich verbinden können.

MacOS Client connected

More information

Für weitere Informationen über WireGuard empfehle ich dir, die folgenden Links zu besuchen:

Vergleich mit OpenVPN

Ich habe OpenVPN mehr als zehn Jahre lang benutzt. Allerdings wollte ich es aus mehreren Gründen vermeiden:

  • Die Client-Unterstützung ist nicht ideal. Zum Beispiel muss man unter MacOS Big Sur die System Integrity Protection („SIP“) deaktivieren, um Tunnelblick zum Laufen zu bringen (mittels Tap).
  • Ich mag die angebotenen Authentifizierungsmethoden nicht – ich wollte keine PKI nur für VPN erstellen, die Pre-Shared-Key-Methode ist für meinen Geschmack zu einfach und nicht praktikabel, wenn man viele Benutzer hat. Und die User/Pass-Methode benötigt einen externen Auth-Service.
  • Es hat mich immer Nerven gekostet, die Konfiguration auf einen neuen Client zu kopieren, die Pfade zu den Zertifikaten anzupassen und es mit irgendeinem Client zum Laufen zu bringen.
  • Die Konfiguration ist verhältnismäßig kompliziert.

Schreibe einen Kommentar