WireGuard (Docker) [ThoSch:Wiki]

Benutzer-Werkzeuge

Webseiten-Werkzeuge


thoschwiki:docker:apps:wireguard

WireGuard (Docker)

Die Seite befindet sich noch im Aufbau.

WireGuard ist eine Virtual-Private-Network-Software, welche als Alternative zu bekannten VPN-Lösungen wie OpenVPN und IPsec entwickelt wird. Es soll im Vergleich zu OpenVPN und IPsec einfacher zu konfigurieren sein sowie schneller und effizienter. WireGuard ist für unterschiedlichste Plattformen verfügbar. Im Gegensatz zu den anderen Lösungen basiert es nicht auf der Client-Server-Architektur, sondern auf der Peer-to-Peer-Architektur. (aus Wireguard)

Bei der Implementation in der Peer-to-Peer-Architektur benötigt jeder der Peers eine öffentliche IP-Adresse. Daher wird man in den meisten Fällen auf die Client-Server-Architektur zurückgreifen, bei der nur der Server eine öffentliche IP-Adresse benötigt.

Image
Docker Hub linuxserver/wireguard
GitHub linuxserver/docker-wireguard
Architektur x86-64, armhf, arm64
Plattform Ubuntu und Debian-basiertes Linux (einschließlich Rasbian/Rasberry OS) 1)
Software
Projekt WireGuard
weitere Informationen
WireGuard (Software)

docker run

Der Container wird wie folgt mit docker run eingerichtet und gestartet:

docker run -d \ 
  --name=wireguard \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  -e PUID=2000 \
  -e PGID=2000 \
  -e TZ=Europe/Berlin \
  -e SERVERURL=wireguard.domain.com `#optional` \
  -e SERVERPORT=51820 `#optional` \
  -e PEERS=1 `#optional` \
  -e PEERDNS=auto `#optional` \
  -e INTERNAL_SUBNET=10.13.13.0 `#optional` \
  -p 51820:51820/udp \
  -v /path/to/appdata/config:/config \
  -v /lib/modules:/lib/modules \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --restart unless-stopped \
  linuxserver/wireguard

Parameter

Dies sind die wichtigsten Parameter. Sofern sie mit einem „*“ markiert sind, sollte eine Anpassung erfolgen:

Parameter Funktion
-e PUID= * Vorgabe des Users, mit dem die Daten auf dem Docker-Host in die gemounteten Verzeichnisse geschrieben werden.
-e PGID= * Vorgabe des Gruppe, mit der die Daten auf dem Docker-Host in die gemounteten Verzeichnisse geschrieben werden.
-e TZ= * Vorgabe der lokalen Zeitzone im Format Gebiet/Ort.
-e SERVERURL Optionale URL des Wireguard-Servers
Sofern in den generierten Config-Dateien statt der IP-Adresse des Servers die URL des Servers eingetragen werden soll (z.B. Server mit einer dynamischen IP-Adresse, der über einen Domainnamenauflösungsdienst wie DynDNS erreichbar ist).
-e SERVERPORT Optionale Angabe des Ports, den der Container für den Server verwendet.
Sofern der published Port des Containers (Parameter --publish oder -p bzw. Ports-Array der docker-compose) geändert wird, muss dieser Parameter entsprechend angepasst werden.
-e PEERS Anzahl der Peers, für die eine Konfiguration generiert wird (wenn ungleich Null, läuft Wireguard im Server-Mode
-e PEERDNS Default ist 'auto' (DNS-Servereinstellenungen des Docker-Host werden verwendet), Es kann hier die IP-Adresse eines abweichenden DNS-Servers eingetragen werden.
-e INTERNAL_SUBNET IP-Subnet, aus dem die IP-Daressen der Peers und ggf. des Servers vergeben werden.
Eine Änderung ist nur notwendig, wenn das Subnet bereits anderweitig verwendet wird (z.B. mehrere WireGuard-Instanzen).
-p Vorgabe der Ports (bei mehreren WireGuard-Instanzen auf dem Node ist zwingend der externe Port anzupassen. Der Zusatz /udp steuert, dass nur UDP-Pakete geoutet werden.
Sofern der published Port des Servers geändert wird, muss der Parameter -e SERVERPORT entsprechend angepasst werden.
-v * Volumes, siehe Unterabschnitt Volumes

Volumes

In der Konfiguration werden Volumes in der Regel im folgenden Format angegeben:

<Pfad auf dem Host>:<Pfad im Container>[:<Optionen>]

Die Volumes haben die folgenden Funktionen (maßgeblich ist der Pfad im Container):

Pfad im Container Funktion
/config Ablageort der Konfigurationsdateien
/lib/modules Pfad auf das Verzeichnis mit den Kernel-Modulen des Host (üblicherweise /lib/modules)
Der Container greift auf die WireGuard-Kernel-Module des Hosts zu. Sofern diese nicht vorhanden sind, versucht der Container diese im Verzeichnis auf dem Host zu installieren.

docker-compose

Der Container wird wie folgt in der docker-compose.yml konfiguriert:

docker-compose.yml
version: "2.1"
services:
  wireguard:
    image: linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=2000
      - PGID=2000
      - TZ=Europe/Berlin
      - SERVERURL=wireguard.domain.com #optional
      - SERVERPORT=51820 #optional
      - PEERS=1 #optional
      - PEERDNS=auto #optional
      - INTERNAL_SUBNET=10.13.13.0 #optional
    volumes:
      - /path/to/appdata/config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Integration in Træfik

Es liegen noch keine Erfahrungen mit der Integration eines WireGuard-Containers in ein Træfik-Setup vor. Eine entsprechende Konfiguration ist zz. auch nicht geplant, weil m.E. die Schlüssel in der Konfiguration eine ausreichende Sicherung garantieren sollten und im Regelfall der Aufruf des WireGuard-Servers über die Vorgabe der IP-Adresse erfolgt.

Konfiguration der Anwendung

Abschnitt wird noch ergänzt.
Das Generieren der Konfiguration erfolgt mit der Funktion generate_confs () im Init-Script /etc/cont-init.d/30-config2)
1)
Ja, Ubuntu ist auch nur ein Debian-basiertes Linux, aber in der README wird es expliziert so ausgeführt.
thoschwiki/docker/apps/wireguard.txt · Zuletzt geändert: 20.03.2021 20:28 von thosch