02.01.2013 Aufrufe

VoIP mit Asterisk unter Linux

VoIP mit Asterisk unter Linux

VoIP mit Asterisk unter Linux

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>VoIP</strong> <strong>mit</strong> <strong>Asterisk</strong><br />

<strong>unter</strong> <strong>Linux</strong><br />

Thomas Will<br />

xinux e.K.


XINUX e.K.<br />

gegründet 1999 von Thomas Will<br />

Training<br />

Networks<br />

Security<br />

Database<br />

Consulting<br />

http://www.xinux.com


Allgemeines zu <strong>Asterisk</strong><br />

Geschichte von <strong>Asterisk</strong><br />

Funktionen und Standards<br />

Hardware und <strong>VoIP</strong>­Protokolle<br />

Installation und Starten<br />

Aufbau und Wählplan<br />

Überblick<br />

Konfigurationsdateien und Command Line Interface<br />

<strong>Asterisk</strong> im Netzwerk<br />

<strong>Asterisk</strong>­<strong>Linux</strong>­Distributionen


Allgemeines zu <strong>Asterisk</strong><br />

<strong>Asterisk</strong> ist eine Open Source PBX (Telefonanlage)<br />

für das <strong>Linux</strong>­Betriebssystem <strong>unter</strong> der GNU/GPL Lizenz<br />

Protokolle SIP, H.323, IAX2 (Inter­<strong>Asterisk</strong>­Exchange), MGCP,<br />

SCCP, Analog, ISDN (BRI und PRI)<br />

Codecs G.711, GSM, G.729, G.726, iLBC und Speex<br />

Telefax, Text2Speech und AGI möglich<br />

Stellt viele Applikationen bereit (ENUM, Konferenzen,<br />

Voicemail, Warteschlangen, ...)<br />

Ist das Swiss­Army­Knife der Telefonie!<br />

Skaliert von einem Anrufbeantworter ­> Carrier Netz


Geschichte von <strong>Asterisk</strong><br />

1999 aus Geldmangel von Mark Spencer entwickelt<br />

Integration des Zapata Projekts<br />

Komplette Lösungen aus einer Hand<br />

Spezialisierte <strong>Asterisk</strong> <strong>Linux</strong> Distribution<br />

Appliance Lösungen<br />

Inzwischen bei den meisten <strong>VoIP</strong> Providern im Einsatz


Funktionen und Standards<br />

Sprachdienste<br />

� Anrufbeantworter, Telefonkonferenzen, Sprachdialoge<br />

<strong>VoIP</strong>­Protokolle<br />

� Inter<strong>Asterisk</strong> eXchange (IAX)<br />

� Session Initiation Protocol (SIP)<br />

� H.323


Funktionen und Standards<br />

für öffentliche Telefonanbieter und Callcenter genauso<br />

geeignet wie für den Privathaushalt.<br />

Viele <strong>VoIP</strong>­Provider sind <strong>mit</strong>tels <strong>Asterisk</strong> aufgebaut.<br />

<strong>Asterisk</strong> <strong>unter</strong>stützt diverse Audio­Codecs wie GSM,<br />

ADPCM, ILBC und das Dekomprimieren von MP3.<br />

<strong>mit</strong>tels <strong>Asterisk</strong> lässt sich die Telefonanlage nahezu<br />

beliebig konfigurieren und erweitern.


Hardware<br />

<strong>Linux</strong> (empfohlen Kernel > 2.6)<br />

FreeBSD, NetBSD, OpenBSD<br />

MacOS<br />

Windows (Cygwin oder CO<strong>Linux</strong>)<br />

Bevorzugt x86


Hardware<br />

ISDN Karten <strong>mit</strong> HFC­Chips (HDLC­FIFO­Controller­Chips)<br />

stellen die notwendigen Funktionen für die Anbindung<br />

interner Endgeräte zur Verfügung, da diese im NT­Modus<br />

betrieben werden können.


Hardware<br />

Ein <strong>Asterisk</strong>­System kann ohne weitere Hardware nur <strong>mit</strong><br />

<strong>VoIP</strong>­Endgeräten und <strong>VoIP</strong>­Telefonprovidern betrieben<br />

