VoIP mit Asterisk unter Linux
VoIP mit Asterisk unter Linux
VoIP mit Asterisk unter Linux
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 SwissArmyKnife 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 AudioCodecs 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> HFCChips (HDLCFIFOControllerChips)<br />
stellen die notwendigen Funktionen für die Anbindung<br />
interner Endgeräte zur Verfügung, da diese im NTModus<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. FirewallProbleme<br />
� Bandbreitennutzung von ca. 38 kBit/s in SendeRichtung<br />
� kann durch eine einzelne UDPVerbindung 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 StandardProtokoll für<br />
Voice over IP (<strong>VoIP</strong>) zu entwickeln
H.323<br />
<strong>VoIP</strong>Protokolle<br />
� ist ein Protokoll der H.32XSerie, 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 SIPProtokoll 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/asterisk1.4current.tar.gz<br />
tar xvzf asterisk1.4current.tar.gz<br />
cd asterisk1.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 />
� SIPBenutzer und Zugänge von SIPProvidern<br />
/etc/asterisk/extensions.conf<br />
� Hauptkonfigurationsdatei; der Dreh und Angelpunkt einer jeden<br />
<strong>Asterisk</strong> Installation<br />
/etc/asterisk/providers.conf<br />
� sipprovider 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> WLANEndgeräten
<strong>Asterisk</strong> <strong>mit</strong> ISDNTelefonAnlage
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 FlashSpeicherMedien 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 />
ApplianceLö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
[ISDNTE]<br />
/etc/asterisk/misdn.conf<br />
context=isdn_incoming<br />
ports=2<br />
[ISDNNT]<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:ISDNTE/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|'vmreceived' Q 'digits/at' IMp<br />
central = America/Chicago|'vmreceived' Q 'digits/at' IMp<br />
central24 = America/Chicago|'vmreceived' q 'digits/at' H N 'hours'<br />
military = Zulu|'vmreceived' 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