Addons:Asterisk
Aus IPFireWiki
Dieses Howto ist noch nicht fertig, nur von mir getestet, und sollte erweitert/berichtigt werden.
Ich kann und werde hier nur auf meine Konfiguration eingehen. Ich betreibe asterisk mit einem SIP-Account und an HFC-Karte angeschlossenen ISDN-Telefonen. Ich habe keine Festnetzverbindung.
Inhaltsverzeichnis |
Was ist Asterisk
Asterisk ist eine PBX-Software, also eine Software-Telefonanlage. Es kann mittels VoIP, aber auch mit entsprechender Hardware über das Festnetz telefoniert werden. Als Telefone kommen SIP-Geräte in Frage, oder normale Telefone die mit ATA-Adaptern oder über eine ISDN-Karte im NT-Modus an den Asterisk angeschlossen werden.
Asterisk ist sehr mächtig, und daher ist die Konfiguration sehr kompliziert.
Asterisk in IPFire
Dieses Howto bezieht sich auf das derzeit aktuelle Asterisk-Addon in der Version 1.4.8-1. Das Paket bringt mISDN mit, damit können z.B. Fritz!-ISDN-Karten im TE-Modus, und HFC-ISDN-Karten im NT und TE-Modus betrieben werden. Derzeit wird kein Webinterface mitgeliefert, die Konfiguration muss per Hand erledigt werden.
Hardwareanforderungen
Eine allgemeingültige Hardwareempfehlung gibt es nicht. Ich betreibe asterisk auf einem PII-400 mit 196MB Ram, und stoße da schon fast an die Grenzen. Ein laufendes Gespräch wird gestört, wenn ich gleichzeitig im Webinterface von IPFire Seiten aufrufe. Abgesehen davon ist aber Telefonieren und gleichzeitiges Surfen problemlos möglich.
ISDN-Hardware
ISDN-Hardware wird benötigt, wenn man Anrufe ins Festnetz routen will, oder herkömmliche (nicht-VoIP) Hardware zum Telefonieren verwenden möchte. Um Anrufe ins Festnetz zu routen reicht eine beliebige von mISDN unterstützte ISDN-Hardware. Wenn man allerdings Telefone an den asterisk anschliessen will, benötigt man eine ISDN-Karte mit dem HFC-Chipsatz (zu erkennen am Kölner Dom auf dem Chip), da diese Karten in den NT-Modus geschaltet werden können. Analoge Hardware oder Karten mit mehreren ISDN-Anschlüssen sind teuer und für Privatleute schwer zu bekommen, daher werde ich hier nicht auf solche Hardware eingehen.
Softwareanforderungen
Das Addon installiert benötigte Software automatisch mit.
Konfiguration
Voraussetzungen
Das Asterisk-Addon sollte über Pakfire installiert sein. Sämtliche benötigte Hardware muss installiert/angeschlossen sein.
Hardwarekonfiguration
Ich kann hier beispielhaft nur auf eine HFC-Karte im NT-Modus eingehen, da ich keine andere Hardware besitze.
Die Konfiguration der Hardware erfolgt in der mISDN.conf, wobei nur der untere Teil "<mISDNconf>" relevant ist. Die Sachen dadrüber sollten unverändert bleiben, ausser man weiß was man tut.
<mISDNconf>
<module poll="128" debug="0" timer="no">hfcmulti</module>
<module debug="0" options="0">mISDN_dsp</module>
<devnode user="root" group="root" mode="644">mISDN</devnode>
<card type="hfcpci">
<port mode="nt" link="ptmp">1</port>
</card>
</mISDNconf>
Die hier gezeigte Konfiguration initialisiert eine HFC-Karte im NT-Modus und Point-to-Multipoint-Protokoll.
Damit die Konfiguration übernommen wird, muss
/etc/init.d/mISDN start
ausgeführt werden. Ob alles geklappt hat, kann man mit
misdnportinfo
überprüfen. Es sollte eine ähnliche Ausgabe wie hier kommen:
Port 1: NT-mode BRI S/T interface port (for phones) -> Interface can be Poin-To-Point/Multipoint. -------- mISDN_close: fid(3) isize(131072) inbuf(0x804c060) irp(0x804c060) iend(0x804c060)
mISDN in asterisk
Damit Asterisk mit der Karte kommuniziert, muss es ihm in der misdn.conf gesagt werden. Meine Konfiguration sieht so aus:
[general] misdn_init=/var/ipfire/asterisk/misdn-init.conf ; 1) debug=0 ntdebugflags=0 ntdebugfile=/var/log/misdn-nt.log bridging=no stop_tone_after_first_digit=yes append_digits2exten=yes dynamic_crypt=no crypt_prefix=** crypt_keys=test,muh [default] context=misdn language=de musicclass=default senddtmf=yes far_alerting=no allowed_bearers=all nationalprefix=0 internationalprefix=00 rxgain=0 txgain=0 te_choose_channel=no pmp_l1_check=no reject_cause=16 need_more_infos=no nttimeout=no method=standard dialplan=0 localdialplan=0 cpndialplan=0 early_bconnect=yes incoming_early_audio=no nodialtone=no presentation=-1 screen=-1 jitterbuffer=4000 jitterbuffer_upper_threshold=0 hdlc=no max_incoming=-1 max_outgoing=-1 [NT] ; 2) ports=1 context=intern overlapdial=yes echocancel=yes
zu 1): chan_misdn sucht nach der mISDN-Konfiguration in der inzwischen veralteten Syntax. Daher habe ich im asterisk-Verzeichnis eine "Fake"-Konfiguration angelegt:
zu 2) Die Karte wird NT genannt, und in den Kontext "intern" gesetzt. Diese Bezeichnungen werden auch in anderen Konfigurationsdateien benötigt.
Asterisk-Konfiguration
modules.conf
Alle benötigten Module (und gefühlte 1000 nicht benötigte) werden automatisch geladen. Daher sind hier keine Anpassungen nötig. Wenn alles läuft kann man Module mit "noload => modul.so" ausschließen um Asterisk etwas zu entschlacken.
codecs.conf
Es sind keine Anpassungen nötig. Bei Bedarf kann vbr auf false gesetzt werden, da die variable Bitrate oft eine schlechtere Sprachqualität hat. Das geht aber auf Kosten des benötigten Traffics!
sip.conf
[general] context=sip-in ; Default context for incoming calls allowoverlap=no ; Disable overlap dialing support. (Default is yes) bindport=5060 ; UDP Port to bind to (SIP standard port is 5060) bindaddr=0.0.0.0 ; IP address to bind to (0.0.0.0 binds to all) srvlookup=yes ; Enable DNS SRV lookups on outbound calls register => 1234567e0:XXXX@sipgate.de/033112345670 [authentication] [sipgate] type=peer secret=XXXXX username=1234567e0 host=sipgate.de fromuser=1234567e0 fromdomain=sipgate.de ;context=incoming insecure=port,invite disallow=all ;allow=g729 allow=ulaw nat=no canreinvite=no
Das hier gezeigte Beispiel registriert einen SIP-Account bei sipgate.de. Wichtig ist, dass im [general] Bereich eine Zeile mit "register => username:passwort@host/Tel.-Nr" auftaucht
extensions.conf
Eine der wichtigsten Konfigurationen, hier wird u.a. der Dialplan erstellt.
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp ; Console interface for demo
IAXINFO=guest ; IAXtel username/password
TRUNK=Zap/g2 ; Trunk interface
TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0)
[sip-in]
exten => 033112345670,1,Ringing()
;exten => 033112345670,2,Dial(misdn/g:NT/10&misdn/g:NT/11,60,Ttr)
exten => 033112345670,2,Dial(misdn/g:NT/10)
exten => 033112345670,3,Congestion()
exten => 033112345670,4,Wait(10)
exten => 033112345670,5,Hangup
[intern]
exten => 10,1,Dial(misdn/g:NT/10,60,Ttr) ; Nebenstelle 10
exten => 10,2,Hangup
exten => _X.,1,Dial(SIP/sipgate/${EXTEN}) ; raus via sipgate
exten => _X.,2,Hangup
Ich werde nicht alles erklären, aber auf das wichtigste eingehen.
Im Bereich [globals] können globale Variablen deklariert werden. Die hier vorhandenen sind die aus der Beispielkonfiguration und werden nicht benötigt.
[sip-in] ist ein selbst erstellter Bereich, der Anrufe routet, die über sipgate hereinkommen. Die auskommentierte Zeile ist ein Beispiel, wenn 2 Nebenstellen an mISDN-Hardware klingeln sollen.
Die ersten 2 Zeilen in [intern] dienen dazu um die Nebenstelle 10 intern anzurufen. Die anderen 2 Zeilen routen alle (anderen) ausgehenden Anrufe über sipgate raus.
Die Nr. der Nebenstelle 10 ist frei wählbar, und muss am angeschlossenen ISDN-Gerät als MSN konfiguriert werden.
.. to be continued
Einstellungen in ipfire
Autostart einrichten
Da Asterisk momentan nicht über das Webinterface konfiguriert werden kann, müssen folgende Schritte durchgeführt werden um Asterisk und mISDN beim Systemstart zu laden:
ln -s ../init.d/mISDN /etc/rc.d/rc3.d/S61mISDN ln -s ../init.d/asterisk /etc/rc.d/rc3.d/S62asterisk ln -s ../init.d/mISDN /etc/rc.d/rc0.d/K32mISDN ln -s ../init.d/asterisk /etc/rc.d/rc3.d/K31asterisk ln -s ../init.d/mISDN /etc/rc.d/rc6.d/K32mISDN ln -s ../init.d/asterisk /etc/rc.d/rc6.d/K31asterisk
QoS konfigurieren
Damit gleichzeitiges Surfen und Telefonieren möglich ist, müssen SIP-Pakete bevorzugt behandelt werden. Das erreicht man mit QoS. Ich habe die Konfiguration aus der Vorlage erstellen lassen, und lediglich bei der Klasse 102 das Layer7-Protokoll "sip" hinzugefügt.
Probleme
Störungen bei parallelen Prozessen
Problem: Bei mir ist das Gespräch kurz "zerhackt" wenn IPFire gerade etwas anderes ausführt, z.B. das Webinterface aufgerufen wird, oder Cronjobs (z.B. makegraph) ausgeführt werden. Ich muss noch testen, ob das irgendwie behoben werden kann (z.B. Prozessprio von asterisk erhöhen), oder ob meine Hardware einfach zu schwach ist.
Lösung: Asterisk muss mit dem Parameter "-p" gestartet werden um als Echtzeitprozess zu laufen. Siehe Bug #235.

