stefankittel
Goto Top

PFSense Portforwarding MultiWAN in DMZ

Moin,

bei einem Kunden gibt es eine pfsense welche bestimmte eingehende SSL-Verbindung auf verschiedene EDI-Server in der DMZ mit IP-Filtern routet.

Das Internet besteht hier leider nur aus einer handvoll vDSL-Verbindungen mit 16-25 MBit mit normalen vDSL-Routern. Was anderes wird hier vermutlich so gegen 2079 verfügbarbar werden.

Die Art der Verbindung gibt der Lieferant vor und ist nicht verhandelbar.
Der Lieferant verwendet DSN-Einträge des Kunden mit einer TTL von 60 Sekunden.
Ich kann also relativ schnell von einem Anschluss zu einem anderen wechseln.

Die vDSL-Router leiten alle Ports an die PFSense und je nach Port und Absender IP gibt es in der PFSense einfache Weiterleitungsregeln.

Jetzt gibt es in der PFSense WAN1, WAN2 bis WAN12.
Wenn man eine Portweiterleitung hinzufügt muss man zwingend das Interface, z.B. WAN7 auswählen.
Bei einem Ausfall muss man die betreffenden Weiterleitungen in der PFSense anpassen.

Gibt es eine Möglichkeite eine Portweiterleitung für alle WANs einzurichten?

Die Lösung wird von 2 Personen vor Ort betreut die sich damit auskennen.
Eine Lösung mit einem Server im WAN und Tunnel in die PFSense etc ist nicht gewünscht weil es zu komplex sei.
Die aktuelle Lösung ist einfach nachzuvollziehen.

Stefan

Content-ID: 73091734300

Url: https://administrator.de/contentid/73091734300

Printed on: October 8, 2024 at 00:10 o'clock

8585324113
8585324113 Nov 23, 2023 at 09:58:02 (UTC)
Goto Top
SSL was?

Vielleicht ein Reverse Proxy?
Spirit-of-Eli
Spirit-of-Eli Nov 23, 2023 at 09:58:50 (UTC)
Goto Top
Moin,

mir fällt gerade keine andere Option ein als sowas für jedes Interface separat anzulegen.
Das ist da leider eine Schwäche bei der PfSense.

Bei einer Fortinet wäre das allerdings simpel möglich. Dort lässt sich als Source Interface einfach "any" oder ne Zone definieren.
Sollte auch nicht so schwer zu erklären sein.

Gruß
Spirit
NordicMike
NordicMike Nov 23, 2023 at 10:00:36 (UTC)
Goto Top
Bei einem Ausfall muss man die betreffenden Weiterleitungen in der PFSense anpassen.
Du kannst jedem WAN eine Portweiterleitung einmalig einrichten und immer aktiv lassen. Sie muss im Ausfall nicht deaktiviert werden.
StefanKittel
StefanKittel Nov 23, 2023 updated at 11:01:00 (UTC)
Goto Top
Zitat von @8585324113:
SSL was?
Vielleicht ein Reverse Proxy?
TCP SSL Direktverbindung, kein HTTPs, kein mir bekanntes Protokoll

Zitat von @Spirit-of-Eli:
mir fällt gerade keine andere Option ein als sowas für jedes Interface separat anzulegen.
Das ist da leider eine Schwäche bei der PfSense.
Schade

Zitat von @NordicMike:
Bei einem Ausfall muss man die betreffenden Weiterleitungen in der PFSense anpassen.
Du kannst jedem WAN eine Portweiterleitung einmalig einrichten und immer aktiv lassen. Sie muss im Ausfall nicht deaktiviert werden.
Ja, aber 12 WAN x 20 Verbindungen sind 240 Weiterleitungen. Das ist nicht unbedingt übersichtlich face-smile
8585324113
8585324113 Nov 23, 2023 at 12:10:07 (UTC)
Goto Top
Keine Header, nur IP:Port und IP:Port? Oder wie sehen die Verbindungen aus?
StefanKittel
StefanKittel Nov 23, 2023 at 12:32:13 (UTC)
Goto Top
Zitat von @8585324113:
Keine Header, nur IP:Port und IP:Port? Oder wie sehen die Verbindungen aus?
Ja.
Ich habs mal mitgeschnitten. Da kommen einfach RAW-Daten ohne Header an.
NordicMike
NordicMike Nov 23, 2023 at 12:40:24 (UTC)
Goto Top
aber 12 WAN x 20 Verbindungen sind 240 Weiterleitungen. Das ist nicht unbedingt übersichtlich
Ich befürchte bei so vielen Leitungen und so vielen Ports du wirst nicht mehr viel Auswahl haben um es übersichtlich zu gestalten.

