Wireguard
Ich betreibe Wireguard auf gehosteten Servern im Internet und verbinde Clients aus dem lokalen Netz damit, um z.B. auch Dienste, die ich lokal hoste, aus dem Internet heraus nutzen zu können. Mit dieser Lösung brauche ich meine lokalen Systeme nicht über Port-Forwarding und dynamisches DNS ins Internet zu exponieren.
Installation und Konfiguration auf dem Server
Auf dem Server im Internet richte ich den VPN-Knoten ein, der quasi die Zentrale bilden soll. Ich bezeichne das als VPN-Hub. Ich richte meine Hub auf einem Debian-Server ein, den ich natürlich vorher angemessen
sudo apt install wireguard
net.ipv4.ip_forward=1
sudo sysctl -p
sudo su
cd /etc/wireguard
umask 077; wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey
cat publickey
chmod 600 /etc/wireguard/privatekey
[Interface]
Address = 100.100.100.1/32
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE
ListenPort = 51820
PrivateKey = Private Key des Servers (s.o.)
Den Tunnel aktivieren ich mit
wg-quick up wg0
systemctl enable wg-quick@wg0
Installation und Konfiguration der (Linux-)Clients
Ich behandele hier nur die Einrichtung des VPN-Tunnels auf Linux-Clients, weil das mein vorgesehener Einsatzzweck ist. Zunächst installiere ich Wireguard ebenso wie auf dem Server und richte die Datei /etc/sysctl.conf ein (s.o.). Ebenso erstelle ich das Schlüsselpaar in dem Ordner /etc/wireguard und ändere die Berechtigung des privaten Schlüssels. Die Datei /etc/wireguard/wg0.conf sieht bei den Clients wie folgt aus:
[Interface]
PrivateKey = [Privater Schlüssel des Clients]
Address = 100.100.100.2/32
[Peer]
PublicKey = [Öffentlicher Schlüssel des Hub]
Endpoint = [Öffentliche IP-Adresse des Hub]:51820
AllowedIPs = 100.100.100.0/24
PersistentKeepalive = 25
wg-quick up wg0
systemctl enable wg-quick@wg0
Methode 1 ist, auf der Console des Hub folgenden Befehl abzusetzen:
wg set wg0 peer <öffentlicher Schlüssel des CLIENTEN> allowed-ips 100.100.100.2/32
#-------------------------------------------------------------
# Peer smb
[Peer]
PublicKey = [Öffentlicher Schlüssel des Clients]
AllowedIps = 100.100.100.2/32
wg syncconf wg0 <(wg-quick strip wg0)
Funktionstest
Nun sollte die Verbindung zwischen dem Client und dem Hub bestehen. Ich kann das testen, indem ich vom Client aus den Server und/oder vom Server aus den Client anpinge.
# vom Client aus:
ping 100.100.100.1
# vom Server aus:
ping 100.100.100.2