Aus Linux-Magazin 03/2008

Workshop: Die eigene Asterisk-Anlage - Teil 3

© photocase.com / kesmen

Viele begreifen Asterisk als reine VoIP-Anlage. Dabei gibt es den freien Server länger als die SIP-Telefonie. In dieser Workshop-Folge erfahren Sie, wie Sie ISDN-Leitungen und Analogtelefone anbinden und der Anlage Faxfunktionen verleihen.

In den letzten beiden Workshop-Folgen ([1], [2]) ging es um die Installation und Programmierung einer reinen VoIP-Anlage, die per SIP-Protokoll und -Provider die Verbindung zur Außenwelt führt. Der dritte Teil verheiratet die traditionelle Analog- und ISDN-Telefonie mit Asterisk [3]. Über Besonderheiten, die Asterisk für das gute alte Fax bereithält, erfahren Sie einiges am Schluss des Artikels.

American Beauty

Die Verbindung aus ISDN und Asterisk kann nicht gerade als Liebeshochzeit gelten. Wenn Asterisk überhaupt ein Kupferkabel liebt, dann ist es ein analoges Telefonkabel. Das liegt am amerikanischen Ursprung der Software. Noch heute laufen die meisten Asterisk-Installationen in den USA mit analogen Karten. Das erklärt auch gleich, warum VoIP für diese Nutzergruppe oft einen Qualitätssprung bedeutet. In vielen europäischen Ländern hingegen ist seit über 20 Jahre ISDN im breiten Einsatz – selbst in vielen Privathaushalten.

Entsprechend soll natürlich die neue Asterisk-Telefonanlage nicht nur VoIP, sondern auch ISDN verbinden können. Das funktioniert entweder mit einer ISDN-Karte, mit einer ISDN-Box, die Sie über USB an den Rechner anschließen, oder mit einer ISDN-to-SIP-Blackbox. Die folgende Beschreibung beschränkt sich auf die meistverbreitete Variante, die ISDN-Karte. Hilfreich ist ein wenig ISDN-Grundwissen [4], beispielsweise um den Unterschied von BRI und PRI.

ISDN-Karten zwischen zehn und 1000 Euro

Leider gibt es ISDN-Karten wie Sand am Meer – teure PRI-Karten kosten fünfstellige Beträge, günstige BRI-Karten gehen für zehn bis 30 Euro bei Auktionsportalen über die virtuelle Ladentheke. Die Frage nach der besten ISDN-Karte ist nicht objektiv korrekt zu beantworten. Prinzipiell kann eine 30-Euro-Karte vom Discounter genauso gut sein wie eine 1000-Euro-Karte vom Fachhandel. Bei manchem Hersteller liegt der Verdacht nahe, dass seine Premiumhardware vom selben Fließband stammt wie die Massenware und die Verpackung den Unterschied macht.

Ein objektiver Unterschied ergibt sich allerdings im Grad der Schwierigkeit bei der Treiberinstallation. In der Tendenz gilt: Je günstiger eine ISDN-Karte ist, desto länger braucht man für die Installation. Teurere Produkte kommen meist mit mehr oder weniger guten Install-Skripten, die Quellen aus dem Internet laden, dann wild patchen und zum Schluss eine meist veraltete Asterisk-Version installieren.

Beispiel Digium-Karte

Dieser Workshop kann natürlich nicht für alle am Markt erhältlichen Karten eine Installationsbeschreibung geben. Das soll beispielhaft für die Digium B410P [5] erfolgen, deren vier ISDN-Ports für die meisten kleineren Betriebe und Privatpersonen sowieso ausreichen. Die B410P beherrscht sogar Echo Cancelation [6] in Hardware, was die CPU entlastet und der Qualität der Echokompensation entgegenkommt (siehe Kasten “Hallo Echo”). Außerdem lässt sich die Karte im TE- und im NT-Modus fahren.

Hallo Echo

