packelend
Goto Top

MikroTik: NAT Masquerade kann ungewollt private IP weitergeben aber warum?

Hallo Administrator-Forum,
Ich habe ein Verständnisproblem damit, was passiert, wenn WAN-Schnittstellen gewechselt werden und Masquerading aktiv ist.
Insbesondere, wie die Verbindung aktiv bleibt, wenn das Routing über die primäre Verbindung (primäre WAN-Schnittstelle) wiederhergestellt wird, nachdem sie über die Backup-Route (Backup-WAN-Schnittstelle) geroutet wurde


In NAT - RouterOS - MikroTik Documentation heisst es:
Masquerade

... it was designed for specific use in situations when public IP can randomly change,...
Unfortunately, this can lead to some issues with unstable links when the connection gets routed over different links after the primary link goes down. In such a scenario following things can happen:
  • on disconnect, all related connection tracking entries are purged;
*next packet from every purged (previously masqueraded) connection will come into firewall as new, and, if a primary interface is not back, a packet will be routed out via alternative route (if you have any) thus creating a new masqueraded connection;
  • the primary link comes back, routing is restored over the primary link, so packets that belong to existing connections are sent over the primary interface without being masqueraded, that way leaking local IPs to a public network.
To work around this situation blackhole route can be created as an alternative to the route that might disappear on disconnect.
...
overcome limitations RouterOS includes a number of so-called NAT helpers, that enable NAT traversal for various protocols. When action=srcnat is used instead, connection tracking entries remain and connections can simply resume.
Zudem steht in Most underused and overused RouterOS features. My holy war against masquerade MUM, USA da Gleiche nur in kurz:
On disconnect, all related connection tracking entries are purged
Next packet from every purged connection will come into firewall as connection-state=new, and, packet will be routed out via alternative route thus creating new connection entry
When primary link comes back, routing is restored over primary link, so packets that belong to existing connections are sent over primary interface without being masqueraded


aber nirgends wird gesagt, warum:
  1. auf die primäre Verbindung zurückgeschaltet wird?
  2. die Verbindung nicht unterbrochen wird (sie bleibt während dieses Prozesses ESTABLISHED, aber die Route ändert sich)?
  3. diese mysteriösen NAT-Helfer die Verbindung nicht als NEW Verbindung in der Connection Tracking erscheinen lassen?


Mein unvollstädniger Erklärungsversuch:
  1. Die Route über ETHER1 wird geschlossen --> alle Verbindungen über ETHER1 werden aus dem Connection-Tracking (CT) gelöscht. Der Datenverkehr wird über eine anderes Interface geleitet, sofern eine vorhanden ist.
  2. ETHER2 ist die Backup-Route, d.h. der Verkehr läuft jetzt über ETHER2 und wird wieder verfolgt und masqueraded. Dies liegt daran, dass die Verbindung unterbrochen wurde und neu aufgebaut werden muss, so dass CT den Verkehr als NEW und dann ESTABLISHED vom LAN durch NAT-Masquerade zu ETHER2 routed
  3. ETHER1 kommt wieder online, jetzt wird es mysteriös:
    1. Die Verbindung über ETHER2 wird zurück zu ETHER1 geschaltet, aber warum?
    2. Wie wird der ununterbrochene Datenfluss realisiert, wenn die Interface bei Routenänderungen umgeschaltet werden?
    3. warum ist die Verbindung jetzt ungültig?
      1. Die Verbindung wird von ETHER2 zu ETHER1 verschoben und bleibt verbunden, so dass kein TCP-Drei-Wege-Handshake stattfindet, bei dem SYN (+ACK) aus dem LAN gesendet wird.
      2. Die Verbindung wird nicht als NEW in CT eingetragen, da dies nur bei Verbindungen geschieht, die SYN (+ACK) aussenden?
      3. Sie wird also nicht MASQUERADED, wenn sie durch ETHER1 fließt, da NAT nur auf NEW reagiert?
      4. Die Regel drop connection-state=invalid packets funktioniert, da das Paket innerhalb des CT von ETHER1 nicht identifiziert werden kann, da das Paket keiner RELATED oder ESTABLISHED Verbindung zugeordnet werden kann?


Gruss und Danke

Stefan

Content-Key: 1101864804

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

Printed on: April 25, 2024 at 07:04 o'clock

Member: PackElend
PackElend Aug 05, 2021 at 20:22:58 (UTC)
Goto Top
nach einigen Unterhaltungen im MikroTik Forum könnte es so sein:

  • ein verlieren oder dazukommen einer Link führt zu einer neu Berechnung der verfügbaren Routen
  • ROS merkt, dass es eine Router gibt, die kürzer ist als die jetzt aktive
  • aller Verkehr wird von der aktiven (Backup) zur wiederhergestellten primären Route umgeleitet
  • ConnTrack etc. sieht keine Spur von einem TCP-Handshake etc. in den Aufzeichnungen von dem wiederhergestellten Link --> Traffic = invalid

