eské vysoké u£ení technické v Praze Fakulta elektrotechnická
ˇ VUT FEL katedra pocˇı´tacˇu˚ C
Bakalá°ská práce
Internetová telefonie pro malou organizaci
Ond°ej Bu£ek
Vedoucí práce:
Ing. Jan Koutník
Studijní program: Elektrotechnika a informatika strukturovaný bakalá°ský
Obor: Informatika a výpo£etní technika
£erven 2006
ii
Pod¥kování Cht¥l bych pod¥kovat Ing. Janu Koutníkovi za to, ºe mi otev°el o£i do oblasti VoIP technologií. iii
iv
Prohlá²ení Prohla²uji, ºe jsem svou bakalá°skou práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon).
V Opav¥ dne 28.6. 2006
.............................................................
v
vi
Abstract The purpose of this document is to introduce the reader to the basic principles of the VoIP operation services and provide instructions for establishing a personal VoIP exchange.
Abstrakt Cílem tohoto dokumentu je seznámit £tená°e se základními principy fungování VoIP sluºeb a poskytnout mu návod, kterak si zprovoznit svou vlastní VoIP úst°ednu.
vii
viii
Obsah Seznam obrázk·
xiii
1 Úvod 1.1 1.2 1.3
Popis problému . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obsah práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Úvod do protokolu SIP 2.1 2.2
2.3
Popis . . . . . . . . . . . . . . . . . . SIP proxy servery . . . . . . . . . . . 2.2.1 Úvod . . . . . . . . . . . . . . 2.2.2 Bezestavový SIP proxy server 2.2.3 Stavový SIP proxy server . . 2.2.4 Record routing . . . . . . . . SIP registr . . . . . . . . . . . . . . .
3 Protokol SIP a NAT 3.1 3.2 3.3
Úvod do problematiky Outbound proxy . . . STUN . . . . . . . . . 3.3.1 Úvod . . . . . . 3.3.2 Jak funguje . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
4 Protokol IAX2 Popis Debian linuxu Sip Express Router . MySQL . . . . . . . Apache . . . . . . . . SerWeb . . . . . . . PBX systém Asterisk
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Úvod . . . . . . . . . . . . . Pouºítí pouze SER . . . . . Pouºítí pouze Asterisku . . Sp°aºení SERu a Asterisku
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
6 Analýza °e²ení 6.1 6.2 6.3 6.4
1 2 2
2
2 3 3 4 4 5 5
6
6 7 7 7 8
8
5 Popis pouºitých produkt· 5.1 5.2 5.3 5.4 5.5 5.6
1
. . . . . .
. . . . . .
. . . . . .
9
9 9 10 10 10 10
11
11 11 11 12
7 Instalace Debian linuxu
12
8 Instalace MySQL
13
7.1 7.2 7.3
8.1 8.2 8.3
P°iprava na instalaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Vlastní instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Postinstala£ní kongurace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Instalace z dostupných zdroj· . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Instalace pomocí APT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Kongurace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 ix
9 Instalace Apache 2 9.1 9.2 9.3 9.4
Instalace ze zdrojových soubor· Instalace pomocí APT . . . . . Kongurace . . . . . . . . . . . Instalace PHP . . . . . . . . . . 9.4.1 Ze zdrojových soubor· . 9.4.2 Pomocí APT . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
10.1 Úvod . . . . . . . . . . . . . . . . . . . 10.2 Vlastní instalace . . . . . . . . . . . . 10.2.1 Získání balí£k· . . . . . . . . . 10.2.2 Instalace z balí£k· . . . . . . . 10.2.3 Instalace ze zdrojových soubor· 10.2.4 Poinstala£ní nastavení . . . . . 10.3 Kongurace . . . . . . . . . . . . . . . 10.4 Spravování . . . . . . . . . . . . . . . . 10.5 Kongurace MySQL a SERu . . . . . 10.5.1 Úvod . . . . . . . . . . . . . . . 10.5.2 Postup . . . . . . . . . . . . . . 10.5.3 Moºné problémy . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
10 Instalace Sip Express Routeru
11 Instalace Rozhraní SerWeb
15
15 15 15 16 16 16
16
16 16 16 17 17 18 18 18 18 18 19 20
20
11.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 11.2 Kongurace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 11.3 Problémy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12 Instalace PBX Asterisk
12.1 Instalace . . . . . . . . . . . . . . . . . . . . 12.2 Kongurace . . . . . . . . . . . . . . . . . . 12.2.1 Nastavení sip.conf . . . . . . . . . . 12.2.2 Nastavení iax.conf . . . . . . . . . . 12.2.3 Nastavení extensions.conf . . . . . . 12.2.4 Propojení s externí telefonní bránou 12.2.5 Nastavení externí kongurace . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
21
21 22 23 24 24 24 26
13 Propojení SERu a Asterisku
27
14 Testování
29
13.1 Nastavení Sip Express Routeru . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 13.2 Nastavení Asterisku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 13.3 Zabezpe£ení externí brány v SERu . . . . . . . . . . . . . . . . . . . . . . . . . . 28
14.1 14.2 14.3 14.4
Hovor na serveru SER . . . . . . . . . . . Hovor na serveru Asterisk . . . . . . . . . Hovor mezi SERem a Asteriskem . . . . . Hovory mezi SERem, Asteriskem a externí
. . . . . . . . . . . . . . . bránou
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
29 29 30 30
15 Záv¥r
30
16 Literatura
31
16 Literatura
31 x
A Seznam pouºitých zkratek
32
B Ukázky kongura£ních soubor·
32
B.1 Sip Express Router . . B.1.1 ser.cfg . . . . . B.2 PBX Asterisk . . . . . B.2.1 sip.conf . . . . B.2.2 iax.conf . . . . B.2.3 extensions.conf B.2.4 res_odbc.conf . B.2.5 extcong.conf .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
C Obsah p°iloºeného CD
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
32 32 35 35 36 36 38 39
39
xi
xii
Seznam obrázk· 1.1
Ukázka p°ekonávání p°eklada£e adres jednotlivými protokoly . . . . . . . . . . . .
1
2.1
Ukázka moºností vyuºití protokolu SIP, uºivatelé komunikují mezi sebou a informace o své aktuální poloze pravideln¥ ukládají do SIP registru . . . . . . . . . . Schéma navazování a ru²ení hovoru mezi dv¥ma ú£astníky pomocí protokolu SIP Stavová SIP proxy nechá jeden hovor zvonit na více telefonech . . . . . . . . . . . Popis vedení hovoru SIP proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . Popis vedení hovoru SIP proxy s poºadavkem record route . . . . . . . . . . . . .
3 4 5 5 6
Komunikace SIP protokolu skrze p°eklada£ adres, nep°ichází nám p°íchozí audio, jelikoº v SIP streamu odkazujeme na jinou adresu neº nám p°id¥lí NAT . . . . . Komunikace SIP protokolu skrze p°eklada£ adres s pouºitím outbound RTP proxy
7 7
2.2 2.3 2.4 2.5 3.1 3.2
15.1 Moºnosti na²í pobo£kové úst°edny
. . . . . . . . . . . . . . . . . . . . . . . . . . 31
xiii
xiv
KAPITOLA 1.
ÚVOD
1
1 Úvod Nové technologie se rozvíjejí sm¥rem, kdy po£íta£e a po£íta£ové sít¥ tvo°í významný prvek v na²í spole£nosti. Umoºnují nám komunikovat na velké vzdálenosti a otevírají nám dve°e k d°íve jen t¥ºko p°edstavitelným zp·sob·m komunikace. Tento dokument byl vytvo°en jako bakalá°ská práce a jeho cílem je poskytnout £tená°i dostate£né informace k tomu, aby byl sám schopen vytvo°it vlastní telefonní úst°ednu na opera£ním systému Debian GNU/Linux, zaji²tující komunikaci pomocí protokolu SIP a IAX2. P°edpokládám ºe £tená° má alespo¬ základní zku²enosti s obsluhou linuxového systému. Práci jsme postupn¥ nasazovali na opera£ním systému Mandrake linux 9.0, kde jsme v¥t²inu pouºitých program· kompilovali p°ímo ze zdrojových soubor·, potom na Debian stable 3.1 sarge, aº jsme nakonec zvolili distribuci Debian unstable sid. Byla zvolena proto, abychom m¥li moºnost testovat nejnov¥j²í verze, do stabilní distribuce je²t¥ nezakomponovaných program·. Budu se dále zam¥°ovat na ditsribuci Debian sid. V následujících kapitolách postupn¥ objasním návrh výsledného produktu, postupy, problémy a jejich moºná °e²ení - jak nainstalovat pot°evné aplikace, jejich kongurace a uvád¥ní do chodu. Budeme p°edpokládat, ºe uºivatel má na danném systému práva superuºivatele.
1.1 Popis problému V soudobé spole£nosti se snaºíme vyhýbat nákladným a úzce specializovaným za°ízením a nasazujeme místo nich pom¥rn¥ levná inteligentí za°ízení jako jsou nap°. osobní po£íta£e. Tento trend postihl i obor telekomunikací. Zajímavá je zejména moºnost p°ená²et hlas, p°ípadn¥ obraz pomocí dnes velmi roz²í°ených po£íta£ových sítí. S internetem se postupn¥ vyvíjeli komunika£ní protokoly, které dostaly za úkol umoºnit tuto komunikaci. Mezi nejznám¥²í pat°í zejména protokol SIP (vyvíjen pod IETF) a protokol IAX, který se zejména v poslední dob¥ velice roz²i°uje z d·vodu velmi ²patné pr·chodnosti protokolu SIP skrze tzv. NAT (p°eklada£e adres).
Obrázek 1.1: Ukázka p°ekonávání p°eklada£e adres jednotlivými protokoly
2
KAPITOLA 2.
ÚVOD DO PROTOKOLU SIP
1.2 Cíl práce Mým cílem je zprovoznit VoIP telefonii, která by pln¥ slouºila ke komunikaci v malé organizaci. Jedná se p°edev²ím o to, umoºnit uºivatel·m telefonovat mezi sebou, umoºnit jim telefonovat do cizích sítí a p°ijímat hovory z t¥chto sítí. K tomu vyuºívám dostupné technologie z oblastí voln¥ ²í°itelného softwaru na linuxové distribuci. Nevýhoda tohoto p°ístupu je fakt, ºe v¥t²ina organizací poskytující sv·j software voln¥ k dispozici ºije práv¥ z toho, ºe ke svým produkt·m poskytují zákaznickou podporu, takºe kvalitní dokumentaci je n¥kdy t¥ºké najít a v¥t²inou se jedná o díla VoIP nad²enc·. Takºe základní poºadavky na tuto práci jsou:
• Bez problému se dovolat spoza NATu r·zných druh·. • Moºnost p°ijímat pomoci SIP protokolu hovory z jiných úst°eden. • Pokusit se °e²it problém s NATy pomocí IAX2 protokolu. • Pokusit se propojit Sip express router s Asteriskem.
1.3 Obsah práce Popisy jednotlivých kapitol: 2-5
Zabývám se stru£ným popisem jednotlivých pouºitých systém·
6
Analyzují moºná °e²ení a postupy p°i zvolení optimálního °e²ení
7-13
Postupné zprovoz¬ování serveru
14
Testování systému v provozu
15
Záv¥r
2 Úvod do protokolu SIP 2.1 Popis Sip je zkratka, která vznikla zkrácením slov Session Initation Protocol. Jak jiº z jeho názvu vyplívá, je to protokol v aplika£ní vrstv¥, který slouºí k navazování, upravování a ru²ení r·znorodých spojení mezi jeho ú£astníky. Protokol je k uºivateli pln¥ otev°ený, zákládá si na HTTP protokolu a jeho komunikace probíhá v textové podob¥. V¥t²inou komunikace probíhá v¥t²inou pomocí UDP, okolo portu 5060. Stejn¥ jako HTTP pouºívá v komunikaci hlavi£ku, která specikuje cestu k ú£astníkovi, sezení, po°adí zprávy v dialogu atd. a t¥lo, které obsahuje v¥t²inou specikaci komunika£ních moºností ú£astníka, anebo v·bec nemusí být obsaºeno. Je navrhován a vyvíjen pod IETF (The Internet Engineering Task Force) a jeho specikaci nalezneme nap°. v RFC3261. Protokol SIP nám umoº¬uje nap°íklad uskute£¬ovat telefoní hovory, distribuovat multimedia, po°ádat multimediální konference, nebo hrát hry prost°ednicvím sít¥. Vzhledem k tomu, ºe jeho starostí je p°eváºn¥ starat se o komunika£ní spojení uºivatel·, pot°ebuje pro sv·j chod je²t¥ dal²í protokoly, které se starají o samotnou komunikaci. Nej£ast¥ji se k tomuto ú£elu spole£n¥ se SIPem pouºívají následující dva protokoly: RTP a SDP. SDP slouºí k nastavení uºivatelových kodek·, na základ¥ moºností ostatních uºivatel· v sezení tak, aby m¥l v rámci sezení kaºdý s kaºdým moºnost komunikovat.
KAPITOLA 2.
ÚVOD DO PROTOKOLU SIP
3
RTP slouºí k samotnému p°enosu informace od jednoho uºivatele k druhému. P°ená²ená data mohou obsahovat zvuk, obraz, text atd.. RTP je d¥lí na pakety a ty postupn¥ p°ená²í pomocí Internetu, nebo jiné sít¥. Kodek, kterým RTP komunikace probíhá, je zvolen v pr·b¥hu SIP komunikace automaticky, kdy si jednotlivá za°ízení vym¥¬ují seznamy podporovaných kodek·. Mezi nejpouºívan¥j²í kodeky spadají: A-law (64kb/s), u-law (64kb/s), GSM (13kb/s) a G.729 (8kb/s). Navazování spojení probíhá pomocí SIP proxy na domén¥ volaného, která si uchovává registr IP adres/port· p°ihlá²ených uºivatel·. S po£átku se navazuje spojení zkrze ní, po úsp¥²ném navázání hovoru se komunikace p°epojí p°ímo mezi klienty. Klienti pouºívající protokol SIP nepodléhájí ºádné centralizaci, vyjma SIP proxy, které slouºí k udrºování registr· uºivatel·, nebo k p°ípadnému sm¥rování nebo p°esm¥rování komunikace na jiný uzel, p°ípadn¥ SIP klienta. Dále viz. [10].
Obrázek 2.1: Ukázka moºností vyuºití protokolu SIP, uºivatelé komunikují mezi sebou a informace o své aktuální poloze pravideln¥ ukládají do SIP registru
2.2 SIP proxy servery 2.2.1 Úvod SIP proxy servery jsou nedílnou sou£ástí komunikace mezi uºivately. Je pravda, ºe nejsou k samotné komunikaci nezbytné, ale roz²i°ují monºosti komunikace a stav¥jí protokol SIP na vy²²í p°í£ku, co se moºností komunikace tý£e. Kaºdý SIP proxy server m·ºe poskytovat °adu zajímavých sluºeb jako nap°íklad registr uºivatel·, který slouºí k zji²t¥ní, zda je nap°íklad uºivatel, kterému se snaºíme dovolat, on-line, nebo nám pom·ºe zjistit jeho sou£asnou IP adresu. Takový SIP proxy server m·ºe spravovat databázi uºivatel·, kte°í mají moºnost se u n¥ho zaregistrovat a sm¥rovat na n¥ho poºadavky k hovoru, p°ípadn¥ hovory p°ijímat. M·ºe slouºit jako prost°edník p°i posílání si krátkých zpráv mezi sebou. Stejn¥ tak se m·ºe starat o monitorování (ú£tování jejich hovor·), m·ºe sm¥rovat komunikaci na nejr·zn¥j²í brány, nebo m·ºe poskytovat sluºby jako sm¥rování hovor· na v²echny za°ízení, kde je momentáln¥ daný uºivatel p°ihlá²en, nebo m·ºe dokonce za uºivatele odmítnout nebo ltrovat jejich hovory. SIP proxy servery se d¥lí zpravidla na komplexní stavové a jednoduché bezestavové. My si povíme n¥co o obou typech t¥chto proxy, protoºe v následujících kapitolách se budeme zam¥°ovat
4
KAPITOLA 2.
ÚVOD DO PROTOKOLU SIP
na produkt Sip Express Router od spole£nosti iptel.org, který podporuje oba druhy komunikace viz. kapitola 10. Bliº²í informace o protokolu SIP viz. [5].
Obrázek 2.2: Schéma navazování a ru²ení hovoru mezi dv¥ma ú£astníky pomocí protokolu SIP
2.2.2 Bezestavový SIP proxy server Bezestavový SIP proxy server si nepamatuje transakce. To znamená, ºe pouze p°eposílá to, co p°ijme. Jsou velice jednoduché a rychlé, rychlej²í neº stavové proxy. Mohou být pouºity nap°íklad tam, kde nám jde o to mít rýchlý SIP router a nevyºadujeme od n¥j sledování hovor· (accouting). Výborn¥ se hodí na rozd¥lování zát¥ºe na dal²í servery.
2.2.3 Stavový SIP proxy server Pamatuje si oproti bezestavovému proxy aktuální stav relace. Umoº¬uje transak£ní zpracování. Nap°íklad sledovat délku hovoru, zvonit na více telefonech najednou a vybrat ten, co je zvednut jako první, nebo umoºnuje v p°ípad¥ neúsp¥chu pokra£ovat jiným sm¥rem.
KAPITOLA 2.
ÚVOD DO PROTOKOLU SIP
5
Obrázek 2.3: Stavová SIP proxy nechá jeden hovor zvonit na více telefonech
2.2.4 Record routing Je to zp·sob, jak ovlivnit sm¥r vedení SIP dat. Je to poºadavek, kterým si SIP proxy zajistí, aby dal²í komunikaci v rámci protokolu SIP probíhala skrze ní. To se hodí zejména v p°ípadech, kdyº nap°. chceme uºivatel·m m¥°it délky jejich hovor·. Ve²keré proxy, u kterých chceme pouºít record routing, musí podporovat takzvan¥ loose route. To znamená, ºe p°i p°íchodu SIP zprávy, zm¥ní adresu jejího cíle na dal²í adresu, která se nachází v její hlavi£ce.
Obrázek 2.4: Popis vedení hovoru SIP proxy
2.3 SIP registr Udrºuje si informace o jednotlivých uºivatelích - jaká je jejich aktuální IP adresa/port a zda jsou online. M·ºe být veden pouze v pam¥ti RAM (jednoduché SIP proxy), nebo m·ºe vyuºívat
6
KAPITOLA 3.
PROTOKOL SIP A NAT
Obrázek 2.5: Popis vedení hovoru SIP proxy s poºadavkem record route
databázi pro trvalé uloºení dat. Tím se nám otevírá moºnost vytvo°it databázi uºivatel·, p°id¥lit jim rozdílná práva a monitorovat jejich hovory.
3 Protokol SIP a NAT 3.1 Úvod do problematiky SIP narozdíl od IAX p°ená²í odd¥len¥ signalizaci a samotný hovor (SDP,RTP), to p°edstavuje problém zejména stojí-li v cest¥ NAT. e²ením je Outbound proxy, STUN nebo SIP aware NAT. V sou£asné dob¥ se uplat¬uje p°edev²ím ALGs (Application Layer Gateways), coº znamená implementovat NATu, schopnost p°ená²et n¥které protokoly (m¥nit adresy ve zprávách). Znamená to v²ak spoustu nevýhod: zpomalení vývoje nových aplikacích na nových protokolech a efektivnost. Nov¥j²í metodou, která se zatím vyvíjí je: MIDCOM (Middlebox Communications). Je to prokol, který bude umoº¬ovat, aby se aplikace domluvila s NATem a zprost°edkovala si podmínky ke své funkci skrz NAT. V sou£asnosti existují £ty°i typy NAT: 1.
Full Cone: Tento NAT p°i komunikaci ven ze sít¥ mapuje vnit°ní adresu a port na stále stejnou vn¥j²í adresu a port. Stejn¥ tak p°i komunikaci do vnit°ní sít¥ mapuje vn¥j²í adresu a port na stále stejnou vnit°ní adresu a port
2.
Restricted Cone: Funguje podobn¥ jako p°edchozí typ s tím rozdílem, ºe aby byla moºná komunikace z vn¥j²í sít¥ (adresy) do vnit°ní, musí být p°edtím na dannou adresu do vn¥j²í sít¥ vyslán paket.
3.
Port Restricted Cone: Funguje obdobn¥ jako Restricted Cone
s tím rozdílem, ºe omezení z p°edchozího p°ipadu je roz²í°eno i na port. (Aby bylo moºno odeslat paket z vn¥j²í adresy/portu do vnit°ní, je nutné, aby byl p°edtím odeslán paket na vn¥j²í adresu/port.)
KAPITOLA 3.
4.
PROTOKOL SIP A NAT
7
Symmetric: Stejn¥ jako v p°edchozích p°ípadech jsou poºadavky z vnit°ní adresy/portu
mapovány na vn¥j²í adresu/port, ale s tím rozdílem, ºe toto mapování se m¥ní v závislosti na cílové (vn¥j²í) adrese. Navíc pouze taková externí adresa nám m·ºe poslat UDP paket, která od nás uº paket obdrºela.
Obrázek 3.1: Komunikace SIP protokolu skrze p°eklada£ adres, nep°ichází nám p°íchozí audio, jelikoº v SIP streamu odkazujeme na jinou adresu neº nám p°id¥lí NAT
3.2 Outbound proxy Jedná se vlastn¥ o SIP proxy, která p°es sebe sm¥ruje v²echny odchozí hovory. Umís´uje se v¥t²inou na samotnou bránu (rewall), která tvo°í rozhraní mezi vnit°ní a vn¥j²í sítí. SIP proxy má ve°ejnou IP adresu. M·ºe se jednat o klasickou SIP proxy nebo o tzv. RTP proxy. B¥ºná SIP proxy sm¥ruje pouze signaliza£ní pakety a samotný RTP stream mezi klienty jde mimo ní. Jelikoº v p°ípad¥ NATu má RTP stream veliké problémy, pouºívá se RTP proxy. Ta ignoruje IP adresy v hlavi£kách SIP protokolu, vy£kává, aº jí dojde od kaºdého ú£astníka hovoru RTP packet, a posílá RTP packety jednoho ú£astníka jednodu²e na místo odkud p°i²ly packety druhého ú£astníka.
Obrázek 3.2: Komunikace SIP protokolu skrze p°eklada£ adres s pouºitím outbound RTP proxy
3.3 STUN 3.3.1 Úvod Jedná se o jednoduchý protokol, který pomahá zjistit aplikacím p°ítomnost a typ NAT a rewalu mezi nimi a vn¥j²í sítí. Poskytuje schopnost zjistit t¥mto aplikacím jejich vn¥j²í IP adresu, kterou jim alokoval NAT. Stun pracuje s v¥t²inou sou£asných NAT· a nevyºaduje od nich
8
KAPITOLA 4.
PROTOKOL IAX2
ºádné speciální chování. Stun znamená: Simple Traversal of User Datagram Protocol Through Network Address Translators viz. [6] STUN kaºdopádn¥ ne°e²í ve²keré problémy vzniklé s pouºitím NAT:
• Neumoº¬uje p°íchozí TCP spojení skrz NAT . • Umoº¬uje pouze UDP a to jenom na ur£itou podmnoºinu NAT·, nap°íklad nefunguje s tzv. symetrickými NATy.
• STUN p°edpokládá ur£ité chování NATu, které se mohou s novými NATy m¥nit. • STUN neusp¥je v p°ípad¥, ºe oba klienti jsou za stejným NATem.
3.3.2 Jak funguje STUN je jednoduchý klient-server protokol => klient vznese poºadavek, server odpoví. Existují dva typy poºadavk·: 1. Spojovací poºadavek (p°es UDP). 2. Sdílené tajemství poºadavek: Klient nejprve zaºádá p°es TLS (Transport Layer Security), p°es TCP do£asné jméno a heslo, které je pak pro bezpe£nost pouºito v následujícím spojovacím poºadavku.
Princip funk£nosti:
Klient po²le spojovací poºadavek na server. Ten vyhodnotí jeho vn¥j²í adresu a port a za²le mu ho v odpov¥di, p°ípadn¥ m·ºe poºadavek obsahovat parametr, aby mu odpov¥d byla zaslána jinam nebo z jiné adresy a portu. Na cest¥ mezi klienty m·ºe být i n¥kolik NAT·, které nám takhle pom·ºe STUN p°ekonat. Klient porovná svou IP adresu/port s adresou, kterou mu poslal STUN. Zjistí tak, zda je za jedním nebo více NATy. Jedná-li se o Full Cone NATy, m·ºe pak zji²t¥nou vn¥j²í adresu pouºívat bez problému i pro jiné vn¥j²í servery, sluºby, atd. Aby zjistil klient o jaký typ NATu se jedná, po²le dále po²le STUN poºadavek na jinou IP adresu/port, vrátí-li mu STUN stejnou vn¥j²í adresu/port => není za symetrickým NATem. Aby dále zjistil zda se jedná o Full Cone nebo jeden z Restricted, za²le jako parametr ºádost, aby mu byla odpov¥¤ odeslána z jiné IP adresy/portu. P°ijde-li mu => je za Full Cone NAT. Jedná-li se o jeden z Restricted, po²le dále klient poºadavek s parametrem, aby mu byla odpov¥¤ zaslána ze stejné IP, ale jiného portu. Zjistí tak zda je za Port Restricted nebo jen Restricted NATem. Z toho v²eho vyplívá, ºe STUN server pot°ebuje ke své funk£nosti mít dv¥ IP adresy. Dále viz. [6].
4 Protokol IAX2 IAX/IAX2 je protokol p°eváºn¥ pouºívaný úst°ednamy Asterisk jako alternativa k protokol·m SIP, H.323, atd. Jeho p·vodním cílem bylo propojit mezi sebou úst°edny Asterisk protokolem, který by byl spolehlivý a procházel lépe skrze NAT. Jméno IAX vzniklo ze zkratky Inter Asterisk Exchange (mezi Asterisková vým¥na). IAX není vyvíjeným standardem, ale je výsledkem práce komunity, podílející se na vývoji PBX Asterisk. V poslední dob¥ se velice roz²i°uje hlavn¥ díky snadnému pr·chodu skrze p°eklada£e adres a rewally. Pro svou komunikaci vyuºívá jeden UDP port 4569 (zastaralý IAX1 port 5036), to znamená, ºe °ídící i datové informace putují v jednom kanálu od jednoho uºivatele k druhému. Vºdy, kdyº se nám povede navázat spojení s druhým uºivatelem, máme zaji²t¥no, ºe se mezi námi budou
KAPITOLA 5.
POPIS POUITÝCH PRODUKT
9
p°ená²et i audio data. DTMF se p°ená²í vºdy p°ímo v audio datech (viz. [9]). Mezi výhody pat°í i moºnost spojení n¥kolika hovor· do jedné linky a tím sníºení zát¥ºe na lince mezi dv¥ma stroji komunikujícími pomocí IAXu. To umoº¬uje, aby mezi dv¥ma stroji bylo vedeno paraleln¥ n¥kolik komunika£ních kanál·, bez p°etíºení IP packety. To znamená, ºe má oproti protokolu SIP mnohem v¥t²í efektivitu p°i paralelním vedení více hovor· naráz. Pro °ídící data nepouºívá ASCII, ale sv·j vlastní binární tvar. Tím získává taktéº na efektivit¥. V p°ípad¥, ºe se neda°í navázat spojení mezi dv¥mi ú£astníky, kte°í mezi sebou cht¥jí komunikovat p°ímo, pouºije IAX centrální server (p°es, který bylo spojení navázáno) k p°enosu dat mezi t¥mito ú£astníky. Mezi jeho nevýhody pat°í zejména to, ºe není dostate£n¥ zdokumentovaný. Neumoº¬uje nám jednoduché debugování a hledání chyb v komunikaci sledováním £itelného toku °ídících informací. Není ociálním standardem a není v sou£asné dob¥ tolik roz²í°en jako SIP.
5 Popis pouºitých produkt· 5.1 Popis Debian linuxu Distribuce Debian linuxu je prost°edí, které je postavené na £i²t¥ nekomer£ních základech, mnohdy je téº nazýván GNU/linux1 . Její instala£ní CD/DVD je moºné stáhnout z mnoha server·, pro nás je nejblíºe nap°. debian.sh.cvut.cz. Sou£ástí distribuce je mnoho balí£k·, které zahrnují programy upravené p°ímo na míru distribuci Debian (jsou umíst¥ny na distribu£ních CD, p°ípadn¥ serveru). Uºivatel·m s rychlým internetovým p°ipojením v°ele doporu£ujeme stáhnout pouze CD £íslo 1 a zbytek instalace provést z internetu pomocí balí£kovacího systému APT. Jednou z výhod instalace z internetu je to, ºe uºivatel má zaru£enou aktuální distribuci s nejnov¥j²ími záplatami. V na²em p°ípad¥ budeme p°edpokládat, ºe uºivatel má k dispozici v²echny CD distribuce. Pro bliº²í informace ohledn¥ jeho moºností a kongurace odkazuji na [1].
5.2 Sip Express Router Sip Express Router, dále jen SER, je produkt vyvíjen na portálu iptel.org, spadá pod GNU GPL, jedná se o velice výkonný SIP server, který dokáºe obsluhovat kvanta SIP klient· sou£asn¥ (dokonce i na malém PDA procesoru zvládne obslouºit 150 hovor· za sekundu). Je zaloºen na principu modul·, to znamená, ºe si m·ºeme do n¥j p°idávat jednodu²e nové funkce, p°ípadn¥ jeho moduly zredukovat tzv. nám na míru. Umí fungovat jako stavový i jako bezestavový SIP proxy server 2.2. Umí doru£ovat textové zprávy mezi uºivateli. Dokáºe komunikovat s databázemi jako je Postgress, LDAP nebo MySQL a dokáºe p°ijímat p°íkazy za b¥hu z jiných rozhraní nap°. PHP pro obsluhu uºivatelských kont. Podporuje RADIUS ú£tování hovor·. Ve²kerá jeho kongurace je uloºena v jednom souboru, velice se podobá jazyku C. To nám umoº¬uje vytvá°et sloºité konstrukce pro °ízení hovor· a administrátorovi, alespo¬ trochu ovládajícímu programování, to poskytuje p°irozený p°ístup. SER v defaultní konguraci pouºívá pro registr uºivatel· pouze pam¥´ RAM. Chceme-li pouºívat databázi, abychom mohli vést uºivatelské ú£ty, musíme si nakongurovat pat°i£ný modul této aplikace (jak £asto chceme, aby se data ze SIP registru zálohovala do databáze,...). Máme-li SER nakongurovaný s databází, m·ºeme jí vyuºít jak pro autentizaci uºivatel·, tak pro nastavování uºivatelských práv na základ¥ uºivatelských skupin nebo ú£tování telefonních hovor·. 1
Existují celkem t°i verze systému Debian - stable, unstable a testing. My se v následujícím p°íkladu zame°íme
hlavn¥ na verzi unstable.
10
KAPITOLA 5.
POPIS POUITÝCH PRODUKT
5.3 MySQL MySQL je velice oblíbený databázový server, nyní je op¥t obsaºen v distibuci Debian, takºe jeho instalaci je moºno provést jednodu²e p°es rozhraní APT. Ve star²í verzi debanu nap°. Debian stable 3.1r1 Sid byl server MySQL vylou£en, takºe bylo nutno jej sehnat z dostupných zdroj· (internet, CD). Já budu dále popisovat instalaci z dostupných zdroj· i instalaci pomocí APT.
5.4 Apache Apache je velice exibilní webový server, který umoº¬uje °adu úprav a modikací svého nastavení. Nej£ast¥ji se s ním setkáváme ve dvou verzích: P·vodní Apache a nov¥j²í verze Apache 2. My se budeme dále zam¥°ovat na verzi 2 tohoto serveru.
5.5 SerWeb Jedná se o rozhraní umoº¬ující snadné spravování ú£t· v²ech uºivatel· ve webovém rozhraní, zárove¬ umoºnuje uºivateli s administrátorskými právy dohlíºet na ú£ty uºivatel· (vytvá°et jim aliasy, m¥nit jejich nastavení,...)
5.6 PBX systém Asterisk Asterisk je PBX - implementace pobo£kové telefonní úst°edny na linuxové platform¥. Asterisk je opensource a spadá pod licenci GPL. Spojuje n¥kolik r·zných komunika£ních protokol· (SIP,IAX2,H.323,...) a umoºnuje snadno vést hovory z jednoho protokolu do druhého. Asterisk podporuje i speciální hardware - nejr·zn¥j²í typy telefoních karet (jeho sponzorující spole£nosti je Digium), díky kterým m·ºe zárove¬ slouºit jako brána do klasické telefonní sít¥. Podporuje voicemail, interaktivní hlasová menu, konferen£ní hovory, monitorování hovor· a spoustu dal²í pokro£ilých funkcí. Asterisk umoº¬uje snadno vytvá°et tzv. dialplany - zp·sob vedení hovoru na základ¥ volaného £ísla a nebo zdroje volání. Asterisk umí fungovat jako SIP klient - dokáºe se zaregistrovat u poskytovatele SIP sluºeb a zprost°edkovávat skrze n¥ho hovory. Kaºdý uºivatel musí být p°edem zaregistrován v jeho kongura£ních souborech, ty se jmenují podle protokolu, který daný ú£astník vyuºívá (sip.conf, iax.conf,...). Identikace uºivatele probíhá na základ¥ IP adresy, portu nebo pomocí vyºádání si MD5 hashe uºivatele a hesla, p°ípadn¥ RSA. Uºivatelovi je p°id¥len kontext - za°azení jeho poºadak· do ur£ité skupiny v dialplanu a soubor kodek·, který m·ºe pro komunikaci p°es Asterisk pouºívat. V p°ípad¥, ºe uºivatel nemá trvalou IP adresu, m·ºe se zaregistrovat do Asteriskového registru. Administrátor má k dispozici konzoli, která mu umoº¬uje snadno monitorovat, p°ípadn¥ debugovat, pop°ípad¥ i °ídit b¥h Asterisku. Asterisk se hodí výborn¥ jako brána mezi klienty s r·znými protokoly nebo rozhraními, ale nehodí se jako samostatný SIP proxy server. Jelikoº je zam¥°en spí²e na multiprotokolovost a PBX funkce. Dá se sice v nouzovém p°ípad¥ jako SIP proxy pouºít, ale nemá vysokou výkonnost a navíc omezuje uºivatele tím, ºe neumoº¬uje p°eposílat komunikaci na jiné cíle neº má uloºené v kongura£ních souborech. To samé platí i o p°íchozí komunikaci. V Asterisku se objevila moºnost ukládat uºivatele a dialplany i mimo kongura£ní soubory a to do databáze. P°itom se vyuºívá nap°. unixODBC, stantard zaru£ující nezávislost na typu pouºité databáze. Existují dva základní zp·soby p°ístupu: 1. statický 2. RealTime
KAPITOLA 6.
ANALÝZA EENÍ
11
Statická metoda na£ítá obsah kongura£ních soubor· z databáze pouze p°i startu Asterisku, zadání poºadavku na tzv. reload, p°ípadn¥ p°i p°ístupu do Asteriskové konzole. RealTime metoda funguje dynamicky - zm¥ní se obsah databáze, zm¥ní se chování Asterisku. Má v²ak jednu velkou nevýhodu a to je, ºe v p°ípad¥ výpadku databáze vypadávají automaticky i kongurace, které jsme do databáze uloºili.
6 Analýza °e²ení 6.1 Úvod Na²im problémem bylo nalézt vyhovující °e²ení VoIP komunikace pro malou organizaci. Od za£átku jsme p°edpokládali zam¥°ení se hlavn¥ na univerzální protokol SIP. lo o to nalézt °e²ení, které by maximáln¥ vyhovovalo nasazení v reálném provozu. Problém byl hlavn¥ v p°edpokladu, ºe klient se m·ºe v mnoha p°ípadech nalézat za NATem. Existují sice provizorní °e²ení jak NAT obejít, ale v¥t²inou se jedná o zásah na stran¥ NATu. Jelikoº jsme hledali co nejefektivn¥j²í zp·sob, jak se t¥mto problém·m vyhnout, protoºe b¥ºný uºivatel nem·ºe svou bránu do internetu mnohdy ovlivnit, rozhodli jsme se pouºít pro p°ekonání NAT· jiný protokol, konkrétn¥ IAX2. Tento pom¥rn¥ mladý protokol p°ichází v poslední dob¥ do obliby práv¥ díky schopnosti p°ekonat NAT a je vyuºíván velkými spole£nostmi (nap°. VoipBuster). Hlavní problém spo£íval ve spojení protokolu IAX2 a SIP. Vzhledem k tomu, ºe protokol IAX2 byl navrhován pro vyuºití v úst°ednách Asterisk, zam¥°ili jsme se na n¥. Úst°edna Asterisk podporuje mnoho protokol·, je mezi nimi i SIP. Proto jsme zvaºovali moºnost plného nasazení úst°edny Asterisk. Bohuºel objevili se omezení této úst°edny - nebyla vyvíjena jako SIP proxy. To znamená, ºe nedisponuje v²emy funkcemi, které bychom od SIP proxy o£ekávali (nap°. aliasy, p°ijímání neznámých hovor· atd.). Z dostupných informací postupn¥ vyplynulo, ºe Asterisk je ve velkých rmách nasazován p°eváºn¥ jako brána mezi r·znými technologiemi a pro sm¥rování SIP protokolu se pouºívá výkon¥j²í, na SIP zam¥°ený software. Pátrali jsme po nejr·zn¥j²ích typech SIP proxy a nakonec jako nejvýhodn¥j²í jsme zvolili Sip Express Router. Zvýt¥zila jeho výkonnost, modularita, nízké systémové poºadavky, zp·sob jeho kongurace a jeho obliba ve VoIP sv¥t¥. Existuje dokonce i £áste£n¥ kompatibilní odnoº tohoto systému s názvem OpenSER, ale ta nám nep°í²la, zejména díky nízké technické podpo°e, p°íli² zajímavá.
6.2 Pouºítí pouze SER Sip Express Router je výborná SIP proxy, ale umí pouze protokol SIP. Jeho ideální vyuºití je zejména ve vnit°ní síti, kde nepo£ítáme s komunika£ními p°ekáºkami, které by se stav¥li protokolu SIP do cesty. V SERu se objevila sice moºnost jak £áste£n¥ °e²it problém s NAT - modul pro komunikaci s rtpproxy. Ale nám se nepovedlo tímto p°ístupem úsp¥²n¥ NATy zdolávat.
6.3 Pouºítí pouze Asterisku Asterisk by dokázal v nejhor²ím p°ípad¥ zastat £áste£n¥ úlohu SIP proxy. Fungoval by úsp¥²n¥ ve vnit°ní síti a umoº¬oval by i p°ipojení pro klienty za NATem pomocí IAX2. Ale Asterisk je spí²e pobo£ková úst°edna, ne SIP proxy. Asterisk p°i hovoru z·stává jako mezi£lánek zprost°edkující hovor. Nehodí se do prost°edí s vysokou koncentrací hovor·.
12
KAPITOLA 7.
INSTALACE DEBIAN LINUXU
6.4 Sp°aºení SERu a Asterisku Toto je asi nejzajímav¥j²í °e²ení, které nám dává k dispozici výhody obou t¥chto systém·. Získáme tak silnou a velice kongurovatelnou SIP proxy s moºnostní sm¥rování do jiných, a z jiných, protokol· (nap°. IAX2, který se hodí p°i p°ekonání NATu), s moºností sm¥rování na nejr·zn¥j²í brány (viz. 5.6) a s moºností p°ijímat hovory a vytvá°et interaktivní menu. V p°ípad¥ ºe by byl uºivatel registrován (on-line) stejným jménem na oba systémy sou£asn¥, má v p°ípad¥ hovoru p°icházejícího ze SIP p°ednost SER, v p°ípad¥ hovoru p°icházejícího z IAX2 je hovor sou£asn¥ sm¥rován na ob¥ registrace - na SER i na Asterisk. Nevýhoda IAX2 ú£tu spo£ívá v nemoºnosti odchozích hovor· do cizích SIP ú£t· (na jiné SIP servery), jelikoº u uºivatel· Asterisku p°i volb¥ cíle (£ísla) nep°edpokládáme i doménu.
7 Instalace Debian linuxu 7.1 P°iprava na instalaci P°edev²ím by si m¥l uºivatel uv¥domit, ºe linux má odli²ný systém soubor· neº klasické Windows, bude tudíº nutné rezervovat £ást svého volného místa na disku pro distribuci Linux. V podstat¥ m·ºeme vyuºít i ná² stávající disk, na kterém uº mám¥ opera£ní systém nainstalovaný, instala£ní pr·vodce nám umoºní zmen²it volné místo na na²em disku a p°id¥lit ho systému linux. Problém m·ºe nastat díky fragmentaci volného místa, proto doporu£uji p°edem provést defragmentaci v utilit¥ k tomu ur£ené (defrag). Budeme pot°ebovat min. kolem 5 GB volného místa na disku. Dal²í problém je v tom, ºe linux pot°ebuje mít zavad¥£ na disku, který zavede jeho jádro do pam¥ti, takºe musíme po£ítat s tím, ºe kdyº budeme chtít mít moºnost nabootovat do linuxu p°i spu²t¥ní systému, budeme muset nainstalovat klienta, který p°i spu²t¥ní po£íta£e umoºní zvolit opera£ní systém, který chceme nabootovat.
7.2 Vlastní instalace Vlastní instalace je pro zku²en¥j²ího uºivatele relativn¥ jednoduchá, sta£í se drºet instala£ního pr·vodce, který nás instalací postupn¥ provede. Budeme dotázání, které jádro má instalátor pouºít - doporu£uji zvolit kernel verze 2.6. Dále doporu£uji zvolit jako závád¥£ program Grub, jelikoº má moºnost editace boot menu p°ímo z bootmenu. Jakmile bude uºivatel dotázán na rozd¥lení disku - doporu£uji p°i°adit ko°enovému adresá°i alespo¬ 5 GB, abychom nem¥li problémy, kdyº bychom se rozhodli instalovat Xserver. Dále je t°eba vytvo°it vlastní swap oddíl, do kterého bychom m¥li investovat alespo¬ místo rovnající se dvojnásobku velikosti na²í RAM. Jméno po£íta£e nastavíme podle na²eho jména v síti. Co se týká instalovaných balí£k· - nám pln¥ poslouºí základní systém s konzolí a p°ípadné dal²í balí£ky p°iinstalujeme pozd¥ji. Dále mohu odkázat na instala£ní p°íru£ku v £eském jazyce viz. pouºitá literatura [2].
7.3 Postinstala£ní kongurace M·ºe se stát, ºe po úsp¥²né instalaci nebude systém ochoten nabootovat do ºádného opera£ního systému z nabídky, kterou sám vygeneroval. To se p°ihodí zejména, kdyº si GRUB splete identikátory jednotlivých pevných disk·, které máme v po£íta£i. Náprava je moºná ihned: 1. V nabídce GRUBu stiskneme c. 2. Zadáme: nd /initrd.img - zjistíme tak £íslo hardisku, na kterém je nainstalován linux.
KAPITOLA 8.
INSTALACE MYSQL
13
3. Opustíme p°íkazový reºim klávesou ESC, vybereme v nábídce ná² linux a klávesou e se dostaneme na editaci bootovacích parametr·. 4. Opravíme hodnotu root (hdX,Y) na správnout hodnotu. 5. Stiskene klávesu b a bootojeme. Toto nastavení poslouºilo pouze pro nabootování, ale neukládá se. Je nutné opravit jej v souboru /boot/grub/menu.lst. Dále je vhodné nau£it se vyladit sekvenci startování program· pomocí p°íkazu: update-rc.d -f jméno_prg remove update-rc.d jméno_prg 95 2 3 4 5 . stop 20 0 1 6 . íslo 95 znamená po°adí p°i startu/zastaveni, 2 3 4 5 a 0 1 6 jsou runlevely viz. man stránky. V budoucnu se nám to bude hodit - zejména jde o to pohlídat si, aby nap°. Sip Exress Router startoval aº po databázi MySQL v p°ípad¥, ºe jí vyuºívá. Dále viz. [4].
8 Instalace MySQL 8.1 Instalace z dostupných zdroj· Tuto instalaci v sou£astné dob¥ nedoporu£ujeme, zejména pro její pracnost, ale pro úplnost ji uvádíme. Díky op¥tovnému zakomponování databáze MySQL mezi debianovské balí£ky je nyní výhodn¥j²í zvolit instalaci pomocí APT, viz. 8.2. Nejprve si musíme sehnat archiv s MySQL. Je moºné jej stáhnout z webových stránek: www.mysql.com, my budeme dále p°edpokládat, ºe se jedná o binární archív.1
1.
Rozbalíme archiv: tar xvyf mysql-standard-5.0.16-linux-i686-glibc23.tar.gz -C /usr/local V²imn¥me si zejména cílového umíst¥ní: /usr/local (tam budeme umís´ovat programy které nejsou sou£ástí distribude Debian) 5.1
2.
Vytvo°ím¥ symbolický link na adresá° mysql: ln -s /usr/local/mysql-standard-5.0.16* /usr/local/mysql
3.
Najedeme do adresá°e databáze a vytvo°íme uºivatele mysql: cd /usr/local/mysl groupadd mysql useradd -g mysql mysql 2
4.
Zadáme postupn¥ následující °ádky: 1
Distribuce mysql v nedávné dob¥ neumoº¬ovala jiný postup.
2
spávn¥ bychom je²t¥ m¥li dodrºovat konvence a nastavit tomuto uºivateli takové uid a guid, které odpovídá
systémovému uºivateli
14
KAPITOLA 8.
INSTALACE MYSQL
scripts/mysql_install_db user=mysql chown -R root . chown -R mysql data chgrp -R mysql . bin/mysqld_safe user=mysql & MySQL p°edpokládá, ºe její kongurace je v souboru /etc/my.cnf, ale kv·li p°ehlednosti adresá°e /etc se vyplatí umístit konguraci do souboru /etc/mysql/my.cnf ,proto zkopírujeme soubor /usr/local/mysql/support-les/my-small.cnf do /etc/mysql/my.cnf a ud¥láme symbolický link z /etc/my.cnf 1. cp /usr/local/mysql/support-les/my-small.cnf /etc/mysql/my.cnf `mkdir /etc/mysql` 2. ln -s /etc/mysql/my.cnf /etc/my.cnf A následn¥ tento soubor upravíme tak, aby byl debian schopen najít socket od databáze. Upozo¬ujeme, ºe Debian p°edpokládá, ºe MySQL socket se naléza v souboru /var/run/mysqld/mysqld.sock, ale implicitní nastavení MySQL p°edpokládá soubor /tmp/mysql.sock Nyní je vhodn¥ za°adit si adresá° se spustitelnými soubory MySQL do na²í PATH prom¥nné: echo PATH=${PATH}:/usr/local/mysql/bin > > ~/.bashrc A na záv¥r si p°idáme spoustecí skript na databázi do adresá°e /etc/init.d a nakongurujeme spo²t¥ní databáze po startu systému. P°edpokládám, ºe defaultní runlevel Debianu je 2: 1. cp /usr/local/mysql/support-les/mysql.server /etc/init.d 2. ln -s /etc/init.d/mysql.server /etc/rc2.d/S19mysql
8.2 Instalace pomocí APT Tento postup, který je v sou£asné dob¥ dostupný, je maximáln¥ triviální, protoºe instalaci a konguraci systému za nás provede balí£kovací systém APT: apt-get install mysql-server Nyní uº je nutné jen nastavi heslo superuºivatele pro databázi: mysqladmin password nové_heslo_root ser_mysql.sh create (zeptá se nás na heslo root k databázi)
8.3 Kongurace Je moºné p°izp·sobit si konguraci MySQL podle na²ich poºadavk·, my se nyní zam¥°íme hlavn¥ na soubor /etc/mysql/my.cnf. Zm¥n¥ním parametru language dáme najevo, jakým jazykem si p°ejeme s MySQL komunikovat: language = /usr/share/mysql/czech Dále parametrem character-set-server nastavíme p°íslu²né defaultní kódování znak·. Ideální p°ípad je:
KAPITOLA 9.
INSTALACE APACHE 2
15
character-set-server=utf8 Ov²em zde zatím nastává problém s instalací Sip Express Routeru, jelikoº jeho skript pro vytvo°ení základních tabulek obsahuje chybu, která nám neumoº¬uje toto kódování pouºít. Proto prozatím doporu£uji zvolit kódování latin2.
9 Instalace Apache 2 9.1 Instalace ze zdrojových soubor· Instalace ze zdrojových soubor· je vcelku jednoduchá. Seºeneme si archív se zdrojovými soubory a uloºíme ho nap° do /usr/src, dále postupujeme dle návodu: 1. cd /usr/src 2. ./congure prex=/usr/local/apache2 enable-so 3. make 4. nd / -xdev | grep -v -e ^/dev -e ^/tmp -e ^/proc > pred 5. make install 6. nd / -xdev | grep -v -e ^/dev -e ^/tmp -e ^/proc > po 7. di pred po > instlog 8. rm pred po Body 4 aº 8 slouºí pro vytvo°ení souboru instlog, který si následn¥ uchováme uloºen pro p°ípadnou odinstalaci. P°ípadná odinstalace potom prob¥hne takto: rm -f `grep '^>' instlog | cut -d' ' -f2` Nyní je vhodné do /etc/man.cong pridat poloºku: MANPATH /usr/local/apache2/man, abychom m¥li snadný p°ístup k jeho manuálových stránkám.
9.2 Instalace pomocí APT Instalace ne£iní problémy vyuºijeme-li balí£kovacího systému APT. apt-get install apache2
9.3 Kongurace Aby server p°i kaºdém spu²t¥ní nehlásil hlá²ku: WARNING: Could not determine the server's fully qualied domain name, sta£í p°idat do souboru /etc/apache2/apache2.conf hlá²ku ServerName jméno_serveru. echo ServerName mojedomena.org > > /etc/apache2/apache2.conf
16
KAPITOLA 10.
INSTALACE SIP EXPRESS ROUTERU
9.4 Instalace PHP 9.4.1 Ze zdrojových soubor· 1. Rozbalíme archív se zdrojovými soubory. 2. ./congure with-apxs2=/usr/local/apache2/bin/apxs with-mysql=/usr/local/mysql 3. make 4. Ud¥láme si instlog viz. 9.1. 5. make install 6. cp php.ini-dist /usr/local/lib/php.ini 7. Zkontrolujeme zda /usr/local/apache2/conf/httpd.conf obsahuje °ádek: LoadModule php5_module modules/libphp5.so. 8. P°idáme tam °ádek: AddType application/x-httpd-php-source .phps
9.4.2 Pomocí APT 1. apt-get install php5 2. apt-get install php-db
10 Instalace Sip Express Routeru 10.1 Úvod Následujících £láncích p°edpokládáme, ºe hesla pouºitá k p°ístupu SERu do databáze z·stavají implicitní (vzhledem k tomu, ºe defaultn¥ je nastaveno, ºe SER se m·ºe p°ipojovat do databáze pouze z localhostu). Pro bliº²í informace doporu£uji [3].
10.2 Vlastní instalace 10.2.1 Získání balí£k· Sip Express Router je moºno stáhnout p°ímo na stránkách iptel.org. Vyskytuje se v n¥kolika verzích: 1. Binární archiv - obsahující jiº zkompilovaný SER. 2. Balí£ky pro distribuci Debian1 . 3. Zdrojové kódy. Osobn¥ doporu£uji zkompilovat si SER p°ímo na platformu, na které následn¥ pob¥ºí. 1
Balí£ky jsou dostupné pro v²echny distribuce Debianu (od testing aº po stable)
KAPITOLA 10.
INSTALACE SIP EXPRESS ROUTERU
17
10.2.2 Instalace z balí£k· Vyskytují se prakticky dv¥ moºnosti:
1.
M·ºeme si p°idat nový zdroj do souboru /etc/apt/sources.list : deb http://apt.sip-router.org/debian testing main contrib non-free nebo
deb http://apt.sip-router.org/debian unstable main contrib non-free (v závislosti na distribuci Debianu)
Potom sta£í jako superuºivatel napsat apt-get update; apt-get install ser a systém automaticky stáhne a nainstaluje poslední verzi SERu. P°i následných upgradech systému pouºitím apt-get upgrade, bude automaticky nainstalována nejnov¥j²í verze SERu.
2.
M·ºeme si p°ímo stáhnout p°íslu²ný balí£ek pro na²i distribuci a ten posléze instalovat p°íkazem: dpkg -i jméno_balí£ku
Osobn¥ doporu£uji první variantu jelikoº si tím u²et°í problémy se závislostmi mezi soubory. Problem:
Dal²í zku²enost, na kterou pro jistotu upozorníme je to, ºe po aktualizaci systému Debian, pomocí p°íkazu apt-get dist-upgrade, se nám aktualizovala databáze na verzi 5.0.19-3 a taktéº se nainstalovala knihovna mysqlclient15o, která v debianu nahradila knihovnu mysqlclient15. Díky nespln¥ným závislostem modulu ser-mysqlmodule na libmysqlclient15 do²lo k deinstalaci modulu ser-mysql-module a systém SER p°estal p°estal komunikovat s databází. Nepomohlo ani vynucení op¥tovné instalace ser-mysql-module, prost¥ si SER s MySQL p°estali rozum¥t, protoºe SER ve svých balí£cích nepodporoval novou knihovnu.
e²ení:
Kompilace modulu ser-mysql-client ze zdrojových soubor· - postupujeme jako v 10.2.3, pouze z rozdílem, ºe od bodu 2 postupujeme takto: 1. make modules=modules/mysql modules 2. cp modules/mysql/mysql.so /usr/lib/ser/modules
10.2.3 Instalace ze zdrojových soubor· Stantandardn¥ se nekompilují moduly, které mají návaznost na externí knihovny - jako nap°íklad modul mysql (vyºaduje libmysqlclient-dev ), který budeme v dal²í konguraci pouºívat, proto nejd°íve uspokojíme závislosti (rovnou pro v²echny moduly) a pak vynutíme jeho kompilaci. O²et°ení závislostí: apt-get install libmysqlclient-dev libpq-dev libexpat1-dev libxml2-dev Následná kompilace Ser Express Routeru: 1. tar xvzf ser-verze 2. cd ser-verze 3. make
18
KAPITOLA 10.
INSTALACE SIP EXPRESS ROUTERU
4. make include_modules="mysql modules 5. make install nebo make deb Doporu£uji pouºít make deb (ekvivalent k dpkg-buildpackage), jelikoº vytvo°í balí£ek, který potom nainstalujeme klasickým zp·sobem viz. 10.2.2. Výhoda spo£ívá ve snadn¥j²í odinstalaci. Jinak lze pouºít metodu odinstalace viz. 9.1.
10.2.4 Poinstala£ní nastavení Po instalaci doporu£ujeme nastavit si do rootovského konta export prom¥nné SIP_DOMAIN na jméno serveru - nebudeme muset vkládat doménu p°i budoucí obsluze SERu p°es rozhraní serctl: echo "export SIP_DOMAIN=mojedomena.org > > ~/.bashrc
10.3 Kongurace Kongurace SERu se provádí v souboru /etc/ser/ser.cfg. Provádí se pomocí syntaxe podobné programovacímu jazyku C. Obecnej²í moºnosti nastavení jsou detailn¥ popsány v /usr/share/doc/ser, kde jsou i p°íklady moºné kongurace. Úpravy kongura£ního souboru SERu budeme popisovat v následujích kapitolách, p°i popisu instalací dal²ích komponent na²eho systému. V p°íloze p°ikládám, jak vypadá hotový kongura£ní soubor pro na²e pouºití. Problém:
Po drobných úpravách kongura£ního souboru SERu, linux p°i op¥tovném spu²t¥ní uvázne po na£tení SERu.
e²ení:
Kdyº si nastavujeme kongura£ní soubor SERu pro debugging, zvolíme obvykle, aby se p°i spu²t¥ní SER neforkoval. Bu¤to umoºníme SERu forkovat se, nebo je t°eba odstranit symbolický link na SER z adresá°e rcX.d, kde X je £íslo na²eho defaultního runlevelu a spou²t¥t ho pro pot°eby debugování ru£n¥.
10.4 Spravování SER lze velmi snadno spravovat pomocí p°íkazu serctl. Chceme-li nap°íklad zobrazit informace o aktuáln¥ p°ipojených uºivatelích, zadáme serctl ul show. Chceme-li vyuºít moºnosti monitorovat funkci SERu v reálném £ase, pouºíjeme serctl moni 2 Chceme-li nap°íklad p°idat nového uºivatele do databáze uºivatel· (subcribers), kte°í mají moºnost registrovat se na serveru, pouºijeme p°íkaz: serctl add jméno_uºivatele heslo_uºivatele email_uºivatele Pro dal²í informace doporu£ujeme [3].
10.5 Kongurace MySQL a SERu 10.5.1 Úvod Budeme dále pro jednoduchost p°edpokládat, ºe jsme p°i instalaci SERu postupovali podle 10.2.2. P°edev²ím je nutné, aby SER startoval po databázi MySQL. Vstoupíme do adresá°e /etc/rc2.d a zkontrolujeme, aby Sxx ser (kde xx p°edstavuje dvoumístné £íslo) bylo v¥t²í neº Sxx mysqld. P°ípadn¥ upravíme viz. 7.3. 2
V na²í distribuci debian unstable bylo nutne spou²tet p°íkaz serctl moni jako novou instanci bashe: bash
serctl moni
KAPITOLA 10.
19
INSTALACE SIP EXPRESS ROUTERU
10.5.2 Postup Upravujeme p·vodní soubor, hotový kongura£ní soubor najdeme v p°íloze (viz. B.1.1). 1. P°iinstalujeme si do SERu modul ser-mysql-module, nap°. postupovali-li jsme podle 10.2.2, tak sta£í jenom jako root zadat p°íkaz: apt-get install ser-mysql-module 2. Spustíme soubor ser_mysql.sh create (nalézá se bud v /usr/sbin nebo /usr/local/sbin). 3. Odkomentujeme v souboru (/usr/local)/etc/ser/ser.cfg °ádky:
• loadmodule "/usr/lib/ser/modules/mysql.so" • loadmodule "/usr/lib/ser/modules/auth.so"
- podpora databáze MySQL
- podpora autentizace
• loadmodule "/usr/lib/ser/modules/auth_db.so" • modparam("usrloc", "db_mode", 2)
- podpora autentizace pomoci databáze
- vyuºítí databáze registrem uºivatel·
• modparam("auth", "calculate_ha1", yes)
- modul auth má vypo£ítávat hash hesla pro
porovnání s heslem v databázi
• modparam("auth_db", "password_column", "password") -
heslo je uloºeno v databázi ve
sloupci password_column
• if (!www_authorize("mojedomena.org", "subscriber")) { www_challenge("mojedomena.org", "0"); break; }; - v p°ípad¥ ºe uºivatel není autorizovaný, vznést poºadavek na jeho autorizaci
3
Z bezpe£nostních d·vod· je²t¥ zm¥níme posledního z vý²e uvedených °ádk· na: if (!www_authorize("mojedomena.org", "subscriber") || !check_to()) { www_challenge("mojedomena.org", "0"); break; }; A na úvod souboru, kde se nachází poloºky loadmodule p°idáme °ádek: loadmodule "/usr/lib/ser/modules/uri_db.so" - nutné pro pouºití funkce check_to A nakongurujeme pouºítí na²í MySQL databáze: modparam("auth_db","db_url","mysql://serro:
[email protected]/ser") modparam("usrloc","db_url","mysql://ser:
[email protected]/ser") modparam("uri_db", "db_url", "mysql://serro:
[email protected]/ser") Místo ip adresy 127.0.0.1, lze pouºít i adresu localhost, pak se SER p°ipojuje k databázi pomocí socketu (musí být dob°e nakongurován viz. 8.1). Funkce check_to kontroluje, zda je stejná adresa uºivatele jako p°ihla²ovací jméno. Tím se zabezpe£íme proti moºnosti odcizení SIP adresy registrovaného uºivatele jiným registrovaným uºivatelem. Nyní, kdyº se pokusíme SIP klientem (Twinkle, Kphone,...) p°ipojit se na ná² server, m¥l by se nás klient zeptat na p°ihla²ovací údaje, ale nezaregistruje nás, musíme nejd°íve vloºit n¥jaké uºivatelské konto do databáze viz. 10.4. 3
Text mojedomena.org nahradíme odpovídajícím jménem na²í domény.
20
KAPITOLA 11.
INSTALACE ROZHRANÍ SERWEB
10.5.3 Moºné problémy Pokud máme star²í verzi knihovny libmysqlclient, která nepodporuje modern¥j²í verzi ²ifrování hesel, kterou defaultn¥ podporuje MySQL, musíme nastavit v souboru /etc/mysql/my.cnf pouºití star²ího kódovaní hesel: echo old_passwords = 1 > > /etc/mysql/my.cnf A následn¥ p°e²ifrovat hesla SERu v na²í databázi: 1. mysql -p 2. Zadáme heslo roota do databáze. 3. use ser; 4. update user set Password=old_password('heslo') where User='ser'; 5. ush privileges; 6. quit M·ºe se vyskytnout i problém, ºe SER se odmítá p°ipojit k databázi a hlásí ºe nemáme p°íslu²né opravn¥ní i p°es to, ºe heslo je správné, potom pom·ºe následující: 1. mysql -p 2. Zadáme heslo roota do databáze. 3. use ser; 4. update user set Host='jméno po£íta£e' where User='ser' 5. quit
11 Instalace Rozhraní SerWeb 11.1 Instalace Instalace m·ºe být extrémn¥ sloºitá, ale i naprosto jednoduchá - podle toho, který p°ístup zvolíme. Osobn¥ doporu£uji vyuºít balí£kovací systém APT - viz. 10.2.2, instalace pak bude jednoduchá i pro naprostého laika. My budeme nyní p°epokládat pouºití APT: apt-get install serweb Kdyº pouºíváme mysql verzi vy²²í neº 4.1, do souboru /etc/serweb/cong_data_layer.php p°idáme °ádky: $cong->data_sql->collation = "utf8_general_ci"; $cong->data_sql->set_charset = true; Nyní by teoreticky m¥lo v²e fungovat - moºno zkontrolovat ve webovém prohlíºe£i zadáním adresy adresa_na ²eho_po £íta £e /serweb. V p°ípad¥, ºe by prohlíºe£ hlásil chybovout hlá²ku o nenalezení XML/RPC.php, je je²t¥ nutné na p°iinstalovat PHP modul xml _rpc. Jako root zadáme1 : pear install xml_rpc 1
Je nutný p°ístup k internetu.
KAPITOLA 12.
INSTALACE PBX ASTERISK
21
11.2 Kongurace P°edpokládáme, ºe se nacházíme v adresá°i /etc/serweb. Rozhraní SerWeb je moºné p°ekongurovat dle na²ich poºadavk· v souboru cong.php. V p°ípad¥ ºe bychom cht¥li logovat co d¥lá SerWeb - m·ºeme v souboru cong.php nastavit: $cong->enable_loging = true; Lze nastavit i poºadovanou hloubku logování, viz. komentá°e v souboru cong.php (log_level). Nyní zkontrolujeme nastavení v souboru cong_paths.php a nakonec bychom m¥li nastavit parametry na²í databáze v souboru cong_data_layer.php:
• $cong->data_sql->type="mysql"; • $cong->data_sql->host[$i]['host']="127.0.0.1"; • $cong->data_sql->host[$i]['port']=""; • $cong->data_sql->host[$i]['name']="ser"; • $cong->data_sql->host[$i]['user']="ser"; • $cong->data_sql->host[$i]['pass']="heslo"; • dále se °ídíme tagy v souboru Na záv¥r musíme vytvo°it soubor, do kterého se bude log ukládat a nastavit mu p°íslu²ná p°ístupová práva. V konzoli zadáme: touch /var/log/serweb; chown www-data /var/log/serweb
11.3 Problémy Problém:
Rozhraní nám p°i p°ihlá²ení m·ºe hlásit hlá²ku typu: sorry cannot open write fo.
e²ení:
Jsou ²patn¥ nastavena uºivatelská práva souboru /tmp/ser_fo. Do kongura£ního souboru SERu je t°eba p°idat °ádky: user=ser group=ser fo_user fo_group=ser fo_mode=0660 A v souboru /etc/group doplnit °ádek skupiny: ser:x:111:www-data
12 Instalace PBX Asterisk 12.1 Instalace Asterisk nainstalujeme p°íkazem apt-get install asterisk. Po instalaci balí£k· Asterisk je nutné v Debianu v adresá°i /etc/default/asterisk nastavit poloºku RUNASTERISK=yes. Jinak nám bude APT neustále hlásit chybu, ºe Asterisk nelze nakongurovat.
22
KAPITOLA 12.
INSTALACE PBX ASTERISK
Dal²í chyba je v tom, ºe defaultn¥ se neinstaluje balí£ek asterisk-rate-engine, ale v defaultní konguraci ho Asterisk vyºaduje, takºe celý systém nep·jde po instalaci spustit. e²ení je bu¤to p°iinstalovat asterisk-rate-engine p°íkazem: apt-get install asterisk-rate-engine Nebo mnohem ideáln¥j²í °e²ení, pro ty, kte°í rate engine nepot°ebují, je p°idat do souboru /etc/asterisk/modules.conf °ádek: noload => rate_engine.so A rovnou upravíme °ádek load => res_musiconhold.so na: noload => res_musiconhold.so Tu jsme rovnou zabili dv¥ mouchy jednou ranou, protoºe Asterisk pozd¥ji po rozb¥hnutí serveru, hlásí pravideln¥ varování, ºe mu chybí balí£ek mp3player a adresá° mohmp3 s takzvanou: music on hold, coº je hudba, která se hraje, kdyº £ekáme na hovor. Tím se nyní zabývat nebudeme. Problem:
Kdyº budeme testovat Asterisk tak, ºe ho jako root spustíme v konsoli p°íkazem asterisk nastane problém. Process vytvo°í pod p°ístupovými právy roota v adresá°i /var/log/asterisk n¥které soubory, ke kterým následn¥ Asterisk spu²t¥ný daemonem (pod ú£tem asterisk ) nebude mít p°ístup.
e²ení:
Bu¤to jiº od po£átku spou²t¥jme Asterisk s parametrem: -U asterisk nebo po t¥chto testech opravme vlastníka soubor· v adresá°i /var/log/asterisk : chowd -R asterisk:asterisk /usr/log/asterisk
Problém:
Asterisk nechce nab¥hnout. Kdyº napí²eme asterisk -v, hlásí: ERROR[4667]: netsock.c:140 ast_netsock_bindaddr: Unable to bind to 0.0.0.0 port 4569: Address already in use
e²ení:
Zkontrolujte, zda nemáte na stejném stroji zapnutého n¥jakého IAX klienta (nap°. kiax). Vypn¥te ho a pak zkuste Asterisk nastartovat znovu.
12.2 Kongurace Kongurace se provádí v n¥kolika intuitivn¥ pojmenovaných souborech v adresá°i /etc/asterisk. Nap°íklad kongurace protokolu SIP se provádí v souboru sip.conf, IAX2 v iax.conf. Kongurace dialplan· se provádí v souboru extensions.conf. K dispozici máme Asterisk konzoli, která nám umoº¬uje realtime debugování a zm¥nu parametr· Asterisku za b¥hu. Do Asterisk konzole (b¥ºí-li jiº Asterisk) se dostaneme p°íkazem: asterisk -rcvvv Po£et vvv udává, hladinu vý°e£nosti Asterisku. Hodí se nám nap°íklad p°íkaz: sip debug, p°ípadn¥ iax2 debug, který detailn¥ vypisuje d¥ní na pat°i£ném kanálu. Vypnout výpisy m·ºeme pomocí p°íkazu: sip no debug, p°ípadn¥ iax2 no debug. Bliº²í informace získáme zadáním p°íkazu help. Po zm¥nách kongura£ních soubor·, lze aktualizovat novou konguraci p°íkazem reload. Pro detaily ohledn¥ kongurace Asterisku odkazuji na [7].
KAPITOLA 12.
INSTALACE PBX ASTERISK
23
Problém:
Chceme-li pozd¥ji v dialplanu pouºívat aplikaci Record(), nebude nám aplikace fungovat. Record() implicitn¥ p°edpokládá adresá° pro uloºení nahraných soubor·: /usr/share/asterisk/sounds, jenºe adresá° defaultn¥ pat°í rootovi a má nastavené práva tak, ºe v n¥m m·ºe vytvá°et soubory pouze on.
e²ení:
Nejjednodu²²í je pro nás ponechat p°ístupová práva tak jak jsou a zm¥nit vlastníka adresá°e na uºivatele: asterisk. chown asterisk:asterisk /usr/share/asterisk/sounds
Pozor: Pro vyuºítí n¥kterých p°íkaz· v dialplanu je nutné mít i externí programy, nap°íklad chceme-li vyuºívat nap°. aplikaci MP3Player uvnit° extensions.conf, je nutné mít instalovaný balí£ek mpg123: apt-get install mpg123
12.2.1 Nastavení sip.conf Kongura£ní soubor sip.conf za£íná vºdy náv¥stím v hranatých závorkách, které popisuje p°ipojované za°ízení (prol uºivatele) a pokra£uje jeho kongurací. Doporu£ujeme dávat jméno za°ízení stejné jako username (n¥kte°í SIP klienti automaticky odesílají username jako jméno ú£tu na serveru). Základní pouºité prvky kongurace:
• context • type -
- denuje, odkud bude uºivatel vycházet v dialplanu
typ uºivatele (peer - odchozí komunikace, user - p°íchozí komunikace, friend - obojí)
• insecure
- vypnutí vynucování autorizace uºivatele (invite - pri poºadavku na hovor, very
- ignoruje i ze kterého portu poºadavek p°i²el
• host
- IP adresa uºivatele (m·ºe být dynamic = uºivatel se loguje do registru Asterisku)
• port
- port uºivatele
• dtmfmode
- zp·sob, jakým se budou odesílat volby zadávané tla£ítky telefonního p°ístroje
(inband, rfc2833, info)
• disallow/allow • username • secret
- zakázané/povolené kodeky
- p°ihla²ovací jméno uºivatele (doporu£uji stejné jako jméno prolu)
- p°ihla²ovací heslo uºivatele
• fromdomain • fromuser
- zm¥na domény pro odchozí hovory
- zm¥na uºivatele pro odchozí hovory
Úpln¥ první prol se jmenuje general obsahuje obecné nastavení kanálu, pro nás jsou nejzajímav¥j²í poloºky:
• context • realm
- defaultní kontext pro daný kanál
- jméno na²eho stroje (v SIP adrese za zaviná£em)
• bindport
- port na, kterém naslouchá
• bindaddr
- adresa, na které naslouchá
• register adresy
- umoº¬uje zaregistrovat se u jiného stroje, který má u nás parametr dynamické
24
KAPITOLA 12.
INSTALACE PBX ASTERISK
12.2.2 Nastavení iax.conf Tém¥° stejné jako nastavení sip.conf, viz. 12.2.1.
12.2.3 Nastavení extensions.conf Pro komunikaci se serverem SER, s uºivateli vyuºívajícími protokol IAX a s bránou do externí telefonní sít¥ je nutné vytvo°it pat°i£né dialplany, kompletní kongurace viz. B.2.3. Kongurace za£íná kontextem general, který obsahuje obecné kongura£ní informace, dále globals - zde si m·ºeme nadenovat prom¥nné (v klasickém formátu prom¥nná=hodnota) a kon£í jednotlivými uºivatelskými kontexty. Chceme-li pouºít hodnotu z prom¥nné, pouºijeme zápis: ${jmeno_prom¥nné}.
Uºivatel za£íná na kontextu, který má nastavený v kongura£ním souboru poloºkou context, nemá-li ºádný, za£íná na kontextu, který je pro jeho kanál defaultní viz. 12.2.1. ádky v kontextu v¥t²inou za£ínají p°íkazem include => nebo exten =>. P°íkaz include vkládá do daného kontextu obsah jiného kotextu: include => jméno_kontextu P°íkaz exten slouºí k vytvá°ení telefonních schémat: [nahravani] exten => *1,1,Answer() exten => *1,2,Authenticate(${HESLO}) exten => *1,3,Record(${ULOZ}.gsm) exten => *1,4,Playback(${ULOZ}) exten => *1,5,Hangup() Uºivateli, který spadá pod kontext nahravani a vyto£í *1 je hovor p°ijmut, následn¥ je po n¥m poºadována autentikace, je zaznamenáno co rekne do souboru v prom¥nné ULOZ ve formátu gsm, poté je mu záznam p°ehrán a hovor je ukon£en. ádek s exten zaºíná vºdy volaným £íslem, pokra£uje £íslem priority, které roste s po°adím p°íkaz· (sta£í zadan první £íslo a dál psát n ) a kon£í p°íkazem, který se má provést. Místo volaného £ísla se je²t¥ mohou vyskytovat speciální jednopísmenné hodnoty (nap°. s,i,h,...), kde nap°íklad s znamená, ºe se daný p°íkaz provede automaticky p°i vstupu do daného kontextu, i v p°ípad¥ ²patn¥ zadané volby £ísla a h v p°ípad¥ zav¥²ení hovoru, nebo tzv. p°edlohy, za£ínající podtrºítkem, kde te£ka znamená minimáln¥ jeden libovolný znak, X £ íslo od 0 do 9 atd. . V p°edlohách je moºné psát i mnoºiny £ísel - nap°. [1-4] dále viz. [7].
12.2.4 Propojení s externí telefonní bránou Externí brána poskytuje p°ipojení pomocí protokolu SIP. Umoº¬uje volat do klasické telefonní sít¥ a stejn¥ tak pomocí ve°ejného telefonního £ísla hovory p°ijímat. Hovory z vn¥j²í sít¥ jsou p°ijímány Asteriskem, který umoºní volajícímu zadat £íslo volaného ú£astníka ve vnit°ní síti. Je z°ejmé, ºe chce-li uºivatel SIPu být schopen p°ijímat hovory z vn¥j²í sít¥, m¥l by si v p°ípad¥, ºe nemá jako ú£et telefonní £íslo, vytvo°it tzv. alias - v na²em p°ípad¥ £íselný link na sv·j telefonní ú£et. U uºivatel· IAX2, kte°í chtejí být p°ístupní z vn¥j²í sít¥, £íselné jméno konta p°edpokládáme. íslo, které je sm¥rováno na tuto bránu, je identikované pomocí p°edvolby: #. Vlastní kongurace spo£ívá ve vytvo°ení ú£tu pro externí bránu v souboru sip.conf (viz. 12.2.1) a úprav¥ dialplanu. My jako p°íklad vyuºíváme sluºbu portálu mujtelefon.cz. Do kontextu [general] kongura£ního souboru sip.conf p°idáme °ádku :
KAPITOLA 12.
INSTALACE PBX ASTERISK
25
register => 272047893:
[email protected] Tato °ádka zp·sobí to, ºe se Asterisk zaregistruje u poskytovatele mujtelefon.cz jako b¥ºný SIP klient. Dále vytvo°íme pro bránu nový kontext: [mujtelefon] context=fromGateway type=friend host=sip.mujtelefon.cz fromdomain=sip.mujtelefon.cz fromuser=272047893 username=272047893 secret=cprfbvld dtmfmode=rfc2833 allow=all insecure=invite Jelikoº poºadujeme, aby i jiný neº práv¥ na této brán¥ registrovaný uºivatel byl schopný volat pomocí této brány, m¥níme pomocí p°íkaz· fromuser a fromdomain jméno volajícího na jméno zaregistrovaného konta. Aby bylo moºno p°íjímat hovory z brány, nastavujeme parametr insecure na invite. To znamená, ºe p°i p°íchozím hovoru z brány, která je identikována svou IP adresou, nepoºadujeme autentizaci brány.
• Kongurace extensions.conf pro odchozí hovory: [toGateway] exten => _#X.,1,Dial(SIP/mujtelefon/${EXTEN:1},30,r) exten => _#X.,2,Congestion(5)
• Kongurace extensions.conf pro p°íchozí hovory: [fromGateway] include => services include => toIAXtoSER exten => s,1,Answer() exten => s,2,Background(uvitani) exten => s,3,WaitExten(10) exten => s,4,Hangup() exten => i,1,Playback(litujeme) exten => i,2,GoTo(fromGateway,s,2) Odchozí hovory jsou rozpoznány podle p°edlohy a pomocí p°íkazu Dial sm¥rovány na bránu. Prom¥nná EXTEN uchovává volané £íslo. Parametr :1 u prom¥nné EXTEN slouºí k umazání první £íslice volby (v na²em p°ípad¥ #). V p°ípad¥ neúsp¥chu se provede p°íkaz Congestion, který bude v tomto p°ípad¥ 5 sekund hlásit, ºe uºivatel je nedostupny. P°íchozí hovor zvedneme a dáme nahrávkou v¥d¥t, ºe byl p°ijmut (Background(uvitaní)), sou£asn¥ £ekáme zadání vnit°ní volby. Volby se srovnávají s includovanými kontexty services a toIAXtoSER. V p°ípad¥ zadání ²patné volby se spustí hlá²ka litujeme (Playback(litujeme)) a znovu se vrátíme na uvítaní vojajícího. V p°ípad¥ nezadání ºádné volby, po£káme je²t¥ 10 sekund a hovor zav¥síme.
26
KAPITOLA 12.
INSTALACE PBX ASTERISK
12.2.5 Nastavení externí kongurace Pro usnadn¥ní správy IAX2 uºivatelských kont ukládáme jednotlivé IAX2 uºivatele do databáze. V na²em p°ípad¥ demonstrujeme vyuºití databáze MySQL. Pro p°ipojení vyuºijeme rozhraní ODBC, v na²em p°ípad¥ unixODBC. MySQL kongurujeme pomocí MySQL konzole, do které se dostane nap°íklad p°íkazem: mysql -p -u root , heslo pro p°ihlá²ení viz. 8.2. Vytvo°íme databázi, uºivatele Asterisk a základní tabulku (blíºe viz. [8]): CREATE DATABASE asterisk; GRAND ALL ON asterisk.* to 'ast'@'localhost' IDENTIFIED BY 'heslo'; CREATE TABLE friends ( name varchar(30) primary key NOT NULL, secret varchar(50), context varchar(100), host varchar(31) NOT NULL default 'dynamic', ipaddr varchar(15), port integer default 4569, regseconds integer default 0 ); Vloºení uºivatele: INSERT INTO friends(name,secret,context) VALUES ('ondrej','moje','iax'); Nepouºíváme parametr username, p°edpokládáme, ºe je stejné jako jméno prolu, které se v databázi jmenuje name. Nyní p°ejdeme do fáze nastavení ODBC na podporu na²í databáze, v adresá°i /etc p°idáme do soubor· odbcinst.ini a odbc.ini následující °ádky:
odbcinst.ini [MySQL] Description = MySQL driver Driver = /usr/lib/odbc/libmyodbc.so Setup = /usr/lib/odbc/libodbcmyS.so UsageCount = 1
odbc.ini [MySQL-asterisk] Description = pripojeni do databaze asterisku v MySQL Driver = MySQL Server = localhost Database = asterisk Port = 3306 Propojení otestujeme - po zadání tohot p°íkazu by se nám m¥la otev°ít MySQL konzole: isql -v MySQL-asterisk ast heslo Nyní je t°eba nakongurovat Asterisk pro pouºití RealTime kongurace viz. 5.6:
res_odbc.conf [mysql-odbc] enabled => yes dsn => MySQL-asterisk username => ast password => heslo pre-connect => yes
KAPITOLA 13.
PROPOJENÍ SERU A ASTERISKU
27
extcong.conf iaxusers => odbc,mysql-odbc,friends iaxpeers => odbc,mysql-odbc,friends Nyní doporu£ují provést restart Asterisku: /etc/init.d/asterisk restart a kongurace je kompletní.
13 Propojení SERu a Asterisku 13.1 Nastavení Sip Express Routeru Kongura£ní soubor SERu upravíme do následující podoby: Za blok p° íkaz· podmínky if (!uri==myself ) p° idáme ° ádky: if (!lookup("location")) { if(src_ip==147.32.112.52 and src_port==5061) { sl_send_reply("404", "Not Found"); break; }; log(1,"Nemam v location, forwarduju na Asterisk\n"); append_hf("P-hint: Nemam v location, smerovano ze SERu\r\n"); route(2); break; }; V p°ípad¥, ºe SER nemá uloºen daný kontakt ve svém registru, sm¥ruje hovor na cestu £íslo 2: route[2] . P°edtím ov²em zkontroluje, zda náhodou nep°ichází hovor z portu, kde b¥ºí Asterisk - aby nedo²lo k zacyklení, jelikoº p°edpokládáme, ºe Asterisk neznáme hovory p°epojuje na SER. P°íkaz log slouºí pro logovací ú£ely (úrove¬ logování je zde 1) a p°íkaz append_hf slouºí k p°ipojení informa£ního textu p°ímo do SIP hlavi£ky (pro debugovací ú£ely). A kone£n¥ na konec souboru p°idáme: route[2] { rewriteport("5061"); if (!t_relay()) { sl_reply_error(); } }
POZOR!:
Jelikoº máme na Asterisku v provozu bránu do externí sít¥ (viz. 12.2.4), m·ºe nyní jakýkoliv uºivatel, nemající u nás ú£et, sm¥rovat hovory na na²i bránu. O²et°ení viz. 13.3.
13.2 Nastavení Asterisku U Asterisku je problém, chceme-li v dialplanu pouºít zna£ku symbolizující jakékoliv zadané £íslo. Implicitn¥ by nás napadlo pouºít p°edlohu _., ale do ní by spadaly i speciální symboly jako nap°. s,t,h (viz. 12.2.3). Proto v na²ich p°íkladech pouºíváme p°edlohu _.., která symbolizuje dv¥ a více znak·. Omezujeme tím uºivatele SIP i IAX2 na minimáln¥ dvou písmenná jména. Pro SER vytvo°íme nový kontext v sip.conf:
28
KAPITOLA 13.
PROPOJENÍ SERU A ASTERISKU
[ser] context=ser type=friend insecure=very host=okz.sh.cvut.cz port=5060 dtmfmode=rfc2833 allow=all Poloºka insecure=very znamená, ºe SER se nemusí autentikovat. Nastavení extensions.conf: [ser] include => services include => toGateway include => toIAX [iax] include => services include => toGateway include => toIAXtoSER [toIAX] exten => _..,1,Dial(IAX2/${EXTEN},30) [toIAXtoSER] exten => _..,1,Dial(IAX2/${EXTEN}&SIP/ser/${EXTEN},30) Pro klient SERu je defaultní kontext ser, pro klienty Asterisku je defaultní kontext iax. V p°ípad¥, ºe poºadovaná volba není nalezena v kontextech services, ani toGateway (brána), sm¥ruje se p°ímo na klienta - na základ¥ zadané volby. U uºivatel· vycházejících z kontextu ser se jiº nep°epojuje na SER (odtud se jiº vycházelo), aby nedo²lo k cyklení.
13.3 Zabezpe£ení externí brány v SERu Pro uºivatele, kte°í propojili Asterisk, který má nakongurovanou externí bránu (viz. 12.2.4) a Sip Express Router dohromady (viz. 13), náleºí následující °ádky, které jim ukáºí jak SER zabezpe£it, aby nemohl cizí uºivatel vyuºívat bránu na Asterisku. Zvolené °e²ení zárove¬ umoº¬uje administrátorovi ur£ovat kdo ze SER uºivatel· m·ºe k brán¥ p°istupovat. Do kongura£ního souboru je t°eba p°ed p°íkaz lookup("aliases") p°ídat následující °ádky (viz. B.1.1): if (method=="INVITE") { if (uri=~"sip:#[0-9]*@.*") { if (!www_authorize("okz.sh.cvut.cz", "subscriber") ) { www_challenge("okz.sh.cvut.cz", "0"); break; }; if (!is_user_in("Credentials","int")) { sl_send_reply("403", "Forbidden"); break;
KAPITOLA 14.
TESTOVÁNÍ
29
}; log(1,"Prepojuju na Mujtelefon.cz\n"); append_hf("P-hint: Urceno pro branu, smerovano ze SERu\r\n"); route(2); break; }; }; Aby funkce is_user_in fungovala, je pot°eba p°idat do SERu modul group a nakongurovat jeho p° ístup do databáze. Na za£átek souboru ser.cfg p°idáme: loadmodule "/usr/lib/ser/modules/group.so" modparam("group", "db_url", "mysql://serro:
[email protected]/ser") Nyní má p°ístup k £ísl·m brány pouze uºivatel, který je registrovaný v SERu a má oprávn¥ní int. P°id¥lovat oprávn¥ní uºivatel·m m·ºeme bu¤ pomocí administrátorského rozhraní SerWeb (viz. 5.5) nebo pomocí utility serctl (viz. 10.4).
14 Testování Vnit°ní klient je klient, který je registrován na na²em SERu nebo na Asterisku. Vn¥j²í klient je klient, který nemá na na²em serveru ú£et.
14.1 Hovor na serveru SER Testovali jsme úsp¥²n¥ SIP hovory ve vnit°ní síti. Pouºili jsme n¥kolik r·zných SIP klient·:
• Microsoft NetMeeting • Firebird
(Windows)
• KPhone
(Linux)
• Twinkle
(Linux)
(Windows)
S klientem Microsoft NetMeeting jsme úsp¥²n¥ navázali videokonferenci. Dále jsme úsp¥²n¥ testovali hovory z vn¥j²í sít¥ (cizí SIP ú£et) do vnit°ní sít¥ a z vnit°ní sít¥ do vn¥j²í.
14.2 Hovor na serveru Asterisk Úsp¥²n¥ jsme testovali hovory mezi jednotlivými IAX2 klienty:
• Firebird • Kiax
(Windows)
(Linux)
• Idesk
(Linux)
Dále jsme testovali komunikaci mezi SIP klienty vnit°ní sít¥ (viz. 14.1) a mezi vnit°ními sip klienty SIP a vnit°ními IAX2 klienty.
30
KAPITOLA 15.
ZÁV
R
14.3 Hovor mezi SERem a Asteriskem Bez problém· jsme testovali komunikaci mezi vnit°ními klienty SERu a vnit°ními klienty Asterisku v obou sm¥rech. Dále hovory od vn¥j²ích SIP klient· na vnit°ní IAX2 klienty. Vnit°ní IAX2 klienti nemohou volat na vn¥j²í SIP klienty (to vychází z koncepce °e²ení viz. 6.4).
14.4 Hovory mezi SERem, Asteriskem a externí bránou Vnit°ní klienti SERu i Asterisku mohou volat do externí brány a mohou hovory z externí brány p°ijímat.Vn¥j²í uºivatelé k externí brán¥ nemají p°ístup.
15 Záv¥r Povedlo se nám zprovoznit malou VoIP úst°ednu, která zaji²´uje komunikaci v komunit¥ jejích uºivatel· a komunikaci sm¥rem do ve°ejné telefonní sít¥ a do okolních SIP sítí a zp¥t. Komunikace probíhá p°edev²ím pomocí protokolu SIP, ale ne nutn¥. Uºivatel·m, kte°í se nacházejí za p°eklada£i adres nebo podobnými za°ízeními, která si p°íli² nerozumí s protokolem SIP, jsme umoºnili sp°aºením dvou server· dohromady, vyuºít pro p°ipojení do vnit°ní sít¥ i protokolu IAX2. IAX2 zvládá procházet i místy kde SIP bohuºel selhává. Externí brána do ve°ejné telefonní sít¥ umoº¬uje volat za pomocí p°edvolby mimo vnit°ní sí´ a stejn¥ tak umoº¬uje, s pouºitím klapky, volat do vnit°ní sít¥ - vyhledá klienta a´ uº je na SIP klientovi nebo na IAXu. Uºivatel má moºnost komunikovat i s vn¥j²ími uºivateli vyuºívajícími SIP protokol. V p°ípad¥ IAX klienta v²ak m·ºe hovory z cizích SIP sítí pouze p°ijímat. Pro uloºení uºivatelských kont, jsme vyuºili databázi MySQL. Zatím ukládáme uºivatele SIP a uºivatele IAX zvlá²´. Obecný SIP uºivatel má k dispozici rozhraní SerWeb pro manipulaci se svým ú£tem, stejn¥ tak administrátor pro administraci. Ale v budoucnu by bylo vhodné sjednotit SIP i IAX uºivatele a vyrobit jedno spole£né rozhraní. Stejn¥ tak by bylo dobré zavést systém ú£tování odchozích hovor· jednotlivým uºivatel·m, co vyuºívají bránu do telefonní sít¥.
KAPITOLA 15.
ZÁV
R
Obrázek 15.1: Moºnosti na²í pobo£kové úst°edny
31
32
KAPITOLA 15.
ZÁV
R
KAPITOLA 16.
LITERATURA
16 Literatura [1] Carla Schroder. Linux Cookbook. O'Reilly, 2004. [2] Debian GNU/Linux - instala£ní p°íru£ka. http://www.debian.org/releases/stable/i386/index.html.cs. [3] SIP Express Router v0.11.0 - Admin's Guide. http://www.iptel.org/ser/doc/seruser/seruser.html. [4] Manuálové stránky Debian linuxu [5] Jan Janák. SIP Introduction. http://www.iptel.org/ser/doc/sip_intro/sip_introduction.pdf [6] IETF popis STUN. http://www.ietf.org/rfc/rfc3489.txt [7] VoIP wikipedia. http://www.voip-info.org [8] MySQL manuál. http://mm.gene.cz [9] IETF popis telefonních signál·. http://www.ietf.org/rfc/rfc2833.txt [10] IETF popis protokolu SIP. http://www.ietf.org/rfc/rfc3261.txt
33
34
KAPITOLA 16.
LITERATURA
DODATEK A.
SEZNAM POUITÝCH ZKRATEK
A Seznam pouºitých zkratek APT
Advaced Package Tool
DTMF
Dual-Tone Multi-Frequency
GNU
GNU's Not Unix
GPL
General Public License
GRUB
GRand Unied Bootloader
GSM
Global System for Mobile Communications
HTTP
Hypertext Transfer Protocol
IAX
Inter Asterisk Exchange
IETF
Internet Engineering Task Force
IP
Internet Protocol
LDAP
Lightweight Directory Access Protocol
MD5
Message-Digest algorithm 5
NAT
Network Address Translation
ODBC
Open Database Connectivity
PBX
Private branch exchange
RAM
Random Access Memory
RTP
Real-time Transport Protocol
SER
Sip Express Router
SIP
Session initiation protocol
STUN
Simple Traversal of UDP through NATs
UDP
User Datagram Protocol
35
36
DODATEK A.
SEZNAM POUITÝCH ZKRATEK
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
B Ukázky kongura£ních soubor· B.1 Sip Express Router B.1.1 ser.cfg fork=yes log_stderror=no check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) fifo="/tmp/ser_fifo" listen=147.32.112.52:5060 fifo_db_url="mysql://ser:
[email protected]/ser" user=ser group=ser fifo_user=ser fifo_group=ser fifo_mode=0660 # ------------------ module loading ---------------------------------loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/textops.so" loadmodule "/usr/lib/ser/modules/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so" loadmodule loadmodule loadmodule loadmodule
"/usr/lib/ser/modules/mysql.so" "/usr/lib/ser/modules/uri_db.so" "/usr/lib/ser/modules/acc.so" "/usr/lib/ser/modules/group.so"
# ----------------- setting module-specific parameters --------------modparam("usrloc", "db_mode", 2) modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") modparam("rr", "enable_full_lr", 1) modparam("auth_db", "db_url", "mysql://serro:
[email protected]/ser") modparam("usrloc", "db_url", "mysql://ser:
[email protected]/ser") modparam("uri_db", "db_url", "mysql://serro:
[email protected]/ser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("group", "db_url", "mysql://serro:
[email protected]/ser")
37
38
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
# ------------------------- request routing logic ------------------route{ if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Prilis mnoho skoku"); break; }; if (msg:len >= 2048 ) { sl_send_reply("513", "Zprava prilis velka"); break; }; if (!method=="REGISTER") record_route(); if (loose_route()) { append_hf("P-hint: rr-enforced\r\n"); route(1); break; }; setflag(1); if (!uri==myself) { append_hf("P-hint: outbound\r\n"); route(1); break; }; if (uri==myself) { if (method=="REGISTER") { if (!www_authorize("okz.sh.cvut.cz", "subscriber") || !check_to()) { www_challenge("okz.sh.cvut.cz", "0"); break; }; save("location"); break; }; #na Asterisk if (method=="INVITE") { if (uri=~"sip:#[0-9]*@.*") { if (!www_authorize("okz.sh.cvut.cz", "subscriber") ) { www_challenge("okz.sh.cvut.cz", "0"); break; }; if (!is_user_in("Credentials","int")) { sl_send_reply("403", "Forbidden"); break; }; log(1,"Prepojuju na Mujtelefon.cz\n"); append_hf("P-hint: Urceno pro branu, smerovano ze SERu\r\n"); route(2); break; }; }; lookup("aliases");
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
if (!uri==myself) { append_hf("P-hint: outbound alias\r\n"); route(1); break; }; if (!lookup("location")) { if(src_ip==147.32.112.52 and src_port==5061) { sl_send_reply("404", "Not Found"); break; }; log(1,"Nemam v location, forwarduju na Asterisk\n"); append_hf("P-hint: Nemam v location, smerovano ze SERu\r\n"); route(2); break; }; }; append_hf("P-hint: usrloc applied\r\n"); route(1); } route[1] { if (!t_relay()) { sl_reply_error(); } } route[2] { #smeruju na Asterisk rewriteport("5061"); if (!t_relay()) { sl_reply_error(); } }
39
40
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
B.2 PBX Asterisk B.2.1 sip.conf [general] context=sip realm=okz.sh.cvut.cz bindport=5061 bindaddr=0.0.0.0 srvlookup=yes register => 272047893:
[email protected] [ser] context=ser type=friend insecure=very host=okz.sh.cvut.cz port=5060 dtmfmode=rfc2833 disallow=all allow=all [mujtelefon] context=fromGateway type=friend host=sip.mujtelefon.cz fromdomain=sip.mujtelefon.cz fromuser=272047893 username=272047893 secret=cprfbvld dtmfmode=rfc2833 disallow=all allow=all insecure=invite
B.2.2 iax.conf [general] port=4569 bindaddr=0.0.0.0 allow=all [oldondrej] host=dynamic type=friend context=iax secret=moje [oldtest] host=dynamic
41
42
DODATEK B.
type=friend context=iax username=oldtest secret=oldtest [mujtelefon] type=peer username=272047893 secret=cprebvla host=iax.mujtelefon.cz fromuser=272047893 fromdomain=mujtelefon.cz
B.2.3 extensions.conf [general] static=yes writeprotect=no autofallthrough=yes clearglobalvars=no priorityjumping=no [globals] ULOZ=smaz HESLO=2248 MONADDR=/var/spool/asterisk/monitor MONITOR1=smazZaznam MONITOR2=smazZaznam2 [services] include => nahravani include => echotest [ser] include => services include => toGateway include => toIAX [iax] include => services include => toGateway include => toIAXtoSER [fromGateway] include => services include => toIAXtoSER exten exten exten exten
=> => => =>
s,1,Answer() s,2,Background(uvitani) s,3,WaitExten(10) s,4,Hangup()
UKÁZKY KONFIGURANÍCH SOUBOR
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
exten => i,1,Playback(litujeme) exten => i,2,GoTo(fromGateway,s,2) [nahravani] exten => *1,1,Answer() exten => *1,2,Authenticate(${HESLO}) exten => *1,3,Record(${ULOZ}.gsm) exten => *1,4,Playback(${ULOZ}) exten => *1,5,Hangup() exten => *2,1,Answer() exten => *2,2,Authenticate(${HESLO}) exten => *2,3,GoTo(PlayEcho,s,1) [PlayEcho] exten => s,1,Background(kteryEcho) exten => s,2,GoTo(PlayEcho,s,1) exten => 1,1,Playback(${MONADDR}/${MONITOR1}) exten => 1,2,GoTo(PlayEcho,s,1) exten => 2,1,Playback(${MONADDR}/${MONITOR2}) exten => 2,2,GoTo(PlayEcho,s,1) exten => 3,1,SendText(Smazal jsem soubory se zaznamem!) exten => 3,n,System(/bin/rm /var/spool/asterisk/monitor/*) exten => 3,n,GoTo(PlayEcho,s,1) [echotest] exten => *,1,Answer() exten => *,2,MixMonitor(${MONITOR1}.gsm,a) exten => *,3,Playback(echoTest) exten => *,4,Record(smazEcho:gsm,3,20) exten => *,5,Playback(smazEcho) exten => *,6,Hangup() exten exten exten exten
=> => => =>
**,1,Answer() **,2,MixMonitor(${MONITOR2}.gsm,a) **,3,Echo() **,4,Hangup()
exten => 1,1,Answer() exten => 1,2,MP3Player(http://anna.relay.frequence3.net:8010/) exten => 1,3,Hangup() exten => hudba,1,Answer() exten => hudba,2,MP3Player(http://anna.relay.frequence3.net:8010/) exten => hudba,3,Hangup() exten => 2248,1,Dial(IAX2/ondrej)
43
44
DODATEK B.
UKÁZKY KONFIGURANÍCH SOUBOR
exten => 2223,1,Dial(IAX2/test) [toGateway] exten => _#X.,1,Dial(SIP/mujtelefon/${EXTEN:1},30,r) exten => _#X.,2,Congestion(5) [toIAX] exten => _..,1,Dial(IAX2/${EXTEN},30) [toIAXtoSER] exten => _..,1,Dial(IAX2/${EXTEN}&SIP/ser/${EXTEN},30)
B.2.4 res_odbc.conf [ENV] INFORMIXSERVER => my_special_database INFORMIXDIR => /opt/informix [asterisk] enabled => no dsn => asterisk ;username => myuser ;password => mypass pre-connect => yes [mysql2] enabled => no dsn => MySQL-asterisk username => myuser password => mypass pre-connect => yes [mysql-odbc] enabled => yes dsn => MySQL-asterisk username => ast password => heslo pre-connect => yes
B.2.5 extcong.conf [settings] iaxusers => odbc,mysql-odbc,friends iaxpeers => odbc,mysql-odbc,friends
DODATEK C.
OBSAH PILOENÉHO CD
C Obsah p°iloºeného CD /bakalarka.tex Zdrojový text bakalá°ské práce v LATEXu. /bakalarka.pdf Výsledný text ve formátu PDF. /asterisk/ Adresá° obsahující výsledné kongura£ní soubory systému Asterisk. /ser/
Adresá° obsahující výsledné kongura£ní soubory Sip Express Routeru.
45