Workshop Asterisk : Verbindung zu SIP

16.02.2006 von STEFAN RUBNER 
Mit Asterisk lässt sich nicht nur eine Telefonanlage mit allem erdenklichen Komfort realisieren. Nachdem im ersten Teil des Workshops eine grundlegende Installation vorgenommen wurde, geht es in diesem Teil um die Verbindung von Asterisk und SIP.

Geht es in einem Gespräch um das Thema Voice over IP, so meinen die Beteiligten eigentlich meist Produkte, die das Session Initiation Protocol (SIP) verwenden. So gut wie jede derzeit auf dem Markt befindliche VoIP-Lösung nutzt SIP als Basis für den Verbindungsaufbau. Das gilt auch für die Angebote von SIPgate oder von großen Providern wie 1&1, Freenet sowie seit jüngstem auch der Telekom.

Auch Asterisk unterstützt SIP, belässt es aber nicht dabei, sondern vereinfacht quasi nebenbei das Einrichten von SIP-Phones (sowohl der Hardware- wie auch der Software-Variante) und sorgt für mehr Sicherheit im Netz.

In den folgenden Konfigurationsbeispielen zeigen wir die Konfiguration des SIP-Moduls anhand eines – selbstverständlich real nicht existierenden – SIPgate-Accounts. Eine Anpassung auf die Angebote anderer Anbieter sollte aber problemlos möglich sein, da die verwendete Technik dieselbe ist.

Info: Mehr zu VoIP und Asterisk können Sie am 23. Februar 2006 auf unserem VoIP-Day in Frankfurt/Main erfahren. Dort steht Ihnen auch der Autor dieses Beitrags zum persönlichen Erfahrungsaustausch zur Verfügung. Die komplette Artikelserie zu Asterisk finden Sie auch im aktuellen tecCHANNEL-Compact zum Nachlesen, das Sie sofort in unserem Online-Shop versandkostenfrei bestellen können.

Der SIP-Account

Bevor es mit der Konfiguration losgehen kann, müssen Sie sich zunächst ein paar Daten besorgen: Ihre Anmeldeinformationen beim SIP-Provider. Bei SIPgate finden Sie diese nach der Anmeldung unter dem Reiter „Meine Daten“ im Kasten mit der Überschrift „Daten zum Anschluss“. Von den angezeigten Werten benötigen Sie die SIP-ID sowie das SIP-Passwort.

Gewappnet mit diesen Informationen können Sie sich nun daran machen, die Datei sip.conf zu erstellen. Dabei sollten Sie mit einer neuen Datei beginnen, anstatt in der bereits vorhandenen Konfiguration Änderungen vorzunehmen. Am besten legen Sie von dieser eine Kopie an, um später eine Referenz zu haben.

sip.conf anpassen

Die Grundkonfiguration für den Verbindungsaufbau von Asterisk zu SIPgate sieht wie folgt aus:

[general]
port = 5060
bindaddr = 0.0.0.0
context = sip-in
qualify = no
disable = all
allow = alaw
allow = ulaw
allow = g729
allow = gsm
allow = slinear
srvlookup = yes
canreinvite = yes
regcontext = local-sip
register = 4332211:ABABAB@sipgate.de/001

Was haben Sie nun damit erreicht? Über den Parameter port legen Sie fest, auf welchem Port Asterisk eine Verbindung mit dem SIP-Host herstellen soll. Standardvorgabe ist hier 5060, der auch von den meisten Anbietern verwendet wird.

Die Angabe von bindaddr = 0.0.0.0 bewirkt, dass Asterisk auf allen verfügbaren Netzwerkschnittstellen auf eingehende SIP-Anrufe lauscht. Wollen Sie, dass Asterisk nur ein bestimmtes Interface bedient, so geben Sie hier dessen echte Adresse an.

Die Option context bestimmt, in welchem Kontext innerhalb der Datei extensions.conf Asterisk nach den Durchwahlen für diesen SIP-Account sucht.