Kann pfSense mehrere Dienste zu einer Gruppe zusammenfügen? Dann brauchst du nur eine Regel (pro WAN) in der alle Dienste / Ports in der Gruppe sind - vorausgesetzt sie gehen alle an den selben internen Zielserver.
aqui
aqui Nov 23, 2023 at 13:27:13 (UTC)
Goto Top
Kann pfSense mehrere Dienste zu einer Gruppe zusammenfügen?
"Aliases" ist das Zauberwort. face-wink
Spirit-of-Eli
Spirit-of-Eli Nov 23, 2023 updated at 13:39:42 (UTC)
Goto Top
Zitat von @aqui:

Kann pfSense mehrere Dienste zu einer Gruppe zusammenfügen?
"Aliases" ist das Zauberwort. face-wink

Bei den Ports geht das allerdings auch nicht. Genauso wenig wie bei den Interface Konfigurationen. (Bezogen aufs Portforwarding)
Das ist leider ein Manko.
aqui
aqui Nov 23, 2023 at 13:47:51 (UTC)
Goto Top
Bei den Ports geht das allerdings auch nicht.
Das ist so aber nicht ganz richtig. Natürlich kann man eine Reihe von TCP oder UDP Ports unter einem Port Alias zusammenfassen. Was dann aber vermutlich nicht geht ist diesen Alias dann in einer Port Forwarding Regel zu verwenden weil diese Port Aliases wohl nur im Regelwerk nutzbar sind?!
Spirit-of-Eli
Spirit-of-Eli Nov 23, 2023 updated at 13:55:02 (UTC)
Goto Top
Zitat von @aqui:

Bei den Ports geht das allerdings auch nicht.
Das ist so aber nicht ganz richtig. Natürlich kann man eine Reihe von TCP oder UDP Ports unter einem Port Alias zusammenfassen. Was dann aber vermutlich nicht geht ist diesen Alias dann in einer Port Forwarding Regel zu verwenden weil diese Port Aliases wohl nur im Regelwerk nutzbar sind?!

Darauf wollte ich hiermit hinaus: "(Bezogen aufs Portforwarding)"

In der Maske ist das leider nicht möglich und die Einträge müssen eindeutig sein.
Was theoretisch gehen könnte, wäre irgend was über eine Virtual IP zu bauen. Das ist gerade allerdings Gedankenspinnerei. Die Adresse ließe sich dort jedenfalls bei den Interface Konfigurationen eintragen. Unter Ports bleibt wohl weiter nichts anderes überig als eine klare Definition bzw. Range.
StefanKittel
StefanKittel Nov 23, 2023 at 14:27:44 (UTC)
Goto Top
Zitat von @Spirit-of-Eli:
Was theoretisch gehen könnte, wäre irgend was über eine Virtual IP zu bauen. Das ist gerade allerdings Gedankenspinnerei.

Ok, ich halte fest: Es geht nicht out of the Box mit einer Option die ich nicht kenne.
Schade.

Ich könnte es andersrum probieren.
Das selbsterzeugte Problem hier, dass jeder WAN-Anschluss ein eigenes VLAN hat.
Neben vielen praktischen Vorteilen, führt dies zur der großen Anzahl an WAN-Interfaces.

Überlegung 1: 2. PFSense
Die 1. pfsense leitete alle Ports von z.B. 8000-8999 an die 2. pfsense.
Dann gibt es auf der 1. pfsense 12 Weiterleitungen für die 12 WAN-Interfaces und 20 Weiterleitung auf der 2. pfsense für die Ports.

Überlegung 2: Keine WAN-Interfaces
Alle Router kommen in ein VLAN, DHCP wird bei denen ausgeschaltet und die bekommen die IPs z.B. 10.100.1.10-21
Dann ist die Quelle kein Interface sonder eine IP.