Das Echo-Problem, also das Wahrnehmen der eigenen Stimme, ist so alt wie die Telefonie. Den Grund liefert fast immer eine Hybridschaltung in analogen Telefonen. Dabei läuft das Gespräch auf zwei Adern bidirektional statt auf vieren, wo jeweils zwei Adern für eine Richtung zuständig sind (Abbildung 1). Bei einem Zwei-Adern-Transport kann es zu Überlagerungen kommen – dem Echo. Eine Person nimmt ein Echo aber nur wahr, wenn es laut genug ist und mit einer gewissen Verzögerung ankommt. Das liegt daran, dass jeder Mensch beim Sprechen sowieso seine eigene Stimme über die Ohren hört und das Gehirn deswegen bereits eine hochoptimierte Echo Cancelation für kleine Echos eingebaut hat.

Abbildung 1: Echos entstehen, wenn gesendete und empfangene Sprachdaten über eine gemeinsame Leitung laufen. Asterisk fällt oft die Aufgabe zu, die Echo Cancelation zu übernehmen.

Abbildung 1: Echos entstehen, wenn gesendete und empfangene Sprachdaten über eine gemeinsame Leitung laufen. Asterisk fällt oft die Aufgabe zu, die Echo Cancelation zu übernehmen.

Normalerweise kümmert sich jede Telefonanlage um das Echo Canceling [6] der eigenen Telefone. Da Asterisk meistens als letztes in einer Kette von Telefonsystemen arbeitet, bekommt es häufig in Sachen Echo-Unterdrückung den Schwarzen Peter zugespielt. Wenn Asterisk die einzige Telefonanlage ist – selbst wenn Sie nur digitale Geräte betreiben -, dann müssen Sie sich sowieso mit der Problematik auseinandersetzen. Europäische Benutzer tolerieren keine Echos auf der Leitung.

Echo Canceling kann bei Asterisk entweder auf der ISDN- oder der Analog-Karte passieren oder – wenn die Karten dies nicht unterstützen – per Software. Eine Echo-Auslöschung auf den Karten sollten Sie bevorzugen, da die Wege kürzer sind und sie die CPU des Rechners nicht belastet. Bei mehreren gleichzeitigen Gesprächen nämlich avanciert die Cancelation bei Software zum Ressourcen-Fresser.

Ärgerlich ist, dass jeder Hersteller für den Konfigurierenden ein anderes Süppchen kocht. Bei der Digium-Karte ist die Sache noch relativ einfach: »echocancel=yes« schaltet die Echo-Auslöschung an. Schwierigen Karten kommt man erst nach einem Sourcecode-Studium bei.

Echo Cancelation per freier Software ist kaum weniger anspruchsvoll. Neben MG2, mit dem Zaptel und MISDN standardmäßig arbeiten, gibt es eine Handvoll weiterer Projekte ([7], [8],[9]). Welches am besten funktioniert, hängt auch von der Vermittlungsstelle ab.

Da der Asterisk-Hersteller Digium sie baut und vertreibt, muss man kein Prophet sein, um sicherzugehen, dass es zu jeder neuen Asterisk-Release zügig einen funktionierenden Treiber geben wird. Da Digium oft im Monatstakt wichtige Asterisk-Updates veröffentlicht, ist dies der einzige für normale Admins gangbare Weg, immer eine aktuelle Asterisk-Version laufbreit zu haben.

Asterisk übersetzen

Den Asterisk-Server hatten Sie bereits in Teil 1 dieses Workshops installiert. Der Betrieb einer ISDN-Karte erfordert aber ein etwas komplexeres Asterisk-Setup. Für die folgende Anleitung nehmen Sie wieder ein frisch installiertes Debian-System [10] als Grundlage oder Sie installieren über das Setup der früheren Artikel drüber. Wichtig: Die ISDN-Karte müssen Sie vorher (!) in den Rechner einbauen. Loggen Sie sich nun auf dem System als Root ein und führen Sie

apt-get update
apt-get -y upgrade
shutdown -r now

aus. Das stellt sicher, dass das System einen aktuellen Kernel benutzt.