Mit qualify = no deaktivieren Sie die Erreichbarkeitsprüfung der Gegenstelle. Sollten Sie Probleme bei SIP-Verbindungen haben, können Sie hier alternativ den Wert qualify = 1000 einsetzen. Dies bewirkt, dass der SIP-Host als unerreichbar markiert wird, wenn Antworten von ihm länger als eine Sekunde ausbleiben.

sip.conf

Über die Kombination der Schlüsselwörter disable und allow erfolgt die Festlegung der verfügbaren Codecs. Die gezeigte Auswahl ist für die meisten SIP-Anwendungen passend und bietet eine gute Sprachqualität bei moderatem Bandbreitenbedarf.

Mit der Option srvlookup = yes aktivieren Sie den DNS-Suchdienst von Asterisk. Dieser versetzt Sie in die Lage, auch Gegenstellen bei anderen SIP-Providern anzurufen, deren Telefonnummer beispielsweise mit der Erweiterung @andererprovider.com endet.

Etwas komplexer ist der Sachverhalt bei den letzten drei Werten, beginnend ab canreinvite. So, wie im Beispiel aktiviert, bewirkt diese Option, dass Asterisk versucht, den eingehenden Audio-Datenstrom direkt an den Empfänger zu leiten. Dieses Verfahren unterstützen nicht alle SIP-Clients. Sollte es bei Ihnen nicht funktionieren, stellen Sie diese Option einfach auf no.

Mittels regcontext geben Sie an, in welchem Kontext innerhalb von extensions.conf eine dynamische Durchwahl erzeugt werden soll. Nun könnte man vermuten, die zugehörige Einstellung wäre register. Dem ist aber nicht so. Zwar akzeptiert diese als Wert eine Kombination aus Username, Passwort, Host und zu erstellender Durchwahl. Diese Durchwahl wird jedoch im unter dem Schlüsselwort context angegebenen Kontext erzeugt. So, wie im Beispiel angegeben, würde sich Asterisk also als User 4332211 mit dem Passwort ABABAB beim Host sipgate.de anmelden und für diesen Channel im Kontext sip-in – nicht wie etwa vermutet in local-sip – bei erfolgreicher Anmeldung die Durchwahl 001 erstellen.

sip.conf testen

Die erzeugte Durchwahl ist übrigens frei wählbar. Es empfiehlt sich jedoch – speziell bei Verwendung mehrerer SIP-Accounts – diese einfach aufsteigend zu nummerieren, um den Überblick zu behalten.

Ob Ihre Einstellungen funktionieren, prüfen Sie durch den Start von Asterisk mittels asterisk –vvvc und die nachfolgende Eingabe des Befehls sip show registry auf der Asterisk-Kommandozeile. Sie sollten nun eine kurze Meldung angezeigt bekommen, an deren Ende das Wort „Registered“ erscheint. Dies kann auch ein wenig dauern, probieren Sie es also gegebenenfalls öfter, bevor Sie sich auf die Suche nach einem Fehler in der Konfigurationsdatei begeben.

Eine erste Gesprächsvermittlung

Sollten Sie nun bereits voller Freude zum Telefon gegriffen und Ihre SIP-Rufnummer angewählt haben, gab es sicherlich eine Enttäuschung. SIPgate meldet, dass der angerufene Teilnehmer nicht erreichbar ist – und hat damit auch Recht. Denn bislang haben wir Asterisk nur mitgeteilt, dass es für die Gespräche zuständig ist, nicht aber, was es damit tun soll.

Um dieses Problem zu beheben, verlassen Sie Asterisk (stop now) und öffnen die Datei extensions.conf im Asterisk-Verzeichnis mit einem Editor. Fügen Sie dort am Ende folgende Zeilen ein:

[sip-in]
exten = 001,1,Dial(Console/dsp)

Starten Sie nach dem Speichern der Datei Asterisk neu und rufen Sie erneut Ihre SIP-Telefonnummer an. Sie sehen nun anhand der Meldungen, dass Asterisk den eingehenden Anruf annimmt und ihn an die Konsole weiterleitet. Hier können Sie mit dem Befehl answer das Gespräch annehmen. Mit dem Kommando hangup beenden Sie die Verbindung.

