WireGuard: Routing über Client

Gemeinsam ins Internet mit Firewall und Proxy.
Antworten
mrserious
Beiträge: 270
Registriert: 22.06.2013 12:12:03

WireGuard: Routing über Client

Beitrag von mrserious » 19.04.2023 19:45:21

Hallo Leute,

habe hier momentan einen unschönen Aufbau, der demnächst auch abgelöst werden soll.
Für den Moment möchte ich es aber erst einmal so umsetzen:
Es gibt einen WireGuard-Server, zu dem sich div. Clients verbinden.
Einer dieser Clients soll nun quasi der Router richtung Internet für einen der anderen Clients werden.
Üblicherweise übernimmt diese Rolle ja der WireGuard-Server selbst, hier soll es jedoch bewusst einer der Clients werden.

Wie kann ich dies auf dem Server routing-technisch umsetzen? Denn dieser muss die Pakete ja an den "Router-Client" weiterleiten, welcher sie im Anschluss richtung Internet transportiert.

Für den Standardfall, dass der Server selbst der Router zum Internet ist können die Firewall-Regeln ja z.B. wie folgt aussehen:

Code: Alles auswählen

iptables -t nat -I POSTROUTING -s wireguardclient -o $internet -j MASQUERADE
iptables -A FORWARD -i $internet -o $wireguard -d wireguardclient -j ACCEPT
iptables -A FORWARD -i $wireguard -s wireguardclient -o $internet -j ACCEPT
Aber nun benötige ich stattdessen vmtl. etwas, das ähnlich aussieht wie das folgende?

Code: Alles auswählen

iptables -t nat -A PREROUTING -i $wireguard -s wireguardclient -d routerclient -j DNAT --to-destination IP-DES-ROUTER-CLIENT
iptables -A FORWARD -i $wireguard -o $wireguard -s wireguardclient -d routerclient -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: WireGuard: Routing über Client

Beitrag von bluestar » 20.04.2023 14:00:34

Vielleicht könntest du dein Setup mal komplett dokumentieren, insbesondere welche IPs du wo vergibst, wie AllowedIPS aussieht und ggfs. wie viele Wireguard Interfaces du benutzt.

Eine kleine Grafik, von wo nach wo, über wo der Traffic fließen soll.

Ach und ich vergaß, die Routingtabellen der beteiligten Rechner wären auch hilfreich.

mrserious
Beiträge: 270
Registriert: 22.06.2013 12:12:03

Re: WireGuard: Routing über Client

Beitrag von mrserious » 25.04.2023 10:03:46

Hallo bluestar,

ja, gute Idee!

Das WG-interne Netz ist 10.0.0.0/24, folgende IP-Vergabe:

WG-Server: 10.0.0.1
Client: 10.0.0.2
Router-Client: 10.0.0.3

Auf dem Client habe ich für AllowedIPs: 0.0.0.0/0.
Hier geht es darum, dass es sich um einen Roadwarrior handelt. Dessen Internet-Traffic soll über den Router-Client in's Internet geroutet werden.
Mir ist klar, dass man das normalerweise natürlich über den Server macht, also:

10.0.0.2 -> 10.0.0.1 -> Internet

mat6937
Beiträge: 3372
Registriert: 09.12.2014 10:44:00

Re: WireGuard: Routing über Client

Beitrag von mat6937 » 25.04.2023 10:09:36

mrserious hat geschrieben: ↑ zum Beitrag ↑
25.04.2023 10:03:46
Auf dem Client habe ich für AllowedIPs: 0.0.0.0/0.
... Dessen Internet-Traffic soll über den Router-Client in's Internet geroutet werden.
Wie sind auf dem Client, die Ausgaben von:

Code: Alles auswählen

ip a
ip r
ip n s
ip r g 1.1.1.1
iptables-legacy -nvx -L -t nat
?
Debian 12.8 mit LXDE, OpenBSD 7.6 mit i3wm, FreeBSD 14.1 mit Xfce

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: WireGuard: Routing über Client

Beitrag von bluestar » 25.04.2023 15:24:31

mrserious hat geschrieben: ↑ zum Beitrag ↑
25.04.2023 10:03:46
Hallo bluestar,

ja, gute Idee!

Das WG-interne Netz ist 10.0.0.0/24, folgende IP-Vergabe:

WG-Server: 10.0.0.1
Client: 10.0.0.2
Router-Client: 10.0.0.3

Auf dem Client habe ich für AllowedIPs: 0.0.0.0/0.
Hier geht es darum, dass es sich um einen Roadwarrior handelt. Dessen Internet-Traffic soll über den Router-Client in's Internet geroutet werden.
Mir ist klar, dass man das normalerweise natürlich über den Server macht, also:

