Ich möchte das folgende Setup haben. Es gibt zwei Schnittstellen: wlan0und wg0. wlan0ist die Standardeinstellung, wg0ist eine Wireguard-Schnittstelle, konfiguriertmanuell.

Standardmäßig wird der Verkehr über geleitet wlan0. Wenn ein Prozess jedoch beispielsweise in eine Kontrollgruppe eingefügt wird wgcgrp(Klassen-ID ist 1), muss der Verkehr über geleitet werden wg0.

Ich habe absolut keine Ahnung, wie das geht. Ich habe Folgendes versucht. Ich werde sehr ausführlich sein, weil ich sehr frustriert bin.

[Wireguard-Einrichtung]

Das ist zunächst ziemlich einfach ip l a wg0 name wg0 type wireguard. Dann habe ich eine w.conf-Datei, die Daten enthält, die an übermittelt werden wg setconf wg0. Sie legt den privaten Schlüssel, den öffentlichen Schlüssel, die zulässigen IPs (0.0.0.0/0, ::0/0) und den Endpunkt fest.Nichtsmehr. Dann stelle ich auch noch die IP-Adresse der wg0-Schnittstelle ein, die ich vorher kenne: ip ad a $ip dev wg0; ip -6 ad a $ip6 dev wg0. Nun füge ich die Route hinzu:ip l s wg0 up; ip r a default dev wg0 t wg

[Firewall]

Soweit ich das verstehe, muss ich dafür sorgen, dass der Cgroup-Verkehr irgendwie die wgRouting-Tabelle erreicht. Ich weiß, wie das geht. Ich muss den Cgroup-Verkehr innerhalb einer Kette des Typs markieren routeund ihn dann maskieren. Hier sind die Regeln.

table inet t {
    chain post {
        type route hook output priority mangle; policy accept
        meta cgroup 1 counter meta mark set meta cgroup
    }
    
    chain masq {
        type nat hook postrouting priority srcnat; policy accept
        meta cgroup 1 oifname "wg0" counter masquerade
    }
}

Es gibtnicht mehrRegeln in meiner Firewall.

[Routen einrichten]

Markierter Verkehr muss in die wgTabelle gelangen, also führe ichip ru a fwmark 1 lookup wg

[Ergebnis]

cgexec -g net_cls:wg ping 8.8.8.8 und ich bekomme nichts. Warum??? Ich weiß nicht einmal, wie ich mit dem Debuggen beginnen soll. Das sollte einfach sein, aber ich bin noch nicht einmal annähernd so weit.

Antwort1

Scheint, als müssten Sie ip r a "$endpoint_ip" dev wlan0 via "$wlan0_gateway" t wgdieses Setup zum Laufen bringen. Das war für mich sehr unerwartet, da OpenVPN ohne diese zusätzliche Route funktioniert. Ich wäre sehr dankbar, wenn jemand wüsste und erklären könnte, warum das so ist. Vielleicht, weil OpenVPN ein Userspace-Prozess ist, während Wireguard im Kernel läuft und das Routing anders handhabt?

verwandte Informationen