.titleBar { margin-bottom: 5px!important; }

[Howto] Snom 3x0 hinter symmetrischem NAT Router

Dieses Thema im Forum "snom" wurde erstellt von Pingpong, 30 Sep. 2006.

  1. Pingpong

    Pingpong Neuer User

    Registriert seit:
    17 Sep. 2006
    Beiträge:
    176
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #1 Pingpong, 30 Sep. 2006
    Zuletzt bearbeitet: 26 Mai 2008
    Seit ein paar Wochen beschäftige ich mich nun mit der Konfiguration zweier Snom 300 hinter einem Router mit symmetrischem NAT. Symmetrisches NAT ist für VoIP der schwierigste Fall, denn diese Art von NAT hat die gleichen Eigenschaften wie eine SPI Firewall: es geht nichts rein, wenn nicht vorher an die gleiche Adresse/Port Kombination was rausgegangen ist, oder ein explizites Portforwarding besteht. Alle anderen Arten von NAT sind unproblematischer, aber auch unsicherer. Symmetrisches NAT findet man meist auf linuxbasierten Routern.

    Bein den Snom Telefonen kommt erschwerend hinzu, dass sie als Firmentelefone konzipiert sind, und ihre Grundeinstellung auf maximale Sicherheit ausgelegt ist, was den Betrieb hinter symmetrischem NAT in dieser Grundkonfiguration praktisch unmöglich macht.

    Mein Ziel war es, dass beliebig viele Telefone mit beliebigen Providern funktionieren, und auch direkte IP-Calls möglich sind.

    Mein erster Gedanke war, daß ein SER mit RTP-Proxy im Router die Ideallösung sein müsste. Versuche mit DD-WRT/SipatH und OpenWRT/Milkfish verliefen jedoch negativ. Vermutlich scheiterte es an den Firewallregeln, da in manchen Konstellationen der RTP Stream nicht beim RTP-Proxy ankam. Leider scheint die Weiterentwicklung bei Milkfish ziemlich eingeschlafen zu sein, zumindest geht es sehr schleppend voran, sodass in absehbarer Zeit keine funktionierende Milkfish-Lösung zu erwarten ist.
    Was auch gegen solch eine Lösung spricht: Brainslayer hat kein großes Interesse an Milkfish, bei DD-WRT wird sich nichts ändern. OpenWRT ist für meinen Geschmack unbrauchbar, da es für einfache Sachen wie Portforwardings oder QoS keine GUI gibt, hier muss man selber mittels kryptischer Linux iptable Befehle Hand anlegen. Das ist wirklich nur was für absolute Linux-Freaks.

    Also musste eine Lösung gefunden werden, die mit konventionellen Mitteln auskommt. Sie ist übrigens sehr einfach, wenn man weis wie. Hier ist sie:

    Ich verzichte bewusst auf Bildschirmfotos, da die verschiedenen Snom Modelle und Softwarestände sich in den Menüs unterscheiden. Stattdessen versuche ich die Einstellungen so zu beschreiben, dass jeder sie auf seinem Snom findet.

    Zunächst ein paar grundsätzliche Dinge: Hat man mehr als ein Telefon, so müssen die Telefone eindeutig adressierbar sein. Da man nur eine öffentliche IP hat, gelingt die Unterscheidung nur durch unterschiedliche Ports für SIP. Das erste Telefon bekommt 5060 (der Standard SIP Port), das nächste 5062, usw. immer in 2er Schritten. Man legt auf dem Router Portforwardings für diese Ports zum jeweiligen Telefon an, und zwar immer zwei Ports: 5060-5061 zum ersten Telefon, 5062-5063 zum zweiten Telefon, usw. (immer beide Protokolle, UDP und TCP)

    Das war's dann auch schon auf dem Router, für RTP werden keine Forwardings benötigt, darauf gehe ich später noch ein.

    Nun zu den Telefonen. Diese müssen zunächst für die o.g. SIP-Ports konfiguriert werden. Die Snom sind leider nicht auf den SIP Standardport vorkonfiguriert. 3 Einstellungen müssen hier geändert werden:
    1. Netzwerkidentität (Port) = 5060 (für die weiteren Telefone entsprechend)
    2. Höre auf SIP TCP Port = An
    3. Pakete vom Registrar filtern = Aus

    Die Einstellungen findet man im Menü "Erweitert".
    Damit wäre schonmal die Signalisierung in Ordnung.

    Jetzt kommt der Teil der die meisten Probleme mit NAT macht, nämlich RTP. Wenn eine Seite die andere nicht hören kann, ist RTP schuld. Die Audio-Informationen werden per RTP direkt zwischen den beiden Endgeräten ausgetauscht (ausser der Provider setzt einen RTP-Proxy dazwischen, was aber längere Laufzeiten und damit mehr Echo und Paketverlust bedeutet).
    Hier sind zwei Punkte wichtig:
    1. die Gegenseite muss unsere öffentliche IP kennen
    2. der Port auf dem die Gegenseite sendet muss an unserem Router offen und dem richtigen Telefon zugeteilt sein.

    Für 1. müssen wir unbedingt STUN einsetzen, auch wenn viele Provider sagen sie benötigen kein STUN. Aber wir wollen ja evtl. nicht nur über unseren Provider telefonieren, sondern auch direkte IP-Calls machen. Nur per STUN ist sichergestellt daß unsere SIP-Pakete die richtige IP drin haben, über die uns die Gegenseite erreichen kann. Wenn unser Provider keinen eigenen STUN Server anbietet, tut es auch ein beliebiger anderer, z.B. stun.gmx.net.

    2. ist der komplizierteste und von den Wenigsten verstandene Teil, obwohl es gleichzeitig doch sehr einfach ist. Die Ports für RTP können beliebig im Bereich von 1024 bis 65535 liegen. Deswegen können wir hier nicht mit Forwardings am Router arbeiten, schon gar nicht wenn wir mehr als 1 Telefon einsetzen wollen. Manche Provider nutzen bestimmte feste Ports, sodaß hier auch mit Forwarding gearbeitet werden könnte, aber wir wollen vielleicht unterschiedliche Provider nutzen und/oder mehr als ein Telefon einsetzen. Der Weg zum Erfolg heisst "symmetrisches RTP". Das bedeutet dass unser Telefon auf dem gleichen RTP-Port sendet, auf dem uns die Gegenseite sendet (normalerweise sind die unterschiedlich). Dadurch, dass unser Telefon auf dem gleichen Port sendet, wird dieser Port auf dem NAT-Router geöffnet (es geht ja was nach draussen) und die Daten von der Gegenseite können ungehindert passieren. Evtl. fehlt das erste Datenpaket von der Gegenseite (solange unser Telefon noch nichts gesendet hat und deshalb der Port geschlossen ist), aber das hört man nicht.

    Die nötigen Einstellungen sind:

    Dynamischer RTP Port start = 1024
    Dynamischer RTP Port stop = 65535
    Symmetrisches RTP = An

    Die ersten beiden Einstellungen wieder unter "Erweitert", die dritte findet man beim Snom 300 bei den Identitäten im Reiter "RTP" (für jede Identität einzeln einstellen).
    Beim Snom 300 wird der STUN Server bei den Identitäten im Reiter "NAT" eingetragen.

    Das war's dann auch schon, und nun sollte das Telefon in allen Lebenslagen funktionieren.

    Zum Schluss noch ein Router-Tip: der Linksys WRT54GL ist ein ziemlich geniales Teil zum kleinen Preis. Mit der Original-Firmware ist er schon recht gut, aber mit der Firmware "Tomato" wird er zum Traumrouter. Sehr schnell, und stabil wie ein Fels.

    Gruss
    Pingpong