werden<br />

Für die Verbindung zum herkömmlichen Telefonnetz sowie<br />

den Anschluss von analogen Telefonen benötigt man<br />

zusätzlich Steckkarten oder ATAs.


IAX ­ Inter<strong>Asterisk</strong> eXchange<br />

<strong>VoIP</strong>­Protokolle<br />

� Für den Signalisierungprozess und für die Übertragung des<br />

Audiostream wird nur ein Port benötigt, welcher von Seite des<br />

Clients offengehalten wird.<br />

� keine NAT­ bzw. Firewall­Probleme<br />

� Bandbreitennutzung von ca. 38 kBit/s in Sende­Richtung<br />

� kann durch eine einzelne UDP­Verbindung Steuersignale und<br />

mehrere Gespräche bzw Videobotschaften zwischen zwei<br />

Computern bzw. Endgeräten übertragen


SIP ­ Session Initiation Protocol<br />

<strong>VoIP</strong>­Protokolle<br />

� lehnt sich an das Hypertext Transfer Protokoll an, ist zu<br />

diesem aber nicht kompatibel.<br />

� ist ein Netzprotokoll zum Aufbau, zur Steuerung und zum<br />

Abbau einer Kommunikationssitzung zwischen zwei und<br />

mehr Teilnehmern<br />

� Unterstützung findet SIP bereits in vielen Geräten diverser<br />

Hersteller und es scheint sich zum Standard­Protokoll für<br />

Voice over IP (<strong>VoIP</strong>) zu entwickeln


H.323<br />

<strong>VoIP</strong>­Protokolle<br />

� ist ein Protokoll der H.32X­Serie, die auch die<br />

Kommunikation über öffentliche Telefonnetze und ISDN<br />

enthält.<br />

� hat seinen Ursprung als Protokoll für die<br />

Videokommunikation über TCP/IP<br />

� wird zunehmend vom SIP­Protokoll ersetzt<br />

� basiert auf dem ISDN Protokoll Q.323


Aufbau


Schedular<br />

Aufbau<br />

� Umsetzen der pseudoparallelen Verarbeitung um<br />

zur Sprachübertragung in Echtzeit<br />

� Planung des Aufgabenabaus ohne grosse Verzögerung<br />

� Gute Auslastung der Betriebs<strong>mit</strong>tel


I/O Manager<br />

Aufbau<br />

� Zentrale Ver<strong>mit</strong>tlungstelle zwischen Treibern und<br />

Devicenodes<br />

� Queueing und Bufferingverfahren zur flüssigen<br />

Sprachübertragung


Transcoder<br />

Aufbau<br />

� Entkomprimierung der ankommenden Sprache<br />

� Komprimierung der abgehenden Sprache


Dynamic Modul Loader<br />

Aufbau<br />

� Hinzufügen von Modulen zur Laufzeit<br />

� Entladen von Modulen zur Laufzeit<br />

� Ähnlich wie <strong>Linux</strong>kernelsystem<br />

� Kein Neustarten notwendig


API<br />

APIs<br />

� Channel ­ Schnittstelle für die verschiedenen Standards<br />

(SIP, H.323 oder CAPI)<br />

� Codec ­ Schnittstelle für die Kompressionsverfahren<br />

� Application ­ Schnittstelle für die Anwendungen<br />

(Beispielsweise Unterprogramm für Musik on Hold)


cd /usr/src/<br />

Installation und Starten<br />

wget http://ftp.digium.com/pub/asterisk/asterisk­1.4­current.tar.gz<br />

tar ­xvzf asterisk­1.4­current.tar.gz<br />

cd asterisk­1.4.x<br />

./configure<br />

make<br />

make install<br />

make sample<br />

asterisk oder asterisk ­r


Wählplan<br />

zentrales Steuerelement von <strong>Asterisk</strong>.<br />

� wohin wird ein Anrufer weitergeleitet<br />

� was passiert, wenn dort niemand abnimmt oder es<br />

besetzt ist<br />

� welcher Anrufbeantworter/welche Mailbox soll informiert<br />

werden<br />

