[fli4l] statisches Forward vs. dynamischer NAT-Eintrag
Christoph Schulz
fli4l at kristov.de
Mi Aug 17 22:56:49 CEST 2016
Hallo!
Am Wed, 17 Aug 2016 21:34:53 +0200 schrieb Erwin Lottermann:
> Hallo,
>
> folgende Frage bewegt mich:
>
> Angenommen man konfiguriert für Port 5060 UDP (SIP) ein statisches
> Forward für beliebige Absender auf eine Fritzbox im LAN.
> Dann startet man auf einem PC im LAN einen SIP-Client in dem man einen
> beliebigen externen SIP-Account konfiguriert hat und dieser erzeugt bei
> der Registrierung des Accounts in der NAT-Tabelle des fli4l einen
> Eintrag für den Provider und Port 5060 UDP für seine interne IP-Adresse.
>
> Was passiert jetzt wenn der SIP-Provider Daten an den fli4l Port 5060
> sendet?
>
> D.h. greift zuerst das konfigurierte Forwarding für any:5060 und die
> Daten werden an die Fritzbox weitergeleitet oder greift zuerst der
> dynamisch erzeugte NAT-Eintrag und die Daten gehen an den PC mit dem
> SIP-Client?
Deine Situation ist so nicht möglich. Ein Client kann nicht einfach einen
beliebigen NAT-Eintrag auf dem Router erzeugen. Wenn ich dich richtig
verstehe, meinst du mit "und Port 5060 UDP für seine interne IP-Adresse",
dass der von außen am fli4l erreichbare Port 5060 via NAT zum Client
geroutet werden soll. Ein NAT-Eintrag entsteht aber nur, wenn der fli4l
eine Verbindung registriert, und die geht vom Client im LAN nach draußen.
Der Client wird aber nicht als Quellport 5060 nutzen, und selbst wenn,
dann kann er auf dem fli4l beliebig geändert werden (was auch bei
Konflikten genutzt wird).
Beispiel: Folgende Topologie:
A, A' <----> F <----> B
Clients fli4l Server
Wenn A zu B eine Verbindung aufbaut (egal ob eine "echte" Verbindung wie
bei TCP oder eine "unechte" wie bei UDP), dann benötigt A einen Quellport
und einen Zielport. Sei Q der Quellport (der i.d.R. zufällig gewählt
wird) und Z der Zielport. Auf dem fli4l wird die interne Adresse von A
durch die externe von F ersetzt und gleichzeitig vermerkt, dass alle
Pakete, die von B:Z an F:Q ankommen, zu A:Q geschickt werden.
Nun kommt Client A' dazu, verbindet sich auch mit B:Z und nutzt (zufällig
oder absichtlich) *denselben* Quellport Q. Da der fli4l F nun Antworten
an F:Q nicht mehr eindeutig A oder A' zuordnen könnte, wählt F einen
anderen Port Q' aus und baut die Verbindung von F:Q' zu B:Z auf.
Antworten an F:Q' werden nun an A':Q weitergeleitet, was unterschieden
werden kann von Paketen an F:Q, denn die werden an A:Q weitergeleitet.
Ein Client hat also nie die Hoheit über den Quellport X, der in der
externen Verbindung F:X <--> B:Z verwendet wird. Im Prinzip könnte der
fli4l jedes Mal einen anderen Port wählen, auch wenn der Original-Port
verfügbar ist. Soweit ich weiß, wechselt Linux den Quellport in der Regel
aber nicht, wenn es nicht sein muss.
Viele Grüße,
--
Christoph Schulz
[fli4l-Team]
Mehr Informationen über die Mailingliste Fli4L