Network Address Translation (NAT) - Know How
NAT Typen
es gibt 4 verschiedene NAT Typen, die von NAT Gateways unterstützt werden.
Full cone
Beim Full cone wird eine interne IP:Port Adresse auf einen externen Port gemapped.
Z.B.:
192.168.0.1:80 <------> 192.168.0.254 ( NAT ) 1.2.3.4:10001 <------> 8.8.8.8:80
192.168.0.1:80 <------ 192.168.0.254 ( NAT ) 1.2.3.4:10001 <------ 8.8.8.8:80
So lange die NAT Tabelle dieses Mapping hält, ist der interne Host von JEDEM externen Host über den externen Port erreichbar.
Diesen NAT Typen findet man in "non-stateful firewalls" und wenn man manuell ein Port-Forwarding auf den internen Host einrichtet.
Restricted cone
Beim Restricted cone wird ebenfalls eine interne IP:Port Adresse auf einen externen Port gemapped.
Der Unterschied zum Full cone ist, dass nur der externe Host, zu dem die Verbindung aufgebaut wurde antworten darf.
Alle anderen Hosts werden geblockt.
Z.B.:
192.168.0.1:80 <------> 192.168.0.254 ( NAT ) 1.2.3.4:10001 <------> 8.8.8.8:80
192.168.0.1:80 <------ 192.168.0.254 ( NAT ) 1.2.3.4:10001 <------ 8.8.8.8:443
( XXX ) 1.2.3.4:10001 <------ 9.9.9.9:80
Port restricted cone
Der Port restricted cone verhält sich nahezu identisch zum Restricted cone. Allerdings werden sogar vom selben externen Host alle Anfragen geblockt, die von einem anderen Port verschickt werden.
Z.B.:
192.168.0.1:80 <------> 192.168.0.254 ( NAT ) 1.2.3.4:10001 <------> 8.8.8.8:80
( XXX ) 1.2.3.4:10001 <------ 8.8.8.8:443
( XXX ) 1.2.3.4:10001 <------ 9.9.9.9:80
Dieser NAT-Typ führt ebenso wie Symmetric NAT zu Problemen bei asynchronen Protokollen (z.B. TFTP), bei denen eine initiale Verbindung zum Standard-Port aufgebaut wird und die Daten anschließend über andere Ports ausgetauscht werden.
Symmetric
Bei Symmetrischem NAT wird für jede Verbindung zu einem externen Host ein neuer externer Port vergeben.
Außerdem darf, wie beim Port restricted cone, der externe Host nur von der eingetragenen Portnummer antworten.
192.168.0.1:80 <------> 192.168.0.254 ( NAT ) 1.2.3.4:10001 <------> 8.8.8.8:80
( XXX ) 1.2.3.4:10001 <------ 8.8.8.8:443
192.168.0.1:80 <------> 192.168.0.254 ( NAT ) 1.2.3.4:12345 <------> 9.9.9.9:80
Dieser NAT Typ führt besonders in Verbindung mit SIP zu enormen Problemen, da der Media-Stream über andere Ports läuft, als die SIP Verbindung selbst, diese Verbindung aber über SIP ausgehandelt wird, noch bevor die ersten Pakete gesendet werden können und nicht vorhersehbar ist, welcher externe Port für die Verbindung genutzt wird.
Auch STUN liefert bei diesem NAT Typ keine verlässlichen Daten.
SIP und NAT
Bei der Entwicklung des SIP Protokolls wurde gennattete Verbindungen offensichtlich nicht berücksichtigt.
Das sieht man z.B. daran, dass der SIP Client, der i.d.R. weder die externe IP des NAT Gateways noch die gemappte Portnummer kennt, seine private IP Adresse in das SIP Paket einträgt.
REGISTER sip:sip.teamsip.com SIP/2.0
Via: SIP/2.0/UDP 192.168.0.1:54716;branch=z9hG4bK-d8754z-93214b6c3a7da005-1---d8754z-;rport
Max-Forwards: 70
Contact: <sip:1000110a@192.168.0.1:54716;rinstance=4827f5b9212a52e2>
To: "Teilnehmer 10"<sip:1000110a@sip.teamsip.com>
From: "Teilnehmer 10"<sip:1000110a@sip.teamsip.com>;tag=04163a76
Call-ID: M2JhOWZhYzg5OTRiMGJjN2RmYzY2YzJmMjBkNjY5MWU.
CSeq: 1 REGISTER
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: XXX
Content-Length: 0
Diese IP Adresse wird normalerweise als Kontaktadresse auf dem Server eingetragen (selbst wenn der Request von einer anderen IP Adresse kommt).
Das führt dazu, dass dieser Client trotz korrekter Registrierung nicht erreichbar ist, weil es keine Route zur privaten IP Adresse gibt.
Die verschiedenen Hard- und Software Hersteller haben unterschiedliche Ansätze entwickelt, dieses Problem zu umgehen.
STUN
Der STUN Dienst ermöglicht einem Client seine Externe IP Adresse und Portnummer abzufragen.
SIP Clients und Telefone nutzen diesen Dienst um die korrekten Kontakt-Informationen in die SIP Pakete einzutragen.
Anstatt die private IP Adresse und interne Portnummer im SIP Paket einzutragen, zu der es keine Rückroute gibt, wird die Anfrage zunächst an den STUN Server gestellt, der mit der externen IP und dem gemappten Port antwortet.
Diese Werte werden dann in das SIP Paket eingetragen.
STUN funktioniert nicht mit Symmetric NAT.
TURN (SIP Proxy mit Nathelper und RTP Proxy)
TURN stellt eine Serverseitige NAT-Erkennung bereit.
Der SIP Proxy (z.B. SER, Kamailio, OpenSIPS) vergleicht die in den Paketen angegebenen IP Adressen, mit der Adresse, von der das Paket tatsächlich empfangen wurde.
Wenn die Adressen voneinander abweichen, werden die SIP Header auf die erkannten Werte umgeschrieben und weiter verarbeitet.
Darüber hinaus ändert der SIP Proxy den SDP Header und trägt den RTP Proxy als Gegenstelle für beide Kommunikationspartner ein.
Auf diese Weise erzwingt der SIP Proxy, dass der RTP Strom über den RTP Proxy laufen muss.
Der RTP Proxy muss mindestens eine öffentliche IP Adresse besitzen, auf die der(die) genattete(n) Client(s) den RTP Strom schicken kann.
Asterisk mit NAT Erkennung
Asterisk verfolgt einen ähnlichen Ansatz, wie TURN.
Ist ein SIP Client auf nat=yes gesetzt, versucht der Asterisk Server die korrekte externe IP Adresse vom Client zu erkennen. Da der Asterisk Server sowohl SIP Registrar, SIP Proxy und Media Server ist, kann die Verbindung zum Client dynamisch angepasst werden.
Ebenso wie der SIP Proxy bei TURN, vergleicht der Asterisk die in den SIP Paketen eingetragene IP Adresse mit der Adresse, von der die Pakete tatsächlich kommen.
Wie bei TURN trägt sich der Asterisk als Gegenstelle für die beiden SIP Clients ein, so dass der RTP Strom durch den Asterisk geleitet wird.
Der Asterisk sollte eine öffentliche IP Adresse besitzen, damit der RTP Strom korrekt geroutet werden kann.
Wenn im Asterisk bei beiden Clients canreinvite=yes gesetzt ist, kann der Asterisk nachträglich nochmal die RTP Verbindung neu aushandeln um den RTP Strom direkt zwischen den Clients zu verbinden.
Dazu ist es aber zwingend erforderlich, dass sich die Clients im selben Netzwerk befinden oder über öffentliche IP Adressen erreichbar sind.
SIP Rewrite
Manche Routerhersteller implementieren in ihren Firewalls / NAT Gateways Filter für SIP Pakete.
Nachdem das NAT Gateway, als einzigste Stelle zwischen Client und SIP Server, exakt bestimmen kann, welcher externe Port für die SIP bzw. RTP Verbindung vergeben wird, kann dieses Gatway die SIP Pakete umschreiben und die korrekten Werte eintragen.
Das Gateway verhält sich dabei transparent und trägt sich nicht als aktive Komponente in den SIP Header (via) mit ein.
Manche Hersteller (z.B. Checkpoint ) verfolgen den kompletten SIP Dialog und können sogar ausgehende Transaktionen von eingehenden unterscheiden.
NAT Besonderheiten
Port Forwarding
statisches Mapping einer externen Portnummer auf einen internen Host.
Port Forwardings werden z.B. benötigt um einen internen Server hinter einem NAT Gateway von extern erreichbar zu machen.
Hierbei wird eine statische Route eingetragen, dass alle externen Anfragen auf einem bestimmten Port oder Portrange direkt auf einen internen Server weitergeleitet werden.
Da Port Forwarding generell ein Sicherheitsrisiko darstellen kann, wird es empfohlen, die internen Server, die von extern per Portforwarding erreichbar sind in eine Network Address Translation (NAT) - Know How zu stellen.
Grundsätzlich sollte Port Forwarding nur für Server-Dienste genutzt werden. Bei normalen Clients und Telefonen ist Port Forwarding nicht erforderlich und kann zu Verbindungsproblemen führen.
DMZ
De-Militarisierte Zone bezeichnet interne Netzwerke, die typischerweise Dienste im Internet bereitstellen und deshalb besonders gesichert werden müssen.
Üblicherweise steht die DMZ zwischen einer externen Firewall, welche die DMZ grundsätzlich schützt und einer internen Firewall, die das interne (Mitarbeiter-) Netzwerk vor Angriffen von extern, aber auch aus der DMZ schützt (falls ein Server gehackt wird).
Session Timeout / Packet aging
Jedes NAT Gateway enthält eine NAT Tabelle, in der das Mapping zwischen interner IP Adresse / Port auf einen externen Port gespeichert wird.
Da die externen Ports nur begrenzt verfügbar sind (ca. 64000) werden alte ungenutzte Verbindungen nach einer bestimmten Zeit wieder aus der Tabelle entfernt.
Wurde ein Eintrag entfernt, wird bei einer erneuten Anfrage ein neuer Eintrag in der NAT Tabelle erzeugt und der Client erhält i.d.R. einen neuen externen Port zugewiesen.
Hinweis: Bei SIP Registrierungen, die den externen Port als Kontaktadresse speichern, führt das dazu, dass die SIP Telefone nicht mehr erreichbar sind.
Bei professionellen Geräten (z.B. Lancom) lässt sich der Timeout Wert konfigurieren.
Für UDP Verbindungen (z.B. SIP) empfehlen wir einen Wert von 120 Sekunden.