====== Wireguard machen ====== Eine kleine Anleitung, um Wireguard mit Linux zu verdrahten. Leider nur mit Legacy IPv4 (FIXME). 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 {{tag>howto public:howto}}