Einrichten von Wireguard VPN auf CentOS 8

Wireguard ist eine plattformübergreifende Open-Source-VPN-Implementierung, die modernste Kryptographie verwendet. Sie ist schneller, einfacher und funktionaler als die Protokolle IPSec und OpenVPN. Es ist als Allzweck-VPN für eingebettete Schnittstellen und Supercomputer konzipiert und läuft auf Linux, Windows, MacOS, iOS, Android, BSD und verschiedenen anderen Plattformen.

Dieses Tutorial behandelt die Installation von Wireguard VPN auf einem CentOS 8-basierten Server und die Verbindung zu diesem über einen Linux(CentOS/Fedora/Ubuntu)-Client.

Schritt 1 – System aktualisieren

Bevor Sie fortfahren, ist es unbedingt erforderlich, Ihr System zu aktualisieren, um die neuesten Updates zu installieren.

$ sudo dnf update

Schritt 2 – Installieren und Aktivieren von EPEL Repo

Die erforderlichen Wireguard-Pakete sind im EPEL-Repository zu finden, so dass wir es installieren und aktivieren müssen.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Wir haben auch das PowerTools-Repository aktiviert, da die EPEL-Pakete davon abhängen.

Schritt 3 – Wireguard installieren

Aktivieren Sie das Wireguard-Repository.

$ sudo dnf copr enable jdoss/wireguard

Installieren Sie Wireguard.

$ sudo dnf install wireguard-dkms wireguard-tools

Dieser Schritt installiert auch den GNU GCC-Compiler, der zum Bau der Linux-Kernel-Module benötigt wird.

Schritt 4 – Konfigurieren des Wireguard-Servers

Erstellen Sie auf dem Server eine leere Konfigurationsdatei für Wireguard-Einstellungen mit den entsprechenden Berechtigungen.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Der Befehl Touch erstellt die Datei wg0-server.conf im Verzeichnis /etc/wireguard.

Als nächstes erstellen Sie ein privat/öffentliches Schlüsselpaar für den Wireguard-Server.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Dadurch werden sowohl öffentliche als auch private Schlüssel für das Wireguard erzeugt und in die entsprechenden Dateien geschrieben.

Sehen Sie sich den privaten Schlüssel an, den wir gerade erstellt haben.

$ sudo cat privatekey

Notieren Sie sich den Schlüssel und kopieren Sie ihn, da wir ihn zur Konfiguration von Wireguard benötigen.

Als nächstes bearbeiten Sie die Konfigurationsdatei.

$ sudo nano /etc/wireguard/wg0.conf

Fügen Sie den folgenden Code hinzu.

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Jede Konfiguration hat einen Abschnitt namens [Interface], in dem der Server-Teil definiert ist.

Er enthält den privaten Schlüssel des lokalen WireGuard-Servers, den UDP-Port, den er auf eingehende Verbindungen abhören soll, und seine eigenen VPN-IP-Adressen.

Wir setzen auch SaveConfig auf true. Dadurch wird der Wireguard-Dienst angewiesen, seine aktive Konfiguration beim Herunterfahren automatisch in dieser Datei zu speichern.

Drücken Sie Strg + W, um die Datei zu schließen, und geben Sie Y ein, wenn Sie aufgefordert werden, die Datei zu speichern.

Schritt 5 – Konfigurieren der Firewall

Wir müssen den Port öffnen, den wir für Wireguard gewählt haben.

Zuerst müssen wir den Wireguard-Dienst für die Firewall definieren. Dazu erstellen Sie eine Datei wireguard.xml mit dem Nano-Editor.

$ sudo nano /etc/firewalld/services/wireguard.xml

Fügen Sie den folgenden Code in die Datei ein.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 37822 for client connections</description>
  <port protocol="udp" port="37822"/>
</service>

Drücken Sie Strg + W, um die Datei zu schließen, und geben Sie Y ein, wenn Sie aufgefordert werden, die Datei zu speichern.

Aktivieren Sie dann den Wireguard-Dienst in der Firewall.

$ sudo firewall-cmd --permanent --add-service=wireguard

Schalten Sie das Masquerading ein, so dass der gesamte Verkehr, der von 192.168.10.0/24 ein- und ausgeht, über unsere öffentliche IP-Adresse des Servers 203.1.114.98/24 geleitet wird.

$ sudo firewall-cmd --permanent --add-masquerade

Laden Sie schließlich die Firewall neu, um die Regeln zu aktivieren.

$ sudo firewall-cmd --reload

Listen Sie die aktuellen Firewall-Regeln zur Bestätigung auf.

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Schritt 6 – IPv4-Weiterleitung einschalten

Erstellen Sie eine /etc/sysctl.d/99-custom.conf Datei.

$ sudo nano /etc/sysctl.d/99-custom.conf

