Paket installieren
apt install wireguard
cd /etc/wireguard
Alle nachfolgenden Kommandos im Ordner /etc/wireguard durchführen
Ordner für die Clients anlegen
mkdir clients
Ordner für die Certs anlegen
mkdir ssl
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 Zertifikat erstellen
wg genkey | tee ssl/client1_private.key
Client Pubkey erstellen
cat ssl/client1_private.key | wg pubkey | tee ssl/client1_public.key
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