Einen Ubuntu Server als Wirguard Server einrichten
<<< Wireguard auf dem Raspberry Pi <<< | >>> VPN mit Wireguard und Pi-hole >>>
In diesem Beitrag habe ich bereits die Bereitstellung eines Raspberry Pi als Wireguard Peer, an einem Egde Standort beschrieben.
Hier soll es nun um die „Gegenstelle“ in der Company, einem Lab, einem Cloud Netz oder einem anderen beliebigen Standort gehen, zu welchem ein Tunnel unter Verwendung von Wireguard benötigt wird. Das Paket Wireguard ist in Ubuntu 20.04 Kernel 5.4.0-58 bereits als Repository verfügbar und muss deshalb nur installiert werden, weshalb ich diesen Abschnitt kurz halte. Wer die Details der Konfiguration benötigt, kann sich auch meinen anderen Beitrag dazu anschauen, hier habe ich die einzelnen Parameter näher erläutert. Diese sind prinzipiell für jedes OS und auch jedes Unix Derivat identisch, allein die Installation von Wireguard unterscheidet sich.
Voraussetzungen:
- Installiertes OS Ubuntu LTS 20.04
- Netzwerk-Konfiguration abgeschlossen wie im Schema beschrieben, mit der lokalen IP 10.150.150.10/24.
- Der Server hat Internet Zugriff via https
- Der Server ist aus dem Internet auf dem UDP Port 51238 erreichbar.
Installation Wireguard auf Ubuntu LTS 20.04
- Zunächst natürlich ein Update des Systems:
12sudo apt updatesudo apt upgrade -y - Jetzt die Installation von Wireguard:
1sudo apt install wireguard -y
Damit ist die Installation auch schon abgeschlossen!
Vorbereitung des Systems
- Zuerst öffnen wir mal den UDP Port, falls UFW aktiv ist:
1sudo ufw allow 51238/udp
und prüfen anschließend den Status:
1sudo ufw status
- Jetzt müssen wir doch das IP Forwarding einschalten. Dazu editieren wir die entsprechende System Konfigurationsdatei mit:
1sudo nano /etc/sysctl.conf
Suchen jetzt nach der Zeile:
1net.ipv4.ip_forward=0
und ändern diese in:
1net.ipv4.ip_forward=1Mit STRG+O -> ENTER speichern und mit STRG+X verlassen wir den Editor wieder…
Diese Einstellung übernehmen wir jetzt noch mit:
1sudo sysctl -p
Damit sind die Vorbereitungen abgeschlossen.
Konfiguration von Wireguard auf Ubuntu LTS 20.04
- Jetzt wechseln wir ins Wireguard Verzeichnis, setzen dort die Rechte für das Verzeichnis (umask…) und erstellen dann das Schlüsselpaar:
123sudo -icd /etc/wireguard/umask 077; wg genkey | tee privatekey | wg pubkey > publickey
und wir lassen uns die Schlüssel zum Abspeichern anzeigen…
123ls -l privatekey publickeycat privatekeycat publickey
Später, wenn man nicht mehr als su eleviert ist aber Root Rechte hat, mit:
1sudo cat /etc/wireguard/privatekey
und
1sudo cat /etc/wireguard/publickey - Jetzt erstellen wir die Konfigurationsdatei
1sudo nano /etc/wireguard/wg0.conf
und befüllen sie gemäß dem obigen Netzwerk Design…
123456789101112[Interface]Address = 172.20.20.1/24PrivateKey = hier_den_oben_generierten_Privatekey_einfügenListenPort = 51238PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE[Peer]PublicKey = hier_den_generierten_Publickey_des_Raspi_einfügenAllowedIPs = 172.20.20.11/32,192.168.100.0/24PersistentKeepAlive = 25Hinweise:
Mit AllowedIPs = 172.20.20.11/32,192.168.100.0/24 lassen wir Pakete vom Wireguard Interface des Raspi 172.20.20.11/32 und alle Clients aus dem Edge Netz 192.168.100.0/24 zu.
Mit PostUp = iptables… leiten wir die Anfragen aus dem Edge Netz in das Lab Netz weiter und führen ein NAT durch, damit Systeme aus dem Lab erfolgreich auf die Anfragen von Clients aus dem Edge Netz antworten können. - Die Konfiguration auf dem Raspi, an unserer Edge Site, sieht passend dazu so aus:
1234567891011121314[Interface]Address = 172.20.20.11/24PrivateKey = hier_der_generierte_Privatekey_des_RaspiListenPort = 51238DNS = 10.1.110.1PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE[Peer]Endpoint = Public_IP_des_Servers_oder_DNS_Name:51238PublicKey = hier_der_generierte_Publickey_des_Wireguard_Servers_im_LabAllowedIPs = 172.20.20.0/24,10.150.150.0/24,10.1.110.0/24PersistentKeepalive = 25
Mit AllowedIPs = 172.20.20.0/24,10.150.150.0/24,10.1.110.0/24 routen wir alle Pakete, in diese Netze, direkt am Raspi, für alle Clients aus dem Edge Netz 192.168.100.0/24, direkt in den Wireguard Tunnel.
Mit DNS = 10.1.110.1 lassen wir DNS Anfragen für bestimmte Domain Namen auf dem DNS Server im Lab auflösen. Hierzu ist dann noch ein DNS Forwarding einzurichten, was wir noch auf dem Raspi, unter Verwendung von Pi-hole realisieren werden. Dieser Beitrag erläutert das genauer…
Test der Kommunikation über Wireguard
Die Konfiguration von Wireguard ist auf beiden Seiten abgeschlossen, also muss jetzt zunächst mal die Verbindung getestet werden.
- Zuerst aktivieren man den Wireguard Tunnel auf beiden Seiten, falls nicht schon geschehen:
1sudo wg-quick up wg0 - Jetzt den Status des Tunnels prüfen mit:
1sudo wg
- Der Wireguard Server wird nicht via UDP auf dem entsprechend gewählten Port erreicht –> DNAT an der Standort-Firewall prüfen
- In der Konfigurationsdatei wurden die AllowedIPs nicht gemäß dem Design konfiguriert
- IP Konfiguration passt nicht zum Design –> Konfigurationsdatei prüfen und ggfs. anpassen.
- IP Forwarding wurde nicht eingeschaltet
- Client / Server Firewall (UFW, SELINUX, Windows Firewall etc.) lässt keine Kommunikation auf dem gewählten UDP Port zu
- Kopierfehler oder logisches Vertauschen von Public und Private Key an den Systemen
Die Ausgabe sollte bei erfolgreichem Start von Wireguard in etwa so aussehen…
Wenn der Tunnel erfolgreich hergestellt wurde, sieht man anhand der markierten Zeile bereits eingehenden und ausgehenden Traffic…
Wenn die Zeile keinerlei Traffic ausgibt, kann man davon ausgehen, dass der Tunnel nicht zustande gekommen ist. Hier kann man zunächst mit
1 |
sudo systemctl status wg-quick@wg0 |
den Status des Wireguard Service prüen, eventuell gibt es hier schon Hinweise.
Meine Erfahrung zeigt mir aber, dass es sich in 90% der Fälle um folgende Fehler handelt und diese immer zuerst doppelt zu prüfen sind:
Alles Fehler, die mir selbst schon unterlaufen sind und erst nach Stunden auffielen.
Deshalb wichtig, immer ans Design halten, konzentrieren und manchmal tat’s auch ’ne Tasse Kaffee und ein freier Kopf! 😉
Hinweis: Diese beiden Befehle werdet ihr jetzt vermutlich häufig brauchen:
Anpassen der Konfiguration:
1 |
sudo nano /etc/wireguard/wg0.conf |
und nach jeder Änderung der Konfiguration muss der Wireguard Tunnel mit
1 |
sudo wg-quick down wg0 && sudo wg-quick up wg0 |
neu gestartet werden.
Sind dann alle Fehler behoben und der Wireguard Server und auch die „dahinter“ liegenden Systeme via PING erreichbar, kann man sich dem Thema DNS an der Edge Site widmen, worauf ich in einem weiteren Beitrag näher eingehen werden.
[…] Installation Wireguard auf Ubuntu Server […]