Nach dem Booten loggen Sie sich wieder als Root ein und spielen die zum Kompilieren notwendigen Pakete ein (Listing 1, Zeile 1). Zeile 2 holt und entspackt die aktuellen Quellen vom Digium-Server. Jetzt übersetzen und installieren Sie die Zaptel-Quellen (Zeilen 3 und 4) Das letzte Make lädt die aktuellen MISDN-Quellen und baut die Treiber für die ISDN-Karte. Die Zeilen 5 und 6 übersetzen den Asterisk-Server. Das »make config« führt dazu, dass Asterisk auf Ihrem Debian-System beim Hochfahren automatisch startet.

Listing 1: Asterisk
installieren

01 apt-get -y install build-essential libncurses5-dev libcurl3-dev libvorbis-dev libspeex-dev unixodbc 
   unixodbc-dev libiksemel-dev linux-headers-`uname -r` flex bc pciutils libnewt-dev libusb-dev
02 cd /usr/src && wget http://downloads.digium.com/pub/asterisk/asterisk-1.4-current.tar.gz && wget 
   http://downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz && tar xvzf 
   asterisk-1.4-current.tar.gz && tar xvzf zaptel-1.4-current.tar.gz
03 cd zaptel-1.4.8
04 ./configure && make && make install && make b410p
05 cd /usr/src/asterisk-1.4.17
06 ./configure && make && make install && make samples && make config

ISDN-Karte per Skript konfigurieren

Zum Erkennen einer eingebauten ISDN-Karte starten Sie »/usr/sbin/misdn-init scan«. Das Skript antwortet etwa mit:

[OK] found the following devices:
card=1,0x4
[ii] run "/usr/sbin/misdn-init config" to store this information to /etc/misdn-init.conf

Hat das System die Karte also korrekt erkannt, können Sie mit »/usr/sbin/misdn-init config« die Standardkonfiguration automatisch in die Datei »/etc/misdn-init.conf« schreiben lassen. Die Konfiguration der Karte in der Datei »/etc/misdn-init.conf« beschränkt sich im Folgenden auf den Teil mit der Überschrift »Port settings«. Die verfügbaren Optionen sind dort aufgelistet.

Wenn Sie die Karte an einem normalen Mehrgeräteanschluss betreiben wollen und diesen mit Port 1 der Karte verbinden, dann lautet die entsprechende Zeile »te_ptmp=1«. Falls Sie über den gleichen Port auch Faxe empfangen möchten, müssen Sie weiter unten noch die Zeile »option=1,master_clock« durch Entfernen des Kommentarzeichens aktivieren. In der letzten Zeile steht ein Schalter für einen höheren Debugging-Level. Es schadet sicher nicht, dort anfänglich »debug=1« einzutragen.

Als Nächstes müssen Sie Asterisk in der Datei »/etc/asterisk/misdn.conf« die Daten für den Port angeben. Am besten kommentieren Sie alle anderen Kontexte aus und geben am Ende zusätzlich die folgenden Daten ein:

[isdn]
ports=1
context=from-isdn
msns=*

Jetzt ist der Zeitpunkt, um mit einem »shutdown -r now« das System zu booten und zu prüfen, ob Asterisk und ISDN-Treiber sauber starten. Die vier Lampen neben den ISDN-Ports der Karte sollten dabei blinken. Sobald Sie in den ersten Port Ihr ISDN-Kabel einstecken, sollte die zugehörige LED (außer in der Schweiz) konstant leuchten (siehe Abbildung 2).

Abbildung 2: Sobald Sie die ISDN-Karte richtig konfiguriert haben und in den ersten Port das passende ISDN-Kabel einstecken, leuchtet dessen LED konstant.

Abbildung 2: Sobald Sie die ISDN-Karte richtig konfiguriert haben und in den ersten Port das passende ISDN-Kabel einstecken, leuchtet dessen LED konstant.

Hallo ISDN-World

