Sicheres und schnelles
VPN mit Wireguard

Gerade in Zeiten der Home-Office-Arbeitsplätze ist eine abgesicherte VPN-Einwahl in das Büronetzwerk oft alternativlos. Wireguard ist ein relativ junges, sehr schnelles, stabiles und auf Sicherheit getestetes VPN-Protokoll, welches in den letzten Monaten bei mir alle OpenVPN-Installationen ersetzt hat.

Hier beschreibe ich, wie man in ein paar einfachen Schritten einen VPN-Server auf einem Raspberry Pi einrichtet, den man dann einfach in das Büronetzwerk hängen kann.

  • Mario Krupa
  • 29.06.2020
1. Wireguard installieren

Als erstes sorgen wir dafür, das das Betriebssystem auf dem allerneuesten Stand ist. Das lässt sich auf dem Raspberry PI mit folgenden Kommandos erledigen:

sudo apt update
sudo apt upgrade

Dann istallieren wir die zum Kompilieren von Wireguard nötigen Pakete:

apt install raspberrypi-kernel-headers libelf-dev libmnl-dev build-essential git

Als nächstes laden wir den Quellcode von Wireguard herunter:

git clone https://git.zx2c4.com/wireguard-linux-compat
git clone https://git.zx2c4.com/wireguard-tools

Danach kompilieren und installieren wir das Wireguard-Modul:

make -C wireguard-linux-compat/src -j$(nproc)
sudo make -C wireguard-linux-compat/src install

Zuletzt kompilieren und installieren wir das wg(8)-Tool:

make -C wireguard-tools/src -j$(nproc)
sudo make -C wireguard-tools/src install
2. IP-Forwarding aktivieren

Damit Wireguard funktioniert, müssen wir IP-Forwarding aktivieren und den Raspberry Pi neu starten:

sudo perl -pi -e 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

sudo reboot

Um das ganze zu testen müssen wir folgenden Befehl ausführen:

sysctl net.ipv4.ip_forward 

Sollte hier 1 ausgegeben werden, haben wir alles richtig gemacht.

3. Schlüssel für Server und Clients erstellen

Zunächst generieren wir zwei Schlüsselpaare. Einmal für den server und ein paar für den Client peer1:

sudo su
cd /etc/wireguard
umask 077
wg genkey | tee peer1_privatekey | wg pubkey > peer1_publickey
wg genkey | tee server_privatekey | wg pubkey > server_publickey
4. den Wireguard-Server konfigurieren

Wir erstellen hierzu eine neue Datei wg0.conf im Verzeichnis /etc/wireguard/

sudo nano /etc/wireguard/wg0.conf

Wir ergänzen im folgenden Beispiel den gewünschten Port auf dem Wireguard zuhören soll, den DNS des Server-Netzwerkes und die jeweiligen Keys und kopieren es in die Datei:

[Interface]
Address = 10.9.0.1/24
ListenPort = xxxxx  
DNS = 192.168.x.xx 
PrivateKey = server_privatekey 

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
#Peer-1
PublicKey = peer1_publickey
AllowedIPs = 10.9.0.2/32 
#PersistentkeepAlive = 60 
4. den Wireguard-Client konfigurieren

Wir erstellen hierzu eine neue Datei peer1.conf im Verzeichnis /etc/wireguard/

sudo nano /etc/wireguard/wg0.conf

Wir ergänzen im folgenden Beispiel den DNS des Server-Netzwerkes, die öffentliche IP des Wireguard-Servers sowie der verwendete Port (falls ihr Internetanschluß keine feste IP bietet, kann hier auch eine Dynamische DNS-Adresse gefolgt von dem Port eingetragen werden.) und die jeweiligen Keys und kopieren es in die Datei:

[Interface]
Address = 10.9.0.2/32
DNS = 192.168.x.x 
PrivateKey = peer1_privatekey 

[Peer]
PublicKey = server_publickey 
Endpoint = YOUR-PUBLIC-IP/DDNS:ListenPort
AllowedIPs = 0.0.0.0/0, ::/0
#PersistentkeepAlive = 60 

Den Inhalt dieser Datei kopieren wir jetzt in den Desktop-Client oder, wenn wir den Android-Client benutzen, können wir uns das ganze auch bequem per QR-Code einscannen:

sudo apt install qrencode
sudo qrencode -t ansiutf8 < /etc/wireguard/peer1.conf
5. die Installation fertig stellen

Nachdem wir den Client konfiguriert haben, starten wir den Server auf dem Raspberry Pi:

sudo systemctl enable wg-quick@wg0
sudo chown -R root:root /etc/wireguard/
sudo chmod -R og-rwx /etc/wireguard/*

Ab sofort sollte eine Einwahl möglich sein. Eventuell müssen wir noch im Router einen Port Forward auf den Port des Wireguard-Servers setzen.