VPN Wireguard mit Ubuntu 20.04 in drei Schritten

Mit Ubuntu LTS 20.04 wird das Kernel Modul für Wireguard ausgeliefert. Eigentlich ist Wiregaurd erst in Kernel 5.6 enthalten, jedoch verwendet Ubuntu 20.04 den Long Term Kernel 5.4. Das Kernel Modul für Wireguard wurde extra von Kernel 5.6 in 5.4 zurück portiert und ist somit sofort nutzbar.

In diesem Artikel beschreibe ich die Einrichtung von Wireguard für den Client und Server.

Wir installieren die Wiregard Tools und einen Programm zur Erzeugung von QR-Codes.

sudo apt-get install wireguard-tools qrencode

Für die Konfiguration legen wir zwei Verzeichnisse an.

sudo mkdir -p /etc/wireguard /root/wireguard

1. Öffentlichen- und Privaten-Schlüssel erstellen

Wir erzeugen den Privaten- und Öffentlichen-Schlüssel für den Client und Server.

sudo sh -c 'wg genkey | tee /root/wireguard/server-private.key | wg pubkey > /root/wireguard/server-public.key'
sudo sh -c 'wg genkey | tee /root/wireguard/client-private.key | wg pubkey > /root/wireguard/client-public.key'

2. Konfigurationsdateien erstellen

Für den Client und Server brauchen wir zwei Konfigurationsdateien.

sudo vim /root/wireguard/wg0-client.conf

[Interface]
Address = 10.200.200.2/32,fd42:42:42::2/64
PrivateKey = $(cat /root/wireguard/client-private.key)
DNS = 1.1.1.1, 8.8.8.8, 2606:4700:4700::1111, 2001:4860:4860::8888
 
[Peer]
PublicKey = $(cat /root/wireguard/server-public.key)
Endpoint = $(hostname):51820
AllowedIPs = 0.0.0.0/0,::/0
PersistentKeepalive = 20

sudo vim /root/wireguard/wg0-server.conf

[Interface]
Address = 10.200.200.1/24,fd42:42:42::1/64
ListenPort = 51820
SaveConfig = true
PrivateKey = $(cat /root/wireguard/server-private.key)
PostUp = sysctl -qw net.ipv4.ip_forward=1
PostUp = sysctl -qw net.ipv6.conf.all.forwarding=1
PostUp = iptables -t nat -A POSTROUTING -j MASQUERADE -o e+
PostUp = ip6tables -t nat -A POSTROUTING -j MASQUERADE -o e+
PostDown = iptables -t nat -D POSTROUTING -j MASQUERADE -o e+
PostDown = ip6tables -t nat -D POSTROUTING -j MASQUERADE -o e+
PostDown = sysctl -qw net.ipv4.ip_forward=0
PostDown = sysctl -qw net.ipv6.conf.all.forwarding=0
 
[Peer]
PublicKey = $(cat /root/wireguard/client-public.key)
AllowedIPs = 10.200.200.2/32,fd42:42:42::/64

Die Werte für den PublicKey und PrivateKey, sowie Endpoint werden im nächsten Schritt durch die Werte aus den Keys von Schritt #1 ersetzt.

sudo bash -c 'eval "echo \"$(< /root/wireguard/wg0-client.conf)\"" > /root/wireguard/client.conf'
sudo bash -c 'eval "echo \"$(< /root/wireguard/wg0-server.conf)\"" > /etc/wireguard/wg0.conf'

Die Server Konfiguration enthält den Private Key und sollte nur für den Root sichtbar sein.

sudo chmod 0600 /etc/wireguard/wg0.conf

3. VPN einrichten

Im letzten Schritt wird das VPN von Wiregard eingerichtet und aktiviert.

Mit dem QR-Code kann man die Konfiguration für den Client auf ein anderes Gerät (z.B. Smartphone) übertragen. Die Wireguard App findet man im jeweiligen App Store unter Wireguard.

sudo sh -c 'qrencode -t ansiutf8 < /root/wireguard/client.conf'

Jetzt laden wir noch das Kernel Modul von Wireguard.

sudo modprobe wireguard

Das Wireguard Modul sollte jetzt geladen sein.

lsmod |grep wireguard

Damit nach einem Neustart das Modul automatisch geladen wird, fügen wir es der Konfiguration hinzu.

echo "wireguard"|sudo tee -a /etc/modules-load.d/wireguard.conf

Die Schnittstelle (wg0) wird mit dem wg-quick Tool eingerichtet und

sudo wg-quick up wg0

Die VPN Verbindung kann auch getrennt werden.

sudo wg-quick down wg0

Wenn das Kernel Modul nicht mehr notwendig ist, kann es entladen werden.

sudo rmmod --force wireguard

Wenn man ein VPN zwischen zwei Server aufbauen möchte, dann wird die Datei /root/wireguard/client.conf in Verzeichnis /etc/wiregurd/ vom Client kopiert.

Wenn man über den VPN Tunnel eine Verbindung in andere Netze aufbauen möchte, muss die Portweiterleitung (IP Forwarding) eingeschaltet sein. Die Werte sind in der Konfiguration von Wireguard schon gesetzt.

echo "net.ipv4.ip_forward=1"|sudo tee -a /etc/sysctl.d/wireguard.conf
echo "net.ipv6.conf.all.forwarding=1"|sudo tee -a /etc/sysctl.d/wireguard.conf

Die Einstellungen können im Kernel sofort aktiviert werden.

sudo sysctl -p /etc/sysctl.d/wireguard.conf

Damit der Tunnel automatisch nach einem Neustart aktiviert wird, müssen wir ihn in Systemd aktivieren.

sudo systemctl enable wg-quick@wg0
sudo systemctl status wg-quick@wg0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.