In diesem Beitrag wird eine Lernsituation zum Thema VPN (Virtuell Private Network) dargestellt. Ziel ist eine VPN-Lösung für den Unterricht zu entwickeln, anhand der die Lernenden ein VPN zwischen dem Netzwerk ihres Unternehmens und ihrem Arbeitsplatzrechner (Home-Office-Szenario) bzw. ihrem Smartphone (Road-Warrior-Szenario) einrichten – also ein Site-to-End-VPN.
Lernsituation
Das StartUp Air Eye GmbH bietet seinen MitarbeiterInnen ein flexibles Arbeitszeitmodell incl. der Möglichket von Home-Office-Zeiten. Zudem sind viele MitarbeiterInnen regelmäßig im Außeneinsatz. In beiden Fällen soll der Zugriff auf das interne Firmennetzwerk möglich sein. Im Zusammenhang mit der Einführung eines umfassenden Datensicherungskonzeptes schlagen Sie der Air Eye GmbH die Verwendung eines VPN vor.
In diesem Teil wird die Einrichtung des WireGuard-Servers beschrieben – sprich die administrativen Vorarbeiten für diese Lernsituation. Die eigentliche Umsetzung der Lernsituation wird dann im zweiten Teil dargestellt.
Einrichten eines Wireguard-Servers
WireGuard ist eine vergleichsweise neue Technik für „Virtuell Private Networks (VPNs)“, die sich aktuelle großer Beliebtheit erfreut. Gründe für die Beliebtheit sind vor allem die höhere Performance und die einfacherere Einrichtung, da auf viele Altlasten aus den üblichen VPN-Lösungen (OpenVPN, IPsec) verzichtet wurde. WireGuard ist zugleich ein VPN-Protokoll und eine Software zum Einrichten des VPN.
WireGuard arbeitet eigentlich als Peer-to-Peer-Protokoll. Durch die Konfiguration können aber auch Client-Server-Szenarien realisiert werden.
In dem hier dargestellten Szenario arbeitet eine virtuelle Maschine als WireGuard-Server in einer Proxmox-Umgebung. Die VM ist aus dem schuleigenen (W)LAN erreichbar.
Denkbar sind auch andere Möglichkeiten:
- den WireGuard-Server in einer lokalen VM auf dem Lehrerarbeitsplatz einrichten (habe ich als Backup in der Hinterhand)
- einen Root-Server / vServer als WireGuard-Server einrichten, damit die Lernenden auch von außerhalb der Schule arbeiten können (habe ich im Corona-Lockdown so realisiert)
Grundlage für den WireGuard-Server ist hier ein debian-System (Bullseye). Bei älteren debian-Versionen ist WireGuard nicht in den Paketquellen und muss manuell installiert werden.
WireGuard lässt sich hier einfach aus den Paketquellen mit apt installieren:
apt install wireguard
Anschließend wechseln wir in das Verzeichnis /etc/wireguard …
cd /etc/wireguard
… und erstellen die Schlüssel (private und public) für den WireGuard-Server. Der private Schlüssel wird vor anderen Nutzern außer root geschützt (umask 077):
umask 077 && wg genkey > wg-private-server.key
wg pubkey < wg-private-server.key > wg-public-server.key
Der private Schlüssel wird Im nächsten Schritt für die Konfiguration der (virtuellen) Schnittstelle wg0 von WireGuard benötigt. Der Schlüssel kann mit folgendem Befehl angezeigt und in die Zwischenablage kopiert werden:
cat wg-private-server.key
Zudem benötigen wir noch die Bezeichnung der realen Schnittstelle des WireGuard-Servers, über die Kommunikation aus dem VPN ins Schulnetz bzw. Internet möglich ist:
ifconfig
bzw. ip address show
Die Schnittstelle wg0 wird in der Datei wg0.conf konfiguriert (nano wg0.conf):
[Interface]
# WireGuard-ServerAddress = 172.16.10.1/24
ListenPort = 51820
PrivateKey = <wg-private-server.key>PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE
[Peer]
# WireGuard-Client / Jans-Handy
PublicKey = <wg-public-client1.key
AllowedIPs = 172.16.10.2/32
Der Abschnitt [Interface] definiert die Schnittstelle wg0 des Servers, d.h. hier wird
- die IP-Adresse des Servers bzw. das Netz für die VPNs definiert,
- der Port für den Verbindungsaufbau festgelegt,
- der private Schlüssel des Servers (s.o.) hinterlegt
- und die Weiterleitung vom VPN ins „öffentliche“ Netz mit NAT eingerichtet.
Im Abschnitt [Peer] wird festgelegt, welcher Client welche IP-Adresse erhält. Dazu im zweiten Teil mehr.
Die Weiterleitung von IP vom VPN ins „öffentliche“ Netz muss zudem in der Datei /etc/sysctl.conf erlaubt werden.
nano /etc/sysctl.conf
...
#Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
...
Als letzter Schritt erlauben wir die Kommunikation über den in der Datei wg0.conf definierten Port ( üblich ist der Port 51820):
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
Das war es schon mit der Konfiguration des WireGuard-Servers. Nun aktivieren wir die Konfiguration, starten sie und schauen uns den Status an:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
systemctl status wg-quick@wg0
wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
Active: active (exited) since
…
Damit ist der WireGuard-Server für den Unterricht eingerichtet. Die Lernenden haben nun entsprechend der Lernsituation einen PC (Home-Office) und ein Smartphone (Road-Warrior) einzurichten, so dass eine Kommunikation über das VPN möglich ist.