---
title: '🔒 Virtual Private Networking'
url: 'https://niklas-stephan.de/de/wiki/free-open-source-software/virtual-private-networking'
markdown: 'https://niklas-stephan.de/de/wiki/free-open-source-software/virtual-private-networking.md'
lang: de
date: '2026-11-14'
description: '🔒 Virtual Private Networking Das VPN ist nicht mit einer DMZ zu verwechseln: Ressourcen, die wir öffentlich im Internet bereitstellen wollen, gehören in diese DMZ, welche in Kombination aus Traefik-Reverse-Proxy und einem weiteren Docker-Netzwerk bereitgestellt wird. Hier bauen wir folgendes auf: …'
---

# 🔒 Virtual Private Networking

Das VPN ist nicht mit einer DMZ zu verwechseln: Ressourcen, die wir öffentlich im Internet bereitstellen wollen, gehören in diese DMZ, welche in Kombination aus Traefik-Reverse-Proxy und einem weiteren Docker-Netzwerk bereitgestellt wird.

Hier bauen wir folgendes auf:

- Ein Wireguard-Netzwerk für die verschlüsselte Kommunikation unserer eigenen Ressourcen – VPS, Homeserver und weitere Clients.
- Ein Wireguard-Netzwerk für die verschlüsselte Kommunikation zwischen unserer VPS und dem Internet.

Beide Netze laufen virtualisiert, unabhängig und getrennt voneinander.

![](https://niklas-stephan.de/user/pages/wiki/free-open-source-software/virtual-private-networking/diagram.svg)

## Server-Setup

Auf unserer VPS erstellen wir ein eigenes internes VPN-Netzwerk mit Wireguard, bei dem die VPS als Server und der Homeserver sowie andere Geräte als Clients behandelt werden.

Außerdem bauen wir auf einem anderen Weg ein weiteres VPN auf, bei dem es darum geht, dass der VPS optional selbst eine möglichst anonyme Verbindung zu weiteren Ressourcen aus dem Internet aufbauen kann.

### Internes Netzwerk

Um ein Wireguard-VPN bereitzustellen, nutzen wir „[wg-easy](https://wg-easy.github.io/wg-easy/latest/)“, ein Tool, das als Docker-Container betrieben nicht nur einen Wireguard-Server an sich liefert, sondern auch eine Web-UI dafür und die Konfiguration vereinfacht.

Die `compose.yml` dafür sieht z. B. so aus:

```yaml
services:
    wg-easy:
        image: ghcr.io/wg-easy/wg-easy:15
        container_name: wg-easy
        environment:
            - WG_HOST=ÖFFENTLICHE-IPv4-ADRESSE-DES-SERVERS
            - WG_PORT=51820
            - WG_DEFAULT_ADDRESS=10.8.0.x # oder ein anderer Adressbereich
            - WG_DEFAULT_DNS= # ja, mit Absicht leer, damit die DNS-Config der Clients nicht überschrieben wird
            - WG_ALLOWED_IPS=10.42.42.0/24,fdcc:ad94:bacf:61a3::/64 # zusätzlicher Sicherheitsfaktor
            - INSECURE=false
        networks:
            wg:
                ipv4_address: 10.42.42.42
                ipv6_address: fdcc:ad94:bacf:61a3::2a
        volumes:
            - ./config:/etc/wireguard # für die Config
            - /lib/modules:/lib/modules:ro # für hardwarebeschleunigte Wireguard-Verschlüsselung
        ports:
            - "51820:51820/udp"  # Freigabe in der Firewall nicht vergessen!
            - "51821:51821/tcp"  # Freigabe in der Firewall nicht vergessen!
        restart: unless-stopped
        cap_add:
            - NET_ADMIN
            - SYS_MODULE
        sysctls:
            - net.ipv4.ip_forward=1
            - net.ipv4.conf.all.src_valid_mark=1
            - net.ipv6.conf.all.disable_ipv6=0
            - net.ipv6.conf.all.forwarding=1
            - net.ipv6.conf.default.forwarding=1
networks:
    wg:
        driver: bridge
        enable_ipv6: true
        ipam:
            driver: default
            config:
                - subnet: 10.42.42.0/24
                - subnet: fdcc:ad94:bacf:61a3::/64
```

Damit sich die Clients später auch verbinden können, geben wir in der Firewall unserer VPS den Wireguard-Port `51820` für UDP und den Port `51821` für TCP frei.

## Homeserver-Setup

Auf dem Homeserver setzen wir den Wireguard-Client in Form eines Docker-Containers auf.

`compose.yml`:

```yaml
services:
    wireguard:
        image: lscr.io/linuxserver/wireguard:latest
        container_name: wireguard
        cap_add:
            - NET_ADMIN
            - SYS_MODULE
        environment:
            - PUID=1000
            - PGID=1000
            - TZ=Europe/Berlin
        volumes:
            - ./config:/config
            - /lib/modules:/lib/modules:ro
        network_mode: host
        restart: unless-stopped
```

## Weitere Clients

### Linux

Für Debian-basierte Distributionen:

`client.conf`:

```ini
[Interface]
PrivateKey = PRIVATE_KEY
Address = 10.8.0.X/24
MTU = 1420
DNS =

[Peer]
PublicKey = PUBLIC_KEY
PresharedKey = PRESHARED_KEY
AllowedIPs = 10.42.42.0/24,10.8.0.0/24,fdcc:ad94:bacf:61a3::/64
PersistentKeepalive = 30
Endpoint = VPS_PUBLIC_IPv4:51820
```

## Quellen und Links

- Wireguard-Server „wg-easy“
- Wireguard-Docker-Client von linuxserver.io

---

## Navigation

- Parent: [Freie Open-Source-Software](https://niklas-stephan.de/de/wiki/free-open-source-software.md)
- Previous: [✉️ Stalwart](https://niklas-stephan.de/de/wiki/free-open-source-software/stalwart.md)
- Next: [VS Code Server](https://niklas-stephan.de/de/wiki/free-open-source-software/vs-code-server.md)