Ich werde mal anfragen ob so etwas gewünscht ist.
Es passiert nicht so oft dass ein Anschluss ausfällt, aber meist dann wenn gerade keiner da ist sich drum zu kümmern face-smile

Stefan
Spirit-of-Eli
Spirit-of-Eli Nov 23, 2023 at 14:33:36 (UTC)
Goto Top
Deine "Überlegung 1" ist gut. Allerdings brauchst du keine zweite Sense.
Hier kannst ja schlicht eine Virtual-IP nutzen. Das müsste soweit gehen.

Alternativ wie gesagt ne Fortinet. Wobei dein Problem mit den Ports dann ebenfalls bleiben würden. Lösen kannst du das nur mit z.B. deiner "Überlegung 1".
StefanKittel
StefanKittel Nov 23, 2023 at 14:35:26 (UTC)
Goto Top
Ich probiere das Mal und berichte dann
NordicMike
NordicMike Nov 23, 2023 at 15:05:50 (UTC)
Goto Top
Oder, falls du nicht auf pfSense fixiert bist, steigst du auf opnSense um, da kann man dem NAT mehrere Schnittstellen zuweisen.
Dani
Dani Nov 25, 2023 at 10:23:57 (UTC)
Goto Top
Moin,
Wenn man eine Portweiterleitung hinzufügt muss man zwingend das Interface, z.B. WAN7 auswählen.
Bei einem Ausfall muss man die betreffenden Weiterleitungen in der PFSense anpassen.
wäre die Nutzung eines DNS Load Balancer wie Azure Traffic Manager denkbar? Richtest für jedes Interface das Portforwarding ein und ATM steuert automatisch auf welcher Leitung die Daten eingehen werden.


Gruß,
Dani
StefanKittel
StefanKittel Nov 28, 2023 updated at 21:28:07 (UTC)
Goto Top
Zitat von @Spirit-of-Eli:
Deine "Überlegung 1" ist gut. Allerdings brauchst du keine zweite Sense.
Hier kannst ja schlicht eine Virtual-IP nutzen. Das müsste soweit gehen.

Irgendwo habe ich noch einen Knoten im Kopf.

Ich kann eine Virtuelle IP anlegen.
Und dann?

Ich brauche für jede Weiterleitung ja immer ein Interface.

WAN1 und WAN2 leiten den Port 444 auf diese Virtuelle IP Port 444 weiter.
OK

WAN1 = 217.1.1.1
WAN2 = 80.1.1.1

Aber wie leite ich den Port 444 von der virtuellen IP an den Ziel-PC?
Ich muss ja ein Interface auswählen und habe keines.

Ich habe versucht ein VLAN zu erstellen was es nicht gibt.
10.255.255.1/24 mit VLAN999
Die WAN leiten auf die 10.255.255.1 weiter.
Dann im Interface VLAN999 den Port 444 auf den Ziel-PC.
Das funktioniert aber nicht.

Jemand einen Tipp?

Stefan

PS: Auf eine opnsense zu wechseln ist recht aufwendig. Schöner wäre es wenn es so gehen würde.

PS2: Sollte Jemand hier bereit und qualifiziert sein mir gegen Geld dies einzurichten, so gerne eine PM an mich.
StefanKittel
StefanKittel Nov 29, 2023 at 10:43:54 (UTC)
Goto Top
Hallo,

laut pfsense forum geht das nicht.
https://forum.netgate.com/topic/184438/how-to-multi-forward-with-multi-w ...

Also bleibt wohl nur die Variante mit der 2. pfsense als WAN-Concentrator-In
NordicMike
NordicMike Nov 29, 2023 at 10:50:33 (UTC)
Goto Top
Ich sehe im Link dass verschiedene Portnummern an verschiedene Zielserver gehen sollen. Das kannst du dann auch nicht über eine zweite pfSense oder virtuelle IP multiplexen, da bleibt dir nichts anderes übrig als alle Regeln einzeln einmal einzugeben.
StefanKittel
StefanKittel Nov 29, 2023 at 11:13:36 (UTC)
Goto Top
Moin,

Zitat von @NordicMike:
Ich sehe im Link dass verschiedene Portnummern an verschiedene Zielserver gehen sollen. Das kannst du dann auch nicht über eine zweite pfSense oder virtuelle IP multiplexen, da bleibt dir nichts anderes übrig als alle Regeln einzeln einmal einzugeben.