macht das Sinn?
Member: PackElend
PackElend Aug 06, 2021 at 09:48:40 (UTC)
Goto Top
Zitat von @aqui:

Solange eine Session aktiv ist bleibt auch das NAT aktiv. Egal was das Ruleset sagt. Das stoppt erst wenn die Session geschlossen wurde oder man die NAT Session Table löscht oder resettet.

@aqui aber wie soll dann das NAT nicht eingreifen, wenn der primäre Link wieder da ist?
Irgendetwas passiert da, es ist aber unklar was da passiert, es liest sich als wird die Session vom backup link zum primeray link verschoben, wenn Zweiteres sich wieder meldet.
Der einzige unterschied zwischen diesen kann eingentlich nur distance sein, was eine änderung des link veranlassen könnte. Es besteht ja kein Anlass eines Reset des NAT Session Table, nur weil ein Link sich wieder meldet.
Member: PackElend
PackElend Aug 15, 2021 at 21:04:17 (UTC)
Goto Top
Ich habe mal MT-Support angeschrieben und habe folgende Antwort erhalten:
It will switch automatically if the default route with a shorter distance will come up.

beisst sich das nicht mit deiner Aussage?
Auf die Gegenfrage, ob es mehr Details dazu gibt habe ich mehr oder weniger nur den Text erhalten, welcher im Wiki steht.
Gibt es in der Doku zu iptables etwas, dass dies nicht so sein sollte?
Ich versuche ihn mit passenden Fragen, zu einer detaillierten Antwort zu bewegen.
Member: PackElend
PackElend Dec 23, 2021 updated at 21:13:06 (UTC)
Goto Top
Ich glaube, ich verstehe es langsam für eine Rückmeldung wäre dennoch sehr dankbar

ROUTING


sobald eine Interface verfügbar ist, wird sie in die Routenberechnung einbezogen, so dass die kürzeste, in unserem Fall das primary Interface, ausgewählt wird, so dass der Traffic wieder über die primäre Schnittstelle geleitet wird. Dies passiert rein auf Level-2- und Level-3 wie gut gezeigt in
01fig23_alt[1]
(Teil von Routing Decisions (1.2) > Routing Concepts | Cisco Press) Was ich nicht finde, ist, wann die Berechnungen die wiederhergestellte primäre Verbindung einschließen, bzw. was dies auslöst. Ich kann mir nur vorstellen, dass hier drei Punkte betroffen sind, siehe Auflistung 1b is 3 unten, welches zu zu folgenden Fragen führt:
    • ist mein Heim-Router gegenüber dem ISP in einem OSPF-Netzt oder gar noch etwas anderes, bzw. gibt es hier eine generische Aussage?
    • Ich sehe keinen wesentlichen Grund, warum 1 an all dem beteiligt sein sollte.
    • Wie oft wird ein OSPF link state advertisement / BGP-Scan durchgeführt, bzw. eine statische Route wieder berücksichtigt, wenn diese offline war?
    • Wird eines hiervor erwähnten ausgelöst, sobald eine Schnittstelle hochfährt und ein Router erkannt wird?
    • Die Erkennung, dass an einem Interface ein Router hängt, erfolgt allein aufgrund einer ICMP Echo Antwort, die abgefeuert wird, sobald ein Interface online ist?
    1. standardmäßig wird immer die Route mit der kürzesten Entfernung verwendet
    2. Routen werden alle 10 Sekunden durch Check-Gateway berechnet (arp | ping; Standard: "")
    3. Statisches Routing oder der Einsatz von dynamischen Routing (OSPF/BGP)
  • Es könnte dann so laufen: Schnittstelle erkennt Link (Check-Gateway erfolgreich) → IMCP Echo abgefeuert → Nachbarn tauschen Routen aus → Entfernungen werden neu berechnet → kürzeste Entfernung: primärer Link


IP LEAK


unter der Annahme, dass Pakete von innen nach außen gesendet werden, würde conntrack die Verbindung immer als ESTABLISHED anzeigen, da das { {ROUTING }} nach conntrack erfolgt, so dass es keine Ahnung hat, wie das Paket aufgrund dieser Reihenfolge PREROUTING-CHAIN--> FORWARD-CHAIN weitergeleitet wird:
02a_routing_forward[1]
02a_routing_forward_chains[1]
korrekt?