Wireguard Tunnel
Das neue Wireguard erlaubt ähnlich wie OpenVPN Tunnel einzurichten. Die Konfiguration ist einfacher, es gibt weniger Optionen. Die Installation erfolgt über den Paketmanager.
apt-get install wireguard wireguard-tools systemd-resolved ndppd
Für Wireguard nutze ich den Resolver von systemd. Damit die Änderungen dauerhaft bleiben, wird der symbolische Verweis /etc/resolv.conf entfernt und öffentliche Nameserver eingetragen, in diesem Fall die von quad9.
cd /etc
rm resolv.conf
cat << EOF >> resolv.conf
nameserver 9.9.9.9
nameserver 2620:fe::fe
EOF
Erstellen der Schlüssel
Die notwendigen Schlüssel sind schnell erstellt.
cd /etc/wireguard
umask 077
wg genkey > private.key
wg pubkey < private.key > public.key
wg genkey > preshared.key
IP-Adressen und Geräte
Für die korrekte Konfiguration wird das öffentliche Netzwerkgerät sowie dessen IPv6-Adresse benötigt. Damit können wir den Tunnel für beide IP-Protokolle einrichten.
ip address
ip route
liefert das Netzgerät sowie die Standardroute. Als internes Netz verwende ich 10.14.0.0/24, die Konfiguration für den Server besteht aus nur wenigen Zeilen. Als DNS-Server verwende ich die Dienste von quad9, man kan natürlich einen eigenen Server aufsetzen oder andere benutzen.
| öffentliche Adressen | IPv4: 162.55.64.197 IPv6: 2a01:4f8:171:2ea9::2 |
| öffentliche Schnittstelle | enp6s0 |
| VPN Netz | IPv4: 10.14.0.0/24 IPv6: 2a01:4f8:171:2ea9::abcd:1/128 |
| VPN Server | IPv4: 10.14.0.1/24 IPv6: 2a01:4f8:171:2ea9::abcd:1/128 |
| VPN Client 1 | IPv4: 10.14.0.101/24 IPv6: 2a01:4f8:171:2ea9::abcd:101/128 |
Mit den Schlüsseln und den IP-Adressen kann die Konfiguration für den Server erstellt werden.
[Interface]
Address = 10.14.0.1/24, 2a01:4f8:171:2ea9::abcd:1
ListenPort = 51820
PrivateKey = <privater Schlüssel>
DNS = 9.9.9.9,2620:fe::fe
[Peer]
PublicKey = <öffentlicher Schlüssel>
PresharedKey = <gemeinsamer Schlüssel>
AllowedIPs = 10.14.0.101/32, 2a01:4f8:171:2ea9::abcd:101/128
Der Dienst kann nun gestartet werden.
systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service
systemctl status wg-quick@wg0.service
Konfiguration für den Client erzeugen
Jeder Nutzer, der sich mit dem VPN-Netz verbinden möchte, benötigt ebenfalls eine Konfiguration. Beispielhaft wird hier ein Client eingerichtet. Jeder Nutzer muss auch einen Eintrag in der Serverkonfiguration als Block [Peer] haben.
[Interface]
Address = 10.14.0.101/24,2a01:4f8:171:2ea9::abcd:101/128
ListenPort = 51820
PrivateKey = <privater Schlüssel>
DNS = 91.239.100.100
[Peer]
PublicKey = <öffentlicher Schlüssel>
PresharedKey = <gemeinsamer Schlüssel>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = lars-mucha.de:51820
Anpassen der Firewall
Mit der Firewall ufw sind noch wenige Regeln einzurichten.
#enp6s0s ist das öffentliche Netzwerkgerät
ufw allow 51820/udp
ufw allow on wg0
ufw allow in on wg0 from any
ufw allow all on wg0
ufw allow on wg0
ufw route allow in on wg0 out on enp6s0
ufw route allow in on wg0
ufw route allow out on wg0
Neighbor Discovery Protocol Proxy Daemon
Damit die Mac-Adressen zu IPv6-Adressen weitergeleitet werden, wird der Proxy ndppd benötigt. Anfragen aus dem Tunnel werden dann an die Standardschnittstelle des Servers weitergeleitet. Die Datei /etc/ndppd.conf sieht in meinem Beispiel wie folgt aus:
proxy enp6s0 {
rule 2a01:4f8:171:2ea9::abcd:0/112; {
iface wg0
}
}