WireGuard einrichten
Modernes VPN-Protokoll: schnell, sicher und einfach zu konfigurieren.
🤔 Was ist WireGuard?
WireGuard ist ein modernes VPN-Protokoll, das auf Einfachheit und Performance ausgelegt ist. Es ist seit Linux 5.6 im Kernel integriert.
Vorteile
- ✓ Extrem schnell (Kernel-Level)
- ✓ Minimale Angriffsflaeche
- ✓ Einfache Konfiguration
- ✓ Roaming zwischen Netzwerken
- ✓ Batteriefreundlich (mobil)
Kryptographie
- ChaCha20 (Verschluesselung)
- Poly1305 (Authentifizierung)
- Curve25519 (Key Exchange)
- BLAKE2s (Hashing)
- SipHash24 (Hashtable Keys)
WireGuard vs. OpenVPN
WireGuard ist ca. 3x schneller als OpenVPN, hat nur ~4000 Zeilen Code (vs. ~100.000) und ist damit viel einfacher zu auditieren. Die Konfiguration ist ebenfalls simpler.
🖥️ Server einrichten
WireGuard auf einem Debian/Ubuntu Server installieren und konfigurieren.
# WireGuard installieren
apt update
apt install -y wireguard wireguard-tools
# Kernel-Modul pruefen
modprobe wireguard
lsmod | grep wireguard
# IP-Forwarding aktivieren (fuer Gateway-Funktion)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sysctl -p
# In das WireGuard-Verzeichnis wechseln
cd /etc/wireguard
# Server-Schluessel generieren
wg genkey | tee server_private.key | wg pubkey > server_public.key
# Berechtigungen setzen (Private Key schuetzen!)
chmod 600 server_private.key
# Schluessel anzeigen
cat server_private.key
cat server_public.key
[Interface]
# Server Private Key
PrivateKey = SERVER_PRIVATE_KEY_HIER
# VPN-Subnetz (interne IPs)
Address = 10.0.0.1/24
# Port (Standard: 51820)
ListenPort = 51820
# Optional: DNS fuer Clients
# DNS = 10.0.0.1
# NAT/Masquerading beim Start/Stop
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
# Erster Client (Peer)
[Peer]
# Client Public Key
PublicKey = CLIENT_PUBLIC_KEY_HIER
# Erlaubte IPs fuer diesen Client
AllowedIPs = 10.0.0.2/32
# Interface aktivieren
wg-quick up wg0
# Status pruefen
wg show
# Beim Systemstart aktivieren
systemctl enable wg-quick@wg0
# Interface stoppen
wg-quick down wg0
Firewall nicht vergessen!
Port 51820/UDP in der Firewall oeffnen:
ufw allow 51820/udp
💻 Client einrichten
Einen Client (z.B. Laptop, Handy) mit dem WireGuard-Server verbinden.
# Auf dem Client oder Server
wg genkey | tee client_private.key | wg pubkey > client_public.key
# Schluessel anzeigen
cat client_private.key
cat client_public.key
[Interface]
# Client Private Key
PrivateKey = CLIENT_PRIVATE_KEY_HIER
# Client-IP im VPN-Subnetz
Address = 10.0.0.2/24
# DNS-Server (optional, z.B. Pi-hole)
DNS = 10.0.0.1
[Peer]
# Server Public Key
PublicKey = SERVER_PUBLIC_KEY_HIER
# Server-Adresse (oeffentliche IP oder Domain)
Endpoint = vpn.example.com:51820
# Welcher Traffic soll durch VPN?
# 0.0.0.0/0 = Alles (Full Tunnel)
# 10.0.0.0/24 = Nur VPN-Netz (Split Tunnel)
AllowedIPs = 0.0.0.0/0, ::/0
# Keepalive fuer NAT (alle 25 Sekunden)
PersistentKeepalive = 25
Client zum Server hinzufuegen
Den Client Public Key auf dem Server in /etc/wireguard/wg0.conf eintragen:
[Peer] PublicKey = CLIENT_PUBLIC_KEY AllowedIPs = 10.0.0.2/32
Dann WireGuard neu laden: wg-quick down wg0 && wg-quick up wg0
Hot-Reload (ohne Neustart)
Neue Peers ohne Neustart hinzufuegen:
wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2/32
📱 Mobile Apps
WireGuard-Apps fuer Android und iOS.
iOS / macOS
# qrencode installieren
apt install -y qrencode
# QR-Code im Terminal anzeigen
cat /etc/wireguard/client.conf | qrencode -t ansiutf8
# QR-Code als PNG speichern
cat /etc/wireguard/client.conf | qrencode -o client-qr.png
# Dann in der App: "+" und "QR-Code scannen"
Einfache Einrichtung
Mit dem QR-Code ist die Client-Einrichtung in Sekunden erledigt - einfach in der App scannen und verbinden!
🔀 Split Tunneling
Nur bestimmten Traffic durch das VPN leiten.
Full Tunnel
Alles durch VPN:
AllowedIPs = 0.0.0.0/0, ::/0 - ✓ Maximale Sicherheit
- ✗ Langsameres Internet
Split Tunnel
Nur bestimmte Netze:
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24 - ✓ Schnelleres Internet
- ✗ Nicht alles geschuetzt
# Nur Heim-Netzwerk + VPN-Subnetz
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
# Bestimmte Server erreichen
AllowedIPs = 10.0.0.0/24, 203.0.113.50/32
# IPv4 komplett, IPv6 lokal
AllowedIPs = 0.0.0.0/0
Wann Split Tunnel?
- Full Tunnel: Oeffentliches WLAN, Reisen, Datenschutz
- Split Tunnel: Homeoffice (nur Firmen-Ressourcen), Gaming, Streaming
👥 Mehrere Clients verwalten
Mehrere Geraete mit dem VPN verbinden.
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
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
# Laptop
[Peer]
PublicKey = LAPTOP_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
# Handy
[Peer]
PublicKey = PHONE_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32
# Tablet
[Peer]
PublicKey = TABLET_PUBLIC_KEY
AllowedIPs = 10.0.0.4/32
# Homeserver
[Peer]
PublicKey = HOMESERVER_PUBLIC_KEY
AllowedIPs = 10.0.0.10/32, 192.168.1.0/24
# Fuer jeden neuen Client:
# 1. Schluessel generieren (Name anpassen!)
cd /etc/wireguard
wg genkey | tee laptop_private.key | wg pubkey > laptop_public.key
chmod 600 laptop_private.key
# 2. Client-Config erstellen
# /etc/wireguard/laptop.conf
# [Interface]
# PrivateKey = [inhalt von laptop_private.key]
# Address = 10.0.0.3/24
# DNS = 10.0.0.1
#
# [Peer]
# PublicKey = [server_public.key]
# Endpoint = vpn.example.com:51820
# AllowedIPs = 0.0.0.0/0, ::/0
# 3. Public Key ausgeben (fuer Server-Config)
cat laptop_public.key
IP-Adressen eindeutig vergeben
Jeder Client braucht eine eindeutige IP-Adresse im VPN-Subnetz. Fuehre eine Liste aller vergebenen IPs!
🔧 Troubleshooting
# WireGuard-Status
wg show
# Interface-Status
ip a show wg0
# Ping zum Server (VPN-IP)
ping 10.0.0.1
# Routing pruefen
ip route | grep wg0
# Logs (journald)
journalctl -u wg-quick@wg0 -f
# Kernel-Modul geladen?
lsmod | grep wireguard
# Port nicht erreichbar?
# → Firewall pruefen
ufw status
iptables -L -n
# Kein Internet durch VPN?
# → IP-Forwarding pruefen
sysctl net.ipv4.ip_forward
# Sollte 1 sein
# → NAT/Masquerading pruefen
iptables -t nat -L -n | grep MASQUERADE
# Handshake aber kein Traffic?
# → AllowedIPs pruefen (Server UND Client)
# → Routing-Konflikte?
# DNS funktioniert nicht?
# → DNS-Server erreichbar?
ping 10.0.0.1
nslookup google.com 10.0.0.1
Debugging-Tipps
- Latest Handshake: Sollte weniger als 2 Minuten sein
- Transfer: Sollte rx UND tx zeigen
- Endpoint: Zeigt letzte bekannte Client-IP
VPN-Loesung gesucht?
Wir richten WireGuard fuer dich ein - auf deinem Server oder als Managed Service.
Beratung anfragen →