← Zurueck zu VPN & Security
🔐

WireGuard einrichten

Modernes VPN-Protokoll: schnell, sicher und einfach zu konfigurieren.

⏱️ 30 Minuten 📊 Mittel
Bis 3x schneller
🔒 ChaCha20 + Curve25519
📝 ~4000 Zeilen Code
🐧 Im Linux Kernel
🤔 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.

Installation
bash

# 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
Schluessel generieren
bash

# 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
Server-Konfiguration /etc/wireguard/wg0.conf
bash

[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
WireGuard starten
bash

# 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.

Client-Schluessel generieren
bash

# 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
Client-Konfiguration
bash

[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.

QR-Code fuer Mobile generieren
bash

# 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
Split Tunnel Beispiele
bash

# 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.

Server-Konfiguration mit mehreren Peers
bash

[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
Neuen Client manuell erstellen
bash

# 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 +
Verbindung pruefen
bash

# 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
Haeufige Probleme
bash

# 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 →