Mit dem Eintrag in extensions.conf haben Sie Asterisk also angewiesen, eingehende Rufe für die Durchwahl 001 – die wir in sip.conf für den SIP-Account definiert haben – über den Aufruf der Funktion Dial mit dem Parameter Console/dsp an die Konsole weiterzuleiten. Die Zahl „1“ zwischen der Durchwahl und dem Befehl soll uns für den Moment nicht weiter stören, wir kommen später zu ihrer Bedeutung.

Vorbereitung für SIP-Softphones

Nachdem das schon gut geklappt hat, machen wir uns nun an das Einrichten eines SIP-Clients in Form eines Softphones. Als Produkt wählen wir X-Lite von Counterpath (vormals X-Ten), da dieses für alle gängigen Betriebssysteme verfügbar und dort stets gleich zu konfigurieren ist. Sie können es kostenfrei herunterladen.

Nachdem Sie die Software eingerichtet haben, müssen Sie zunächst Asterisk auf die Zusammenarbeit mit dem Softphone vorbereiten. Dazu ist in sip.conf eine weitere Sektion einzutragen:

[test.user1]
type=friend
username=test.user1
secret=geheim
host=dynamic
context=local-sip
regexten=666

Wichtig ist dabei, dass der hinter username angegebene Benutzername dem Namen der Sektion entspricht. Empfehlenswert ist es, für die Benennung entweder gleich die Namen der einzelnen Anwender oder ein anderes, den jeweiligen Nutzern leicht zuzuordnendes Schema zu verwenden. Hinter dem Schlüsselwort secret ist das Passwort des Clients im Klartext anzugeben. Sie sollten daher darauf achten, dass Ihr Asterisk-Server und insbesondere die Datei sip.conf gut geschützt ist.

Softphone in Asterisk einrichten

Die Definition type=friend bewirkt, dass der so angebundene Client sowohl Gespräche annehmen wie auch selbst ausgehende Rufe einleiten darf. Alternativen wären type=user für Endgeräte, die nur anrufbar sind und type=peer zur Definition von ausgehenden Leitungen.

Mit der Einstellung host=dynamic teilen Sie Asterisk mit, dass es sich bei der Gegenstelle um ein mobiles Gerät mit wechselnder IP-Adresse handelt. Bei einem VoIP-Phone im LAN mit fester IP wäre diese hier einzutragen.

Die Option context legt den Kontext für ausgehende Rufe fest. Dagegen bestimmt regexten die Durchwahl, die in dem Kontext erzeugt wird, den Sie mittels regcontext im globalen Teil der SIP-Konfiguration angegeben haben.

Damit Asterisk Anrufe von extern auch an das Gerät weiterleitet, ist noch eine Änderung in extensions.conf notwendig. Statt der Rufweiterschaltung an die Konsole leiten wir die Gespräche nun an das Softphone weiter:

[sip-in]
extension = 001,1,Dial(SIP/test.user1)

Damit sind die Vorbereitungen abgeschlossen und es kann an die Konfiguration des Softphones gehen.

Das Softphone konfigurieren

Starten Sie dazu auf Ihrem Client-Rechner – es darf sich dabei nicht um den Asterisk-Server handeln, da nur jeweils eine Applikation auf das Sound-Device zugreifen kann – das Softphone X-Lite. Durch einen Klick auf den Menü-Button rechts neben der Taste Clear gelangen Sie zu den Einstellungsseiten. Hier wählen Sie System Settings und dort den Punkt Default. Falls nicht bereits voreingestellt, setzen Sie den Wert von Enabled auf Yes. Tragen Sie in die Felder Display Name, Username und Authorization jeweils den in sip.conf vergebenen Benutzernamen ein, als Passwort verwenden Sie ebenfalls das dort vergebene.

Als Werte für Domain/Realm, SIP Proxy sowie Out Bound Proxy tragen Sie am besten die IP-Adresse Ihres Asterisk-Servers ein. Die restlichen Felder können Sie auf den Vorgabewerten belassen.

Softphone testen