Doch.

10x WAN
40x PC/Server mit je einem TCP-Port von 8000 bis 8039

Wenn ich möchte, dass alle 40 Ports über alle 10 WAN-Ports eingehen könenn benötige ich 10*40=400 Weiterleitungen.

Wenn ich in PFSense1 den Portrange 8000-8039 aller WAN-Anschlüsse an PFSense weiterleite sind das 10 Regeln.
Dann leite ich in PFSense2 die Ports 8000-8039 einzeln an die Ziele weiter. Das sind dann 40 Regeln.
Also zusammen 10+40=50 Regeln. Also deutlich weniger.

Stefan
NordicMike
NordicMike Nov 29, 2023 updated at 12:25:02 (UTC)
Goto Top
Du könntest der pfSense zwei weitere Schnittstellen (X+Y) geben. Die Schnittstellen brückst du. Du schickst die extern ankommenden Portnummern zu Schnittstelle X raus und alles, was bei Schnittstelle Y wieder rein kommt, routest du an die Server weiter.
Spirit-of-Eli
Spirit-of-Eli Nov 29, 2023 updated at 12:30:47 (UTC)
Goto Top
Ein Portforwarding auf eine Virtual-IP und von dort aus auf die Ziel Adresse müsste deine Port Transition doch ermöglichen.

Ich kann das gerne nachher mal testen.

Du wirst dafür jeden Falls zwei mal NAT brauchen.
StefanKittel
StefanKittel Nov 29, 2023 at 13:31:44 (UTC)
Goto Top
Zitat von @NordicMike:
Du könntest der pfSense zwei weitere Schnittstellen (X+Y) geben. Die Schnittstellen brückst du. Du schickst die extern ankommenden Portnummern zu Schnittstelle X raus und alles, was bei Schnittstelle Y wieder rein kommt, routest du an die Server weiter.

Das habe ich probiert.
Ich habe ein VLAN angelegt und die Weiterleitung zu der IP und vorn dort zum Ziel konfiguriert.
Es kam nicht an.

Stefan
StefanKittel
StefanKittel Nov 29, 2023 at 14:04:25 (UTC)
Goto Top
Zitat von @Spirit-of-Eli:
Ein Portforwarding auf eine Virtual-IP und von dort aus auf die Ziel Adresse müsste deine Port Transition doch ermöglichen.
Ich habe es nicht hinbekommen.
Ich habe eine virtuelle IP erstellt und eine Weiterleitung auf diese eingerichtet.

Wenn ich nun von dieser IP weiterleiten möchte muss ich ein Interface auswählen.
Ich habe mal localhost verwendet, aber es funktionierte nicht.

Auch mit einem VLAN hat es nicht funktioniert.

Ich kann das gerne nachher mal testen.
Das wäre toll. Ich stelle eine 5kg Süßkramsbox als Motivation in Aussicht.
Wenn es nicht geht würde ich eine 2. pfsense als WAN-Concentrator installieren.

Wie oben beschrieben bin ich auch bereit Geld für Dienstleistung zu bezahlen.

Du wirst dafür jeden Falls zwei mal NAT brauchen.
Ich habe kein Problem mit NAT. Es ist ja "nur" eingehend.

Stefan
8030021182
8030021182 Nov 29, 2023 updated at 14:46:47 (UTC)
Goto Top
Wozu überhaupt doppeltes NAT?? Route doch einfach direkt vom Perimeter aus auf die Station durch statt auf der pfSense nochmal zu DST-NATen. Man setzt dann nur pro Interface ein Routing-Tag per Filter-Regel und eine GW Rule die auf den Tag aufbaut, damit der Traffic wieder über das richtige Interface zurück läuft.
Das mit einer einzelnen Regel klappt auf einer pFSense nicht, denn diese muss ja wissen auf welchem Pfad sie das Paket zurückschicken muss und das klappt nur wenn reply-to richtig gesetzt ist damit Pakete die eingehen auch wieder über das selbe Interface die Sense verlassen.
Die Pakete kommen ja mit einer öffentlichen IP bei der Sense an und nicht mit einer privaten der vorgeschalteten Router, ergo braucht es auf der Sense Tags die die Sessions mit dem passenden Routing-Tag versehen, denn ansonsten würde sie ja ihr primary Default-GW nutzen um das Paket wieder raus zu schicken, und wenn das nicht das Interface war wo es rein gekommen ist knallt es natürlich.

