Asterisk und das IAX ProtokollIm folgenden wollen wir zwei Asterisk Server über das IAX Protokoll (Inter Asterisk Exchange Protokoll) verbinden. Dieses Protokoll wurde speziell für die Kommunikation zwischen mehreren Asterisk Nebenstellenanlagen entwickelt und passt sich daher besser an die Funktionalitäten von Asterisk an, als das SIP Protokoll. Es existiert mittlerweile in der Revision 2 und verwendet für die Signal- und Sprachübertragung einen einzelnen UDP Port, wodurch es sich besser in NAT (Network Address Translation) Umgebungen integrieren lässt. Durch die Möglichkeit mehrere Übertragungskanäle, mit gemeinsamen Ziel unter einem Protokollheader zu übertragen, verursacht es weniger Overhead und ist somit sparsamer mit der Bandbreite.
Im folgenden Szenario ist eine Firma, bestehend aus einer Zentrale und einer Außenstelle dargestellt. Beide lokale Netzwerke sind über einen VPN (Virtual Privates Network) Tunnel miteinander verbunden. Mit Hilfe von Asterisk und VoIP sind beide Außenstellen in der Lage kostenlos untereinander Gespräche zu führen. Neben dem Vorteil der Kostenersparnis spielen auch verbesserte Leistungsmerkmale wie das direkte Verbinden oder das Weiterleiten von Gesprächen von und zur Außenstelle eine große Rolle. Verwendet wird das IAX Protokoll in der Revision 2.
Der Asterisk Server in der Zentrale hat die IP Adresse 192.168.200.100 und den Namen Asterisk. An ihm ist ein SIP Client mit der Rufnummer 40 angeschlossen.
Der Asterisk Server in der Außenstelle hat die IP Adresse 192.168.100.100 und den Namen Obelisk. An ihm ist ein SIP Client mit der Rufnummer 20 angeschlossen.
Es werden zwei verschiedene Möglichkeiten vorgestellt beide Asterisk Server zu verbinden. Die Konfigurationsdatei für IAX Channels heist iax.conf und befindet sich im Verzeichnis /etc/asterisk.
Verbindung zwischen zwei Asterisk Server über das IAX Protokoll Damit Anrufe vom jeweiligen Remotepartner angenommen werden können, müssen für beide Server ein Kontext vom Type user in der iax.conf angelegt werden. Dieser Kontext stellt Informationen zur Authentifizierung und zum Ort (IP Adresse) des Partners bereit.
Des weiteren benötigen beide Server eine Regel im Dialplan wie der Partner erreichbar ist.
[general] language=de bindaddr=192.168.200.100 port=4569 disallow=all allow=ulaw allow=alaw allow=g726 allow=gsm tos=lowdelay trunk=yes
[obelisk] type=user secret=passwort auth=md5 host=192.168.100.100 context=default
[general] Hier werden allgemeingültige Einstellungen vorgenommen. Diese gelten für alle anderen Kontexte, können aber durch spezifische Einstellungen eines Channel spezifischen Kontext überschrieben werden.
language=de Festelegen der verwendeten Standardsprache. bindaddr=192.168.200.100 Besitzt der Server mehrerer IP Adressen macht dieser Eintrag Sinn. Asterisk lässt dann nur Verbindungen über diese Adresse zu. port=4569 Auf diesen Port werden eingehende Rufe erwartet. Dies ist das Standardport für das IAX 2 Protokoll.
disallow=all allow=ulaw allow=alaw allow=g726 allow=gsm
Durch diese Einstellungen werden die verwendeten Codecs konfiguriert. Als erstes werden alle Sprachcodecs verboten um diese dann explizit in der angegebenen Reihenfolge zu erlauben. Ausführliche Informationen zu den Codecs werden im Kapitel „Codecs verstehen“ erläutert.
tos=lowdelay Der Typ of Service setzt das TOS Flag im IP Header. Damit können die Pakete für eine vorrangige Behandlung bei der Übertragung markiert werden. TOS muss dann aber auch von den an der Kommunikation beteiligten Geräten (Router etc.) unterstützt und ausgewertet werden. Mehr dazu im Kapitel „Quality of Service“.
tos=lowdelay Pakete für geringe Verzögerung markieren tos=throughput Pakete für hohen Durchsatz markieren tos=reliability Pakete für hohe Verlässlichkeit markieren tos=mincost Pakete für minimale Kosten markieren tos=none Pakete werden nicht markiert
trunk=yes Das IAX Protokoll ist in der Lage Mediendaten verschiedener Channels, welche ein gemeinsames Ziel haben, unter einem einzigen Header zu senden, was zu weniger Overhead und somit zu einer geringeren Belastung der Bandbreite führt. Durch trunk=yes wird diese Option aktiviert. Mit trunk=no wird sie deaktiviert.
[obelisk] Dieser Kontext dient zum authentifizieren des Servers der Außenstelle. Der Kontextname muss vom Server in der Außenstelle beim Rufaufbau übergeben werden.
type=user Der Kontext ist vom Type User. Über diesem Kontext werden also nur Rufe entgegengenommen.
secret=passwort Dieses Passwort muss vom Server in der Außenstelle beim Rufaufbau übergeben werden. Man kann die Option secret auch weglassen. Der Server nimmt dann auch nicht authentifizierte Anrufe an.
auth=md5 Als Authentifizierungsmethode nutzen wir md5. Passwörter werden also mit einem md5 hash versehen und über das Netzwerk transportiert. Andere Methoden wären auth=plain und auth=rsa. Möchte man RSA nutzen, so kann mit dem Programm astgenkey das Schlüsselpaar erzeugt werden. Der öffentliche Schlüssel muss dann auf den Remote Server in das Verzeichnis /var/lib/asterisk/keys/ kopiert werden.
host=192.168.100.100 Hier wird die IP Adresse des Servers der Außenstelle eingetragen.
context=default Die Rufe die vom Server der Außenstelle ankommen gelangen in den Default Kontext des Rufnummernplanes.
extensions.conf [general] static=yes writeprotect=no
[default] include=sip40 include=iax_out
[sip40] exten => 40,1,Dial(SIP/40,25) exten => 40,n,Hangup
[iax_out] exten => _6XX,1,Dial(IAX2/asterisk:
Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann.
/${EXTEN:1}) exten => _6XX,n,Hangup [iax_out] Dieser Kontext wird für ausgehende Gespräche über den IAX Channel zum Server in der Außenstelle verwendet.
exten => _6XX,1,Dial(IAX2/asterisk:
Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann.
/${EXTEN:1}) Alle Rufe, die mit einer 6 beginnen, gefolgt von zwei beliebigen Zahlen (_6XX) werden über den IAX2 Channel geroutet. Dabei wird der Kontext mit den Namen [asterisk] auf dem entfernten Server mit der IP Adresse 192.168.100.100 verwendet. Authentifiziert wird der Ruf über das mitgesendete Passwort.
exten => _6XX,.,n,Hangup Nach dem Auflegen eines Teilnehmers wird das Gespräch mit einem Hangup beendet. Konfiguration des Servers in der Außenstelle (Obelisk) [general] language=de bindaddr=192.168.100.100 port=4569 disallow=all allow=ulaw allow=alaw allow=g726 allow=gsm tos=lowdelay trunk=yes
[asterisk] type=user secret=passwort auth=md5 host=192.168.200.100 context=default [asterisk] type=user secret=passwort auth=md5 host=192.168.200.100 Auch der Server in der Außenstelle benötigt einen Kontext der von dem Server in der Zentrale für die Anmeldung verwendet wird. Es ist wieder wichtig, dass der Kontextname und das Passwort vom Remoterechner beim Dialstring übergeben werden. [general] static=yes writeprotect=no
[default] include=sip20 include=iax_out [sip20] exten => 20,1,Dial(SIP/20,25) exten => 20,2,Hangup [iax_out] exten => _6XX,1,Dial(IAX2/obelisk:
Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann.
/${EXTEN:1}) exten => _6XX,n,Hangup exten => _6XX,1,Dial(IAX2/obelsik:
Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann.
/${EXTEN:1}) exten => _6XX,n,Hangup
Alle Rufe die mit einer 6 beginnen, gefolgt von zwei beliebigen Zahlen (_6XX) werden über den IAX2 Channel geroutet. Dabei wird der Kontext mit den Namen [obelisk] auf dem entfernten Server mit der IP Adresse 192.168.200.100 verwendet. Authentifiziert wird der Ruf über das mitgesendete Passwort. Nach dem Auflegen eines Teilnehmers, wird das Gespräch mit einem Hangup beendet.
Beide Clients sind nun in der Lage untereinander zu kommunizieren. Man sollte sich aber im klaren sein, dass bei dieser Konfiguration die Passwörter zur Authentifizierung bei jedem Ruf mit protokolliert werden. Standardmäßig zeichnet Asterisk sämtliche Rufe in die Datei /var/log/asterisk/cdr-csv auf. Man spricht in diesem Zusammenhang auf von Call Detail Recording kurz CDR. Genutzt wird CDR unter anderem um Gespräche abzurechnen und kann auch in eine mySQL oder Postgress SQL Datenbank erfolgen. Näheres zur Konfiguration erfahren Sie im Kapitel „Rufaufzeichnung Call Detail Recording (CDR).
|