[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