Zum Inhalt springen
CitexNode
Alle Anleitungen

WireGuard-VPN zwischen vServer und PC

Schlüssel erzeugen, wg0.conf auf beiden Seiten, Firewall und Weiterleitung nur, wenn du darüber ins Internet willst.

5 Min. Lesezeit

Mit WireGuard verbindest du deinen PC und deinen vServer über einen verschlüsselten Tunnel. Danach erreichst du Dienste auf dem Server, die nicht offen im Internet stehen sollen (Datenbank, Admin-Oberflächen), über eine private Adresse.

Gilt für Debian 12 und 13, Ubuntu 22.04 und 24.04, AlmaLinux 9 und Rocky Linux 9 auf dem Server. Auf dem PC nimmst du die offizielle WireGuard-App von https://www.wireguard.com/install/ (Windows, macOS, Linux, Android, iOS). Befehle auf dem Server laufen als root.

Wir nutzen dieses kleine Netz:

GerätAdresse im Tunnel
vServer10.8.0.1
PC10.8.0.2

Installieren

Debian und Ubuntu:

bash
apt update
apt install -y wireguard-tools

AlmaLinux und Rocky Linux:

bash
dnf install -y wireguard-tools

Das Kernelmodul ist bei allen genannten Systemen schon dabei.

Schlüssel erzeugen

Auf dem Server:

bash
cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
cat server.pub

server.key ist geheim und bleibt auf dem Server. server.pub ist der öffentliche Schlüssel, den bekommt der PC.

Auf dem PC: In der WireGuard-App Tunnel hinzufügen → Leeren Tunnel hinzufügen (Windows) bzw. „Neu erstellen“. Die App erzeugt den privaten Schlüssel selbst und zeigt den öffentlichen an. Unter Linux geht es mit denselben Befehlen wie auf dem Server (client.key, client.pub).

Server: wg0.conf

Leg /etc/wireguard/wg0.conf an. Bei PrivateKey steht der Inhalt von server.key, bei PublicKey der öffentliche Schlüssel des PCs:

ini
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = INHALT-VON-server.key

[Peer]
# Mein PC
PublicKey = OEFFENTLICHER-SCHLUESSEL-DES-PCS
AllowedIPs = 10.8.0.2/32

PC: Tunnel-Konfiguration

In der App (oder unter Linux in /etc/wireguard/wg0.conf). PrivateKey hat die App schon eingetragen. Endpoint ist die IPv4 deines vServers aus dem Dashboard (Tab Netzwerk):

ini
[Interface]
PrivateKey = PRIVATER-SCHLUESSEL-DES-PCS
Address = 10.8.0.2/24

[Peer]
PublicKey = INHALT-VON-server.pub
Endpoint = DEINE-SERVER-IP:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25

AllowedIPs = 10.8.0.0/24 heißt: Nur der Verkehr ins Tunnelnetz läuft durch den Tunnel, alles andere geht wie gewohnt direkt ins Internet. PersistentKeepalive hält die Verbindung offen, wenn dein PC hinter einem Router mit NAT sitzt.

Firewall und Start

Öffne auf dem Server UDP 51820.

Debian und Ubuntu mit ufw:

bash
ufw allow 51820/udp

AlmaLinux und Rocky Linux mit firewalld:

bash
firewall-cmd --permanent --add-port=51820/udp
firewall-cmd --reload

Tunnel auf dem Server starten und beim Booten automatisch hochfahren:

bash
systemctl enable --now wg-quick@wg0

Auf dem PC in der App Aktivieren klicken (Linux: wg-quick up wg0).

Prüfen, ob es geklappt hat

Auf dem Server:

bash
wg show

Beim Peer sollte latest handshake vor wenigen Sekunden stehen und transfer Daten in beide Richtungen zeigen.

Vom PC aus:

bash
ping 10.8.0.1

Klappt der Ping, steht der Tunnel. Dienste, die auf dem Server nur auf 10.8.0.1 hören, erreichst du jetzt nur noch über den Tunnel.

Nur wenn nötig: allen Verkehr über den vServer leiten

Willst du, dass dein PC über den vServer ins Internet geht (z. B. im öffentlichen WLAN), braucht der Server Weiterleitung und NAT. Für den einfachen Zugriff auf den Server ist das nicht nötig; lass es dann weg.

  1. Weiterleitung einschalten:

    bash
    echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-wireguard.conf
    sysctl --system
  2. Den Namen der Netzwerkkarte herausfinden, über die der Server ins Internet geht (steht hinter dev):

    bash
    ip route show default
  3. NAT einrichten.

    Debian und Ubuntu: In /etc/wireguard/wg0.conf unter [Interface] ergänzen, eth0 durch deinen Kartennamen ersetzen:

    ini
    PostUp = nft add table ip wg-nat; nft add chain ip wg-nat post '{ type nat hook postrouting priority 100; }'; nft add rule ip wg-nat post oifname "eth0" ip saddr 10.8.0.0/24 masquerade
    PostDown = nft delete table ip wg-nat

    Fehlt der Befehl nft, installier ihn mit apt install -y nftables.

    Nutzt du ufw, erlaube zusätzlich die Weiterleitung: ufw route allow in on wg0 out on eth0.

    AlmaLinux und Rocky Linux mit firewalld:

    bash
    firewall-cmd --permanent --zone=public --add-masquerade
    firewall-cmd --permanent --zone=trusted --add-interface=wg0
    firewall-cmd --reload
  4. Auf dem PC AllowedIPs = 0.0.0.0/0 setzen und einen DNS-Server eintragen, z. B. DNS = 1.1.1.1 unter [Interface].

  5. Auf dem Server systemctl restart wg-quick@wg0, auf dem PC den Tunnel neu aktivieren.

Prüfen: Auf dem PC zeigt eine Seite wie https://ifconfig.co jetzt die IPv4 deines vServers.

Häufige Fehler

  • Kein Handshake. UDP 51820 ist zu, die Server-IP im Endpoint stimmt nicht, oder die öffentlichen Schlüssel sind vertauscht. Jede Seite trägt beim Peer den öffentlichen Schlüssel der anderen Seite ein.
  • Handshake ja, Ping nein. Die Adressen passen nicht zu AllowedIPs. Der Server muss beim Peer 10.8.0.2/32 haben, der PC 10.8.0.0/24.
  • wg-quick meldet „Line unrecognized“. Ein Tippfehler in wg0.conf, oft ein fehlendes =.
  • Mit 0.0.0.0/0 geht gar nichts mehr ins Internet. Weiterleitung oder NAT auf dem Server fehlt, oder der Kartenname in der PostUp-Zeile ist falsch.
  • Nach dem Neustart des Servers ist der Tunnel weg. systemctl enable wg-quick@wg0 vergessen.

Wie es weitergeht

  • Weitere Geräte bekommen je einen eigenen [Peer]-Block mit eigener Adresse, z. B. 10.8.0.3/32.
  • Die Datenbank nur im Tunnel erreichbar machen: MariaDB einrichten.

Kommst du nicht weiter, schreib uns ein Ticket.