Einfaches VPN mit Wireguard für Homeoffice

Aufgrund der „Corona-Kriese“ möchte auch ich etwas für unser Land tun und hier eine leicht Verständliche Anleitung schreiben wie man einen VPN-Zugang mithilfe von Wireguard für die Anwendung im Homeoffice einrichten kann.

Wireguard ist eine recht neue VPN-Lösung mit einem sehr schlanken und effizienten Protokoll, welches sich zudem auch noch sehr einfach einrichten lässt (im Vergleich z.B. zu OpenVPN).
Im Idealfall nutzen wir als Host-Betriebssystem für den Server ein Debian-Derivat-Linux mit einem 5.x Kernel, da die Wireguard Kernelmodule in Kerneln ab Version 5 bereits einkompiliert sind und man diese dann nicht selbst für den aktuell verwendeten Kernel neu bauen muss.

Hat man nicht den Genuss einen 5er Linux Kernel zu nutzen oder auf ihn zu upgraden, muss man die Wiregiard-Kernel Module für den verwendeten Kernel selbst bauen.
Dazu Installieren wir das Meta-Paket „wireguard“ aus dem Unstable zweig, welches dann die Pakete „wireguard-dkms“ und „wireguard-tools“ installiert:

# echo "deb http://deb.debian.org/debian/ unstable main" | sudo tee /etc/apt/sources.list.d/unstable-wireguard.list
# printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' | sudo tee /etc/apt/preferences.d/limit-unstable
# apt update
# apt install wireguard

Nun werden die besagten Pakete „wireguard-dkms“ und „wireguard-tools“ installiert und „wireguard-dkms“ sorgt dafür dass das Kernel-Modul erstellt wird:

