[solved] OPNsense NATet nicht alles an WAN

Started by Thorwaler, September 10, 2022, 04:19:31 PM

Previous topic - Next topic
September 10, 2022, 04:19:31 PM Last Edit: September 18, 2022, 07:57:09 AM by Thorwaler
Hallo zusammen

Ich bin neu hier im Forum und hoffe, dass ich alle nötigen Informationen von Anfang an mitgeben kann, ansonsten habt bitte nachsicht mit mir :-)

Einfach:
Meine OPNsense (Version 22.1) NATed nicht allen Traffic der über die WAN-Schnittstelle ins Internet geht.
"Nicht allen" bedeutet, dass der Traffic, welcher von der OpenVPN VM ins Internet geht nicht GeNATed wird.
Bei anderen Interfaces wäre mich bisher noch nicht aufgefallen, dass etwas nicht korrekt verarbeitet wird, resp. Tests haben bisher noch nichts zu Tage gefördert.

Bisher vermute ich lediglich, dass es an der OPNsense liegt, sicher bin ich mir nicht, jedoch ist die OpenVPN VM bis vor ca einem halben Jahr hinter einer PFsense in Betrieb gewesen und hat da ohne diese/ähnliche Probleme gearbeitet. Aufgefallen ist es seit dem Wechsel auf OPNsense erst jetzt, da ich per VPN meistens nur interne Ziele verwende und diese funktionieren.






                ┌────────────┐               ┌────────────┐
                │            │               │            │   10.1.200.0/24
                │       em2_vlan1302─────────┤Debian 11.4 tun0───────────────
                │            │               │  OpenVPN   │
                │  OPNsense  │               │            │
                │    22.1    │               │            │
         WAN    │            │               │            │
     ─────────em0            │               │            │
                │            │               └────────────┘
                │            │
                │      em2_vlan1100───────────
                │            │
                │            │
                │            │
                │      em2_vlan1200───────────
                │            │
                └────────────┘





Ich hoffe, dass das Netzdiagramm oben einigermassen verständlich ist.

Technisch:
Die OPNsense hängt direkt am Internet mit einer dynamischen öffentlichen IP-Adresse.
Wenn über die Console der OPNsense ein tcpdump (tcpdump -i em0 icmp -n) gemacht wird erhalte ich folgendes Resultat:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:41:55.050039 IP 12.34.56.78 > 18.66.2.67: ICMP echo request, id 6050, seq 0, length 64
14:41:55.073232 IP 18.66.2.67 > 12.34.56.78: ICMP echo reply, id 6050, seq 0, length 64
14:41:56.054812 IP 12.34.56.78 > 18.66.2.67: ICMP echo request, id 6050, seq 1, length 64
14:41:56.078068 IP 18.66.2.67 > 12.34.56.78: ICMP echo reply, id 6050, seq 1, length 64

Deses Resultat erhalte ich bei Pings:
- von Firewall nach Internet
- Irgendwelchen Clients in em2_vlan1100
- Irgendwelchen Clients in em2_vlan1200
- Irgendwelchen Clients in em2_vlan1302
- OpenVPN VM welche bei em2_vlan1302 angeschlossen ist

Wenn ich jedoch einen Client aus dem Internet (z.B. Handy, also sicher extern) mit der OpenVPN VM verbinde und dann ins Internet pingen möchte, erhalte ich:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:45:06.913477 IP 10.1.200.34 > 8.8.8.8: ICMP echo request, id 54391, seq 0, length 64
14:45:07.913320 IP 10.1.200.34 > 8.8.8.8: ICMP echo request, id 54391, seq 1, length 64

Ich vermute, dass ich irgendwo eine Option auf der OPNsense falsch eingestellt habe, nur stehe ich leider wie der Esel vorm Berg und sehe das nicht.

Benötigt ihr noch weitere Informationen um mir auf die Sprünge helfen zu können?
Schon im Voraus, vielen Dank für eure Unterstützung.

Gruss Thorwaler

> Ich hoffe, dass das Netzdiagramm oben einigermassen verständlich ist.

Jap soweit schon :)

> Deses Resultat erhalte ich bei Pings:

Das Resultat also Pings von 12.34.56.78 nach irgendwohin oder was ist als Resultat gemeint? Dass hier die externe IP steht? Nach deinem TCPdump output schneidest du ja am WAN mit, somit hast du also die Außenseite der Firewall und NAT wurde schon angewendet, also gehe ich davon aus, dass die Dummy IP deine externe zu dem Zeitpunkt ist.

> mit der OpenVPN VM verbinde und dann ins Internet pingen möchte, erhalte ich:

Du bekommst also das Einwahlnetz 10.1.200.0/24 angezeigt, korrekt?

Dann zwei Fragen dazu (wobei die 2. in Unterpunkten ;))

1) Warum eine externe OpenVPN Maschine die dann noch ein weiteres Interface(?) hat (zumindest siehts so aus)

2a) Hast du das OpenVPN Einwahlnetz 10.1.200.0/24 irgendwann/wo geändert?
2b) hast du eine Route für 10.1.200.0/24 auf der OPNsense gesetzt die auf den Debian/OpenVPN Server zeigt?
2c) hast du in NAT/Outbound den Typ auf automatic, hybrid oder manuell?