Sind die Einstellungen korrekt und läuft Asterisk bereits, dann sollten Sie nun im Display von X-Lite die Meldung „Logged in ...“ sehen sowie die Mitteilung, dass Ihre Nummer der Name „test.user1“ ist.

Um zu verifizieren, dass alles wie geplant funktioniert, rufen Sie nun am besten Ihre SIP-Telefonnummer an. Anhand der Ausgaben auf der Asterisk-Konsole können Sie sehen, wie der Ruf an das Gerät SIP/test.user1 geleitet wird. Auf dem Client mit dem SIP-Softphone sollte dieses kurz darauf zu läuten beginnen.

Ausgehende Gespräche

Damit wäre schon einmal das Thema eingehende Rufe abgehakt. Jetzt fehlt nur noch die Möglichkeit, ausgehende Gespräche zu führen. Ein diesbezüglicher Versuch führt derzeit noch zu einer Fehlermeldung. Verständlich, schließlich haben wir bislang weder ein Regelwerk für ausgehende Verbindungen definiert, noch weiß Asterisk, auf welche Weise es eine Verbindung zum öffentlichen Netz herstellen soll. Beides holen wir jetzt nach. Zunächst legen Sie dazu in sip.conf einen weiteren Abschnitt an, der die ausgehenden Gespräche ermöglicht:

[sip-out]
type=peer
insecure=yes
nat=yes
username=4332211
fromuser=4332211
fromdomain=sipgate.de
secret=ABABAB
host=sipgate.de
qualify=yes

Wie deutlich zu sehen ist, handelt es sich dabei im Wesentlichen um eine etwas ausführlichere Form des Befehls register aus der globalen Sektion der SIP-Konfiguration.

extensions.conf für ausgehende Gespräche

Um nun ausgehende Rufe auf das so definierte Interface zu leiten, ist die Datei extensions.conf um folgende drei Zeilen zu erweitern:

[local-sip]
exten = _XXXX.,1,Dial(SIP/${EXTEN}@sip-out1)
exten = _XXXX.,2,Hangup

Ist das erledigt, starten Sie Asterisk neu. Theoretisch sollte auch die Eingabe des Kommandos reload auf der Asterisk-Kommandozeile genügen, doch es hat sich in der Praxis gezeigt, dass dies nicht immer wie gewünscht funktioniert. Was jetzt jedoch funktionieren sollte, sind ausgehende Gespräche über Ihren SIP-Account.

Auf die beschriebene Weise lassen sich nun beliebig viele weitere SIP-Softphones an den Asterisk-Server anbinden. Um etwa den Nutzer test.user2 mit der Durchwahl 667 anzubinden, kopieren Sie einfach den Abschnitt [test.user1] und passen die Namen sowie das Passwort an.

Interne Gespräche

Dabei fällt Ihnen sicher der eine Punkt auf, den wir bislang noch nicht behandelt haben: interne Gespräche. Aber keine Sorge, diese sind nun schnell abzuhandeln. Um auch interne Verbindungen von Softphone zu Softphone herzustellen, erweitern Sie einfach die Regeln im Abschnitt [local-sip] um zwei Zeilen und ändern eine ab, so dass das Endergebnis wie folgt aussieht:

[local-sip]
exten = 666,2,Dial(SIP/test.user1,30)
exten = 667,2,Dial(SIP/test.user2,30)
exten = _XXXX.,1,Dial(SIP/${EXTEN}@sip-out1)
exten = t,1,Hangup

Interessant ist hierbei vor allem die letzte Zeile. Anstelle der Extension _XXXX. kommt hier der Wert t zum Einsatz. Es handelt sich dabei um einen Platzhalter für die Sonderdurchwahl, die bei Erreichen eines Time-outs angesprungen wird. Wie groß der jeweilige Time-out ist, gibt die Zahl im Wahlparameter an. Für die internen Durchwahlen 666 und 667 sind dies jeweils 30 Sekunden, bei externen Rufen kommt der Time-out nicht zur Anwendung.

Besonderheiten