Gruß Katrin
StefanKittel
StefanKittel Nov 29, 2023 at 15:05:11 (UTC)
Goto Top
Zitat von @8030021182:
Wozu überhaupt doppeltes NAT?? Route doch einfach direkt vom Perimeter aus auf die Station durch statt auf der pfSense nochmal zu DST-NATen.
Dann habe ich 10 Fritz!Boxen wo ich je 40 Regeln eintragen muss.
Sind immer noch 400 Regeln.
8030021182
8030021182 Nov 29, 2023 updated at 15:17:09 (UTC)
Goto Top
Naja irgendwo musst du sie ja haben wenn du NAT am Perimeter hast.

P.s. es gibt ja auch Skripte die einem das stumpfsinnige Tippeln abnehmen 😉
8030021182
8030021182 Nov 29, 2023 updated at 15:36:06 (UTC)
Goto Top
Alternativ könnte man auch einen Nginx hinstellen oder auf der pfSense installieren und auf diesen von allen FBoxen die Portrange weiterleiten. Auf dem ngnix steht dann die genau Zuordnung der einzelnen Ports, so gibt es die 10 Weiterleitung der FBoxen, und nur einmal die Zuordnung auf dem nginx für die Stationen .
StefanKittel
StefanKittel Nov 29, 2023 at 17:15:51 (UTC)
Goto Top
Zitat von @8030021182:
P.s. es gibt ja auch Skripte die einem das stumpfsinnige Tippeln abnehmen 😉
Die API der pfsense gibt das nicht her und ich möchte ungern mit skripten an der XML-Config-Datei rumfummeln.
StefanKittel
StefanKittel Nov 29, 2023 at 17:17:16 (UTC)
Goto Top
Zitat von @8030021182:
Alternativ könnte man auch einen Nginx hinstellen....
Nein. Wie Oben beschrieben ist dies kein http(s)-Traffic sondern SSL-TCP-Data-Streams ohne bekanntes Protokol.

Ich habe es mal mit HAProxy probiert.
Es funktioniert nicht bei allen Verbindungen und die Konfiguration (Config-File) ist weniger Benutzerfreundlich als das Webinterface der pfsense.
8030021182
Solution 8030021182 Nov 29, 2023 updated at 17:30:05 (UTC)
Goto Top
Zitat von @StefanKittel:
Nein. Wie Oben beschrieben ist dies kein http(s)-Traffic sondern SSL-TCP-Data-Streams ohne bekanntes Protokol.
Nginx kann natürlich auch non HTTPS Traffic über TCP/UDP relayen, mache ich hier ja auch! face-smile

Beispiel um SSH an einem Nginx von Port 2222 auf 22 nach intern weiterzuleiten
stream {
    upstream ssh_group {
        server 10.5.1.4:22 max_fails=3 fail_timeout=10s;
    }
    server {
        listen 2222;
        listen [::]:2222;
        proxy_pass ssh_group;
        proxy_connect_timeout 1s;
    }
}
Kann man auch schön Failover und Loadbalancing mit konfigurieren.
Module ngx_stream_core_module

Klappt hier wie Schmitz Katz auch mit anderen unbekannten (eigenen) Protokollen erfolgreich getestet.
StefanKittel
StefanKittel Nov 29, 2023 updated at 17:59:20 (UTC)
Goto Top
Zitat von @8030021182:
Zitat von @StefanKittel:
Nein. Wie Oben beschrieben ist dies kein http(s)-Traffic sondern SSL-TCP-Data-Streams ohne bekanntes Protokol.
Nginx kann natürlich auch non HTTPS Traffic über TCP/UDP relayen, mache ich hier ja auch! face-smile
Das ist mir neu. Danke für den Tipp.
Deshalb schreibe ich hier. Weil es Dinge gibt die man nicht kennt und deshalb nicht auf die Idee kommt danach zu suchen.

Dann überlege ich gerade bezüglich einer ganz anderen Idee.
Eine VM mit NGINX bei der ein Skript die NGINX-Config schreibt.