Richten Sie Ihren eigenen WireGuard VPN-Server unter Debian 11 und Debian 10 ein

Basis für die Installation ist ein Debian 11 Server mit SSH Zugriff auf einem ESXI Host

Dieses Tutorial zeigt Ihnen, wie Sie Ihren eigenen WireGuard VPN-Server unter Debian 11 Bullseye und Debian 10 Buster einrichten. WireGuard wurde speziell für den Linux-Kernel entwickelt. Es läuft im Linux-Kernel und ermöglicht Ihnen die Erstellung eines schnellen, modernen und sicheren VPN-Tunnels.

Funktionen von WireGuard VPN
Leichte und superschnelle Geschwindigkeit, die OpenVPN in den Schatten stellt.
Plattformübergreifend. WireGuard kann unter Linux, BSD, macOS, Windows, Android, iOS und OpenWRT ausgeführt werden.
Die Benutzerauthentifizierung erfolgt durch den Austausch öffentlicher Schlüssel, ähnlich wie bei SSH-Schlüsseln.
Es weist VPN-Clients statische Tunnel-IP-Adressen zu. Manchen Leuten gefällt es vielleicht nicht, aber in manchen Fällen kann es nützlich sein.
Mobile Geräte können nahtlos zwischen WLAN und Mobilfunknetz wechseln, ohne dass die Verbindung unterbrochen wird.
Ziel ist es, OpenVPN und IPSec in den meisten Anwendungsfällen zu ersetzen.

Schritt 1: Installieren Sie WireGuard auf dem Debian-Server und -Desktop

Melden Sie sich bei Ihrem Debian-Server an. WireGuard ist im Debian 11 (Bullseye)-Repository enthalten, sodass Sie die folgenden Befehle ausführen können, um es zu installieren.

apt update
apt install wireguard wireguard-tools linux-headers-$(uname -r)

Debian 10-Benutzer müssen das Backport-Repository mit dem folgenden Befehl hinzufügen.

echo "deb http://deb.debian.org/debian buster-backports main" | tee /etc/apt/sources.list.d/buster-backports.list

Dann installieren Sie WireGuard.

apt update
apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)

Verwenden Sie dieselben Befehle, um WireGuard auf Ihrem lokalen Debian-Computer (dem VPN-Client) zu installieren. Beachten Sie, dass Sie auch das openresolv-Paket auf dem Client installieren müssen, um den DNS-Server zu konfigurieren.

apt install openresolv

Schritt 2: Öffentliches/privates Schlüsselpaar generieren

Führen Sie den folgenden Befehl auf dem Debian-Server aus, um ein öffentliches/privates Schlüsselpaar zu erstellen, das im Verzeichnis /etc/wireguard/ gespeichert wird.

wg genkey | tee /etc/wireguard/server_private.key | wg pubkey | tee /etc/wireguard/server_public.key

Schritt 3: WireGuard-Konfigurationsdatei erstellen

Verwenden Sie einen Befehlszeilen-Texteditor wie Nano, um eine WireGuard-Konfigurationsdatei auf dem Debian-Server zu erstellen. wg0 ist der Name der Netzwerkschnittstelle.

nano /etc/wireguard/wg0.conf

Kopieren Sie den folgenden Text und fügen Sie ihn in Ihre Konfigurationsdatei ein. Sie müssen Ihren eigenen privaten Serverschlüssel und Ihren eigenen öffentlichen Clientschlüssel verwenden.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
## Ihr eigener privater Serverschlüssel
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=

