Published on

Wireguard - VPN Server mit Docker und Traefik aufsetzen

Authors
  • avatar
    Name
    Tobias Steltner
    Twitter

Intro

In Zeiten zunehmender Überwachung und Datenunsicherheit im Internet ist der Einsatz eines VPNs (Virtual Private Network) eine effektive Methode, um deine Privatsphäre zu schützen.

Ein VPN verschlüsselt deinen gesamten Internetverkehr und leitet ihn über einen sicheren Server, was nicht nur deine Daten schützt, sondern auch deine Online-Aktivitäten anonymisiert.

Die beste Kontrolle und Sicherheit erhältst du jedoch, wenn du deinen eigenen VPN-Server betreibst. In diesem Artikel zeige ich dir, wie du auf einem Hetzner-Server einen WireGuard VPN-Server mit WG-Easy einrichtest.

Warum ein VPN nutzen und selbst hosten?

  1. Erhöhte Sicherheit: Mit einem VPN wird dein Internetverkehr verschlüsselt, was dich vor Hackern und neugierigen Blicken schützt, besonders in öffentlichen Netzwerken.

  2. Kontrolle über deine Daten: Durch den Betrieb eines eigenen VPN-Servers hast du die volle Kontrolle über die Protokolle und Einstellungen, wodurch du sicherstellen kannst, dass keine Dritten Zugriff auf deine Daten haben.

  3. Anonymität und Datenschutz: Dein echter Standort wird verborgen, und du surfst anonym im Internet, was deine Privatsphäre erheblich verbessert.

  4. Kosteneffizienz: Langfristig kann ein selbst gehosteter VPN-Server günstiger sein als Abonnements bei kommerziellen VPN-Anbietern.

Voraussetzungen

Bevor wir mit der Installation beginnen, stelle sicher, dass du folgende Voraussetzungen erfüllst:

  • Hetzner Cloud Konto: Melde dich bei Hetzner an und erstelle einen Cloud-Server. Der kleinste V-Server reicht hier aus (aktuell CX22 für 4.51€).
  • Docker installieren: Du solltest Docker installieren auf deinem Server.
  • SSH-Zugang: Stelle sicher, dass du SSH-Zugriff auf deinen Hetzner-Server hast.
  • Domain (optional): Falls du deinen VPN-Server über eine benutzerfreundliche URL erreichen möchtest, kannst du eine Domain einrichten und auf deinen Server verweisen. Es würde aber auch eine DynDNS bei zB. ipv64.net ausreichen.
  • Traefik installieren: Es wird empfohlen, auf dem Server Traefik zu installieren, welches die Funktion eines Reverse Proxys übernimmt. Ich empfehle die Anleitung von goneuland.de

Installation von WG-Easy auf deinem Hetzner-Server

1. Vorbereiten des Servers

Bei der Konfiguration des Servers bei Hetzner ist es empfehlenswert, Ubuntu 24.04 als Betriebssystem und unter "Apps" Docker CE zu wählen. Dadurch kann die Installation von Docker vermieden werden.

Des Weiteren sei darauf verwiesen, dass die Verwendung eines SSH-Keys zu empfehlen ist.

Verbinde dich per SSH mit deinem Hetzner-Server:

1.1 SSH Starten

ssh
ssh root@deine-server-ip

1.2 Server aktualisieren

update
apt update && apt upgrade -y

1.2 Erstellen eines Sudo-Users für Docker

Nach der Installation von Docker ist es ratsam, die Docker-Befehle nicht als root auszuführen, sondern einen normalen Benutzer mit den entsprechenden Berechtigungen zu verwenden.

Hier erfährst du, wie du einen sudo-User für Docker erstellst:

user-anlegen
adduser <username> #wähle einen usernamen

Folge den Anweisungen, um ein Passwort zu setzen und die Benutzerinformationen zu konfigurieren.

Füge den Benutzer zur Docker-Gruppe hinzu

Damit der Benutzer Docker-Befehle ohne sudo ausführen kann, muss er zur Docker-Gruppe hinzugefügt werden:

usermod
usermod -aG docker <username> #wähle dein usernamen

Der Benutzer muss sich ab- und wieder anmelden, damit die Gruppenänderungen wirksam werden. Alternativ kannst du den neuen Benutzer mit folgendem Befehl anmelden:

su
su - <username> #wähle dein usernamen

Um zu überprüfen, ob der Benutzer die Docker-Befehle ohne sudo ausführen kann, führe einen einfachen Docker-Befehl aus:

docker-ps
docker ps

Wenn der Befehl ohne Fehlermeldung ausgeführt wird, hat der Benutzer erfolgreich die erforderlichen Berechtigungen.

2. wg-easy installieren

2.1 Ordnerstruktur anlegen

Erstelle ein Verzeichnis für WG-Easy und wechsle in dieses Verzeichnis:

mkdir&cd
mkdir -p /opt/containers/wg-easy && cd /opt/containers/wg-easy

2.2 Compose Datei anlegen

Erstelle eine docker-compose.yml Datei mit folgendem Inhalt:

create-docker-compose.yml
nano docker-compose.yml

Inhalt:

wg-easy-container-mit-traefik
---
services:
  wg-easy:
    environment:
      - WG_HOST=vpn.deinedomain.com
      - PASSWORD_HASH=
      - WG_PORT=51820
      - WG_DEFAULT_DNS=1.1.1.1

    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    volumes:
      - .:/etc/wireguard
    ports:
      - "51820:51820/udp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.wireguard.entrypoints=websecure"
      - "traefik.http.routers.wireguard.rule=Host(`vpn.deinedomain.com`)"
      - "traefik.http.routers.wireguard.tls=true"
      - "traefik.http.routers.wireguard.tls.certresolver=http_resolver"
      - "traefik.http.routers.wireguard.service=wireguard"
      - "traefik.http.services.wireguard.loadbalancer.server.port=51821"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.wireguard.middlewares=default@file"
    networks:
      - proxy
networks:
  proxy:
    external: true

2.3 Anpassungen durchführen

  • WG_HOST ändern
  • Domain bei Traefik anpassen (vpn.deinedomain.com)"
  • PASSWORD_HASH erstellen
2.3.1 Passwort Hash generieren
Hash
docker run ghcr.io/wg-easy/wg-easy wgpw deinpasswort | sed 's#\$#\$\$#g' | sed "s/'//g"

Ausgabe:
PASSWORD_HASH=$$2a$$12$$j6mIa4b0WVSspCH8w801sur6Exk.h41K9uEH0138qVAflH/TZbvAe

Kopiert nun diese ganze Ausgabe Zeile und setzt diese in die docker-compose.yml Datei ein.

2.4 Starte den Container

start-container
docker-compose up -d

3. Zugang Testen

Nun warten wir mal ca. 2 Minuten, dann solltest du unter vpn.deinedomain.com dein Loginscreen von wg-easy sehen.