L2TP/IPsec VPN mit Docker in wenigen Minuten
Manchmal braucht es ein klassisches VPN-Protokoll – sei es für ältere Geräte, native VPN-Clients in Windows/macOS oder als schnelle Zwischenlösung. Mit dem Docker-Image teddysun/l2tp kann man in kürzester Zeit einen L2TP/IPsec-Server aufsetzen – ohne mühsame manuelle Konfiguration auf dem Host.
Hier zeige ich dir, wie du mit Docker Compose einen funktionsfähigen VPN-Server aufbaust – sicher, modular und updatefähig.
Der docker-compose Stack
version: "2"
services:
l2tp:
image: teddysun/l2tp:3.32
container_name: l2tp_ipsec_vpn
restart: always
environment:
- VPN_IPSEC_PSK=<secret-key>
- VPN_USER=Nucleus3347
- VPN_PASSWORD=<secret-key>
- VPN_PUBLIC_IP=
- VPN_L2TP_NET=
- VPN_L2TP_LOCAL=
- VPN_L2TP_REMOTE=
- VPN_XAUTH_NET=
- VPN_XAUTH_REMOTE=
- VPN_DNS1=9.9.9.9
- VPN_DNS2=149.112.112.112
- VPN_SHA2_TRUNCBUG=
labels:
- "com.centurylinklabs.watchtower.enable=true"
ports:
- '500:500/udp'
- '4500:4500/udp'
volumes:
- /opt/docker/volumes/l2tp_modules:/lib/modules
privileged: true
Konfigurationsparameter im Überblick
| Variable | Beschreibung |
|---|---|
VPN_IPSEC_PSK |
Der Pre-Shared Key für die IPsec-Verbindung |
VPN_USER |
Benutzername für die VPN-Einwahl |
VPN_PASSWORD |
Passwort für den gewählten Benutzer |
VPN_PUBLIC_IP |
Öffentliche IP oder Domain deines VPN-Servers (wird automatisch erkannt, wenn leer) |
VPN_L2TP_NET |
Optional: eigenes Subnetz für L2TP-Clients (z. B. 192.168.42.0/24) |
VPN_DNS1, DNS2 |
DNS-Server, die an die Clients verteilt werden (hier: Quad9) |
VPN_SHA2_TRUNCBUG |
Workaround für bestimmte Android-Clients mit SHA2-Kompatibilitätsproblemen |
Notwendige Ports
Damit Clients sich verbinden können, müssen folgende Ports (beide UDP) in der Firewall geöffnet sein:
- 500/udp (IPsec)
- 4500/udp (NAT-Traversal für IPsec)
Privileged Mode & Kernel-Module
Da das VPN IPsec verwendet, benötigt der Container erweiterte Rechte (privileged: true) sowie Zugriff auf die Kernel-Module des Hosts:
volumes:
- /opt/docker/volumes/l2tp_modules:/lib/modules
Stelle sicher, dass dein Host das Modul af_key geladen hat – z. B. über:
modprobe af_key
Updates per Watchtower
Auch hier sorgt das Label
- "com.centurylinklabs.watchtower.enable=true"
dafür, dass der Container regelmäßig von Watchtower auf neue Versionen überprüft und automatisch aktualisiert wird – ideal in Kombination mit E-Mail-Benachrichtigung.
Kompatibilität
L2TP/IPsec ist nativ unterstützt auf folgenden Plattformen:
- Windows 7–11 (ohne zusätzliche Clients)
- macOS
- Android (ab Werk)
- iOS (ab Werk)
Es ist daher ein ideales Protokoll für "Bring Your Own Device"-Szenarien oder ältere Geräte, ohne dass zusätzliche Software benötigt wird.
Sicherheitshinweise
- Vermeide den Einsatz von schwachen PSKs – verwende lange, komplexe Schlüssel (mind. 32 Zeichen)
- L2TP/IPsec gilt als veraltet, aber für bestimmte Legacy-Zwecke oder einfache Nutzungsszenarien nach wie vor nützlich
- Nutze idealerweise ein restriktives Firewall-Setup und überwache den Zugang
Fazit
Mit dem teddysun/l2tp-Image lässt sich ein VPN-Server für klassische Clients, unabhängig vom Hostsystem, extrem schnell umsetzen. Durch den Docker-Ansatz bleibt das Setup portabel, versioniert und leicht wartbar. Besonders bei Hybridumgebungen mit Windows- oder Apple-Geräten ist diese Lösung eine gute Ergänzung zu WireGuard oder OpenVPN.