Über VPN Client entferntes VPN Netz erreichen

Avenger84

Lt. Commander
Registriert
Feb. 2008
Beiträge
1.561
Hallo,
folgendes Szenario: ich habe zwei Netzwerke permanent miteinander verbunden (Zuhause, Arbeit) per Wireguard IPv6 Tunnel (durch den Tunnel geht IPv4 & 6). Läuft seit Jahren wunderbar.
Wireguard läuft jeweils auf einem RPi / Linux VM.

Daneben habe ich natürlich noch diverse Clienten "Roadwarriors" eingerichtet, mit denen ich mich von außerhalb jederzeit auf beide Netzwerke einwählen kann. Klappt ebenfalls wunderbar.

Da ein Netzwerk von außen nur per IPv6 erreichbar ist und es in Hotels grundsätzlich kein v6 gibt, ist mir folgender Gedanke gekommen: ich wähle mich Zuhause ein und erreiche über den RPi das permanent verbundene andere Netzwerk ebenfalls.

Habe schon einiges probiert, aber die "Route" will nicht.

einfache Skizze:
11.png




Nun meine Konfigs.

Zuhause (Telekom DS)
Code:
[Interface]
Address = 192.168.99.1/24, fd08::1/64
ListenPort = 51820
PrivateKey = xxx
MTU = 1412

PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -A FORWARD -o %i -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -D FORWARD -o %i -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = xxx=
AllowedIPs = 192.168.99.2/32, fd08::2/128
[Peer]
PublicKey = xxx=
AllowedIPs = 192.168.99.3/32, fd08::3/128
[Peer]
PublicKey = xxx=
AllowedIPs = 192.168.99.4/32, fd08::4/128
[Peer]
PublicKey = xxx=
AllowedIPs = 192.168.99.5/32, fd08::5/128
[Peer]
PublicKey = xxx=
AllowedIPs = 192.168.99.6/32, 192.168.74.0/24, fd08::6/128, fd00:bbbb::/32
Endpoint = IPv6:51821
PersistentKeepalive = 25

Arbeit (CNG / nur IPv6)
Code:
[Interface]
Address = 192.168.99.10/24, fd08::10/64
ListenPort = 51821
PrivateKey = yyy=
MTU = 1412

PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -A FORWARD -o %i -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -D FORWARD -o %i -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.99.6/32, 192.168.168.0/24, fd08::6/128, fd00:aaaa::/32
[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.99.11/32, fd08::11/128
[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.99.12/32, fd08::12/128
[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.99.13/32, fd08::13/128
[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.99.14/32, fd08::14/128
[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.99.15/32, fd08::15/128

Mobil / Laptop:
Code:
[Interface]
Address = 192.168.99.2/24, fd08::2/64
PrivateKey = xxx=
DNS = 192.168.168.5, fd00:aaaa::dea:xxx:yyy:zzz

[Peer]
PublicKey = xxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = IPv4:51820

ich habe schon ein paar Anpassungen probiert, möchte aber nicht unnötig damit verwirren, da alles nicht geholfen hat.

MfG
 
Wer ist 192.168.99.6/32 ?

Auf "Arbeit" fehlt die Route (AllowedIPs) zum Laptop (192.168.99.2/32)
 
  • Gefällt mir
Reaktionen: madmax2010 und Babbaaa
192.168.99.6 ist die Tunnel IP zwischen Zuhause <-> Arbeit, aber du hast Recht, es müsste .10 sein sehe ich auch gerade. (entsprechend auch die IPv6)
Nun ist es mir ein Rätsel wieso der Tunnel überhaupt läuft zwischen Zuhause <-> Arbeit, obwohl falsche Tunnel IP. Wie kann das sein?

Als AllowedIP sollte ich bei den beiden nicht einfach das gesamte Netzwerk vom Tunnel: 192.168.99.0/24 eintragen?

[Peer]
PublicKey =
AllowedIPs = 192.168.99.0/24, 192.168.168.0/24, fd08::10/128, fd00:aaaa::/32

[Peer]
PublicKey =
AllowedIPs = 192.168.99.0/24, 192.168.74.0/24, fd08::10/128, fd00:bbbb::/32
Endpoint = IPv6:51821
PersistentKeepalive = 25

oder muss es einzeln sein:

[Peer]
PublicKey =
AllowedIPs = 192.168.99.10/32, 192.168.99.2/32, 192.168.168.0/24, fd08::10/128, fd00:aaaa::/32

[Peer]
PublicKey =
AllowedIPs = 192.168.99.10/32, 192.168.99.2/32, 192.168.74.0/24, fd08::10/128, fd00:bbbb::/32
Endpoint = IPv6:51821
PersistentKeepalive = 25
 
Setzt Wireguard für Linux überhaupt von sich aus Routen?
 
Avenger84 schrieb:
[Peer]
PublicKey =
AllowedIPs = 192.168.99.0/24, 192.168.168.0/24, fd08::10/128, fd00:aaaa::/32
Das wäre der Weg. Faustformel: IPs im Feld "Address" mit /32 (bzw. /128) eintragen, IPs im Feld "Allowed IPs" mit "/24" bzw. "/64" eintragen. Deshalb besser auch fd08::10/64, und die Address Fields jeweils auch entsprechend anpassen.

Bob.Dig schrieb:
Setzt Wireguard für Linux überhaupt von sich aus Routen?
Ja.
 
  • Gefällt mir
Reaktionen: Bob.Dig
Ich glaub, du hast da noch ein paar Fehler drin.

Zuhause
Code:
[Interface]
Address = 192.168.99.1/24, fd08::1/64

Arbeit
Code:
[Interface]
Address = 192.168.99.10/24, fd08::10/64
In Deiner Topologie hast dem Arbeitsnetz die 192.168.74.0/24 und dem Heimnetz die 192.168.168.0/24 vergeben. Wie kommst du dann auf die 99?

Ich hatte ein ähnliches Problem:
  • Zuhause: Glasfaser, nur IPv6 nach außen
  • Arbeitsnetz + Netz meiner Eltern: nur IPv4
  • Smartphones über Mobilverbindung: sowohl IPv4 als auch IPv6.

Gelöst hab ich das, dass ich mir bei Noez einen V-Server für 1,29€/Monat mit nativer IPv4 und IPv6 geholt hab. Die Netze sind dann:
  • Fritzbox zu Hause: 192.168.109.0/24
  • V-Server: 192.168.108.0/24
  • Elternnetz: 192.168.110.0/24
Von Mobil aus kann ich mich dann sowohl zur Fritzbox (bei IPv6) als auch zum V-Server (wenn mir nur IPv4 zur Verfügung steht) verbinden. Die Geräte (Peers) bekommen entsprechend dann eine 192.168.109.x oder 192.168.108.x
 
Pummeluff schrieb:
Wie kommst du dann auf die 99?
Das ist das VPN Transportnetz, also vollkommen in Ordnung.

Pummeluff schrieb:
Gelöst hab ich das, dass ich mir bei Noez einen V-Server für 1,29€/Monat mit nativer IPv4 und IPv6 geholt hab.
Das ist natürlich auch eine Lösung. Dennoch kann man die Konfiguration von @Avenger84 so tunen, dass er seinen Anwendungsfall damit erfüllen kann.
 
V-Server wollte ich mir nicht mieten, wozu auch wenn es ohne geht.

Es klappt jetzt 👍

Arbeit (VPN internes Netz beginnt hier mit 192.168.99.10 ... 15; analog IPv6)
Code:
[Interface]
Address = 192.168.99.10/24, fd08::10/64
ListenPort = 51821
PrivateKey =
MTU = 1412

PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -A FORWARD -o %i -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -D FORWARD -o %i -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

[Peer]
PublicKey =
AllowedIPs = 192.168.99.0/24, 192.168.168.0/24, fd08::/16, fd00:aaaa::/32
[Peer]
PublicKey =
AllowedIPs = 192.168.99.11/32, fd08::11/128
[Peer]
PublicKey =
AllowedIPs = 192.168.99.12/32, fd08::12/128
[Peer]
PublicKey =
AllowedIPs = 192.168.99.13/32, fd08::13/128
[Peer]
PublicKey =
AllowedIPs = 192.168.99.14/32, fd08::14/128
[Peer]
PublicKey =
AllowedIPs = 192.168.99.15/32, fd08::15/128

entsprechend das Zuhause auch so angepasst. (Hier beginnt das VPN Netz mit 192.168.99.1)
(Kann also max. 8 Clienten hinzufügen .99.2 - .99.9)

Komme nun vom Handy über IPv4 (z.B. im Hotel) auf das Arbeitsnetzwerk (192.168.74.x)
Ob ich die internen IPv6 Adressen auch so erreichen kann, probiere ich noch aus. (fd00:bbbb:....) - Spielerei.

P.S. die .99 habe ich mal von irgendeinem Automations Script übernommen, womit ich vor zig Jahren angefangen habe Wireguard zu konfigurieren.
 
Avenger84 schrieb:
Es klappt jetzt 👍
Sehr schön.

//Klugscheißer Modus an:
Du könntest die "Adress" Zeile noch ändern auf "Address = 192.168.99.10/32, fd08::10/128". Außerdem finde ich persönlich es eleganter, wenn bei der Verbindung zweier LANs kein NAT zum Einsatz kommt, weil einige Dienste darauf empfindlich reagieren. Dafür müsstest du auf beiden Seiten im Router (nicht im VPN Raspi!) aber statische Routen auf das jeweils gegenüberliegende Netz einrichten (möglicherweise sind die schon da), und die vier "MASQUERADE" Regeln können aus der VPN Konfig raus (die FORWARD bitte drin lassen!). Aber das ist Klagen auf hohem Niveau.
 
gerne Klugscheißen!
Die ../32 ../128 bedeutet ja nur explizit eine IP und keinen Bereich - welchen praktischen Unterschied macht das im Wireguard ?
ich hatte das damals aus der Vorlage so übernommen und nicht hinterfragt.

Wenn ich die MASQUERADE raus nehme, dann komme ich aber nicht mehr mit den Roadwarriors über´s VPN ins Internet - das ist neben der Verbindung der Netzwerke ein weiterer Hauptgrund des VPN.
Ich möchte von unterwegs aus über mein Zuhause surfen, einmal damit man bei ungesicherten öffentliche Wlans verschlüsselt bleibt und zum anderen damit die Werbung über mein DNS (Pihole) draußen bleibt.
Oder geht das ohne MASQUERADE?
Ergänzung ()

P.S. habe die beiden IPs so angepasst auf deinen Rat, danach wg aus / an, jetzt macht er sowas:
Code:
sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.99.1/32 dev wg0
[#] ip -6 address add fd08::1/128 dev wg0
[#] ip link set mtu 1412 up dev wg0
[#] ip -6 route add fd08::7/128 dev wg0
[#] ip -6 route add fd08::5/128 dev wg0
[#] ip -6 route add fd08::4/128 dev wg0
[#] ip -6 route add fd08::3/128 dev wg0
[#] ip -6 route add fd08::2/128 dev wg0
[#] ip -6 route add fd00:bbbb::/32 dev wg0
[#] ip -4 route add 192.168.99.5/32 dev wg0
[#] ip -4 route add 192.168.99.4/32 dev wg0
[#] ip -4 route add 192.168.99.3/32 dev wg0
[#] ip -4 route add 192.168.99.2/32 dev wg0
[#] ip -4 route add 192.168.99.0/24 dev wg0
[#] ip -4 route add 192.168.74.0/24 dev wg0
[#] ip -6 route add fd08::/16 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT
[#] iptables -A FORWARD -o wg0 -j ACCEPT
[#] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
[#] ip6tables -A FORWARD -i wg0 -j ACCEPT
[#] ip6tables -A FORWARD -o wg0 -j ACCEPT
[#] ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

mit /24 und /64:
Code:
sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.99.1/24 dev wg0
[#] ip -6 address add fd08::1/64 dev wg0
[#] ip link set mtu 1412 up dev wg0
[#] ip -6 route add fd00:bbbb::/32 dev wg0
[#] ip -4 route add 192.168.74.0/24 dev wg0
[#] ip -6 route add fd08::/16 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT
[#] iptables -A FORWARD -o wg0 -j ACCEPT
[#] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
[#] ip6tables -A FORWARD -i wg0 -j ACCEPT
[#] ip6tables -A FORWARD -o wg0 -j ACCEPT
[#] ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 
Nein, das Masquerade brauchst du fürs NAT. Damit wird in den IP-Paketen Deine interne IP durch die ausgehende des VPN-Endpoints ersetzt.
 
Avenger84 schrieb:
Wenn ich die MASQUERADE raus nehme, dann komme ich aber nicht mehr mit den Roadwarriors über´s VPN ins Internet - das ist neben der Verbindung der Netzwerke ein weiterer Hauptgrund des VPN.
Eigentlich nicht.

Der Roadwarrior bekommt mitgeteilt, dass die Default-Route übers VPN geht. Also schickt er alle Internetpakete an den VPN Server.
Der wiederum hat kein lokales Interface dafür, und schickt die Pakete folglich an sein Default Gateway, also an den Internet Router.
Der macht dann NAT ins Internet. Allerdings ist für ihn die Quelle-Adresse nicht aus seinem LAN, sondern aus dem VPN Transport-Netz. Für den Rückweg braucht er also eine statische Route ins VPN Transport-Netz, als Gateway die LAN IP des VPN Servers. Wenn es diese Route gibt, dann kannst du auf NAT im VPN verzichten.

Was die Address Zeile angeht: In der Praxis macht es für dich keinen Unterschied. Für die Roadwarrior ist es so aber möglich, den Datenverkehr gezielter zu leiten, wenn man es braucht. Ist hier vermutlich nicht der Fall, jedenfalls hab ich keine Client-spezifischen Regeln gesehen.
 
das klappt, aber nur mit IPv4.
Wenn ich die IPv6 Route in der FritzBox hinzufüge macht er mir sowas:
1694534245355.png

entsprechend surfe ich dann am Roadwarrior nur mit IPv4 und bekomme keine IPv6
Ergänzung ()

egal wie ich die Route eingebe in der FB, es kommt immer nur Müll raus und ich fliege sogar aus dem Webinterface.
Egal heißt ob ich die 0en weg lasse oder nur eine 0 auffülle oder alles mit 0en auffüllle.
Auch die alte Route mit /32 lässt sich nicht mehr hinzufügen.
 
Zuletzt bearbeitet:
Für IPv6 nehme /64 oder ein bisschen größer (/60) aber nicht /16, rate ich mal.
 
Genau, Prefix Länge ist /64.

Die "0" kann man rauskürzen, muss es aber nicht. Auch die Notation mit der "0" in der Adresse ist vollkommen korrekt.
 
Also um noch genauer zu sein, deine beiden IPv6 Routen dort sind falsch. Ein einzelnes Subnet hat immer /64, einen einzelnen Host kann man mit /128 definieren, was bei dir drin stand war so nie korrekt für IPv6.
 
Zurück
Oben