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.