10.0.0.2 -> 10.0.0.1 -> Internet
Fangen wir doch mal an und betrachten es getrennt:
1) Verbindung WG-Server <-> Router-Client
Hier stellt der Router Client einen Internetanschluss für den WG-Server bereit, auf Seiten des Router-Clients bekommt das Peer "WG-Server" also "AllowedIPs=0.0.0.0/0" und auf Seiten des WG-Servers steht drinnen "AllowedIPS=10.0.0.3/32" Auf dem Router-Client brauchst du dann entsprechende iptables-Regeln, die alles was von wg0 kommt ins Internet maskieren.

2) WG Server <-> Client
Hier stellt der WG-Server das Internet bereit, also bekommt das WG-Server Peer auf dem Client "AllowedIPs=0.0.0.0/0" und auf dem WG-Server trägst du für das Client-Peer AllowedIPs=10.0.0.2 ein.

3) Firewall & Routing auf WG-Server
Hier wird's jetzt komplizierter, du brauchst Source based Routing. Route alles was von 10.0.0.2/32 muss über eine eigene Routing Tabelle auf das Default-Gateway 10.0.0.3 geleitet werden.

mrserious
Beiträge: 270
Registriert: 22.06.2013 12:12:03

Re: WireGuard: Routing über Client

Beitrag von mrserious » 25.04.2023 18:54:20

Hallo bluestar,

das hast du gut getrennt!
Es ergeben sich für mich die folgenden Fragen:

1) Der "Router-Client" hat ja selbst einen lokalen Internetanschluss. Dieser soll auch nur von ihm benutzt werden, der WG-Server nutzt hingegen seine lokale Route in's Internet.
Ich glaube, diesen Part habe ich missverständlich erklärt.

2) Ja, stimmt genau so.

3) Kannst du mir hier helfen und es mal exemplarisch angeben? Ich glaube, das ist genau der Knackpunkt, mit dem ich Schwierigkeiten habe.


@mat6937:
Es handelt sich um ein Android-Tablet, daher kann ich leider keine Konsolenbefehle ausführen.
Der Einfachheit halber können wir aber annehmen, dass es per SIM-Karte im Mobilnetz hängt.

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: WireGuard: Routing über Client

Beitrag von bluestar » 25.04.2023 20:27:45

mrserious hat geschrieben: ↑ zum Beitrag ↑
25.04.2023 18:54:20
1) Der "Router-Client" hat ja selbst einen lokalen Internetanschluss. Dieser soll auch nur von ihm benutzt werden, der WG-Server nutzt hingegen seine lokale Route in's Internet.
Daran verändert sich durch das Setup auch gar nichts.
mrserious hat geschrieben: ↑ zum Beitrag ↑
25.04.2023 18:54:20
3) Kannst du mir hier helfen und es mal exemplarisch angeben? Ich glaube, das ist genau der Knackpunkt, mit dem ich Schwierigkeiten habe.
Das ist relativ kompliziert, ich versuche es trotzdem mal, die Befehle unterhalb entsprechen jeweils diesen Erklärungen - als Vorarbeit müssen zwei Dinge getan werden:
1) Das Default-Gateway muss aus der Main Routing Tabelle raus und in die Routing Tabelle "default"
2) Die Prioritäten für Main 32766 muss reduziert werden, da Prio 32767 die Default Tabelle darstellt und wir mit dem Source Based Routing prioritätstechnisch zwischen Main und Default müssen.

Vorabeiten:
1) Die Routing Tabelle "default" mit dem bisherigen Default-GW befüllen - bissl awk - Magie
2) Die Regel für die main Routing-Tabelle auf 32.000 ändern
3) Die bisherige Regel für die Main-Routing Tabelle mit Prio 32766 löschen.
4) Default-Gateway aus main Routing Tabelle entfernen.

Code: Alles auswählen

ip route add default via $(ip route show |grep default |awk '{print $3;}') table default
ip rule add from all lookup main priority 32000
ip rule del from all look main priority 32766
ip route del default table main
1) Im nächsten Schritt legen wir eine Routing-Tabelle "2" an
2) Danach legen fest, dass alle Anfragen von 10.0.0.2 mit der Priorität 32001 auf die Tabelle 2 umgeleitet werden.

Code: Alles auswählen

ip route add default via 10.0.0.3 table 2
ip rule add from 10.0.0.2 lookup 2 priority 32002
Am Ende sollte ip rule show folgendermaßen aussehen:

Code: Alles auswählen

0:	from all lookup local 
32000:	from all lookup main 
32002:      from 10.0.0.2 lookup 2
32767:	from all lookup default
Und du hast drei Routing-Tabellen "main", "default" und "2".

Antworten