Viele KMUs zahlen Jahr für Jahr Tausende Euro für VPN-Lösungen von Cisco, Fortinet oder Palo Alto – Lizenzen, die teuer und oft überdimensioniert sind. Dabei gibt es seit Jahren eine quelloffene Alternative, die technisch überlegen, kostenlos und in unter einer Stunde einsatzbereit ist: WireGuard.
WireGuard ist ein modernes VPN-Protokoll, das direkt im Linux-Kernel läuft. Im Vergleich zu OpenVPN ist es deutlich schneller, einfacher zu konfigurieren und schlanker im Code – was die Angriffsfläche massiv reduziert. Für ein Team von 5–20 Personen reicht ein kleiner Hetzner-VPS (ab 4,55 €/Monat) vollkommen aus.
Die Ersparnis gegenüber kommerziellen VPN-Lösungen: Bis zu 3.000 € pro Jahr – bei verbesserter Sicherheit und DSGVO-konformer Datenhaltung in der EU.
1. Warum WireGuard statt klassischer VPN-Lösungen?
Der Vergleich fällt eindeutig aus:
| Kriterium | OpenVPN | WireGuard |
|---|---|---|
| Codezeilen | ~600.000 (OpenSSL) | ~4.000 |
| Performance | Langsam, CPU-intensiv | Bis 3× schneller |
| Verbindungsaufbau | Sekunden bis Minuten | < 100 ms |
| Konfiguration | Komplex, viele Optionen | Minimal, klar |
| Kernel-Integration | Userspace | Linux-Kernel ab 5.6 |
| Kosten | Kostenlos (aber Komplexität) | Kostenlos |
Gegenüber kommerziellen Lösungen (Cisco AnyConnect, Fortinet SSL-VPN) kommen noch folgende Argumente hinzu:
- Keine Lizenzkosten: WireGuard ist Open Source unter der GPLv2-Lizenz
- Peer-reviewed: Der Code wurde formal auditiert und verifiziert – weniger als 5.000 Zeilen bedeuten deutlich kleinere Angriffsfläche
- DSGVO-konform: Server in EU (Hetzner Nürnberg/Helsinki), Daten verlassen nie externe Infrastruktur
- Schnelles Reconnect: Ideal für Mobilgeräte, die zwischen WLAN und Mobilfunk wechseln
Praxishinweis: WireGuard ist inzwischen im Linux-Kernel integriert (ab 5.6, also Ubuntu 20.04+). Kein Kernel-Modul kompilieren, kein DKMS – einfach installieren und loslegen.
2. Voraussetzungen
Für diesen Guide benötigst du:
- VPS: Hetzner Cloud CPX11 (2 vCPU, 2 GB RAM) reicht vollständig aus – ab 4,55 €/Monat
- Betriebssystem: Ubuntu 22.04 LTS (empfohlen)
- Domain oder feste IP: Entweder eine Subdomain (z.B.
vpn.firma.at) oder die direkte Server-IP - Root- oder sudo-Zugriff auf den Server
- Grundkenntnisse SSH: Befehle ausführen, Dateien editieren
Tipp: Hetzner bietet EU-Server in Nürnberg, Falkenstein und Helsinki – alle DSGVO-konform. Für österreichische KMUs ist Nürnberg oder Wien (via Partner) empfehlenswert.
3. Server-Setup (Ubuntu)
Installation und Keys generieren
Verbinde dich per SSH mit deinem Server und führe folgende Befehle aus:
# System updaten
apt update && apt upgrade -y
# WireGuard installieren
apt install wireguard -y
# Keys generieren
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
# Schlüssel anzeigen (für die Konfiguration merken)
echo "Private Key: $(cat /etc/wireguard/server_private.key)"
echo "Public Key: $(cat /etc/wireguard/server_public.key)"
# IP-Forwarding aktivieren (Pakete weiterleiten)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
WireGuard-Konfiguration erstellen
Erstelle die Konfigurationsdatei /etc/wireguard/wg0.conf. Ersetze <SERVER_PRIVATE_KEY> mit dem Inhalt von /etc/wireguard/server_private.key:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
# NAT: Pakete vom VPN ins Internet weiterleiten
# Passe "eth0" an dein Netzwerkinterface an (prüfen mit: ip route)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Mitarbeiter 1 – Maria
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32
Wichtig: Das Netzwerkinterfaceeth0kann bei Hetzner auchens3oderenp1s0heißen. Prüfe es mit:ip route | grep default
Firewall konfigurieren und starten
# WireGuard-Port in UFW freigeben
ufw allow 51820/udp
# WireGuard beim Systemstart aktivieren und sofort starten
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
# Status prüfen
systemctl status wg-quick@wg0
wg show
Der Befehl wg show sollte jetzt das Interface wg0 mit der IP 10.0.0.1 anzeigen.
Brauchst du Unterstützung bei der Umsetzung?
30-Min Call — kostenlos, unverbindlich, konkret.
4. Client-Konfiguration (Windows, macOS, iOS/Android)
Client-Keys generieren
Für jeden Mitarbeiter wird ein eigenes Schlüsselpaar erstellt – entweder direkt am Server oder auf dem Client-Gerät:
# Client-Keys generieren (z.B. für "maria")
wg genkey | tee maria_private.key | wg pubkey > maria_public.key
echo "Client Private Key: $(cat maria_private.key)"
echo "Client Public Key: $(cat maria_public.key)"
Client-Konfigurationsdatei
Erstelle eine .conf-Datei für den Mitarbeiter. Diese wird in die WireGuard-App importiert:
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Erklärung der wichtigsten Parameter:
Address = 10.0.0.2/32– Jeder Client bekommt eine eigene VPN-IP (10.0.0.2, 10.0.0.3, …)AllowedIPs = 0.0.0.0/0– Gesamter Traffic läuft durch das VPN (Full Tunnel)PersistentKeepalive = 25– Hält die Verbindung hinter NAT aufrecht (wichtig für mobile Geräte)
Apps für Windows, macOS, iOS und Android
- Windows/macOS: WireGuard-App herunterladen → "Import tunnel(s) from file" →
.conf-Datei importieren → Verbinden - iOS/Android: WireGuard-App aus dem App Store/Play Store → QR-Code scannen (einfachste Methode)
QR-Code für Mobilgeräte
# qrencode installieren
apt install qrencode -y
# QR-Code aus der Client-Config erzeugen (im Terminal anzeigen)
qrencode -t ansiutf8 < maria.conf
# Oder als PNG-Datei speichern
qrencode -o maria-qr.png < maria.conf
Den QR-Code kurz anzeigen, Mitarbeiter damit scannen lassen, danach sofort löschen. So müssen keine sensiblen Konfigurationsdateien per E-Mail versendet werden.
5. Nutzer verwalten
Neuen Peer hinzufügen
Für jeden neuen Mitarbeiter wiederhole den Prozess: Keys generieren, Client-Config erstellen, Peer-Block in der Serverkonfiguration ergänzen:
# 1. Keys für neuen Mitarbeiter "thomas" generieren
wg genkey | tee thomas_private.key | wg pubkey > thomas_public.key
# 2. Peer live hinzufügen (ohne Neustart!)
wg set wg0 peer $(cat thomas_public.key) allowed-ips 10.0.0.3/32
# 3. Peer auch in wg0.conf eintragen (für Persistenz nach Reboot)
cat >> /etc/wireguard/wg0.conf << EOF
[Peer]
# Mitarbeiter 2 – Thomas
PublicKey = $(cat thomas_public.key)
AllowedIPs = 10.0.0.3/32
EOF
Peer entfernen (Mitarbeiter austritt)
# Peer sofort deaktivieren (ohne Neustart)
wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
# Peer-Block auch aus wg0.conf löschen (mit nano oder sed)
nano /etc/wireguard/wg0.conf
Aktive Verbindungen anzeigen
# Übersicht aller Peers und deren Verbindungsstatus
wg show
# Beispiel-Output:
# interface: wg0
# public key: aBcD...
# listening port: 51820
#
# peer: xYzW...
# endpoint: 88.99.100.101:54321
# allowed ips: 10.0.0.2/32
# latest handshake: 23 seconds ago
# transfer: 1.44 MiB received, 8.23 MiB sent
6. Troubleshooting
Die häufigsten Probleme und ihre Lösung:
Verbindung schlägt fehl
# Firewall-Status prüfen – Port 51820/udp muss erlaubt sein
ufw status
# WireGuard-Status prüfen
systemctl status wg-quick@wg0
# Logs in Echtzeit anzeigen
journalctl -u wg-quick@wg0 -f
Kein Internet durch VPN
# IP-Forwarding muss aktiviert sein
sysctl net.ipv4.ip_forward
# Erwarteter Wert: net.ipv4.ip_forward = 1
# Falls 0: sofort aktivieren
sysctl -w net.ipv4.ip_forward=1
# Netzwerkinterface prüfen (für PostUp/PostDown in wg0.conf)
ip route | grep default
# Beispiel: default via 10.0.0.1 dev eth0
# → "eth0" ist das Interface, das in PostUp/PostDown stehen muss
Langsame Verbindung
# MTU auf 1420 setzen (verhindert Fragmentierung)
# In der Client-Config unter [Interface] ergänzen:
# MTU = 1420
# Oder direkt am Interface testen:
ip link set mtu 1420 dev wg0
Schnell-Diagnose
- Handshake in
wg showfehlt → Client-Config prüfen (Public Key des Servers korrekt?) - Handshake vorhanden, aber kein Traffic → PostUp/PostDown und IP-Forwarding prüfen
- Verbindung bricht nach Netzwechsel ab →
PersistentKeepalive = 25in Client-Config setzen - Port nicht erreichbar →
ufw allow 51820/udpund Hetzner Firewall (Cloud Console) prüfen
7. Bonus: wg-easy — WireGuard mit Web-Interface
Den manuellen Setup aus Abschnitt 3–5 kann man komplett durch wg-easy ersetzen — ein Docker-Container, der WireGuard mit einem übersichtlichen Web-UI verpackt. Keine CLI mehr für neue Clients, kein manuelles Editieren von wg0.conf — alles läuft über den Browser.
Was ist wg-easy?
- Docker-Container mit Web-UI für WireGuard
- Clients per Browser hinzufügen/entfernen, QR-Codes direkt generieren
- Traffic-Statistiken, aktive Verbindungen auf einen Blick
- Ideal für KMUs ohne dediziertes IT-Team
- Open Source: github.com/wg-easy/wg-easy
Voraussetzungen
- Docker muss auf dem Server installiert sein (folgt aus Abschnitt 3 —
apt install docker.io docker-compose-plugin -y) - Zusätzlich zu Port
51820/udpauch Port51821/tcpin der Firewall öffnen
ufw allow 51821/tcp
Passwort-Hash generieren
wg-easy verwendet einen Bcrypt-Hash statt eines Klartext-Passworts. Hash generieren:
docker run --rm ghcr.io/wg-easy/wg-easy wgpw 'DEIN_PASSWORT'
Den ausgegebenen Hash ($2b$12$...) für die nächste Konfiguration bereithalten.
Installation via Docker Compose
# /opt/wg-easy/docker-compose.yml
version: '3.8'
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
volumes:
- /opt/wg-easy/data:/etc/wireguard
environment:
- WG_HOST=<DEINE-SERVER-IP>
- PASSWORD_HASH=<BCRYPT-HASH>
- WG_DEFAULT_ADDRESS=10.8.0.x
- WG_DEFAULT_DNS=1.1.1.1
- WG_ALLOWED_IPS=0.0.0.0/0
- UI_TRAFFIC_STATS=true
Container starten
mkdir -p /opt/wg-easy/data
cd /opt/wg-easy
docker compose up -d
Das Web-UI ist danach unter http://<SERVER-IP>:51821 erreichbar. Nach der Anmeldung können neue Clients per Klick erstellt, QR-Codes generiert und Verbindungen in Echtzeit überwacht werden.
Hinweis: wg-easy ersetzt den manuellen WireGuard-Setup aus Abschnitt 3–5. Wer wg-easy verwendet, braucht wg0.conf nicht manuell anlegen — das übernimmt der Container.
⚠️ Sicherheitshinweis: Port 51821 sollte nicht direkt öffentlich exponiert werden. Empfehlung: nginx Reverse Proxy mit HTTPS (Let's Encrypt) vorschalten und das Web-UI nur über eine gesicherte Domain erreichbar machen. Alternativ: Zugriff auf das UI per IP-Whitelist oder VPN-internen Zugriff beschränken.
8. Fazit & nächste Schritte
WireGuard ist die modernste, schlankste und günstigste VPN-Lösung für KMUs. Im Vergleich zu teuren kommerziellen Lösungen bietet es:
- ✅ Keine Lizenzkosten – nur die VPS-Kosten (ab 4,55 €/Monat)
- ✅ Top-Performance – bis 3× schneller als OpenVPN
- ✅ Minimale Angriffsfläche – ~4.000 Zeilen Code, peer-reviewed
- ✅ DSGVO-konform – Server in der EU, volle Datenkontrolle
- ✅ Einfache Verwaltung – Peers in Sekunden hinzufügen oder entfernen
Für ein 10-köpfiges Team mit bisheriger Cisco-Lizenz (ca. 3.000 €/Jahr) amortisiert sich das Setup am ersten Tag. Der Hetzner-VPS läuft für 55 €/Jahr – der Rest bleibt im Unternehmen.
Nächste Schritte: Für erweiterte Setups empfiehlt sich ein Split-Tunnel (nur Firmen-Traffic durch VPN), Monitoring via wg show + Prometheus, oder ein Management-Interface wie wg-easy für eine Web-Oberfläche.