Die nachfolgende Anleitung beschreibt die Einrichtung von WireGuard mittels eines Bounce Servers, wenn euer Heimnetz z.B. hinter einem CGNAT Netz liegt und ihr keine öffentliche IPv4 Adresse besitzt.
Was diese Anleitung nicht berücksichtigt ist:
- IPv6
- Eigener DNS Server
- Firewall-Einstellungen
- Vollständigkeit und Richtigkeit der Anleitung
Szenario:
Road Warrior (Client) <----------> Bounce Server <----------> Homebase (Client)
Für den Bounce Server benötigt ihr einen Server mit statischer IPv4 Adresse. Je nach dem was ihr alles über den VPN laufen lassen wollt, müsst ihr den Server dementsprechend dimensionieren.
Ich nutze es nur zur Administration von Systemen, daher reicht ein kleiner vServer, Cloud Sever, VPS Server aus, den es bereits bei einigen Hostern ab 1,00 € im Monat gibt.
Eine Basis-Konfiguration von WireGuard kann hier erstellt werden oder man erstellt sie gemäß der WireGuard Homepage.
Die Basis-Konfiguration muss noch um weitere Parameter ergänzt werden, was im Laufe dieser Anleitung beschrieben wird.
Diese Anleitung umfasst die Installation auf Linux Systemen. Sollte es anderes System bevorzugt werden, so ist die entsprechende Installation für das entsprechende System zu nutzen.
Fangen wir mit der Installation von WireGUard auf dem Bounce Server an:
Bounce Server (Ubuntu VPS Server):
ssh <username>@<server ip address> -p<port>
sudo -i
apt install wireguard
cd /etc/wireguard
nano wg0.conf
-> Konfiguration des Bounce Servers einfügen (siehe unten)
chown -v root:root /etc/wireguard/wg0.conf
chmod -v 600 /etc/wireguard/wg0.conf
perl -pi -e 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.ip_forward
wg-quick up wg0
systemctl enable wg-quick@wg0.service
systemctl stop wg-quick@wg0.service
systemctl start wg-quick@wg0.service
wg
reboot
Diese Konfiguration ist für den Bounce Server zu verwenden:
# WireGuard Bounce Server
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = oERIsTFWPAFUElIxSARcEV9rIkB82VhW34r/2Pn1Png=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
MTU = 1420
# Homebase Client
[Peer]
PublicKey = eONE0n/vSXiCZ50s2t2q+oM5o4Om4nRpf5smAYlkiCY=
PresharedKey = M7s1ZL6yATQrUYoOsoqTcRJGKMZDdqAglruM3vt40aw=
AllowedIPs = 10.0.0.2/32, 192.168.111.0/24
# Road Warrior Client
[Peer]
PublicKey = LILXdGf98npfHRbVBdO5hbnNzEOLFxFeYhWwOugkijY=
PresharedKey = oGvHguq4bh8Eh03D6d01oA3RMzj9/ahaoqxbH4x+eHk=
AllowedIPs = 10.0.0.3/32
Bei iptables muss ggfs. das Interface angepasst werden.
Den MTU Wert müsst ihr ermitteln. Ihr könnt ihn auch weglassen.
Meistens bieten die Provider eine vorgeschaltete Firewall an. Hier müsst ihr den WireGuard Port 51820 noch freigeben.
192.168.111.0/24 muss auf das entsprechende Subnetz des Heimnetzes geändert werden.
Anschließend kümmern wir uns die Installation um unseren Homebase (Client), als Beispiel ein Raspberry Pi in euerem Heimnetz:
Homebase (Raspberry Pi):
ssh <username>@<raspberry pi ip address>
sudo -i
apt-get install wireguard
cd /etc/wireguard
umask 077
nano wg0.conf
-> Konfiguration des Homebase Client einfügen (siehe unten)
chown -v root:root /etc/wireguard/wg0.conf
chmod -v 600 /etc/wireguard/wg0.conf
perl -pi -e 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.ip_forward
wg-quick up wg0
systemctl enable wg-quick@wg0.service
systemctl stop wg-quick@wg0.service
systemctl start wg-quick@wg0.service
wg
reboot
Diese Konfiguration ist für den WireGuard Homebase Client zu verwenden:
# Homebase
[Interface]
Address = 10.0.0.2/24
ListenPort = 51820
PrivateKey = 0AsSlkcA+Qa0V3JDJgOi2RjLLqeWvMe+0Hu+gLeWaH0=
MTU = 1420
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# WireGuard Bounce Server
[Peer]
PublicKey = X9/DTyDXAP7ejB2It7YWKw1r8P6eIqyjvi2968lKoks=
PresharedKey = M7s1ZL6yATQrUYoOsoqTcRJGKMZDdqAglruM3vt40aw=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = my_public_server_ipv4_address:51820
PersistentKeepalive = 25
Auch hier gilt Bei iptables muss ggfs. das Interface angepasst werden.
MTU anpassen, bzw. weglassen.
my_public_server_ipv4_address durch eure öffentliche IPv4 Adresse ersetzen oder ihr legt euch einen DNS Record an.
Abschließend muss noch der Road Warrior (Client) installiert und konfiguriert werden.
Hier könnt ihr wählen ob es euer Handy oder ein Laptop ist. Beachtet eindfach die dafür vorgesehene Installation und fügt die Konfiguration ein oder lasst euch die Config als QR-Code anzeigen.
Road Warrior Konfiguration:
# Road Warrior
[Interface]
Address = 10.0.0.3/24
ListenPort = 51820
PrivateKey = 0IbdT8VraNLXbYAXQBty5VirL5NWZLNuehIPkBn1rE0=
MTU = 1420
[Peer]
PublicKey = X9/DTyDXAP7ejB2It7YWKw1r8P6eIqyjvi2968lKoks=
PresharedKey = oGvHguq4bh8Eh03D6d01oA3RMzj9/ahaoqxbH4x+eHk=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = my_public_server_ipv4_address:51820
PersistentKeepalive = 25
Viel Spaß beim ausprobieren.
Uli