Holen:1 http://deb.debian.org/debian unstable/main amd64 wireguard-dkms all 0.0.20200215-2 [252 kB]
Holen:2 http://deb.debian.org/debian unstable/main amd64 wireguard-tools amd64 1.0.20200206-2 [85,2 kB]
Holen:3 http://deb.debian.org/debian unstable/main amd64 wireguard all 1.0.20200206-2 [7.316 B]
Es wurden 345 kB in 0 s geholt (1.497 kB/s).
Vormals nicht ausgewähltes Paket wireguard-dkms wird gewählt.
(Lese Datenbank ... 67277 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../wireguard-dkms_0.0.20200215-2_all.deb ...
Entpacken von wireguard-dkms (0.0.20200215-2) ...
Vormals nicht ausgewähltes Paket wireguard-tools wird gewählt.
Vorbereitung zum Entpacken von .../wireguard-tools_1.0.20200206-2_amd64.deb ...
Entpacken von wireguard-tools (1.0.20200206-2) ...
Vormals nicht ausgewähltes Paket wireguard wird gewählt.
Vorbereitung zum Entpacken von .../wireguard_1.0.20200206-2_all.deb ...
Entpacken von wireguard (1.0.20200206-2) ...
wireguard-dkms (0.0.20200215-2) wird eingerichtet ...
Loading new wireguard-0.0.20200215 DKMS files...
Building for 4.9.0-6-amd64
Building initial module for 4.9.0-6-amd64
Done.

wireguard:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.9.0-6-amd64/updates/dkms/

depmod....

DKMS: install completed.
wireguard-tools (1.0.20200206-2) wird eingerichtet ...
wireguard (1.0.20200206-2) wird eingerichtet ...
Trigger für man-db (2.7.6.1-2) werden verarbeitet ...

Damit haben wir Wireguard und das passende Kernel-Modul installiert und können nun an die Konfiguration gehen.
Hierfür gehen wir in /etc/wireguard und erstellen uns einen public-key und einen private-key:

# cd /etc/wireguard
# wg genkey | tee privatekey | wg pubkey > publickey

Für mein Beispiel nutze ich folgende Keys:
Private: 8NTdGTXDBH2pGLb08nMC007ZjpQE666PYrqmgyASUS=
Public: I2btYR+gLPYDi76p/MyAnniSWbubELyh5YHoseKxu0s=

Der Private-Key wird für die Server-Config genutzt. Der Public-Key wird dann in der Config der Clients hinterlegt.
Sinnvollerweise befinden sich die VPN-Clients alle in einem seperaten IP-Netz (10.0.0.x) wobei der VPN-Server die IP 10.0.0.1 bekommt und der erste Client dann die 10.0.0.2.
Mit diesem Wissen erstellen wir nun die Server-Konfiguration in /etc/wireguard/wg0.conf:

[Interface]
Address = 10.0.0.1/24
SaveConfig = false
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; 
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; 
ListenPort = 51820
FwMark = 0xca6c
PrivateKey = 8NTdGTXDBH2pGLb08nMC007ZjpQE666PYrqmgyASUS=

Das war es auch schon grundsätzlich zur Server-Config. Später mussen hier noch die Zugänge der Clients mit rein – das folgt weiter unten.
Der Wireguard-Server läuft auf Port 51820, was bedeutet das wir diesen Port in der Firewall freigeben bzw ein Portforwarding für diesen Port erstellen müssen.
Ausserdem muss der Eintrag „net.ipv4.ip_forward = 1“ in der /etc/sysctl.conf auskommentiert werden.

Mein Wireguard Client ist ein Windows10 PC.
Die Client-Installation können wir uns unter https://www.wireguard.com/install bzw. als Direktlink (64Bit) unter https://download.wireguard.com/windows-client/wireguard-amd64-0.1.0.msi herunterladen und installieren.
Nachdem Wireguard auf dem Client installiert und geöffnet ist, können wir über „Strg+N“ oder „Add empty Tunnel..“ einen neuen Tunnel definieren.
Wichtig ist hier als erstes der Public-Key welcher oben eingeblendet wird (z.B. 6n89/e9rMmXYaymRDMYnnjJ7LgiVnP6GKplHYN6+BQY=).
Diesen Client-PublicKey brauchen wir um den Client in der Server-Config mit aufzunehmen.
An dieser Stelle geht es aber erst einmal mit der Client-Config weiter.

# Angabe des VPN-Client (PrivateKey und VPN-IP)
[Interface]
PrivateKey = 8OvLmuLKv2GUSfeJ4bcEGF2mTeuySKJhoBQPlSgmGUA=
Address = 10.0.0.2/32
 
# Angabe des VPN-Servers (Public-Key, IP´s welche über VPN geroutet werden und der Endpunkt des VPN-Servers)
[Peer]
PublicKey = I2btYR+gLPYDi76p/MyAnniSWbubELyh5YHoseKxu0s=
AllowedIPs = 10.0.0.1, 192.168.1.0/24
Endpoint = vpn.meinefirma.de:51820

Kurze Erklärung: Mein „Firmen-Netz“, welches ich über den VPN-Tunnel erreichen möchte ist das 192.168.1.x Netz.
Über den Eintrag „AllowedIPs“ gebe ich hier an welche IP´s/Netze über den VPN-Tunnel geroutet werden sollen.

Im Wireguard-Client selbst sieht das ganze dann so aus:

Jetzt müssen wir weider zurück zu der Server-Config und den Client in der Konfiguration mit angeben.
Dafür fügen wir Analog zur Client-Config auch einen [Peer] Abschnitt unten mit in die /etc/wireguard/wg0.conf ein:

# VPN-Client Sven (Angabe des PublicKey und der IP des Clients)
[Peer]
PublicKey = 6n89/e9rMmXYaymRDMYnnjJ7LgiVnP6GKplHYN6+BQY=
AllowedIPs = 10.0.0.2/32

Das wars auch schon. Jetzt haben wir Wireguard auf Server und Client Installiert und eingerichtet.
Dann wollen wir den Server auch mal starten. Der Start und Stop funktioniert über die wg-quick Befehle.
Zum Starten reicht ein „wg-quick up wg0“ und zum beenden analog dazu ein „wg-quick down wg0“.
Die Ausgabe des „wg-quick up wg0“ sollte dann so aussehen:

# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;

Damit läuft Wireguard als VPN-Server.
Im Windows-Client muss man nun nur noch auf dem Knopf „Activate“ drücken – und es wird eine Verbindung zum VPN-Server aufgebaut.
Ab nun können wir von „remote“ auf das „Firmen“-Netz zugreifen.

leave your comment

*

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

Unterstütze den Frickelblog!