Merkwürdiges Problem mit "Double NAT" und "Port-Translation"



  • Hi,

    ich habe ein ganz merkwürdiges Problem mit zwei kaskadierten Routern:

    VDSL -> WAN-Port - Fritzbox - LAN-Port –  -> -- WAN-Port - PFSense - LAN-Port -- -> -- Server-Port

    Kurz zum Einsatzzweck: Ein ASP-Serveranbieter (Terminalserver im Internet) gesteht mir keine eigene VPN-Verbindung zum Mailserver in unserem Büro zu.
    Also habe ich per PFSense den Zugriff zum Mailserver auf die eine externe IP-Adresse "unseres" Terminalservers beschränkt.

    Spreche ich nun unseren Mailserver vom Terminalserver aus über Port 25 und 143 an (der dann so auch am Server Port landet), dann funktioniert mein zweifaches Port-Forwarding in Fritzbox und PFSense einwandfrei.

    Nun wollte ich aber gerne - trotz der beschränkten erlaubten Absenderadresse der Pakete - die Ports, über welche der Mailserver von außen erreichbar ist, auf 21091 und 21092 ändern.

    Und schon funktioniert die Sache nicht mehr.

    Für mich sieht es in den Logdateien des Mailservers so aus, als ob der Verbindungsversuch zwar beim Server ankommt, aber dann folgt irgendwann ein Timeout. Meine Vermutung: Die Antwortpakete gehen nicht raus.

    Die Route im Mailserver ist richtig gesetzt - das sieht man ja auch daran, dass es mit Port 25 funktioniert.

    Ich habe versucht, die Portumwandlung erst in der Fritzbox durchzuführen und dann der PFSense bereits den Port 25 am WAN-Port vorzusetzen, sodass sie die Pakete einfach mit derselben Portnummer weiterleitet -> geht nicht.

    Dann habe ich versucht, die Fritzbox die 21091 weiterzuleiten lassen und die Umsetzung auf 25 bei der Weiterleitung in der PFSense durchzuführen - auch hier kommt keine Verbindung zustande.

    Und nun stehe ich auf dem Schlauch. Da die doppelte Weiterleitung ohne Portänderung ja funktionert, warum funktioniert sie nicht mit Portänderung in einem der Geräte?

    Da es auch egal ist, in welchem der Geräte ich die Portänderung vornehme, und ich nicht annehme, dass beide einen Softwarefehler haben, liegt wohl irgendein logisches, grunsätzliches Verständnisproblem bei mir vor, fürchte ich..

    Kann mir jemand weiterhelfen?

    Danke...



  • Hi!

    @ksibln:

    Also habe ich per PFSense den Zugriff zum Mailserver auf die eine externe IP-Adresse "unseres" Terminalservers beschränkt.

    Wollen euch keine anderen Server Mails schicken? Oder holt der Mailserver die irgendwo selbst ab?
    Wenn nicht, sollte das ja reichen für einen Mailserver. Da gibt es ohnehin nur Aktionen, wenn auch Antworten vom gegenüber kommen.

    Wichtiger wäre mir, den Traffic zwischen den beiden Servern zu verschlüsseln.

    @ksibln:

    Spreche ich nun unseren Mailserver vom Terminalserver aus über Port 25 und 143 an (der dann so auch am Server Port landet), dann funktioniert mein zweifaches Port-Forwarding in Fritzbox und PFSense einwandfrei.

    Nun wollte ich aber gerne - trotz der beschränkten erlaubten Absenderadresse der Pakete - die Ports, über welche der Mailserver von außen erreichbar ist, auf 21091 und 21092 ändern.

    Und schon funktioniert die Sache nicht mehr.

    Für mich sieht es in den Logdateien des Mailservers so aus, als ob der Verbindungsversuch zwar beim Server ankommt, aber dann folgt irgendwann ein Timeout. Meine Vermutung: Die Antwortpakete gehen nicht raus.

    Die Route im Mailserver ist richtig gesetzt - das sieht man ja auch daran, dass es mit Port 25 funktioniert.

    Ich habe versucht, die Portumwandlung erst in der Fritzbox durchzuführen und dann der PFSense bereits den Port 25 am WAN-Port vorzusetzen, sodass sie die Pakete einfach mit derselben Portnummer weiterleitet -> geht nicht.

    Dann habe ich versucht, die Fritzbox die 21091 weiterzuleiten lassen und die Umsetzung auf 25 bei der Weiterleitung in der PFSense durchzuführen - auch hier kommt keine Verbindung zustande.

    Vielleicht eine dumme Frage, aber was spricht dagegen (wenn ohnehin kein anderer Host den Mailserver kontaktiert), den SMTP und IMAP Server gleich auf 21091 und 21092 lauschen zu lassen?

    Wenn es das nicht sein soll, eine Idee hab ich noch, ich bin aber absolut nicht double-NAT-erfahren.
    Vielleicht hilft es, dass du auf der pfSense eine Outbound NAT Regel für die beiden Protokolle anlegst, die den Port wieder genau so zurücktransferiert, denn das erwartet ja der Terminalserver.

    Das stell ich mir so vor: Gehe auf Firewall: NAT: Outbound. Wenn du da "Automatic outbound NAT rule generation" aktiv hast, aktiviere "Hybrid Outbound NAT rule generation" und Save.
    Dann eine Regel hinzufügen:
    Interface: WAN
    Protokoll: <würde wohl="" tcp="" reichen="">Source: <mailserver ip="">Source Port: 25
    Destination: <kann any="" bleiben,="" weil="" ohnehin="" nur="" der="" terminalserver="" rankommt,="" oder="" eben="" die="" term.server="" ip="">Port: <leer>Translation: Interface address
        Port: 21091

    Und dasselbe nochmal für IMAP.

    Sicherheitshalber die pfSense dann neu starten. Hab schon öfter erlebt, dass das Outbound NAT ohne nicht greift.
    Könnte mir denken, dass das hilft, denn das Outbound NAT nimmt ansonsten einen beliebigen Port.

    Viel Erfolg und Grüße</leer></kann></mailserver></würde>



  • Hi,

    danke für die Antworten.

    Unser Mailserver holt die Mails beim Mailprovider per fetchmail ab und versendet sie letztendlich auch wieder darüber. Andere Clients oder Mailserver sollen von außen unseren Mailserver nicht erreichen können (außer eben den Clients auf diesem Terminalserver). Dass wir unseren Mailhoster als Relay nutzen hat etwas mit dem Spamschutz bei den meisten Mailservern zu tun, dem wir sonst als Mini-Mailserver zum Opfer fallen würden.

    Verschlüsselt sind die SMTP- und IMAP-Verbindungen natürlich, mit STARTTLS, das wiederum ein TLS1.2 aushandelt (aller mehrfach geprüft) und darüber dann auch die Anmeldung durchführt (auf derselben Verbindung).

    Den Mailserver direkt auf den "falschen" Ports lauschen zu lassen, hatte ich auch schon als letzte Maßnahme überlegt.

    Allerdings würde mich schon sehr stark interessieren, wo denn eigentlich das Problem darin liegt - deshalb auch hier die Frage…

    Die Outbound-Regeln stehen bei mir tatsächlich auf "Automatic", wie im Werkszustand. Wobei ich auch gestehen muss, dass dies für mich völliges Neuland ist...  Mir ist bisher nicht klar, was man dort eigentlich genau einstellt - klar, irgendetwas mit den Portnummern, die im Rahmen des NAT vergeben werden, aber der Rest ist für mich zurzeit noch sehr rätselhaft...

    Eigentlich hätte ich gedacht, dass die Sache so funktioniert (ohne an den NAT-Regeln herumdoktorn zu müssen):

    • Der Terminalserver sendet an Port 21091 an die Fritzbox das Sync zum Verbindungsaufbau für den Mailserver, unter einem Antwort-Port von z.B. 50000.

    • Die Fritzbox leitet das weiter unter Port 25 an die PFSense, unter einem Absenderport von z.B. 40000, und merkt sich den zugehörigen Port 50000 für das Antwortpaket, das sie unter der 40000 zurückerhalten wird.

    • Ähnlich dann bei der PFSense:
      Die erhält unter Port 25 das Paket von der Fritzbox mit Absenderport 40000 und leitet das weiter an den Mailserver unter Port 25 mit dem Absenderport z.B. 30000.

    • Der Mailserver erhält dann das Paket mit dem Sync unter Port 25 und sendet das zugehörige ACK Paket zurück an die PFSense unter Port 30000, die PFSense sendet es weiter unter dem gemerkten Port 40000 an die Fritzbox, und die Fritzbox leitet es dann weiter unter dem zugehörig gemerkten Port 50000 an den Terminalserver.

    Ist mein Gedankengang denn soweit richtig?

    Mit den Hybrid Regeln werde ich mich nun als nächstes beschäftigen, um das wirklich zu verstehen…

    Danke soweit schon einmal...



  • @ksibln:

    Die Outbound-Regeln stehen bei mir tatsächlich auf "Automatic", wie im Werkszustand. Wobei ich auch gestehen muss, dass dies für mich völliges Neuland ist…  Mir ist bisher nicht klar, was man dort eigentlich genau einstellt - klar, irgendetwas mit den Portnummern, die im Rahmen des NAT vergeben werden, aber der Rest ist für mich zurzeit noch sehr rätselhaft...

    Outbound NAT transferiert die Quell-IP u. den -Port der Pakete beim Verlassen von pfSense.

    @ksibln:

    Eigentlich hätte ich gedacht, dass die Sache so funktioniert (ohne an den NAT-Regeln herumdoktorn zu müssen):

    • Der Terminalserver sendet an Port 21091 an die Fritzbox das Sync zum Verbindungsaufbau für den Mailserver, unter einem Antwort-Port von z.B. 50000.

    • Die Fritzbox leitet das weiter unter Port 25 an die PFSense, unter einem Absenderport von z.B. 40000, und merkt sich den zugehörigen Port 50000 für das Antwortpaket, das sie unter der 40000 zurückerhalten wird.

    • Ähnlich dann bei der PFSense:
      Die erhält unter Port 25 das Paket von der Fritzbox mit Absenderport 40000 und leitet das weiter an den Mailserver unter Port 25 mit dem Absenderport z.B. 30000.

    • Der Mailserver erhält dann das Paket mit dem Sync unter Port 25 und sendet das zugehörige ACK Paket zurück an die PFSense unter Port 30000, die PFSense sendet es weiter unter dem gemerkten Port 40000 an die Fritzbox, und die Fritzbox leitet es dann weiter unter dem zugehörig gemerkten Port 50000 an den Terminalserver.

    Ist mein Gedankengang denn soweit richtig?

    Wenn die beiden Geräte wirklich so arbeiten, kannst du dir Outbound NAT wohl sparen. Das würde ich aber mit einem Sniffer überprüfen. Auf der pfSense kannst du dafür Packet Capture aus dem Diagnostics Menü verwenden. Ob die FB auch eine solche Möglichkeit bietet, weiß ich nicht.

    Übrigens gibt es hier im Deutschen Forum einen nicht all zu alten Thread bezüglich einer pfSense hinter einer Fritzbox. Ob da das Thema "Betrieb eines Servers" hinter der pfSense behandelt wird, weiß ich aber nicht. Den hab ich nicht verfolgt.


Log in to reply