� welche Eingaben werden akzeptiert<br />

� welche Aktion wird durch eine Eingabe ausgelöst


Wählplan<br />

gliedert sich in mehrere Abschnitte<br />

Bezeichnungen werden in eckigen Klammern gefasst<br />

Ein Abschnitt ist bis zur nächsten öffnenden Klammer bzw.<br />

bis zum Dateiende gültig<br />

Innerhalb der Abschnitte wird jeweils eine bestimmte<br />

Gruppe (Nebenstelle) und da<strong>mit</strong> zusammenhängende<br />

Reihenfolgen, Aktionen und Verhalten behandelt


Wählplan<br />

Die Abschnitte „[general]“ und „[globals]“ sind vordefinierte<br />

Abschnitte<br />

Alle anderen Abschnitte werden auch als Kontexte<br />

bezeichnet<br />

� Kontexte bestimmen einen geschlossenen Bereich und<br />

so<strong>mit</strong> einen definierten Sicherheitsbereich<br />

� Ein Kontext kann den Sicherheitsbereich des anderen<br />

Kontext erlangen, indem er in diesen Kontext über die<br />

Anweisung „include“ eingebunden wird<br />

Ist für eine Nebenstelle kein Kontext definiert, so wird diese<br />

über den Standardkontext „[default]“ behandelt


Konfigurationsdateien<br />

/etc/asterisk/misdn.conf<br />

� teilt <strong>Asterisk</strong> <strong>mit</strong>, wie die einzelnen HFC Karten genutzt werden<br />

/etc/asterisk/sip.conf<br />

� SIP­Benutzer und Zugänge von SIP­Providern<br />

/etc/asterisk/extensions.conf<br />

� Hauptkonfigurationsdatei; der Dreh und Angelpunkt einer jeden<br />

<strong>Asterisk</strong> Installation<br />

/etc/asterisk/providers.conf<br />

� sip­provider konfigurationsdatei<br />

/etc/asterisk/queues.conf<br />


Konfigurationsdateien<br />

/etc/asterisk/voicemail.conf<br />

� Konfiguration eines Anrufbeantworters<br />

/etc/asterisk/musiconhold.conf<br />

� Konfiguation der Wartemusik


Command Line Interface<br />

Interaktiv – (asterisk ­r) ­ Beispiel<br />

� ver<strong>mit</strong>tlung*CLI>help<br />

� ver<strong>mit</strong>tlung*CLI>restart now<br />

� ver<strong>mit</strong>tlung*CLI>show queues<br />

� ver<strong>mit</strong>tlung*CLI>sip set debug<br />

� ver<strong>mit</strong>tlung*CLI>sip set debug off


Command Line Interface<br />

Shell Skripts – (asterisk ­rx) ­ Beispiele<br />

� asterisk ­rx 'core show version'<br />

� asterisk ­rx 'misdn show ports stats'<br />

� asterisk ­rx 'misdn restart port 2'<br />

� asterisk ­rx 'logger reload'


<strong>Asterisk</strong> im Netzwerk


<strong>Asterisk</strong> <strong>mit</strong> Analogen Endgeräten


<strong>Asterisk</strong> <strong>mit</strong> WLAN­Endgeräten


<strong>Asterisk</strong> <strong>mit</strong> ISDN­Telefon­Anlage


Interne Anrufe


Rufweiterleitung ins Internet


Rufweiterleitung ins Telefonnetz


<strong>VoIP</strong>­Einwahl von extern


<strong>Asterisk</strong>­spezialisierte <strong>Linux</strong>­<br />

Distributionen<br />

Die <strong>Linux</strong>­Distribution Eisfair bietet eine menügesteuerte,<br />

zentrale und vereinfachte Konfigurationsschicht und<br />

ermöglicht so die gleichzeitige Einrichtung aller <strong>Asterisk</strong>­<br />

Konfigurationsdateien<br />

Die Distribution Ast<strong>Linux</strong> legt Wert auf eine<br />

ressourcenschonende Zusammenstellung, die auch von<br />

etwa 30 MB großen Flash­Speicher­Medien aus gestartet<br />

werden kann