Wie ein Dialplan funktioniert, wissen Sie ja bereits seit den vorherigen Workshop-Teilen. Als Erstes sollten Sie mit einem “Hello World” wie in Listing 2 die prinzipielle Funktion Ihrer ISDN-Konfiguration testen. Wenn jetzt auf einer beliebigen MSN für diesen Anschluss ein Anruf eingeht, hebt Asterisk ab, spielt den Sprachbaustein »hello-world« ab und sagt danach die angerufene MSN.

Oder es reicht dieser Eintrag in Ihrer »extensions.conf«

[from-isdn]
exten => 1234567,1,Dial(SIP/2000)

wenn Sie beispielsweise alle Anrufe zur MSN 1234567 auf Ihr internes SIP-Telefon 2000 verbinden wollen.

Listing 2:
»extensions.conf«

01 [from-isdn]
02 exten => _X.,1,Answer()
03 exten => _X.,n,Playback(hello-world)
04 exten => _X.,n,Wait(1)
05 exten => _X.,n,SayDigits(${EXTEN})
06 exten => _X.,n,Hangup()

Von internen SIP-Telefonen ins Festnetz über ISDN

Wenn Sie alle Gespräche von internen Telefonen im Context »[meine-telefone]«, die mit einer 0 anfangen, in das ISDN-Netz routen wollen, platzieren Sie den folgenden Eintrag in der »/etc/asterisk/extensions.conf«:

[meine-telefone]
exten => _0X.,1,Dial(mISDN/g:isdn/${EXTEN:1})

Beachten Sie, dass »:1« die führende Null weggeschneiden muss, da es sonst ein Auslandsgespräch wird.

Mit der allgemein beliebten Null als Erkennungsmerkmal für Gespräche ins Festnetz, gibt es gleichwohl ein Problem: die Rückruflisten in Ihrem Telefon. Bekommen Sie aus dem ISDN-Netz einen Anruf, zeigt Ihr internes SIP-Telefon korrekterweise die Rufnummer des Anrufers ohne die führende Null an und speichert sie auch im Telefon. Würden Sie nun einfach aus der Rufliste des Telefons zurückrufen, muss dies misslingen. Der Eintrag in der »extensions.conf«

[from-isdn]
exten => _X.,1,Set(CALLERID(num)=0${CALLERID(num)})
exten => _X.,n,Dial(SIP/2000)

löst das Problem durch Umschreiben der Caller-ID des Anrufers.

Analoge Telefonie mit Asterisk

Bei analogen Verbindungen von und zu Asterisk gibt es zwei Möglichkeiten: Sie bauen relativ teure Analog-Karten, die bis zu acht analoge Ports bereitstellen, in den Rechner ein. Oder Sie nutzen Analog Telephone Adapter (ATA), die Asterisk wie ein normales SIP-Telefon über das Netzwerk anspricht (siehe Abbildung 3). Der ATA konvertiert selbstständig die Sprachinformation zwischen Ethernet und analoger Leitung.

Abbildung 3: Ein ATA macht ein analoges Telefon oder Faxgerät im Netzwerk zum SIP-Gerät.

Abbildung 3: Ein ATA macht ein analoges Telefon oder Faxgerät im Netzwerk zum SIP-Gerät.

Die Analog-Karten benötigen eigene Treiber und sind in der Installation aufwändiger. Außerdem müssen Analog-Karten-Besitzer den Dialplan leicht verändern (»s«-Extension), da analoge Ports kein Ziel angeben können. Interessenten finden auf [13] eine Anleitung. Die ATAs dagegen punkten zweifach: Sie sind günstig, ab 50 Euro, und man braucht keine extra analoge Leitung von der Telefonanlage zum Gerät zu legen.

Die Nachteile liegen in der (theoretisch) schlechteren Sprachqualität im Vergleich zu den Analog-Karten und teilweise bei Problemen mit Faxgeräten. Wer aber ein Dect-Analog-Telefon an seine Asterisk-Anlage anschließen will, der ist mit einem ATA sehr gut bedient. Der zu dem ISDN-»extensions.conf«-Eintrag von vorhin korrespondierende Eintrag für ein ATA lautete schlicht:

[meine-ata]
exten => _0X.,1,Dial(SIP/${EXTEN:1}@2000)

Sowohl beim Kauf einer Karte als auch bei dem von ATAs, achten Sie auf die Art der Ports: Es gibt bei analogen Ports die beiden Varianten FXS (Foreign Exchange Subscriber) und FXO (Foreign Exchange Office). Ein FXS liefert den Strom für das daran angeschlossene Gerät, zum Beispiel ein Telefon. Wenn Sie also ein analoges Telefon an die Asterisk-Anlage anschließen wollen, dann benötigt diese einen FXS-Port.

Ein FXO dagegen nimmt Strom auf, beispielsweise von einem analogen Hausanschluss. Wer sein Asterisk nach draußen analog verbinden möchte, braucht eine Karte oder einen ATA mit FXO-Port.

Faxe senden und empfangen

Faxen unter Asterisk ist ein leidiges Thema, obwohl mancher Admin die Probleme selbst verursacht. Wer über die Kette Faxgerät, Analogadapter, SIP, Asterisk, Internet, SIP-Provider, Telefoncarrier, Telefonanlage der Gegenseite und entferntes Gerät ein Fax verschicken will, der sollte sich nicht wundern, wenn dies angesichts der Dicke des Protokollstacks nicht funktioniert. Faxe sind nämlich anders als Telefonate Timing-empfindlich und bekommen schon bei kleinen Verzögerungen Probleme.

Mancher Asterisk-Admin geht zudem in die Codec-Falle: Die für Sprachübertragung optimierten schmalbandigen Komprimierer eignen sich nicht für Faxe, die mit 9600 Bit/s senden wollen. Dafür kommt nur ein G.711-Codec ([14], A-law und µ-law) in Frage! Und selbst der bringt bei reinen IP-zu-IP-Verbindungen, etwa bei einem VPN zwischen zwei Standorten, oft Latenzprobleme.

Anhänger von Callweaver [15], einem GPL-Fork von Asterisk 1.2, können darüber nur schmunzeln. Denn Callweaver spricht das Faxprotokoll T.38, das sich auch auf IP-Strecken robust verhält. Wer aber auf Features von Asterisk 1.4 angewiesen ist, findet in dem zusehends veraltenden Fork keine Alternative.

Bei kleinen monatlichen Volumina abzusetzender Faxe führt kaum etwas an einem normalen Faxgerät nebst ATA vorbei. Bei größeren Mengen sollten Sie in Richtung Faxserver und damit zu Hylafax [16] gehen. Die Software IAXmodem [17] emuliert ein normales Modem und etabliert dafür ein Device wie »/dev/ttyIAX0«. An dies klemmen sich sowohl Asterisk per IAX-Protokoll als auch Hylafax an. Die komplette Installation [18] fürs Fax-Senden und -Empfangen ist nicht trivial, aber machbar. An gleicher Stelle finden Sie auch ein Fax-to-E-Mail-Gateway beschrieben.

Workstations in Ihrem Netz, die Faxe verschicken sollen, rüsten Sie mit Hylafax-Clients [16] aus, die es für fast jedes Betriebssystem gibt. Am Schluss ein Tipp aus der Praxis: Müssen Sie faxtechnisch mehr als einen Multiplex-Anschluss bedienen, verteilen Sie der besseren Skalierung wegen den Fax- und den Asterisk-Server auf verschiedene Systeme.

Ausblick

Im nächsten und letzten Teil der Artikelserie geht es um das GPL-Projekt “Gemeinschaft” [19]. Mit dem Telefonanlagen-Kit realisieren Sie eine komplette Telefonanlage mit Features klassischer Anlagen, etwa einem zentralen Telefonbuch im Telefon, Roaming Users und Mass-Deployment, und Sie verstehen das Prinzip des Provisioning bei Installationen mit mehr als zehn Telefonen. (jk)

Asterisk 1.6

