WireGuard Server auf Linux

Paket installieren

apt install wireguard


cd /etc/wireguard

Alle nachfolgenden Kommandos im Ordner /etc/wireguard durchführen

Vorbereitungen

Ordner für die Clients anlegen

mkdir clients

Ordner für die Certs anlegen

mkdir ssl

Server Zertifikate

Server Zertifikat erstellen

wg genkey | tee ssl/server_private.key
chmod 600 ssl/server_private.key

Server PublicKey erstellen

cat ssl/server_private.key | wg pubkey | tee ssl/server_public.key


Client Zertifikate

Client Zertifikat erstellen

wg genkey | tee ssl/client1_private.key

Client Pubkey erstellen

cat ssl/client1_private.key | wg pubkey | tee ssl/client1_public.key

Verbindung erstellen

Jetzt wird die Konfigurationsdatei für die Serverseite Verbindung erstellt. Hierbei werden Firewallregeln hinzugefügt, die es ermöglichen, dass die Clients sich untereinander, das Internet und des Server erreichen können. Dem Server wird der eigene Private Key bekannt gemacht, als auch **alle* Public Keys der Clients. Dateipfad ist /etc/wireguard/wg0.conf

cat << EOF > /etc/wireguard/wg0.conf
[Interface]
PrivateKey = $(cat /etc/wireguard/ssl/server_private.key)
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = sysctl net.ipv4.ip_forward=1
PostUp = iptables -A FORWARD -i $(ip a | grep 2: | head -n1 | awk '{print $2}' | awk -F: '{print $1}') -o %i -j ACCEPT
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o $(ip a | grep 2: | head -n1 | awk '{print $2}' | awk -F: '{print $1}') -j MASQUERADE
PostDown = sysctl net.ipv4.ip_forward=0
PostDown = iptables -D FORWARD -i $(ip a | grep 2: | head -n1 | awk '{print $2}' | awk -F: '{print $1}') -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o $(ip a | grep 2: | head -n1 | awk '{print $2}' | awk -F: '{print $1}') -j MASQUERADE

[Peer]
PublicKey = $(cat /etc/wireguard/ssl/client1_public.key)
AllowedIPs = 10.0.0.2/32
EOF


Das Ergebnis sollte ungeähr so aussehen

[Interface]
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Private Key des Servers
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = sysctl net.ipv4.ip_forward=1
PostUp = iptables -A FORWARD -i ens6 -o %i -j ACCEPT
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE
PostDown = sysctl net.ipv4.ip_forward=0
PostDown = iptables -D FORWARD -i ens6 -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens6 -j MASQUERADE

[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Public Key des Clients
AllowedIPs = 10.0.0.2/32


Jetzt wird pro Client eine Eigene Konfigurationsdatei erstellt. Diese Datei beinhaltet die Adresse und den PubKey des Servers. Ebenso den PrivateKey des Clients.

cat <<EOF > /etc/wireguard/clients/client1.conf
[Interface]
PrivateKey = $(cat /etc/wireguard/ssl/client_private.key)    # Client-Private-Key
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = $(cat /etc/wireguard/ssl/server_public.key)     # Server-Public-Key
AllowedIPs = 0.0.0.0/0
Endpoint = $(hostname -f):51820                             # Server Adresse
PersistentKeepalive = 15
EOF
[Interface]
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   # Client-Private-Key
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx     # Server-Public-Key
AllowedIPs = 0.0.0.0/0
Endpoint = wireguard.mydomain.de:51820               # Server Adresse                   
PersistentKeepalive = 15