1 12. téma Asterisk a AIX Obsah 2 1. Asterisk 2. IAX 3 1. Asterisk Charakteristika ústředny Asterisk 4 Volně dostupná softwarová realizace ústředny představuje od firmy Digium. Původ: Mark Spencer, 1999 rozhodl napsat pro Linux svůj vlastní software realizující PBX s hlasovou poštou (voice-mail) – na produkt neměl dost peněz. 2004: verze 1.0 2005: verze 1.2 voicemail, DUNDi (Distributed Universal Number Discover) protokol, 2006: verze 1.4 GUI rozhraní 2008: verze 1.6 (nativně šifrování, podpora signalizace SS7 2010: verze 1.8 (SRTP, kalendáře) Výhody  Nízká cena  Fórum i komerční podpora  normální počítač s Linuxem.  kompatibilní s většinou protokolů pro VoIP (SIP, H.323, Cisco Skinny, IAX). Konfigurační soubory 5 /etc/asterisk – konfiguracní soubory, především:  sip.conf – obsahuje konfiguraci zařízení komunikujících s Asteriskem pomocí SIP protokolu.  iax.conf – konfigurace IAX (Inter Asterisk eXchange) kanálu  extensions.conf – číslovací plán (dialplan) sip.conf 6 ; SIP Configuration for Asterisk ; [general] port = 5060 ; Port context = brno ; Defaultní kontext (domena) pro prichozi hovory disallow=all ; need to disallow=all before we can use allow= allow=ulaw ; poradi kodeku v uživatelské sekci dtmfmode=auto ; defaultni nastaveni zpusobu pro poslani DTMF. Zde rfc2833 [jarda] type=friend ; obousměrné telefony username=martin userid=Martin Adam <10> ; na displeji se zobrazi jmeno a linka host=dynamic ; telefony nemaji pevnou IP adresu, identifikuji se jmenem [tomas] type=friend username=michal userid=Michal Aron <11> host=dynamic extensions.conf – 1. část 7 ; ; Static extension configuration file. This is where you ; configure all your inbound and outbound calls in Asterisk. ; ; ; The "General" category is for certain variables. ; [general] ; static=yes ; zablokování dynamických změn dialplanu – ted nepotrebujeme writeprotect=yes ; The "Globals" category contains global variables that ; can be referenced in the dialplan with ${VARIABLE} or ; ${ENV(VARIABLE)} for Environmental variable ; ${${VARIABLE}} or ${text${VARIABLE}} or any hybrid ; [globals] ; extensions.conf – 2. část 8 ========================================================== ; =============== Dialplan ================================= ; ========================================================== [brno] exten => 100,1,Answer ; trojice: číslo, priorita, příkaz(parametry) exten => 100,n,Playback(demo-echotest) ; n…next, přehrává zvukový soubor exten => 100,n,Echo() exten => 100,n,Hangup() ;SIP users exten => 10,1,Dial(SIP/martin) exten => 11,1,Dial(SIP/michal) Nastavení práv na základě kontextů (sip.conf) 9 [general] port=5060 bindaddr=0.0.0.0 context=mu ; <-- kontext [10] type=friend secret=1234 host=dynamic [11] type=friend secret=1234 host=dynamic [12] type=friend secret=1234 host=dynamic [20] type=friend secret=1234 host=dynamic context=navsteva ; <-- kontext Příklad: Firma MU má SIP telefony 10,11,12 a 20. Telefony 10-12 jsou standardními telefony firmy s kontextem [mu], telefon 20 je volně dostupný telefon na recepci s kontextem [navsteva]. Každá PBX musí mít možnost nastavovat jednotlivým pobočkám oprávnění, kam se mohou dovolat. V Asterisku se tyto pravidla definují pomocí kontextů – contexts. Každý kontext reprezentuje kategorii, která definuje pravidla, kam může být voláno. K přístupu k pravidlům musí být mít telefon přiřazen odpovídající kontext. Pokud nemá účet definován kontext, je automaticky zařazen do kategorie [default]. Definice pravidel pro jednotlivé kontexty (extensions.conf) 10 [default] exten => 1001,1,Answer() ; otevírá nový kanál na Asterisku exten => 1001,2,Playback(hello-world); přehraje daný zvukový soubor exten => 1001,3,Hangup() ; zavěsí hovor a uzavře kanál [esf] exten => 10,1,Dial(SIP/10) exten => 11,1,Dial(SIP/11) exten => 12,1,Dial(SIP/12) [navstevnik] exten => 1001,1,Answer() exten => 1001,2,Playback(hello-world) exten => 1001,3,Hangup() Vzory – Pattern Matching 11 [general] [test] exten => 100,1,Answer() exten => 100,2,Playback(hello-world) exten => 100,3,Hangup() exten => 101,1,Answer() exten => 101,2,Playback(hello-world) exten => 101,3,Hangup() exten => 102,1,Answer() exten => 102,2,Playback(hello-world) exten => 102,3,Hangup() exten => 103,1,Answer() exten => 103,2,Playback(hello-world) exten => 103,3,Hangup() exten => 104,1,Answer() exten => 104,2,Playback(hello-world) exten => 104,3,Hangup() ……………………………………….. exten => 109,1,Answer() exten => 109,2,Playback(hello-world) exten => 109,3,Hangup() Pokud někdo zavolá na číslo 100-109, přehraje se mu zpráva hello-world. Vzory – Pattern Matching 12 [general] [test] exten => _10X,1,Answer() exten => _10X,2,Playback(hello-world) exten => _10X,3,Hangup() A je pokryt celý rozsah. Diaplánové vzory vždy začínají podtržítkem. Základní vzory 13 [abc] – znaky a,b,c. Na příklad mohou být nahrazeny čísly 1,2,3. Ve výsledku 31,32,33: exten => _3[123],1,NoOp(Test) [a-b] – jakékoliv znak mezi a-b. Na příklad mohou být nahrazeny čísly 1-5. Ve výsledku 31- 35. Může být také ve tvaru [25-8] pro 32,35-38: exten => _3[1-5],1,NoOp(Test) [X] – jakákoliv číslice od 0-9. Například pro jakékoliv číslo od 300 do 399: exten => _3XX,1,NoOp(Test) [Z] – jakákoliv číslice od 1-9. Například pro jakékoliv číslo od 31 do 39: exten => _3Z,1,NoOp(Test) [N] – jakákoliv číslice od 2-9. Například pro jakékoliv číslo od 32 do 39: exten => _3N,1,NoOp(Test) * – stisk tlačítka s hvězdičkou: exten => _*7,1,NoOp(Test) # – stisk tlačítka s křížkem: exten => _#7,1,NoOp(Test) . – jakékoliv číslo či číslice. Na příklad pro všechna čísla, která začínají 420: exten => _420.,1,NoOp(Test) Zabezpečení médií pomocí SRTP 14 sip.conf: [201] type=friend context=Asterisk2 language=cz srtpcapable=yes host=dynamic *** atd *** extensions.conf (pro příchozí i odchozí volání): exten => 201,1,NoOp() exten => 201,n,Set(_SIPSRTP=${SIPPEER(${EXTEN},srtpcapable)}) exten => 201,n,Set(_SIPSRTP_CRYPTO=enable) exten => 201,n,Set(_SIP_SRTP_SDES=enable) exten => 201,n,Answer() *** atd *** exten => _1XX,1,NoOp() exten => _1XX,n,Set(_SIPSRTP=${SIPPEER(${EXTEN},srtpcapable)}) exten => _1XX,n,Set(_SIPSRTP_CRYPTO=enable) exten => _1XX,n,Set(_SIP_SRTP_SDES=enable) exten => _1XX,n,Dial(SIP/${EXTEN}) Příkazy 15 /etc/init.d/asterisk start help - výpis všech známých příkazů help - výpis návodu k použití příkazu reload - znovunačtení konfigurace restart when convenient - restart Asterisku, až nebude nikdo volat devátá virtuální konzola (Alt-F9) anebo vzdálené připojení: asterisk -r 16 2. IAX Charakteristika protokolu IAX (The „Inter-Asterisk eXchange“ Protocol) 17 Vyvinut firmou Digium pro účely komunikace s ostatními Asterisk servery. IAX není limitován pouze na Asterisk. IAX je transportní protokol, který využívá jeden UDP port 4569 jak pro signalizaci, tak pro streamy. Jeho unikátní vlastností je seskupování několika relací do jednoho datového proudu, což může být obrovská výhoda ve využití šířky pásma, pokud posíláme mnoho simultánních kanálů. Tato schopnost (trunking) umožňuje několika různým streamům být reprezentovány jedním datagramovým záhlavím,což sníží režijní náklady spojené s jednotlivými kanály. To napomáhá nižšímu zpoždění a redukuje požadavky na šířku pásma. Pokud tedy máte velký počet IP volání mezi dvěma koncovými body, je IAX trunking vhodným řešením. Ačkoliv byl IAX optimalizován pro hlas, obdržel spoustu kritiky pro špatnou podporu videa. Ve skutečnosti IAX drží potenciál přenášet mnohem více různých požadovaných médií a to díky tomu, že je otevřený a budoucí typy médií mohou být v budoucnu implementována dle požadavků komunity. IAX obsahuje schopnost ověření třemi způsoby: plain text, MD5 hashování a RSA výměna klíčů. Je také schopen provoz šifrovat použitím dynamické výměny klíčů během sestavování spojení (call setup) konfigurací možnosti encryption=aes128 umožňující automatickou změnu klíčů. IAX2 protokol bych vědomě navržen k práci za zařízeními používající NAT. Použitím jednoho UDP portu jak pro signalizaci tak streamy snižuje počet děr ve firewallu na minimum. Díky tomu je považován za jeden z nejsnadnějších protokolů k implementaci v zabezpečených sítích. IAX do RFC 18 Průběh hovoru 19 A) Sestavení spojení - Terminál započne spojení a pošle „new“ zprávu. Volaný terminál odpoví zprávou „accept“ a volající odpoví také ACK. Následuje signál volaného „RINGING“ o tom, že zvoní, potvrzeno ACK od volajícího. Ve chvíli, kdy dojde k vyzvednutí hovoru, posílá volaný „ANSWER“, volající potvrdí ACK a začíná hovor. B) M a F rámce jsou poslány každý jedním směrem s audio daty. Každý stream zahrnuje většinou IAX Mini rámce (M frames), které obvykle obsahují jednoduché čtyřbytové záhlaví, které je šetrné k využití šířky pásma. Stream je doplňován pravidelnými plnými rámci (Full frames), které obsahují synchronizační informace. Je důležité si uvědomit, že tyto audio streamy a signalizace využívají stejný UDP protokol a tudíž se vyhneme případným problémům s NATem. C) Ukončení spojení je provedeno jednoduše vysláním „HANGUP“ zprávy a jejím potvrzením. Literatura: Asterisk : The Future of Telephony by Jared Smith ; Jim Van Meggelen ; Leif Madsen, ISBN 13: 9780596510480 http://owebu.bloger.cz/PC-site/VoIP-IAX-protokol-2-dil Schéma průběhu hovoru 20