<strong>Asterisk</strong>­spezialisierte <strong>Linux</strong>­<br />

Distributionen<br />

<strong>Asterisk</strong>@Home war eine frei verfügbare Kombination von<br />

Telefonanlage und Distribution. <strong>Asterisk</strong>@Home ging dann<br />

Ende Mai 2006 in das Projekt<br />

Trixbox über.<br />

PoundKey (engl. Raute Taste), auch bekannt als rPath<br />

<strong>Linux</strong>, ist der Name einer Distribution und eines Projekts,<br />

das Digium zusammen <strong>mit</strong> rPath ins Leben gerufen hat.<br />

<strong>Asterisk</strong>Now entstand aus PoundKey, ist seit dem 22.<br />

November 2006 und nun in der Version Beta 4 verfügbar.


<strong>Asterisk</strong>­spezialisierte <strong>Linux</strong>­<br />

Distributionen<br />

<strong>VoIP</strong>onCD ist auch eine frei verfügbare Kombination von<br />

Telefonanlage und Distribution.<br />

elastix ist auch eine neue <strong>Asterisk</strong>­Distribution. Sie<br />

beinhaltet <strong>Asterisk</strong> (PBX), FreePBX und andere Software<br />

und stellt zur Zeit ein Fork der trixbox dar.


Kommerzielle­<strong>Asterisk</strong>­<br />

Appliance­Lösungen<br />

Starface (Vertico, Karlsruhe)<br />

Telman (B&S Computers, Homburg/Saar)


Vielen Dank für Ihre<br />

Aufmerksamkeit!<br />

Eine Päsentation von<br />

xinux e.k.


[general]<br />

bridging=yes<br />

/etc/asterisk/misdn.conf<br />

method=standard<br />

append_digits2exten=yes<br />

stop_tone_after_first_digit=yes<br />

debug=2<br />

tracefile=/var/log/misdn.log<br />

[default]<br />

context=default<br />

language=de<br />

nationalprefix=0<br />

internationalprefix=049<br />

rxgain=0.8<br />

txgain=0.8


[ISDN­TE]<br />

/etc/asterisk/misdn.conf<br />

context=isdn_incoming<br />

ports=2<br />

[ISDN­NT]<br />

context=default<br />

ports=1


[general]<br />

/etc/asterisk/sip.conf<br />

context=default ; Default context for incoming calls<br />

bindport=5060 ; UDP Port to bind to (SIP standard port is 5060)<br />

bindaddr=0.0.0.0 ; IP address to bind to (0.0.0.0 binds to all)<br />

srvlookup=yes ; Enable DNS SRV lookups on outbound calls<br />

videosupport=yes ; Turn on support for SIP video<br />

musicclass=default ; Sets the default music on hold class for all SIP calls<br />

language=de ; Default language setting for all users/peers<br />

dtmfmode = rfc2833 ; Set default dtmfmode for sending DTMF. Default:<br />

rfc2833<br />

localnet=192.168.0.0/255.255.0.0; All RFC 1918 addresses are local networks<br />

canreinvite=yes<br />

language=de<br />

externhost=myhost.mydomain.de<br />

externip=194.129.4.6


allow=alaw<br />

allow=alaw<br />

allow=ulaw<br />

allow=g729<br />

allow=gsm<br />

allow=slinear<br />

qualify=no<br />

/etc/asterisk/sip.conf<br />

register => 123456789:passwort@sipgate.de/700<br />

[user1]<br />

type=friend ; Friends place calls and receive calls<br />

secret=passwort<br />

language=de ; Use German prompts for this user<br />

host=dynamic ; This peer register with us<br />

dtmfmode=rfc2833 ; Choices are inband, rfc2833, or info<br />

username=user1 ; Username to use in INVITE until peer registers<br />

allow=ulaw ; dtmfmode=inband only works with ulaw or alaw!<br />

allow=gsm ; GSM consumes far less bandwidth than ulaw


[sipgate]<br />

type=friend<br />

/etc/asterisk/sip.conf<br />

insecure=very ; otherwise I get authentication errors<br />

nat=yes<br />

username=123456789<br />

fromuser=123456789<br />

fromdomain=sipgate.de<br />