[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32

Wo:

    • Adresse: Geben Sie die private IP-Adresse des VPN-Servers an. Hier verwende ich den Netzwerkbereich 10.10.10.0/24, damit es nicht zu Konflikten mit dem Bereich Ihres Heimnetzwerks kommt. (Die meisten Heimrouter verwenden 192.168.0.0/24 oder 192.168.1.0/24). 10.10.10.1 ist die private IP-Adresse für den VPN-Server.
    • PrivateKey: Der private Schlüssel des VPN-Servers, der in der Datei /etc/wireguard/server_private.key auf dem Server zu finden ist.
    • ListenPort: Der WireGuard VPN-Server überwacht den UDP-Port 51820, was die Standardeinstellung ist.
    • PublicKey: Der öffentliche Schlüssel des VPN-Clients, der in der Datei /etc/wireguard/client_public.key auf dem Client-Computer zu finden ist.
    • AllowedIPs: IP-Adressen, die der VPN-Client verwenden darf. In diesem Beispiel kann der Client nur die IP-Adresse 10.10.10.2 innerhalb des VPN-Tunnels verwenden.

Speichern und schließen Sie die Datei.
(Um eine Datei im Nano-Texteditor zu speichern, drücken Sie Strg+O und dann die Eingabetaste zur Bestätigung. Drücken Sie Strg+X zum Beenden.)

Ändern Sie den Dateiberechtigungsmodus, sodass nur der Root-Benutzer die Dateien lesen kann.

chmod 600 /etc/wireguard/ -R

Schritt 4: Aktivieren Sie die IP-Weiterleitung auf dem Server

Damit der VPN-Server Pakete zwischen VPN-Clients und dem Internet weiterleiten kann, müssen wir die IP-Weiterleitung aktivieren. Bearbeiten Sie die Datei sysctl.conf.

nano /etc/sysctl.conf

Fügen Sie am Ende dieser Datei die folgende Zeile hinzu.

net.ipv4.ip_forward = 1

Speichern und schließen Sie die Datei. Wenden Sie dann die Änderungen mit dem folgenden Befehl an. Die Option -p lädt die Sysctl-Einstellungen aus der Datei /etc/sysctl.conf. Dieser Befehl behält unsere Änderungen über Systemneustarts hinweg bei.

sysctl -p

Schritt 5: IP-Masquerading auf dem Server konfigurieren

Wir müssen IP-Masquerading in der Server-Firewall einrichten, damit der Server zu einem virtuellen Router für VPN-Clients wird. Ich werde UFW verwenden, ein Frontend der iptables-Firewall. Installieren Sie UFW unter Debian mit:

apt install ufw

Zunächst müssen Sie SSH-Verkehr zulassen.

ufw allow 22/tcp

Suchen Sie als Nächstes den Namen der Hauptnetzwerkschnittstelle Ihres Servers.

ip addr

Auf meinem Debian-Server unter ESXI heisst es ens192.
Um die IP-Masquerading zu konfigurieren, müssen wir den Befehl iptables in einer UFW-Konfigurationsdatei hinzufügen.

nano /etc/ufw/before.rules

Standardmäßig gibt es einige Regeln für die Filtertabelle. Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu. Ersetzen Sie ens192 durch Ihren eigenen Netzwerkschnittstellennamen.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens192 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Die obigen Zeilen hängen (-A) eine Regel an das Ende der POSTROUTING-Kette der NAT-Tabelle an. Es verbindet Ihr virtuelles privates Netzwerk mit dem Internet. Und verbergen Sie Ihr Netzwerk auch vor der Außenwelt. Das Internet kann also nur die IP Ihres VPN-Servers sehen, nicht aber die IP Ihres VPN-Clients, genau wie Ihr Heimrouter Ihr privates Heimnetzwerk verbirgt.

Standardmäßig verbietet UFW die Paketweiterleitung. Wir können die Weiterleitung für unser privates Netzwerk zulassen. Suchen Sie in dieser Datei nach der ufw-before-forward-Kette und fügen Sie die folgenden drei Zeilen hinzu, die die Paketweiterleitung akzeptieren, wenn die Quell-IP oder Ziel-IP im Bereich 10.10.10.0/24 liegt.

in der gleichen Datei
/etc/ufw/before.rules

müssen noch folgende Regeln

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

nach

# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

eingetragen werden.
Speichern und schließen Sie die Datei. Aktivieren Sie dann UFW.

ufw enable

Wenn Sie UFW zuvor aktiviert haben, können Sie systemctl verwenden, um UFW neu zu starten.

systemctl restart ufw

Wenn Sie nun die Regeln in der POSTROUTING-Kette der NAT-Tabelle auflisten, indem Sie den folgenden Befehl verwenden:

iptables -t nat -L POSTROUTING

Sie könnte die Maskerade-Regel sehen.

Schritt 6: Installieren Sie einen DNS-Resolver auf dem Server.

Da wir den VPN-Server als DNS-Server für den Client angegeben haben, müssen wir einen DNS-Resolver auf dem VPN-Server ausführen. Wir können den bind9-DNS-Server installieren.

apt install bind9

Sobald es installiert ist, wird BIND automatisch gestartet. Sie können den Status überprüfen mit:

systemctl status bind9

Beispielausgabe:

named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-05-17 08:11:26 UTC; 37s ago
       Docs: man:named(8)
   Main PID: 13820 (named)
      Tasks: 5 (limit: 1074)
     Memory: 14.3M
     CGroup: /system.slice/named.service
             └─13820 /usr/sbin/named -f -u bind

Wenn es nicht läuft, starten Sie es mit:

systemctl start bind9

Bearbeiten Sie die Konfigurationsdatei des BIND-DNS-Servers.

nano /etc/bind/named.conf.options

Fügen Sie die folgende Zeile hinzu, um VPN-Clients das Senden rekursiver DNS-Abfragen zu ermöglichen.

allow-recursion { 127.0.0.1; 10.10.10.0/24; };


Speichern und schließen Sie die Datei. Bearbeiten Sie dann die /etc/default/named-Dateien.

nano /etc/default/named

Fügen Sie -4 zu den OPTIONEN hinzu, um sicherzustellen, dass BIND Root-DNS-Server abfragen kann.

OPTIONS="-u bind -4"

Speichern und schließen Sie die Datei.

Standardmäßig aktiviert BIND DNSSEC, wodurch sichergestellt wird, dass DNS-Antworten korrekt sind und nicht manipuliert werden. Aufgrund des Vertrauensanker-Rollovers und aus anderen Gründen funktioniert es jedoch möglicherweise nicht sofort. Damit es ordnungsgemäß funktioniert, können wir die verwaltete Schlüsseldatenbank mit den folgenden Befehlen neu erstellen.

rndc managed-keys destroy
rdnc reconfig

Es kann vorkommen, das der Befehl rdnc reconfig nicht gefunden wird, was nicht weiter schlimm ist. Starten Sie BIND9 neu, damit die Änderungen wirksam werden.

systemctl restart bind9

Anschließend müssen Sie den folgenden Befehl ausführen, damit VPN-Clients eine Verbindung zu Port 53 herstellen können.

ufw insert 1 allow in from 10.10.10.0/24

Schritt 7: Öffnen Sie den WireGuard-Port in der Firewall

Führen Sie den folgenden Befehl aus, um den UDP-Port 51820 auf dem Server zu öffnen.

ufw allow 51820/udp

Schritt 8: Starten Sie WireGuard

Führen Sie den folgenden Befehl auf dem Server aus, um WireGuard zu starten.

wg-quick up /etc/wireguard/wg0.conf

Um Wiregard zu stoppen, führen Sie folgendes aus

wg-quick down /etc/wireguard/wg0.conf

Sie können WireGuard auch mit dem Systemd-Dienst starten.

systemctl start wg-quick@wg0.service

Aktivieren Sie den automatischen Start beim Systemstart.

systemctl enable wg-quick@wg0.service

Überprüfen Sie den Status mit dem folgenden Befehl. Sein Status sollte aktiv (exited) sein.

systemctl status wg-quick@wg0.service

Jetzt ist der WireGuard-Server bereit, Client-Verbindungen zu akzeptieren.

Schritt 9: Client

Erstellen Sie einen Client auf dem Windows PC

hier ein Beispiel

[Interface]
PrivateKey = CMQW4OSB4DKvCJuIM5KYhRWVCLHyBu5RB/nTBFFoz1w=
Address = 10.10.10.2/24
DNS = 10.10.10.1, 1.1.1.1

[Peer]
PublicKey = Public Key Ihres Wiregard Servers
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = ihre öffentliche IP Adresse:51820
PersistentKeepalive = 25

Eintragen des Peers am Server

[Peer]
PublicKey = Public Key Ihres Clienten
AllowedIPs = 10.10.10.2/32

Sollten Sie einen weiteren Peer/Client hinzufügen, muss zwingen der Wiregard Server neu gestartet werden, damit die neuen Einstellungen greifen.
Dazu geben Sie folgende Befehle ein

wg-quick down /etc/wireguard/wg0.conf
wg-quick up /etc/wireguard/wg0.conf

Gadget

Der Konfigurationsgenerator auf dieser Webseite ermöglicht es Ihnen, mühelos alle notwendigen Schlüssel und QR-Codes direkt in Ihrem Browser zu generieren. Dieser benutzerfreundliche Ansatz vereinfacht den gesamten Vorgang erheblich, sodass Sie sich nicht mit komplexen Schritten herumschlagen müssen.

Besuchen Sie die Webseite und folgen Sie den einfachen Anweisungen, um die erforderlichen Konfigurationsdaten für Ihr Vorhaben zu erstellen. Dieser Service ist besonders nützlich für diejenigen, die eine schnelle und unkomplizierte Lösung suchen, ohne tief in die technischen Details einzusteigen.

Denken Sie daran, sicherzustellen, dass Sie vertrauenswürdige und sichere Quellen für solche Dienste nutzen. Es ist ratsam, Bewertungen zu lesen oder Empfehlungen von vertrauenswürdigen Quellen einzuholen, um sicherzustellen, dass Ihre Daten geschützt sind.

Nutzen Sie diese Webseite, um den Konfigurationsprozess zu vereinfachen und Zeit zu sparen, während Sie gleichzeitig sicherstellen, dass alle erforderlichen Schlüssel und QR-Codes korrekt generiert werden.

Konfigurationsgenerator