Eigenes VPN mit WireGuard auf eine VM einrichten
Anforderungen In diesem Fall ist die Einrichtung ein komplex und du brauchst folgende Skills:
- Grundlegende Linux-Kommandos (Shell,
vi)- Verständnis von IP/Ports/Firewalls
- Basiswissen zu Public/Private Keys
In diesem Post dokumentiere ich, wie ich ein VPN auf meiner VM (Ubuntu/Debian) eingerichtet habe.
Architekturüberblick
[Client: Laptop/Phone]
WireGuard-App ──▶ [Internet]
│
▼
[Hetzner Cloud Firewall]
│ (51820/UDP erlaubt)
▼
[VM: Ubuntu/Debian Host]
- wg0 (10.8.0.1/24)
- UFW + NAT (MASQUERADE)
- Dienste (z. B. Caddy/Web)Warum WireGuard?
- Einfach & schnell: Schlanke Config, moderne Kryptographie.
- Sicher: Public-Key-basierte Authentifizierung, kleine Angriffsfläche
- Flexibel: Full- oder Split-Tunnel, mehrere Peers, portable Profile.
1) Cloud-Firewall
Du sollst den Firewall deines VM-Provider entsprechend anpassen, damit nur gewünschter Traffic zur VM geht. Sehr häufig, eine VM wird mit einer bestimmte Bandbreite bereitsgestellt.
- Inbound erlauben:
51820/udp(WireGuard),22/tcp(SSH — vorübergehend/auf eigene IP beschränken),80/tcpund443/tcp(falls Webserver läuft).
2) Host-Firewall (UFW) & System (auf der VM)
Jetzt wird die Firewall auf deinen VM eingerichtet, das sorgt für die Schutz + Paketweiterleitung.
ufw allow 51820/udp
ufw allow 80,443/tcp
ufw allow 22/tcp
ufw enable
# IP-Forwarding dauerhaft aktivieren (IPv4 + IPv6)
printf 'net.ipv4.ip_forward=1\nnet.ipv6.conf.all.forwarding=1\n' > /etc/sysctl.d/99-wireguard-forward.conf
sysctl --systemNAT für Full-Tunnel (WAN-Interface ggf. eth0 anpassen):
nano /etc/ufw/before.rulesGanz oben einfügen:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMITDann:
sed -i 's/^DEFAULT_FORWARD_POLICY.*/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw
ufw reload3) WireGuard installieren & Server-Keys (auf der VM)
Krypto-Identität des Servers.
apt update && apt install -y wireguard qrencode
umask 077
install -d -m 700 /etc/wireguard
cd /etc/wireguard
wg genkey > server.key
wg pubkey < server.key > server.pub
chmod 600 server.keyServer-Config /etc/wireguard/wg0.conf:
SERVER_PRIV=$(cat /etc/wireguard/server.key)
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = ${SERVER_PRIV}
# Optional: DNS = 1.1.1.1, 9.9.9.9
EOF
chmod 600 /etc/wireguard/wg0.confInterface starten & aktivieren:
systemctl enable --now wg-quick@wg0
wg show4) Ersten Client anlegen (z. B. Laptop „alice“)
Schlüssel kann man bequem auf der VM erzeugen und die fertige Config auf den Client übertragen.
cd /etc/wireguard
CLIENT=incompletenotes
wg genkey > ${CLIENT}.key
wg pubkey < ${CLIENT}.key > ${CLIENT}.pub
CLIENT_PRIV=$(cat ${CLIENT}.key)
CLIENT_PUB=$(cat ${CLIENT}.pub)
SERVER_PUB=$(cat server.pub)
SERVER_ENDPOINT="DEINE.SERVER.IP.ODER.DNS:51820"Client-Datei /etc/wireguard/incompletenotes.conf:
cat > /etc/wireguard/${CLIENT}.conf <<EOF
[Interface]
PrivateKey = ${CLIENT_PRIV}
Address = 10.8.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = ${SERVER_PUB}
Endpoint = ${SERVER_ENDPOINT}
AllowedIPs = 0.0.0.0/0, ::/0 # Full-Tunnel
PersistentKeepalive = 25
EOFSplit-Tunnel? Statt
0.0.0.0/0, ::/0z. B. nur10.8.0.0/24eintragen.
Client am Server registrieren (Peer):
cat >> /etc/wireguard/wg0.conf <<EOF
[Peer]
# ${CLIENT}
PublicKey = ${CLIENT_PUB}
AllowedIPs = 10.8.0.2/32
EOF
wg set wg0 peer ${CLIENT_PUB} allowed-ips 10.8.0.2/32
wg-quick down wg0 && wg-quick up wg0
wg showClient-Config übertragen:
Desktop:
/etc/wireguard/incompletenotes.confperscpkopieren und in die WireGuard-App importieren.Handy: QR im Terminal zeigen:
qrencode -t ansiutf8 < /etc/wireguard/incompletenotes.conf
5) Funktionstest
Client:
- Verbinden ->
ping 10.8.0.1 - Full-Tunnel:
curl ifconfig.mezeigt die Server-IP - SSH über VPN (optional):
ssh user@10.8.0.1
Server:
wg show # Handshake/Traffic prüfen6) Härtung & Betrieb
- Regelmäßige Updates:
apt update && apt upgrade -y - Backups:
/etc/wireguard/wg0.confsichern (Private Keys nie weitergeben). - Weitere Clients: Für jede:n neue Keys + eindeutige IP (
10.8.0.3/32,10.8.0.4/32, …) und Peer-Block ergänzen.
Fazit
Mit diesem Setup habe ich eine stabile, sichere VPN-Anbindung zu meiner VM: Cloud-Firewall + UFW regeln Zugriffe, WireGuard (wg0) stellt den Tunnel bereit, NAT ermöglicht auf Wunsch Full-Tunnel ins Internet.