Addons:Asterisk

Aus IPFireWiki

Wechseln zu: Navigation, Suche


Warnung
Warnung

Dieses Howto ist noch nicht fertig, nur von mir getestet, und sollte erweitert/berichtigt werden.


Hinweis
Hinweis

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

Hinweis
Hinweis

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.

Datei
/etc/mISDN.conf
<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:

Datei
/var/ipfire/asterisk/misdn.conf
[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:

Datei
/var/ipfire/asterisk/misdn-init.conf
card=1,hfcpci
nt_ptmp=1


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

Datei
/var/ipfire/asterisk/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.

Datei
/var/ipfire/asterisk/extension.conf
[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.

Persönliche Werkzeuge