# WireGuard auf Server und Client einrichten

<article id="bkmrk-diese-anleitung-besc">Diese Anleitung beschreibt die Installation und Grundkonfiguration von WireGuard auf einem Debian-Server und einem Debian-Client. Das Beispiel verwendet einen WireGuard-Server auf **UDP Port 443** und das interne VPN-Netz **172.31.255.224/27**.

## Verwendete Beispielwerte

- **Öffentliche IPv4 des Servers:** `DEINE_VPS_IP`
- **WireGuard-Port:** `443/UDP`
- **VPN-Subnetz:** `172.31.255.224/27`
- **Server-IP im Tunnel:** `172.31.255.254/27`
- **Client 1 im Tunnel:** `172.31.255.253/32`

---

## 1. WireGuard auf dem Server installieren

Auf dem Server werden die benötigten Pakete installiert und das Verzeichnis für die Konfiguration vorbereitet.

```
apt update
apt install -y wireguard-tools

install -d -m 700 /etc/wireguard
cd /etc/wireguard
umask 077
```

## 2. Schlüssel auf dem Server erzeugen

Der Server benötigt ein Schlüsselpaar. Zusätzlich wird für jeden Client ein eigener `PresharedKey` erzeugt.

```
wg genkey | tee server.key | wg pubkey | tee server.pub >/dev/null
wg genpsk | tee client1.psk >/dev/null

chmod 600 /etc/wireguard/server.key /etc/wireguard/client1.psk
chmod 644 /etc/wireguard/server.pub
```

## 3. Server-Konfiguration erstellen

Die Datei `/etc/wireguard/wg0.conf` wird auf dem Server angelegt.

```
nano /etc/wireguard/wg0.conf
```

Beispielinhalt:

```
[Interface]
Address = 172.31.255.254/27
ListenPort = 443
PrivateKey = SERVER_PRIVATE_KEY
SaveConfig = false

# Client 1
[Peer]
PublicKey = CLIENT1_PUBLIC_KEY
PresharedKey = CLIENT1_PRESHARED_KEY
AllowedIPs = 172.31.255.253/32
```

Dabei müssen die Platzhalter ersetzt werden:

- `SERVER_PRIVATE_KEY` mit dem Inhalt von `/etc/wireguard/server.key`
- `CLIENT1_PUBLIC_KEY` mit dem Public Key des Clients
- `CLIENT1_PRESHARED_KEY` mit dem Inhalt von `/etc/wireguard/client1.psk`

<div>**Hinweis:**</div>Für jeden weiteren Client wird ein zusätzlicher `[Peer]`-Block mit eigener Client-IP, eigenem Public Key und eigenem Preshared Key ergänzt. Beispiel:

```
# Client 2
[Peer]
PublicKey = CLIENT2_PUBLIC_KEY
PresharedKey = CLIENT2_PRESHARED_KEY
AllowedIPs = 172.31.255.252/32
```

## 4. WireGuard-Port in der Firewall freigeben

Damit Clients den Server erreichen können, muss der verwendete UDP-Port offen sein. In diesem Beispiel ist das `443/UDP`.

- **Server:** `443/UDP` eingehend erlauben
- **Client:** keine eingehende Freigabe nötig
- **Wichtig:** Wenn beim Hoster eine zusätzliche Firewall aktiv ist, muss dort ebenfalls `443/UDP` erlaubt werden

## 5. WireGuard auf dem Server starten

Nach dem Speichern der Konfiguration wird das Interface gestartet und beim Booten aktiviert.

```
systemctl enable --now wg-quick@wg0
systemctl status wg-quick@wg0 --no-pager
wg show
```

Falls die Konfigurationsdatei später geändert wird, muss der Dienst neu geladen werden:

```
systemctl restart wg-quick@wg0
wg show
```

---

## 6. WireGuard auf dem Client installieren

Auch auf dem Client wird zunächst WireGuard installiert und das Konfigurationsverzeichnis angelegt.

```
apt update
apt install -y wireguard-tools

install -d -m 700 /etc/wireguard
cd /etc/wireguard
umask 077
```

