Bei wireguard-ui handelt es sich um ein beliebtes Webinterface für Wireguard. In dieser Anleitung erstellen wir innerhalb weniger Minuten unseren eigenen Wireguard VPN Server.
Update
19.06.2022 | Erstellung dieser Anleitung. |
Wer Traefik noch nicht installiert hat, findet hier eine Anleitung, wie ihr dies schnell tun könnt.
Bei dieser Anleitungen werden wir Wireguard und wireguard-ui in zwei getrennten Containern betreiben. Dies bedeutete, dass ihr bei jeder Einstellung in Wireguard jeweils den Wireguard Container neu starten müsst. Dies ist etwas umständlich. Einfach gehts mit wg-easy. Eine Anleitung zu wg-easy findet ihr hier.
1. Ordner anlegen
Zuerst legen wir uns passende Ordner-Strukturen an.
mkdir -p /opt/containers/wireguard-ui
2. Docker Compose anlegen
Nun legen wir die eigentliche Docker Datei an. Diese dient dazu unseren späteren Container zu erstellen.
nano /opt/containers/wireguard-ui/docker-compose.yml
Inhalt:
version: "3.7" 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 - PEERS=1 #optional - PEERDNS=auto #optional - ALLOWEDIPS=0.0.0.0/0 #optional - LOG_CONFS=true #optional volumes: - ./config:/config - /lib/modules:/lib/modules ports: - 51820:51820/udp sysctls: - net.ipv4.conf.all.src_valid_mark=1 restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.wireguard.entrypoints=http" - "traefik.http.routers.wireguard.rule=Host(`wireguard.euredomain.de`)" ## Hier eure Domain eingeben ## - "traefik.http.middlewares.wireguard-https-redirect.redirectscheme.scheme=https" - "traefik.http.routers.wireguard.middlewares=wireguard-https-redirect" - "traefik.http.routers.wireguard-secure.entrypoints=https" - "traefik.http.routers.wireguard-secure.rule=Host(`wireguard.euredomain.de`)" ## Hier eure Domain eingeben ## - "traefik.http.routers.wireguard-secure.tls=true" - "traefik.http.routers.wireguard-secure.tls.certresolver=http" - "traefik.http.routers.wireguard-secure.service=wireguard" - "traefik.http.services.wireguard.loadbalancer.server.port=5000" - "traefik.docker.network=proxy" networks: - proxy wg-ui: image: ngoduykhanh/wireguard-ui:latest container_name: wg-ui cap_add: - NET_ADMIN network_mode: service:wireguard environment: - SESSION_SECRET - WGUI_USERNAME=admin - WGUI_PASSWORD=password logging: driver: json-file options: max-size: 50m volumes: - ./config:/app/db - ./config:/etc/wireguard networks: proxy: external: true
Notwendige Anpassungen:
- WGUI_USERNAME ändern
- WGUI_PASSWORD ändern
- 2x eure Domain bei Traefik anpassen („wireguard.euredomain.de“)
Diese Docker Compose Datei funktioniert nur, wenn ich euch mittels meiner Anleitung hier Traefik installiert habt. Sonst heißen einige Traefik Variablen wohl anders. Diese müsst ihr dann dementsprechend bei euch anpassen.
3. wireguard-ui starten
Nun könnt ihr wie gewohnt den Container starten:
docker-compose -f /opt/containers/wireguard-ui/docker-compose.yml up -d
Danach müsst ihr einige Minuten warten, bis die Datenbank vorbereitet ist.
Nun geht ihr auf folgende Webseite: wireguard.euredomain.de
Hier solltet ihr nun folgendes sehen:
Anschließend loggt ihr euch mit euren Zugangsdaten aus der Docker Compose Datei ein. Nun gebt ihr wieder eure URL ein (wireguard.euredomain.de) und solltet folgendes sehen:
4. Wireguard Einstellungen anpassen
Wir nutzen hier 2 Container. Ein Container für Wireguard und ein Container für Wireguard-UI. Daher müsst ihr nachdem ihr irgendwelche Einstellungen in Wireguard-UI getätigt habt, immer den Wireguard Container neu starten, damit dieser diese Einstellungen übernimmt.
Klickt nun auf “Wireguard Server”.
4.1 Server Interface festlegen
Dazu löscht ihr die bereits eingestellte Adresse und fügt eine neue hinzu. Ihr könnt hier eure eigene Adresse / Bereich verwenden oder einfach meinen Bereich.
Nachher:
4.2 Post Up / Down Skript anpassen
Etwas tiefer seht ihr das Post Up / Down Skript.
Hier kopiert ihr nun folgendes hinein:
Post Up iptables -A FORWARD -i %1 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE Post Down iptables -D FORWARD -i %1 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE
Anschließend klickt ihr auf “Save”.
4.3 Key Pair generieren
Nun generieren wir uns ein neues Key Paar. Dazu klickt ihr auf der rechten Seite auf “Generate”.
Nach diesen Einstellungen müsst ihr oben auf “Apply Config” klicken.
Diese Meldung müsst ihr nun noch bestätigen.
5. Einstellungen kontrollieren
Nun kontrollieren wir, ob die Einstellungen korrekt durchgeführt wurden. Dazu öffnet ihr auf eurem Server folgende Datei:
nano /opt/containers/wireguard-ui/config/wg0.conf
In der Datei solltet ihr nun euer Einstellungen wiederfinden.
6. Container neu starten
Damit Wireguard nun die Einstellungen übernimmt, müssen wir den Container neu starten. Der Einfachheit wegen starten wir beide Container neu. Dazu gebt ihr folgendes ein:
docker-compose -f /opt/containers/wireguard-ui/docker-compose.yml down docker-compose -f /opt/containers/wireguard-ui/docker-compose.yml up -d
7. Clients anlegen
Nachdem wir nun unseren Server konfiguriert haben, können wir unseren ersten Client anlegen. Dazu klickt ihr auf “New Client” oben rechts.
Nun solltet ihr folgende Auswahl sehen:
Hier müsst ihr einfach nun einen Namen eingeben und dann auf “Submit” klicken.
Mein Client wurde nun erstellt.
Jetzt klickt ihr wieder oben rechts auf “Apply Config”.
8. Container neu starten
Damit Wireguard nun die Einstellungen übernimmt, müssen wir den Container neu starten. Der Einfachheit wegen starten wir beide Container neu. Dazu gebt ihr folgendes ein:
docker-compose -f /opt/containers/wireguard-ui/docker-compose.yml down docker-compose -f /opt/containers/wireguard-ui/docker-compose.yml up -d
9. Mit Wireguard verbinden
Ich installiere mir den Wireguard Windows Client (https://www.wireguard.com/install/). Ihr könnt aber auch jeden anderen Client nutzen.
Anschließend lade ich mir meine Konfigurationsdatei herunter. Ebenfalls könnt ihr euch den QR Code anzeigen lassen, falls ihr euch mittels Smartphone verbinden wollt.
Nun starte ich Wireguard und wähle “Importiere Tunnel aus Datei” aus.
Nachdem ihre eure Konfiguration importiert habt, solltet ihr folgendes sehen:
Hier müsst ihr nun nur noch auf “Aktivieren” klicken. Jetzt sollte eure Wireguard VPN Verbindung erfolgreich hergestellt sein.
Dies solltet ihr auch im Webinterface sehen:
10. Quellen
https://github.com/ngoduykhanh/wireguard-ui
Danke
Christian für das hilfreiche Tutorial und an Euch für die guten Hinweise (DannyS – danke)!
Ich hab’s mit ein paar Änderungen auch auf ARM64 zum Laufen bringen können.
Es läuft noch sehr wackelig bei mir und ich hoffe die Reboots zukünftig minimieren zu können um letztendlich einen stabilen VPN-Betrieb zu erreichen.
Frage: Kann man eigentlich auch einen SSH login tunneln, sodass man nur über die VPN den Server per SSH erreichen kann, aber nicht der SSH-Port direkt dem Rest des Internets angeboten wird? Gibt es hier ein passendes UFW-Setting?
moin
ich bin deiner anleitung gefolgt und habe die notwendigen anpassungen getätigt.
der wireguard container läuft aber der wg-ui container zeigt in den logs nur ein “exec ./wg-ui: exec format error”
wie kann ich das korrigieren? docker ist auf version 20.10.19 und docker-compose auf 1.29.2
Hallo,
super Anleitung! Bei mir hat es jedoch erst funktioniert, nachdem ich im Schritt 4.2 in den Post Up und Post Down Scripts aus eth+ ein eth0 gemacht habe. Vorher kam der Tunnel zwar zustande aber es konnte nicht über das Interface auf das Internet zugegriffen werden.