Bei WireGuard (PiVPN) NAT deaktivieren

  • Hallo,


    hinter einem Lancom-Router habe ich mit Port-Forwarding ein Raspi gehängt mit einer statischen LAN-IP aus 192.168.115.0/24. Nennen wir das Netz (A).

    Im Lancom habe ich eine Route für den WireGuard-Client-IP-Bereich 10.199.89.0/24 eingerichtet. Nennen wir es (B)

    Nun funktioniert alles auf Anhieb reibungslos, ich kann alle IP-Adressen erreichen (A) zu (B) und (B) zu (A).

    Split-Tunneling über die "allowed-ips" in der Client-Config funktioniert auch ohne Probleme.


    Was mich jetzt aber stört ist, dass der Raspi NAT macht wenn ich vom Client (A) eine Verbindung zum internen Server im IP-Netz (B) mache.

    Das heißt der Ziel-Server in (B) Sieht nicht welcher Client eine Verbindung aufbaut, sondern immer nur die IP vom Raspi.

    Das brauche ich nicht, weil der Lancom (Standard-Gateway) die Routen von (A) und (B) ja kennt.


    Ich habe schon viel rumgesucht, aber irgendwie bringt alles nichts.

    Was ich bereits probiert habe:

    PiVPN legt automatisch eine Masquarading-Regel in IP-Tables an, die habe ich gelöscht, ändert aber nichts.

    IP-Forwarding habe ich aktiviert

    Code
    root@raspberrypi:~# cat /proc/sys/net/ipv4/ip_forward
    1

    Inhalt von /etc/wireguard/wg0.conf

    Client-Config:

    Code
    [Interface]
    PrivateKey = *****
    Address = 10.199.89.2/24
    DNS = 192.168.115.150, 192.168.115.151
    
    [Peer]
    PublicKey = *****
    PresharedKey = *****
    Endpoint = *****
    AllowedIPs = 192.168.115.0/24, ::0/1,8000::/1

    Hat jemand eine Idee woran es noch liegen könnte?

    Besten Dank.

    Edited 2 times, last by jojohannes (September 2, 2024 at 5:10 PM).

  • Was mich jetzt aber stört ist, dass der Raspi NAT macht wenn ich vom Client (A) eine Verbindung zum internen Server im IP-Netz (B) mache.

    Das heißt der Ziel-Server in (B) Sieht nicht welcher Client eine Verbindung aufbaut, sondern immer nur die IP vom Raspi.

    Das brauche ich nicht, weil der Lancom (Standard-Gateway) die Routen von (A) und (B) ja kennt.

    Poste mal eine Skizze von deiner Konstellation und vom PI die Ausgabe von:

    Code
    sudo nft list ruleset
  • Poste mal eine Skizze von deiner Konstellation


    Ich hoffe du kannst damit was anfangen.

    Der Server "sieht" nur dass IP 192.168.115.135 angefragt hat und nicht, dass es der Client 10.199.89.2 ist.

    Poste mal eine Skizze von deiner Konstellation und vom PI die Ausgabe von:

  • Der Server "sieht" nur dass IP 192.168.115.135 angefragt hat und nicht, dass es der Client 10.199.89.2 ist.

    Das ist auch richtig so. Wenn Du das willst, könntest Du den Server auch als WireGuard-Peer konfigurieren.
    Aber warum ist es für dich wichtig, dass der Server die IP-Adresse vom WireGuard-Interface des Clienten, sehen soll/kann?

  • Aber warum ist es für dich wichtig, dass der Server die IP-Adresse vom WireGuard-Interface des Clienten, sehen soll/kann?

    Naja zum einen macht unnötiges NAT an einigen Stellen potentiell Probleme (VOIP z.B.), zum anderen kann ich am Server nicht so gut debuggen oder verschiedene Clients unterschiedlich behandeln.

    Die IPSeC VPN-Clients die sich zum Lancom verbinden machen das nicht so, da sehe ich die Client-IP am Server.

  • Naja zum einen macht unnötiges NAT an einigen Stellen potentiell Probleme (VOIP z.B.), zum anderen kann ich am Server nicht so gut debuggen oder verschiedene Clients unterschiedlich behandeln.

    WireGuard macht cryptokey-routing. Versuch mal auf den WG-Peers (Server und Clients) mit:

    Code
    AllowedIPs = 10.199.89.0/24, 192.168.115.0/24

    Wie ist auf dem PI die Ausgabe von:

    Code
    sysctl -a | grep -i forwarding

    ? Warum benutzt Du VoIP mit Wireguard? VoIP ist i. d. R. doch schon verschlüsselt.

  • Naja zum einen macht unnötiges NAT an einigen Stellen potentiell Probleme (VOIP z.B.), zum anderen kann ich am Server nicht so gut debuggen oder verschiedene Clients unterschiedlich behandeln.

    WireGuard macht cryptokey-routing. Versuch mal auf den WG-Peers (Server und Clients) mit:

    Code
    AllowedIPs = 10.199.89.0/24, 192.168.115.0/24

    Auf den Clients ist das schon so eingestellt, wegen Split-Tunneling.

    Wenn ich das auf dem Raspi in der Datei /etc/wireguard/wg0.conf mache (bei einem Peer) und dann den Dienst neustarte, dann kann ich kann nicht mal mehr den Raspi aus dem 192.168.115.0-Netz anpingen, VPN Clients können auch nichts mehr erreichen.

    Wie ist auf dem PI die Ausgabe von:

    Code
    sysctl -a | grep -i forwarding

    ? Warum benutzt Du VoIP mit Wireguard? VoIP ist i. d. R. doch schon verschlüsselt.

    Den lokalen Asterisk-Server möchte ich nicht von außen erreichbar machen und im Homeoffice SIP-Clients benutzen, PhoneSuite in dem Fall.

  • Wenn ich das auf dem Raspi in der Datei /etc/wireguard/wg0.conf mache (bei einem Peer) und dann den Dienst neustarte, dann kann ich kann nicht mal mehr den Raspi aus dem 192.168.115.0-Netz anpingen, VPN Clients können auch nichts mehr erreichen.

    Versuch mal auf dem Raspi und auf den Clients, mit source-NAT (MASQUERADE) für WireGuard-Interface (wg0).
    Da wird eine zusätzliche definierte Route für das 192.168.115.0-Netz (mit dem WG-Interface als gateway) vorhanden sein.
    Wie ist in diesem Fall, die Ausgabe von:

    Code
    ip r

    ?

    EDIT:

    BTW: An welchem Internetanschluss und in welchem lokalen Subnetz (mit welcher IP) befindet sich der VPN-Client?

  • Erstmal Vielen Dank für deine Hilfe. :)

    Wenn ich das auf dem Raspi in der Datei /etc/wireguard/wg0.conf mache (bei einem Peer) und dann den Dienst neustarte, dann kann ich kann nicht mal mehr den Raspi aus dem 192.168.115.0-Netz anpingen, VPN Clients können auch nichts mehr erreichen.

    Versuch mal auf dem Raspi und auf den Clients, mit source-NAT (MASQUERADE) für WireGuard-Interface (wg0).

    Sorry, verstehe hier nur Bahnhof ;)

    Meinst du diese dynamischen Firewall-Regeln in der wg0.conf (habe ich irgendwo im Netz gefunden)

    Die haben irgendwie nichts geändert:

    Code
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enxb827eb79298d -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enxb827eb79298d -j MASQUERADE

    Da wird eine zusätzliche definierte Route für das 192.168.115.0-Netz (mit dem WG-Interface als gateway) vorhanden sein.
    Wie ist in diesem Fall, die Ausgabe von:

    Code
    ip r
    Code
    root@raspberrypi:~# ip r
    default via 192.168.115.46 dev enxb827eb79298d proto static metric 100
    10.199.89.0/24 dev wg0 proto kernel scope link src 10.199.89.1
    192.168.115.0/24 dev enxb827eb79298d proto kernel scope link src 192.168.115.135 metric 100

    Vorletzte Zeile meinst du?

    EDIT:

    BTW: An welchem Internetanschluss und in welchem lokalen Subnetz (mit welcher IP) befindet sich der VPN-Client?

    Unterschiedlich, meistens Fritzbox-Standard (192.168.178.0/24) oder eben Mobilfunk-Netz

    Edited 2 times, last by jojohannes (September 3, 2024 at 12:51 PM).

  • Meinst du diese dynamischen Firewall-Regeln in der wg0.conf (habe ich irgendwo im Netz gefunden)

    Die haben irgendwie nichts geändert:

    Code
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enxb827eb79298d -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enxb827eb79298d -j MASQUERADE

    Nein, ich meine:

    Code
    sudo iptables -t nat -I POSTROUTING 1 -o wg0 -j MASQUERADE

    Die Ausgabe von "ip r" ist jetzt aber ohne die Änderung bei AllowedIP (in der wg0.conf), oder?

  • Die Ausgabe von "ip r" ist jetzt aber ohne die Änderung bei AllowedIP (in der wg0.conf), oder?

    Ja, mit den AllowedIPs, gibt es noch zusätzlich die Zeile:

    Code
    192.168.115.0/24 dev wg0 scope link

    Nein, ich meine:

    Code
    sudo iptables -t nat -I POSTROUTING 1 -o wg0 -j MASQUERADE

    Für den Fall, dass ich damit was zerschieße, ist der Befehl zum Löschen der gleiche nur mit -D statt -I?

  • Ja, mit den AllowedIPs, gibt es noch zusätzlich die Zeile:

    Code
    192.168.115.0/24 dev wg0 scope link

    Dann poste mal bei vorhandensein dieser Zeile (definierten Route) auf deinem PI, von deinem PI die Ausgaben von:

    Code
    ip route get 192.168.115.200
    ping -c 3 192.168.115.200

    Für den Fall, dass ich damit was zerschieße, ist der Befehl zum Löschen der gleiche nur mit -D statt -I?

    Ja, löschen geht mit:

    Code
    sudo iptables -t nat -D POSTROUTING 1

    oder mit reboot des PI, denn diese iptables-Regel ist (noch) nicht persistent gesetzt.

  • Dann poste mal bei vorhandensein dieser Zeile (definierten Route) auf deinem PI, von deinem PI die Ausgaben von:

    Code
    	sudo iptables -t nat -I POSTROUTING 1 -o wg0 -j MASQUERADE
    
    hat nichts geändert...
  • Du musst die beiden WireGuard-Seiten so konfigurieren, dass sie "Client-zu-Netz" sondern "Netz-zu-Netz"-Kopplung machen.


    Dann kannst du die jeweils lokale WireGuard-IP als Gateway in das andere Netz einrichten. und der Verkehr in das andere Netz erscheint dort mit seiner echten IP, wenn er durch den Tunnel geht.

    eine Beschreibung hierzu findest du z.B. auf

    WireGuard Site to Site VPN - Zwei Netzwerke sicher verbinden
    Eine sehr einfache Anleitung eine WireGuard Site to Site VPN Verbindung herzustellen. Copy and Paste Anleitung für Einsteiger.
    schroederdennis.de


    Hier wird am Ende auch beschrieben, wie man (bei Fritz-Boxen), ohne die Systeme im lokalen Netz anzupassen, sie davon unterrichtet, wie sie das andere Netz finden.

    Also die Route in dieses andere Netz über den WireGuard-Tunnel.

    Denn viele DHCP-Systeme erlauben es einem nicht, den Geräten mehr als einen, und damit den Default, Gateway mitzuteilen.

    (Auch spart man sich so die Umkonfiguration der Systeme mit fester IP ;) )

    Computer ..... grrrrrr

  • Dann poste mal bei vorhandensein dieser Zeile (definierten Route) auf deinem PI, von deinem PI die Ausgaben von:

    Wie sind auf deinem PI die Ausgaben von:

    Code
    ip n s
    sudo arp-scan -I enxb827eb79298d -l
    sudo sysctl -a | grep -i _filter

    ?

  • Code
    192.168.115.200 dev enxb827eb79298d lladdr 00:15:5d:73:b4:c1 STALE

    Installier arping:

    Code
    sudo apt install iputils-arping
    sudo dpkg --configure -a

    und teste danach mit:

    Code
    sudo arping -c 3 -I enxb827eb79298d 192.168.115.200
    Code
    pi@raspberrypi:~ $ sudo sysctl -a | grep -i _filter
    net.ipv4.conf.all.arp_filter = 0
    net.ipv4.conf.all.rp_filter = 0

    Teste auch mit:

    Code
    net.ipv4.conf.all.arp_filter = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.all.src_valid_mark = 1

    wirksam in der /etc/sysctl.conf

    Wie sind auf deinem PI, die Ausgaben von:

    Code
    apt policy ufw
    systemctl status ufw

    ?

  • Brauchst du die Ausgaben jeweils mit der wg0.conf: "AllowedIPs = 10.199.89.0/24, 192.168.115.0/24"?

    Ja.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!