Asterisk und das IAX Protokoll

Im 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).