Dabei haben Sie sicherlich eine kleine Besonderheit bemerkt: Während normalerweise zwischen Extension und dem auszuführenden Kommando eine Eins steht, verwenden wir hier für die lokalen Durchwahlen 666 und 667 eine Zwei. Der Grund dafür ist, dass wir Asterisk zuvor angewiesen haben, bei der Anmeldung von test.user1 und test.user2 automatisch die jeweiligen Durchwahlen anzulegen.

Intern erledigt Asterisk dies, indem es den Befehl exten=666,1,NoOp() in die im Hauptspeicher gehaltene Kopie der extensions.conf einfügt. Hätten wir das Dial-Kommando nun mit dem Parameter Eins statt der verwendeten Zwei definiert, würde Asterisk diesen Befehl einfach überschreiben und die internen Durchwahlen wären nicht mehr erreichbar. Jetzt ist Ihnen sicher klar, was die Zahlen zu bedeuten haben: Sie legen fest, in welcher Reihenfolge Asterisk die Befehle für eine bestimmte Extension abarbeitet.

Vielleicht fragen Sie sich jetzt, wie Asterisk zwischen internen und externen Gesprächen unterscheidet. Das Geheimnis liegt in den Definitionen der Durchwahlen. Der für die externen Rufe verwendete Bezeichner _XXXX. bedeutet, dass die gewählte Nummer mindestens vier Stellen lang sein muss. Alle anderen Nummern interpretiert Asterisk als interne Gespräche.

Anrufe ins lokale Ortsnetz

Nun müssen wir noch ein kleines Problem beheben: Ausgehende Rufe ins eigene Ortsnetz. Aus Gewohnheit wählen die meisten Anwender hier einfach die Nummer ohne Vorwahl. Nun hat aber der SIP-Provider keine Chance, festzustellen, welches Ortsnetz der Anwender gerade meint, und der Anruf schlägt daher fehl. Um den Nutzern den gewohnten Komfort zu bieten, ändern Sie einfach die Wählregeln in extensions.conf ab:

[local-sip]
exten = 666,2,Dial(SIP/test.user1,30)
exten = 667,2,Dial(SIP/test.user2,30)
exten = _ZXXX.,1,Dial(SIP/089${EXTEN}@sip-out1}
exten = _0XXX.,1,Dial(SIP/${EXTEN}@sip-out1)
exten = t,1,Hangup

Der Parameter Z statt des bislang verwendeten X im ersten Wählbefehl prüft lediglich auf die Ziffern 1 bis 9, fängt also ausgehende Gespräche ohne Vorwahl ab. Im Dial-Kommando sehen Sie, dass vor der gewählten Rufnummer einfach die zu verwendende Vorwahl angegeben ist – in diesem Fall die 089 für München. Die verbleibenden Rufnummern fängt die zweite Zeile ab, die alle mit Vorwahl ausgeführten Rufe an den SIP-Provider leitet.

Ausblick

Bevor wir aber die Geheimnisse der Extensions weiter erforschen, machen wir uns zunächst daran, Asterisk auch mit dem ISDN-Netz zu verbinden. Denn in Deutschland ist Telefonie mittlerweile nahezu gleichbedeutend mit ISDN. Auch Asterisk unterstützt dieses Kommunikationsvehikel - wenn auch erst nach einiger Überredung.

Dieser Aufgabe widmen wir uns im nächsten Teil des Workshops ebenso wie dem Einsatz von Asterisk als Anrufbeantworter. Danach geht es um das Call-Routing, also das Vermitteln zwischen verschiedenen Anschlüssen, und eine einfache Form des Least Cost Routing. (mha)

Info: Mehr zu VoIP und Asterisk können Sie am 23. Februar auf unserem VoIP-Day in Frankfurt/Main erfahren. Dort steht Ihnen auch der Autor dieses Beitrags zum persönlichen Erfahrungsaustausch zur Verfügung. Die komplette Artikelserie zu Asterisk finden Sie auch im aktuellen tecCHANNEL-Compact zum Nachlesen, das Sie sofort in unserem Online-Shop versandkostenfrei bestellen können.