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
    }
}