meta data for this page
Wireguard machen
Eine kleine Anleitung, um Wireguard mit Linux zu verdrahten. Leider nur mit Legacy IPv4 ().
Die beiden Knoten, die verbunden werden sollen, heißen node1 und node2. Bei Wireguard sind diese gleichberechtigt.
Voraussetzungen
- Linux
- Debian: linux-headers
- Grund: Das Kernelmodul muss noch gebaut werden
Installation
Debian
Falls noch kein linux-headers installiert ist:
# apt install linux-headers-amd64
Ansonsten:
# apt install wireguard
Arch
# pacman -S wireguard-tools wireguard-arch
Schlüsselpaar erstellen
Jetzt werden die für die Verschlüsselung nötigen Private-Public-Keypairs erzeugt. Aufpassen, dass man den Private-Key nicht aus Versehen global lesbar macht!
Auf beiden Nodes:
# wg genkey > /root/wg.priv # chmod 700 /root/wg.priv # wg pubkey < /root/wg.priv > /root/wg.pub
Netzwerkgerät erstellen
Die Netzwerkgeräte müssen ebenfalls auf beiden Hosts angelegt werden.
Zuvor sollte man sicherstellen, dass das Kernelmodul wireguard geladen wurde. Falls nicht:
# modprobe wireguard
Das Wireguard-Interface kann per ip-Kommando hinzugefügt werden. Die IP-Adresse kann man auch gleich setzen. Die Netzwerkgeräte bei Wireguard heißten üblicherweise wgX:
node1# ip link add dev wg0 type wireguard node1# ip address add 10.0.12.1/24 dev wg0 node2# ip link add dev wg0 type wireguard node2# ip address add 10.0.12.2/23 dev wg0
Listener einrichten
Hier kommt jetzt der zuvor generierte Private-Key zu Einsatz. Wireguard wird gesagt, auf welchem Port gelauscht werden soll und mit welchem Private-Key gearbeitet wird:
node1# wg set wg0 listen-port 51820 private-key /root/wg.priv node2# wg set wg0 listen-port 51820 private-key /root/wg.priv
Interface aktivieren
Jetzt kann man die Interfaces und damit die Wireguard-Dienste aktivieren:
node1# ip link set wg0 up node2# ip link set wg0 up
Keys austauschen/registrieren
Jetzt werden die Public Keys ausgetauscht, d.h. node1 registriert den Public Key von node2 und node2 registriert den Public Key von node1. Der Einfachheit halber tun wir so, als sein dies die Public Keys:
node1# cat /root/wg.pub pub1 node2# cat /root/wg.pub pub2
In der Realität stünde hier eine Zeichenkette.
Die Keys werden jetzt auf dem jeweils anderen Node konfiguriert und festgelegt, welche IP-Adressen jeweils über den Tunnel kommunizieren dürfen (aka. welche Quelladressen in den eingehenden IP-Paketen stehen dürfen):
node1# wg set peer pub2 allowed-ips 10.0.12.2/32 node2# wg set peer pub1 allowed-ips 10.0.12.1/32
Endpunkte bekannt machen
Als nächstes muss man die Endpunkte einander bekannt machen. Jedenfalls sollte wenigstens eine Partei einen Endpunkt eintragen. Man kann hier sowohl IP-Adressen als auch DNS-Namen benutzen:
node1# wg set peer pub2 endpoint 192.168.1.2:51820 node2# wg set peer pub1 endpoint node1.example.com:51820
Bei IPv6-Adressen sollte man die IPv6-Adresse in Klammern packen. Je nach Shell muss man die Klammern noch escapen, z.B.:
node3# wg set peer pub4 endpoint \[fd00::1\]:51820
An diesem Punkt sollten die Tunnel funktionieren. Man sollte beachten, dass Wireguard ohne Sessions arbeitet und auch keine Traffic erzeugt, wenn keine IP-Pakete über den Tunnel gehen. Entsprechend sollte man beachten, dass man, wenn man auf nur einem Rechner die Adresse der Gegenstelle eingetragen hat, nur einer der beiden Knoten die Adresse des anderen kennt, solange noch keine Pakete verschickt wurden. Wenn also Daten von der Gegenstelle nicht ankommen, hilft es manchmal, einfach mal die Gegenstelle anzupingen, damit diese die aktuelle IP-Adresse erhält, mit der man gerade erreichbar ist. Das ist auch notwendig, wenn man hinter einer Firewall oder NAT hängt. Alternativ kann man auch Wireguard beibringen, Keepalive-Pakete in einem konfigurierbaren Sekundenintervall zu senden:
# wg set wg0 persistent-keepalive INTERVALL
Konfiguration speichern und automatisch laden
Bis zu diesem Zeitpunkt ist bei einem Reboot die Konfiguration weg. Das wird jetzt geändert. Wireguard liefert das Tool wg-quick mit, welches sich einer bestehenden Konfigurationsdatei bedient und damit alle obigen ip- und wg-Kommandos selbst ausführen kann.
Die Konfiguration speichert man mit:
# wg showconf wg0 > /etc/wireguard/wg0.conf
Danach kann man den Dienst per systemd automatisch laufen lassen:
# systemctl enable wg-quick@wg0.service