secret=passwort<br />

host=sipgate.de<br />

qualify=yes<br />

dtmfmode=info<br />

tos=0x18<br />

[700]<br />

type=friend<br />

username=700<br />

secret=passwort<br />

host=dynamic


[general]<br />

static = yes<br />

/etc/asterisk/extensions.conf<br />

writeprotect = no<br />

[default]<br />

include => sip1<br />

include => sip100<br />

include => sip200<br />

include => sip300<br />

include => sip400<br />

include => sip500<br />

include => isdn_incoming<br />

include => isdn_outgoing<br />

include => mailbox<br />

include => isdn_auerswald


[sip100]<br />

/etc/asterisk/extensions.conf<br />

exten => 100,1,Dial(SIP/user1,20,rt)<br />

;exten => 100,2,SetCallerID(123456)<br />

;exten => 100,2,Dial(misdn/g:ISDN­TE/01711234567|30,rt)<br />

;exten => 100,2,Voicemail(100,u)<br />

[isdn_incoming]<br />

exten => 123457,1,Queue(gruppe1)<br />

exten => 123457,n,Hangup<br />

exten => 123458,1,Dial(mISDN/1/38,rt)<br />

exten => 123458,n,Hangup<br />

exten => 123456,1,Queue(gruppe1)<br />

exten =>123456,n,Hangup<br />

;#### user1 von extern ####


[isdn_outgoing]<br />

/etc/asterisk/extensions.conf<br />

exten => _0.,1,SetCallerID(123456)<br />

exten => _0.,2,Dial(mISDN/2/${EXTEN:1},rt)<br />

exten => _0.,n,Hangup<br />

[isdn_auerswald]<br />

exten => _8.,1,SetCallerID(999)<br />

exten => _8.,2,Dial(mISDN/1/${EXTEN:1},rt)<br />

exten => _8.,n,Hangup<br />

;<br />

[mailbox]<br />

exten => 101,1,VoicemailMain(s100)<br />

;<br />

[sipgate]<br />

exten => _9.,1,SetCallerid,123456789


[sipgate]<br />

/etc/asterisk/providers.conf<br />

providername = sipgate<br />

providerlogo =<br />

protocol = sip<br />

providerdesc =<br />

hasiax = no<br />

hassip = yes<br />

registeriax = no<br />

registersip = yes<br />

host = sipgate.de<br />

fromdomain = sipgate.de<br />

insecure = port,invite<br />

fromuser =<br />

contact =


[general]<br />

[default]<br />

[gruppe1]<br />

music=default<br />

strategy=ringall<br />

timeout=120<br />

retry=1<br />

/etc/asterisk/queues.conf<br />

member => mISDN/1/<br />

member => SIP/user1


[general]<br />

/etc/asterisk/voicemail.conf<br />

format = wav49|gsm|wav<br />

serveremail = asterisk<br />

attach = no<br />

skipms = 3000<br />

maxsilence = 10<br />

silencethreshold = 128<br />

maxlogins = 3<br />

emaildateformat = %A, %B %d, %Y at %r<br />

maxmsg = 100<br />

minmessage = 0<br />

maxmessage = 60<br />

saycid = no<br />

sayduration = no<br />

emailonly = no


[zonemessages]<br />

/etc/asterisk/voicemail.conf<br />

eastern = America/New_York|'vm­received' Q 'digits/at' IMp<br />

central = America/Chicago|'vm­received' Q 'digits/at' IMp<br />

central24 = America/Chicago|'vm­received' q 'digits/at' H N 'hours'<br />

military = Zulu|'vm­received' q 'digits/at' H N 'hours' 'phonetic/z_p'<br />

[default]<br />

maxmsg = 50<br />

100 => 1234,thomas,thomas@xinux.de<br />

200 => 1234,alexander,alexander@xinux.de<br />

300 => 1234,patrick,patrick@xinux.de<br />

400 => 1234,tina,tina@xinux.de<br />

500 => 1234,martin,martin@xinux.de


[default]<br />

mode=files<br />

/etc/asterisk/musiconhold.conf<br />

directory=/var/lib/asterisk/moh

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!