## 7. Schlüssel auf dem Client erzeugen

Der Client erzeugt sein eigenes Schlüsselpaar lokal. Der Private Key bleibt nur auf dem Client.

```
wg genkey | tee client1.key | wg pubkey | tee client1.pub >/dev/null
chmod 600 /etc/wireguard/client1.key
chmod 644 /etc/wireguard/client1.pub
```

Der Public Key des Clients kann angezeigt werden mit:

```
cat /etc/wireguard/client1.pub
```

Dieser Public Key wird anschließend in die Server-Konfiguration im passenden `[Peer]`-Block eingetragen.

## 8. Client-Konfiguration erstellen

Die Datei `/etc/wireguard/wg0.conf` auf dem Client anlegen:

```
nano /etc/wireguard/wg0.conf
```

Beispielinhalt für Client 1:

```
[Interface]
Address = 172.31.255.253/32
PrivateKey = CLIENT1_PRIVATE_KEY

[Peer]
PublicKey = SERVER_PUBLIC_KEY
PresharedKey = CLIENT1_PRESHARED_KEY
Endpoint = DEINE_VPS_IP:443
AllowedIPs = 172.31.255.254/32
PersistentKeepalive = 25
```

Platzhalter ersetzen:

- `CLIENT1_PRIVATE_KEY` mit dem Inhalt von `/etc/wireguard/client1.key`
- `SERVER_PUBLIC_KEY` mit dem Inhalt von `/etc/wireguard/server.pub`
- `CLIENT1_PRESHARED_KEY` mit dem Preshared Key aus `/etc/wireguard/client1.psk` vom Server
- `DEINE_VPS_IP` mit der öffentlichen IPv4-Adresse des Servers

<div>**Wichtig:**</div>In diesem Beispiel erlaubt `AllowedIPs = 172.31.255.254/32` nur den Zugriff auf die Tunnel-IP des Servers. Der gesamte Internetverkehr des Clients wird dadurch **nicht** automatisch über WireGuard geleitet.

## 9. Verbindung auf dem Client starten

Zum Testen wird das Interface zunächst manuell gestartet.

```
wg-quick up wg0
```

Status prüfen:

```
wg show
ip addr show wg0
ping -c 3 172.31.255.254
```

Verbindung wieder beenden:

```
wg-quick down wg0
```

Wenn alles funktioniert, kann WireGuard dauerhaft aktiviert werden:

```
systemctl enable --now wg-quick@wg0
systemctl status wg-quick@wg0 --no-pager
wg show
```

---

## 10. Weitere Clients hinzufügen

Für jeden weiteren Client werden dieselben Schritte wiederholt:

1. Auf dem Client eigenes Schlüsselpaar erzeugen
2. Auf dem Server einen eigenen `PresharedKey` erzeugen
3. Auf dem Server einen neuen `[Peer]`-Block anlegen
4. Dem Client eine eigene feste Tunnel-IP geben
5. Server-Dienst nach Änderungen neu starten

Beispiel für Client 2:

- **Client 2 IP:** `172.31.255.252/32`
- **Server Peer AllowedIPs:** `172.31.255.252/32`

---

## 11. Typische Fehlerquellen

- Server-Konfiguration geändert, aber `systemctl restart wg-quick@wg0` vergessen
- Falsche Tunnel-IP angepingt
- Falscher oder vertauschter Public/Private Key
- Falscher oder fehlender `PresharedKey`
- `443/UDP` beim Hoster oder auf dem Server nicht freigegeben
- Falsche öffentliche IPv4 im `Endpoint`

## 12. Kurzfassung

1. Server installieren und Schlüssel erzeugen
2. Server-Config mit `[Interface]` und `[Peer]` erstellen
3. `443/UDP` freigeben
4. Server mit `wg-quick@wg0` starten
5. Client installieren und eigenes Schlüsselpaar erzeugen
6. Client-Config mit Server-Public-Key, Preshared Key und `Endpoint` erstellen
7. Client mit `wg-quick up wg0` starten und Verbindung testen

</article>