Im Prinzip fehlt deiner Sense einfach schlicht die Kenntnis, dass ein Netz 10.1.200.0/24 existiert und wo es ist (darum 2a). Da sie es nicht weiß, kann auch der Auto-Outbound-NAT keine automatische NAT Regel erzeugen und daher wird dein Traffic via VPN nicht geNATtet. Bei der pfSense ist das eigentlich genauso, außer du hast/hattest eine Route angelegt. Eine Route für lokalen Traffic wird bei der Outbound NAT Automatik dort mit berücksichtigt, daher Frage 2b. Und je nach eingestelltem Modus musst du die NAT Regeln eh manuell machen, daher 2c. :)

Darum schauen was Phase ist, ob es ne Route gibt etc., ob Mode auf automatic, dann einfach auf Hybrid stellen und das Netz manuell hinzufügen. Oder wenn es keine Route gibt eine setzen und schauen ob die Automatik dann selbständig greift.

Cheers
\jens
"It doesn't work!" is no valid error description! - Don't forget to [applaud] those offering time & brainpower to help you!
Better have some *sense as no(n)sense! ;)

If you're interested in german-speaking business support, feel free to reach out via PM.

September 17, 2022, 05:54:10 PM #2 Last Edit: September 18, 2022, 07:54:40 AM by Thorwaler
Hi jens

Vielen Dank für deine schnelle Antwort, leider finde ich unter der Woche nicht so Zeit für solche Projekte, entschuldige deshalb meine späte Antwort.

kurze Antwort:
Das Umstellen von Automatic auf Hybrid und der Eintrag haben geholfen, nun funktioniert es wie gewünscht.

lange Antwort (der Reihe nach):

Ja, 12.34.56.78 ist meine externe Dummy-IP-Adresse.
Der TCPdump ist jeweils an der WAN-Schnittstelle, soweit ich weiss, sollte da doch NAT IMMER schon angewendet sein, oder täusche ich mich da?

Ja, an der WAN-Schnittstelle erscheint 10.1.200.0/24 anstelle der erwarteten Dummi-IP-Adresse (12.34.56.78). Aller andere Traffic wird soweit ich gesehen habe korrekt geNATet.

1) Die OpenVPN VM existiert inzwischen schon länger und bisher bin ich damit gut zurecht gekommen. Soweit ich den Konfigurationsbeispielen folgen konnte wird dies bei OpenVPN so gemacht, lasse mich jedoch gerne eines besseren belehren :-)

2a) Nein dieses Netz ist schon seit anbeginn der Zeit so definiert.
2b) Ja, eine Route wird via OSPF (FRR) gesetzt (das ganze Netz ist grösser als dargestellt, da sind noch 3 Site2Site VPN's vorhanden welche auch auf dem OpenVPN-Gateway terminieren.
Zu Testzwecken habe ich auch eine statische Route (10.0.0.0/8) von OPNsense nach OpenVPN eingerichtet, scheint jedoch keinen Unterschied zu machen. Dazu jedoch "nur" auf die "Apply"-Schaltfläche geklickt, müsste da noch mehr (Reboot oder ähnliches) gemacht werden um das zu aktivieren?
2c) Unter Firewall->NAT->Outbound
steht der Typ auf "Automatic outbound NAT rule generation"
Unter Firewall->Settings->Advanced
Network Address Translation
Reflection for port forwards                  checked
Reflection for 1:1                                  not checked
Automatic outbound NAT for Reflection      not checked

Leider habe ich kein Konfig-Backup der PFsense mehr das als Referenz hinzugezogen werden könnte.

Von der OPNsense den verbundenen VPN-Client kann gepingt werden (ping 10.1.200.34)
Ein "netstat -r" auf der OPNsense zeigt mir die Route an (was mir unwichtig erscheint habe ich weggelassen):
root@opnse-001:~ # netstat -r
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
0.0.0.0/8          link#2             U           em1                     (em1 (opt1) müsste laut Interfaces Overview ein vorbereiteter WAN02 sein, der zwar enabled aber nicht in Betrieb ist)
default            12.34.56.78       UGS         em0
...
10.1.100.0/24      link#3             U           em2
opnse-001          link#3             UHS         lo0
10.1.100.15        link#10            UHS         lo0                  (ist eine Virtual IP)
10.1.101.0/24      link#12            U      em2_vlan
opnse-001          link#12            UHS         lo0
10.1.102.0/24      link#13            U      em2_vlan
opnse-001          link#13            UHS         lo0
10.1.110.0/24      link#14            U      em2_vlan
opnse-001          link#14            UHS         lo0
10.1.200.0/24      10.1.90.30         UG1    em2_vlan
10.1.200.2         10.1.90.30         UGH1   em2_vlan
10.2.100.0/24      10.1.90.30         UG1    em2_vlan
...
12.34.56.0/22    link#1             U           em0
opnse-001          link#1             UHS         lo0
localhost          link#4             UH          lo0
...

Nun ist mir unklar weshalb es trotz vorhandener Route im Automatic nicht funktioniert.
Hast du da allenfalls noch eine gute Idee dazu?

Vielen Dank für deine Zeit und Unterstützung.

Gruss und ein gutes Wochenende.
Cyrill

Hast du mal auf Hybrid umgeschaltet und manuell eine outbound NAT Regel angelegt für die 10.1.200.0/24? Wenn nicht, dann einfach mal testen und dann müsste auch das NATting passen.

Grüße
"It doesn't work!" is no valid error description! - Don't forget to [applaud] those offering time & brainpower to help you!
Better have some *sense as no(n)sense! ;)

If you're interested in german-speaking business support, feel free to reach out via PM.

Ja mit Hybrid und der Regel funktioniert es nun.

Danke vielmals für den Tipp.

Gruss zurück