Wireguard ist ein Peer-2-Peer VPN, das durchgehend moderne Kryptografie für Verschlüsselung und Authentifizierung verwendet. Im Unterschied zu OpenVPN und IPsec werden Client-Server Architekturen nicht direkt unter­stützt, können aber auch (irgendwie) realisiert werden.

Viele VPN-Provider haben individuelle Lösungen entwickelt, um Wireguard für ihre Kunden in eine Client-Server ähnliche Infrastruktur zu pressen und Wireguard VPN-Server anbieten zu können.

  1. Man könnte die Linux Apps der VPN-Provider verwenden, die sich automatisch um alles kümmern und die Besonderheiten von Wireguard gegenüber dem Nutzer verbergen.
  2. Wenn der VPN-Provider die öffentlichen Schlüssel der Wireguard Server zum Download anbietet, auf der Webseite einen Upload der öffentlichen Schlüssel der Nutzer erlaubt, eine IP-Adresse für das Wireguard Interface zuteilt und wenn man keine Angst vor einem Full-Text Adventure hat, könnte man auch die Wireguard Implementierung von Linux direkt nutzen.

    Als erstes ist die Wireguard Software zu installieren:

    Ubuntu: > sudo apt install wireguard resolvconf
    Fedora: > sudo dnf install wireguard-tools resolvconf

    Dann muss man seinen eigenen privaten und öffentlichen Schlüssel erzeugen: > sudo su
    # cd /etc/wireguard
    # umask 077
    # wg genkey | tee privatekey | wg pubkey | tee publickey
    bjqCt8IJ20zbfn3kLxvJ3mYGjTF+oe7Dg5vgyKqG4gU=

    • Der am Ende angezeigte öffentliche Schlüssel ist zu kopieren beim VPN-Provider hochzu­laden. Man findet ihn auch in der Datei "/etc/wireguard/publickey".
    • Den privaten Schlüssel aus der Datei "privatekey" braucht man im nächsten Schritt in der Konfigurations­datei für die Wireguard Verbindung.

    Dann kann man eine Konfigurationsdatei "/etc/wireguard/wg0.conf" für die Verbindung zum ersten Wireguard Server erstellen. Wenn man zwischen mehreren Servern wechseln möchte, muss man für jeden Wireguard Server eine eigene Konfigurations­datei "wgX" erstellen.

    Da die Konfigurationsdatei den privaten Schlüssel enthält, darf sie auschließlich für "root" lesbar sein und es sollten keine Kopien irgendwo in $HOME Verzeichnissen rumliegen. (Der Schutz der Schlüssel ist eine wichtige Komponente bei sicherer Kryptografie und oft unterschätzt.)

    [Interface]
    PrivateKey = <privater Schlüssel>
    Address = <IP für den eigenen Peer>/32
    DNS = <IP vom DNS Server>

    PostUp = /etc/wireguard/wg0-postup.sh
    PostDown = /etc/wireguard/wg-all-postdown.sh

    [Peer]
    PublicKey = <öffentlicher Schlüssel des Servers>
    Endpoint = <Server-Adresse>:<Port>
    AllowedIPs = 0.0.0.0/0
    • Die IP-Adresse für den eigenen Peer findet man irgendwo auf der Webseite des VPN-Providers nach dem Login. Zuerst muss man seinen public Key hoch­laden und dann wird eine IP-Adresse zugewiesen. An die IP-Adresse ist "/32" für den Netzbereich anzuhängen.
    • Den empfohlenen DNS-Server findet man in der Doku oder FAQ des VPN-Providers. Man kann auch andere DNS-Server nutzen, die vom VPN-Server erreichbar sind.
    • Mit den PostUp und PostDown Scripten kann man IPv6 deaktivieren und die Firewall für VPN-Nutzung umkonfiguren. Ein Beispiel für ein PostUp Script für die UFW: #!/bin/sh

      # IPv6 deaktivieren
      echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

      # UFW Firewall Konfiguration für Wireguard Interface "wg0"
      ufw reset
      ufw default reject outgoing
      ufw default deny incoming
      ufw allow out on wg0 from any to any
      ufw allow out from any to <VPN Server Adresse>
      Das PostDown Script stellt den ursprünglichen Zustand wieder her, ein Beispiel: #!/bin/sh

      # IPv6 aktivieren
      echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6

      # UFW Firewall (normale Konfiguration)
      ufw reset
      ufw default alow outgoing
      ufw default deny incoming
      Beide Schripte müssen ausführbar gemacht werden, nachdem man sie erstellt hat: > sudo chmod +x /etc/wireguard/wg0-postup.sh
      > sudo chmod +x /etc/wireguard/wg-all-postdown.sh
    • Den öffentlichen Schlüssel sowie den DNS-Namen bzw. IP-Adresse des Servers findet man in der Server­liste des VPN-Providers. Der Port muss eben­falls angegeben werden. Oft wird Port 51820 verwendet, den man aus­probieren kann, wenn in den FAQ nichts erwähnt wird. Aber einige Provider verwenden andere Ports. IVPN.net bietet die Ports 53, 2049, 2050, 30587, 41893, 48574 oder 58237 an. Man sollte also in den FAQ nachschauen.

    • Die letzte Zeile bedeutet, dass die Gegen­stelle (also der VPN-Server) das gesamte Internet zur Verfügung stellt (alle IPv4 Adressen - einfach übernehmen).
    Die Verbindung zum ersten Wireguard VPN-Server startet man mit folgendem Kommando: > sudo wg-quick up wg0 Mit folgendem Kommando beendet man die Verbindung zu diesem VPN-Server: > sudo wg-quick down wg0 Mit dem Systemd kann man den Start des Wireguard-VPN beim Booten automatisieren: > sudo systemctl enable wg-quick@wg0.service
    > sudo systemctl daemon-reload
    Um den automatischen Start beim Booten wieder zu enfernen sind folgende Komandos nötig: > sudo systemctl stop wg-quick@wg0
    > sudo systemctl disable wg-quick@wg0.service
    > sudo rm -i /etc/systemd/system/wg-quick@wg0*
    > sudo systemctl daemon-reload
    > sudo syytemctl reset-failed

Hinweis für QubesOS Linux: Die Einstellungen werden nicht in der Net-VM vorgenommen sondern in dem Template, das für die Net-VM verwendet wird!

Um zu verhindern, dass die Wireguard Schlüssel in die Arbeits-VMs exponiert werden und die Arbeits-VMs eine Wireguard Verbindung zum VPN-Server aufbauen, die die QubesOS Firewall umgeht, muss man für die Net-VM eine eigene Template-VM erstellen.