Fügen Sie den folgenden Code in die Datei ein.

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Drücken Sie Strg + W, um die Datei zu schließen, und geben Sie Y ein, wenn Sie zum Speichern der Datei aufgefordert werden.

Der Umfang des Codes in der obigen Datei liegt außerhalb des Anwendungsbereichs dieses Tutorials, daher verwenden Sie ihn vorerst einfach so, wie er ist.

Laden Sie die Änderungen erneut.

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

Standardmäßig lässt die Firewall nicht zu, dass die Schnittstellen wg0 und eth0 miteinander kommunizieren. Wir müssen also die Wireguard-Schnittstelle zum internen Netzwerk hinzufügen und das Masquerading einschalten.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Schritt 7 – Aktivieren und Starten des Wireguard-Dienstes

Als nächstes müssen wir den Wireguard-Dienst aktivieren und starten.

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

Mit dem folgenden Befehl können Sie überprüfen, ob die Wireguard-Schnittstelle, wg0, eingerichtet ist und läuft.

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Schritt 8 – Installieren und Konfigurieren des WireGuard-Clients

Die Installationsanleitung für den Wireguard-Client für Ihre Linux-Distribution finden Sie auf deren offizieller Installationsseite.

Sobald Sie den Client installiert haben, müssen Sie die Client-Konfigurationsdatei erstellen.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

Beachten Sie den privaten Schlüssel, den Sie am Ende erhalten. Als nächstes müssen wir die soeben erstellte Konfigurationsdatei bearbeiten.

$ sudo nano /etc/wireguard/wg0.conf

Fügen Sie der Datei die folgenden Anweisungen hinzu.

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Beachten Sie, dass wir die private IP 192.168.10.1 dem Server und 192.168.10.2 dem Client zugewiesen haben. Wir haben der Datei auch den privaten Schlüssel des Clients hinzugefügt.

Im Abschnitt [Peer] geben Sie die Konfiguration des Servers ein, zu dem sich der Client verbinden wird. Hier haben wir den öffentlichen Schlüssel, die öffentliche IP und einen Satz Erlaubte IPs hinzugefügt, der die private IP unseres Servers enthält. PersistentKeepalive weist WireGuard an, alle 15 Sekunden ein UDP-Paket zu senden, dies ist nützlich, wenn Sie sich hinter einem NAT befinden und die Verbindung am Leben erhalten wollen.

Drücken Sie Strg + W, um die Datei zu schließen, und geben Sie Y ein, wenn Sie aufgefordert werden, die Datei zu speichern.

Jetzt ist es an der Zeit, den VPN-Client zu aktivieren und zu starten.

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl status wg-quick@wg0

Schritt 9 – Server zum Hinzufügen des Clients konfigurieren

Jetzt müssen wir die Konfiguration des Clients wieder zum Server hinzufügen, um ihn über den Client zu informieren.

Stoppen Sie zuerst den Wireguard-Dienst.

$ sudo systemctl stop wg-quick@wg0

Öffnen Sie die Datei wg0.conf zum Bearbeiten.

$ sudo nano /etc/wireguard/wg0.conf

Fügen Sie den folgenden Code am Ende der Datei an.

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Drücken Sie Strg + W, um die Datei zu schließen, und geben Sie Y ein, wenn Sie aufgefordert werden, die Datei zu speichern.

Die Abschnitte [Peer] definieren die anderen Mitglieder des VPN-Netzwerks. Sie können so viele wie nötig hinzufügen.

Sie enthalten ihren öffentlichen Schlüssel, der mit dem privaten Schlüssel der Peers im Abschnitt [Interface] übereinstimmen muss.

Beachten Sie, dass jede eingehende Verbindung zunächst anhand eines der öffentlichen Schlüssel authentifiziert wird. Wenn die Verbindung nicht von einem verifizierten Peer stammt, werden die eingehenden Pakete einfach stillschweigend ignoriert. Da Verbindungen von Hosts, die keinen passenden privaten Schlüssel besitzen, überhaupt nicht beantwortet werden, bietet ein WireGuard VPN nicht nur verschlüsselte Kommunikation, sondern bleibt auch für Außenstehende verborgen.

Starten Sie den Wireguard-Dienst erneut.

$ sudo systemctl start wg-quick@wg0

Schritt 10 – Test

Lassen Sie uns überprüfen, ob sowohl der Client als auch der Server über VPN sicher verbunden sind. Um die Verbindung zu testen, führen Sie die folgenden Befehle auf Ihrem Client aus.

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Schlussfolgerung

Das ist alles, was es zu diesem Tutorial gibt. Sie sollten nun über einen Wireguard basierten VPN-Server verfügen, der auf einem CentOS 8 Server basiert. Wenn Sie Fragen haben, stellen Sie diese in den Kommentaren unten.

Das könnte dich auch interessieren …