Nach Redaktionsschluss dieser Ausgabe veröffentlichte Digium die erste Betaversion von Asterisk 1.6.0. Die von [11] verlinkte Feature-Liste ist lang: AMI bekommt eine Menge neue Kommandos und Actions, das CLI »core show hint«, »core show settings«, »core show channels count« und andere Kommandos, es kommen neue und erweiterte Dialplan-Funktionen hinzu, der NAT- und STUN-Support bei SIP-Verbindungen ist besser und vieles mehr.

In der Asterisk-Community belebte das Veröffentlichen der Beta eine alte Diskussion: Es gäbe in der 1.4er Version noch genügend Baustellen und deswegen mache es wenig Sinn, eine neue Version zu veröffentlichen. Eine Telefonanlage erfordere eine konservativere Release-Politik. Gleichwohl wird sich im laufenden Jahr jeder Asterisk-Admin die Frage nach der richtigen Version stellen. Solange die 1.6 noch Beta ist, lautet die Antwort: 1.4. Auch danach sollte man noch eine Weile bei 1.4 bleiben, da Digium in der Vergangenheit immer mehr als ein Jahr gebraucht hat, neue Versionen halbwegs stabil zu bekommen.

Paradoxerweise liegt hier ein Grund der relativ frühen Freigabe des 1.6er Zweiges: Digium praktiziert eine neue Release-Policy [12], die sich an der des Linux-Kernels orientiert – viele kleine Releases. Die Asterisk-Firma erhofft sich dadurch besser getesteten Code.

Infos

[1] Stefan Wintermeyer, “Workshop: Die eigene Asterisk-Anlage – Teil 1”: Linux-Magazin 01/08, S. 84

[2] Stefan Wintermeyer, “Workshop: … – Teil 2”: Linux-Magazin 02/08, S. 84

[3] Asterisk-Projekt: [http://www.asterisk.org]

[4] ISDN: [http://de.wikipedia.org/wiki/Integrated_Services_Digital_Network]

[5] Digium B410P: [http://www.digium.com/en/products/digital/b410p.php]

[6] Echokompensation: [http://de.wikipedia.org/wiki/Echokompensation]

[7] Open Source Line Echo Canceller (OSLEC) für Zaptel: [http://www.rowetel.com/ucasterisk/oslec.html] und für MISDN: [http://peter.schlaile.de/mISDN/]

[8] Octasic\’s Soft Echo (Zaptel und MISDN): [http://www.octasic.com/en/octware/softecho_asterisk.php]

[9] Echo Cancelation im ISDN-Treiberpaket für FreeBSD: [http://www.turbocat.net/~hselasky/isdn4bsd/sources/src/sys/i4b/layer1/i4b_echo_cancel.c]

[10] Debian installieren: [http://www.debian.org/releases/etch/debian-installer/]

[11] Ankündigung Asterisk 1.6: [http://www.asterisk.org/node/48445]

[12] Neue Asterisk-Policy: [http://lists.digium.com/pipermail/asterisk-dev/2007-October/030083.html]

[13] Deutsches Asterisk-Buch: [http://www.das-asterisk-buch.de], kommende Version: [http://www.das-asterisk-buch.de/unstable/]

[14] G.711: [http://de.wikipedia.org/wiki/G.711]

[15] Callweaver [http://www.callweaver.org]

[16] Hylafax: [http://www.hylafax.org]

[17] IAXmodem: [http://iaxmodem.sourceforge.net]

[18] Vollständiges Asterisk-Fax-Setup: [http://www.das-asterisk-buch.de/unstable/faxserver-mit-iaxmodem-und-hylafax.html]

[19] Gemeinschaft: [http://www.amooma.de/gemeinschaft/]

Der Autor

Stefan Wintermeyer ist Autor des bei Addison-Wesley erschienenen Asterisk-Buches und erster deutscher DCAP (Digium Certified Asterisk Professional). Bei der Amooma GmbH [http://www.amooma.de] bietet er Consulting, Support und Training zu Asterisk an.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben