530 likes | 739 Views
Uspostava VoIP centrale bazirane na otvorenom kodu. v2.0. 29.3.2007. godine. Branko Radojević (branko@carnet.hr). Sadržaj. Zašto tel. centrala bazirana na otvorenom kodu? Principi rada VoIP centrale (Asterisk) VoIP kodeci, SIP i IAX2 protokol Karakteristike IP telefona
E N D
Uspostava VoIP centrale bazirane na otvorenom kodu v2.0 29.3.2007. godine Branko Radojević (branko@carnet.hr)
Sadržaj • Zašto tel. centrala bazirana na otvorenom kodu? • Principi rada VoIP centrale (Asterisk) • VoIP kodeci, SIP i IAX2 protokol • Karakteristike IP telefona • Instalacija i konfiguracija Asteriska • Povezivanje (interkonekcija) centrala • Spoj na JGM (Javnu govornu mrežu) • Projekt voopIX – besplatni razgovori u akademskoj zajednici
Tradicionalne telefonske centrale • zatvoreni i (s računalne strane gledano) zastarjeli sustavi (često bazirani na prastarim verzijama Windows ili Unix operativnih sustava) • hardware je redovito vlastito (proprietary) rješenje pojedinih proizvođača, neopravdano je skupi nije kompatibilan s drugim proizvođačima • nadogradnje sustava su komplicirane i skupe, ponekad sitne nadogradnje lančano povlače za sobom ozbiljnu nadogradnju • cilj ovakvog pristupa je da ugovorima za održavanje “vežu” kupca na dulje rokove
Open source VoIP tel. centrale • otvoreni i vrlo jednostavno nadogradivi sustavi koji rade na standardnim operativnim sustavima • osnova centrale je standardni PC hardware s kojim se može postići osnovna funkcionalnost centrale • velika baza korisnika iz cijelog svijeta koji svakodnevno rade na proširenju sustava i usklađivanju s najnovijim informatičkim i Internet trendovima • koriste se standardni protokoli koji su jednostavno uskladivi s ostalim sustavima
Asterisk X
Verzije Asteriska • Asterisk (Open Source verzija) • Asterisk Business Edition • Asterisk NOW! Linux live CD distribucija s grafičkim sučeljem
Što je Asterisk? • Open Source software koji radi pod Unix i Windows operativnim sustavima, na standardnoj PC platformi i donosi potpunu funkcionalnost telefonske centrale (i mnogo više) • podržava većinu signalizacijskih protokola danas u upotrebi (SIP, H.323, IAX2, MGCP, SCCP…) • može raditi i bez dodatnog (specijaliziranog) hardware-a, ako se radi o zatvorenom sustavu ili se konekcija na JGM može ostvariti putem VoIP-a • vrlo je skalabilan, tako da može biti i mali hobi telefonski sustav, ali i veliki korporativni sustav • inicijalno ga je napisao Mark Spencer, sada predsjednik tvrtke Digium Inc.
Asterisk ugrađene mogućnosti Call Features ADSI On-Screen Menu System Alarm Receiver Append Message Authentication Automated Attendant Blacklists Blind Transfer Call Detail Records Call Forward on Busy Call Forward on No Answer Call Forward Variable Call Monitoring Call Parking Call Queuing Call Recording Call Retrieval Call Routing (DID & ANI) Call Snooping Call Transfer Call Waiting Caller ID Caller ID Blocking Caller ID on Call Waiting Calling Cards Conference Bridging Database Store / Retrieve Database Integration Dial by Name Direct Inward System Access Distinctive Ring Distributed Universal Number Discovery (DUNDi™) Do Not Disturb E911 ENUM Fax Transmit and Receive (3rd Party OSS Package) Flexible Extension Logic Interactive Directory Listing Interactive Voice Response (IVR) Local and Remote Call Agents Macros Music On Hold Music On Transfer - Flexible Mp3-based System - Random or Linear Play - Volume Control Predictive Dialer Privacy Open Settlement Protocol (OSP) Overhead Paging Protocol Conversion Remote Call Pickup Remote Office Support Roaming Extensions Route by Caller ID SMS Messaging Spell / Say Streaming Media Access Supervised Transfer Talk Detection Text-to-Speech (via Festival) Three-way Calling Time and Date Transcoding Trunking VoIP Gateways Voicemail - Visual Indicator for Message Waiting - Stutter Dialtone for Message Waiting - Voicemail to email - Voicemail Groups - Web Voicemail Interface Zapateller
voopIX Komponente Asterisk sustava JGM
Što utječe na performanse poslužitelja? • broj paralelnih konekcija • količina VoIP prometa koja zahtjeva intenzivan rad DSP, npr. upotreba kodeka visoke kompresije • konferencijske veze više korisnika • echo cancellation • pozivanje vanjskih programa unutar skripti • drugi procesi koji se izvršavaju na istom poslužitelju, npr. baze podataka • optimizirani kernel sustava • problem IRQ-a kod korištenja internih PC kartica
Instalacija Asteriska (1) • instalacijska platforma je debian linux 3.1r2 • linux kernel verzija: 2.4.27-2 (radi i na 2.6) • nakon instalacije je trebalo instalirati slijedeće dodatne pakete: • tftpd 0.17-12 • libncurses5-dev 5.4-4 • joe 3.1-0.2 (nije obvezno) • za logiranje na sustav koristiti • user : root • pass : asterisk
Instalacija Asteriska (2) • instalacijska datoteka se nalazi u /home/asterisk cd /home/asterisk tar xvzf asterisk-1.4.2.tar.gz cd asterisk-1.4.2 ./configure make make install make samples • Asterisk se instalira u direktorij /usr/sbin • konfiguracijske datoteke se nalaze u /etc/asterisk
Pokretanje Asteriska • Pokretanje asterisk • Ulazak u Asterisk CLI asterisk –r • Izlazak iz Asteriska asterisk*CLI>quit • Restart Asteriska (iz CLI-a) asterisk*CLI> restart now asterisk*CLI> restart when convenient • Postavljanje nivoa logiranja podataka asterisk*CLI>core set verbose n
Asterisk IP telefoni (hardware) • Većina SIP / MGCP / IAX2 / SCCP / H.323 telefona Aastra, Sayson, Atcom, Blackberry, Polycom, Cisco, GNET, Grandstream, Linksys, Mitel, Nortel, Siemens, ShoreTel (Giant Electronics Ltd.), Swissvoice, Snom, Soyo, Sipura, Siptronic, Thomson, Uniden, Pulverinnovations, Zultys, Zyxel …
Asterisk IP telefoni (softphone) • Većina SIP / MGCP / IAX2 / SCCP / H.323 telefona X-lite (SIP) IDEFISK (IAX2)
Cisco 7940 (7960) konektori • 2x ethernet port (Switch s napajanjem + PC) • vanjsko napajanje • AUX • 2x slušalice (standardna + naglavna)
Cisco 7940 karakteristike Podržani kodeci: • g729 • g711 ulaw • g711 alaw Ostalo: • 2 telefonske linije (6 kod 7960) • napajanje sa PoE switcha • Ugrađeni 3-portni switch • VLAN podrška • podrška za Cisco Auto QOS • NTP (sinkronizacija vremena) • ugrađen speakerphone • voicemail svjetlosni identifikator Podržani protokoli: • SCCP (standadno) • SIP • MGCP
Kodeci (voicecoders-decoders) LOW COMPEXITY HIGH
Kodeci u Asterisku • core show codecs asterisk*CLI> core show codecs Disclaimer: this command is for informational purposes only. It does not indicate anything about your configuration. INT BINARY HEX TYPE NAME DESC -------------------------------------------------------------------------------- 1 (1 << 0) (0x1) audio g723 (G.723.1) 2 (1 << 1) (0x2) audio gsm (GSM) 4 (1 << 2) (0x4) audio ulaw (G.711 u-law) 8 (1 << 3) (0x8) audio alaw (G.711 A-law) 16 (1 << 4) (0x10) audio g726aal2 (G.726 AAL2) 32 (1 << 5) (0x20) audio adpcm (ADPCM) 64 (1 << 6) (0x40) audio slin (16 bit Signed Linear PCM) 128 (1 << 7) (0x80) audio lpc10 (LPC10) 256 (1 << 8) (0x100) audio g729 (G.729A) 512 (1 << 9) (0x200) audio speex (SpeeX) 1024 (1 << 10) (0x400) audio ilbc (iLBC) 2048 (1 << 11) (0x800) audio g726 (G.726 RFC3551) 4096 (1 << 12) (0x1000) audio g722 (G722)
Kodeci u Asterisku (2) • (...) 65536 (1 << 16) (0x10000) image jpeg (JPEG image) 131072 (1 << 17) (0x20000) image png (PNG image) 262144 (1 << 18) (0x40000) video h261 (H.261 Video) 524288 (1 << 19) (0x80000) video h263 (H.263 Video) 1048576 (1 << 20) (0x100000) video h263p (H.263+ Video) 2097152 (1 << 21) (0x200000) video h264 (H.264 Video)
SIP (Session Initiation Protocol) • SIP je kontrolni (signalizacijski) protokol aplikacijske razine koji se koristi za: • Uspostava (creating) • Promjena (modifying) • Prekid (terminating) multimedijskih sesija s jednim iil više sudionika. • Originalno napisan za potrebe Internet2 projekta krajem ’90 godina za uspostavu konferencija, naknadno je ustanovljeno da je vrlo primjenljiv i za uspostavu point-to-point poziva • RFC 2543, novija verzija RFC 3261 • Trenutno postoje 45 prijedloga proširenja standarda
SIP (2) • SIP uređaji mogu komunicirati putem: • unicast • multicast • unicast mesh relacije • kombinacijom prije navedenih mogućnosti putem IPv4 i/ili IPv6 okruženja putem: • UDP • TCP • SCTP ili • TLS over TCP i to per-hop SIP uređaju.
SIP metode (poruke) • INVITE – korisnik je pozvan u sesiju • ACK – potvrda prethodne poruke • BYE – kraj sesije • CANCEL – odustajanje od prethodne poruke • OPTIONS – provjera mogućnosti poslužitelja • REGISTER – registracija na SIP proxy poslužitelj • Dodatne: INFO, PRACK, SUBSCRIBE, NOTIFY, UPDATE MESSAGE, REFERER, PUBLISH
SIP odgovori (responses) • 1xx – Informacijski (100 Trying, 180 Ringing, …) • 2xx – Potvrda (200 OK, 202 Acceptable, …) • 3xx – Redirekcija (301 Move Permanently, …) • 4xx – Klijentska greška (401 Unauthorized,…) • 5xx – Poslužiteljska greška (502 Bad gateway,…) • 6xx – Generalna greška (600 Busy Everywhere,…) Sve SIP poruke i odgovori su u tekstualnom obliku. Oblik i sadržaj poruka su posuđene iz HTTP protokola (koji je “posudio” oblik poruka od SMTP poslužitelja)
SIP uspostava poziva (bez poslužitelja) Alice poziva Boba Bob Alice INVITE 180 Ringing UDP TCP SCTP TLS over TCP 180 Ringing Signalizacijski dio 200 OK ACK RTP Prijenos UDP RTP
SIP uspostava poziva (s poslužiteljem) Pretpostavlja se da Alice ne zna Bobovu IP adresu Bob Alice INVITE INVITE UDP TCP SCTP TLS over TCP 100 Trying 180 Ringing Signalizacijski dio 180 Ringing 200 OK 200 OK ACK RTP Prijenos UDP RTP
SIP INVITE poruka INVITE sip:38520445801@192.168.2.73:5060 SIP/2.0 Via: SIP/2.0/UDP 192.168.2.10:5060;branch=z9hG4bK125b24b6 From: "Radojevic Branko" <sip:686@192.168.2.10>;tag=16984467 To: <sip:38520445801@192.168.2.73> Date: Wed, 28 Feb 2007 15:37:11 GMT Call-ID: 8cf9f300-1dc1e544-ee1f-a02a8c0@192.168.2.10 Supported: timer Min-SE: 1800 User-Agent: Cisco-CCM4.1 Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK CSeq: 101 INVITE Max-Forwards: 70 Remote-Party-ID: "Radojevic Branko" <sip:686@192.168.2.10>;party=calling;screen=no;privacy=off Contact: <sip:686@192.168.2.10:5060> Expires: 180 Allow-Events: telephone-event Content-Type: application/sdp Content-Length: 227 v=0 o=CiscoSystemsCCM-SIP 2000 1000 IN IP4 192.168.2.10 s=SIP Call c=IN IP4 192.168.2.10 t=0 0 m=audio 26124 RTP/AVP 0 101 a=sendrecv a=rtpmap:0 PCMU/8000 a=ptime:20 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15
IAX2 (Inter-Asterisk Exchange) • IAX2 je kontrolni (signalizacijski) i media protokol pisan primarno za razmjenu prometa među Asterisk centralama, a u zadnje vrijeme i na IP telefonima • Za signalizacijski i media dio koristi UDP protokol i samo jedan port (4569) • Kako koristi samo jedan statički port, nema problema s NATom koji se pojavljuju kod SIP i H323 protokola • Podržava trunkiranje (povezivanje) više poziva u jedan protok (stream) podataka • Napisan od strane Marka Spencera, autora Asteriska • Očekuje se uskoro RFC, postoji draft
Cisco 7940 konfiguracija (SIP) • ručna • automatska • DHCP (IP adresa, gw-ip, tftp-ip) • dhcp option 66 (tftp server – stariji software) • dhcp option 150 (tftp server – noviji software) • Konfiguracijske datoteke na TFTP poslužitelju( /home/phones direktorij) • OS79XX.TXT • P0S3-07-3-00.bin • SIPDefault.cnf • SIP0012803AF172.cnf
Cisco 7940 konfiguracija (2) • SIPDefault.cnf • proxy1_address: 10.x.0.2; • sntp_server: 10.x.0.1; Ova datoteka vrijedi za sve Cisco 7940 ili 7960 telefone na centrali sa SIP verzijom firmwarea.
Cisco 7940 konfiguracija (3) • SIP0012803AF172.cnf • line1_name : 101 • line1_shortname : 101 0012803AF172 je MAC adresa telefona. Zapisana je na naljepnici s donje strane uređaja a do nje se može doći i kroz menije na telefonu (tipka MENU + 3 + 3). Navedenu datoteku trebate kreirati za svaki telefon posebno.
Asterisk SIP konfiguracija • /etc/asterisk/sip.conf [101] type=friend host=dynamic callerid=Branko Radojevic <101> context=default canreinvite=no progressinband=no dtmfmode=inband nat=no • asterisk*CLI> sip reload
Provjera SIP konfiguracije • sip show peers asterisk*CLI> sip show peers Name/username Host Dyn Nat ACL Port Status 101/101 10.90.0.10 D 5060 Unmonitored 1 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 0 offline]
Prvi poziv ! • ugrađene demo mogućnosti u Asterisku • ekstenzija 500 – demo(nije moguće u potpunosti ostvariti poziv jer u predavaonici nema direktne veze na Internet) • ekstenzija 600 – echo test(u potpunosti je funkcionalna)
Ekstenzije i konteksti (1) • definiraju se u datoteci extensions.conf • konteksti nam omogućuju definiranja pravila za kontrolu poziva koji prolaze kroz Asterisk • ekstenzije se definiraju unutar pojedinih konteksta • konteksti mogu sadržavati (uključivati) i druge kontekste • jedna od primjena konteksta je dodjeljivanje prava pojedinim korisnicima za ostvarivanje poziva kroz Asterisk (npr. ograničavanje odlaznih poziva po pojedinim korisnicima na lokalne, županijske, mobilne i međunarodne)
Ekstenzije i konteksti (2) • definicija ekstenzija 500 i 600 iz prošlog primjera exten => 500,1,Playback(demo-abouttotry) exten => 500,n,Dial(IAX2/guest@misery.digium.com/s@default) exten => 500,n,Playback(demo-nogo) exten => 500,n,Goto(s,6) ; exten => 600,1,Playback(demo-echotest) exten => 600,n,Echo exten => 600,n,Playback(demo-echodone) exten => 600,n,Goto(s,6)
Ekstenzije i konteksti (3) • tipovi ekstenzija • eksplicitne (za pojedine telefonske brojeve, npr. za brojeve 500 i 600 u prethodnom primjeru) • exten => 500,1,Cmd (attr) • grupne (za veći broj telefonskih brojeva koji se mogu povezati u jednu grupu ili niz, a mogu se opisati zajedničkim obilježjem (pattern matching)) • exten => _5XX,1,Cmd (attr)(brojevi 500, 501, 502, 503 … 599) • exten => _5XX.,1,Cmd (attr) (brojevi koji počinju sa znamenkama 500, 501 … 599, npr. 500, 5000, 50000, 500000, itd.) X=(0-9), Z=(1-9), N=(2-9)
Lokalna ekstenzija za brojeve 100-199 • da bi se lokalni telefoni prijavljeni na našu centralu mogli između sebe pozivati potrebno je definirati ekstenziju unutar obuhvaćenog konteksta koja će omogućavati pozivanje lokalnih brojeva [default] exten => _1XX,1,Dial(SIP/${EXTEN},30,rtT) exten => _1XX,n,Hangup • asterisk*CLI> dialplan reload
Uspostava poziva među centralama • za interkonekciju (međuspoj) između centrala koristit ćemo IAX2 signalizaciju na način da ćemo definirati trunkove prema centralnoj lokaciji (Centrala 90) • da bi se isti telefonski brojevi razlikovali na različitim centralama proširit ćemo numeraciju s 3 na 6 znamenki (lokalno brojevi ostaju isti) Centrala br.1 100-XXX 100-101 Centrala br.2 200-XXX 200-101 Centrala br.3 300-XXX 300-101 … Centrala br. 90 900-XXX 900-101
Uspostava IAX2 trunka • IAX2 trunkovi definiraju se unutar datoteke iax.conf [centrala90] type=friend host=10.90.0.2 notransfer=yes ;secret=moofoo context=default ;permit=0.0.0.0/0.0.0.0 disallow=all allow=ulaw • asterisk*CLI> iax2 reload
Ekstenzija za “vanjske” dolazne pozive • pozivi koji budu dolazili s drugih centrala bit će upućeni prema šesteroznamenkastoj numeraciji, pa je potrebno maknuti prve tri znamenke i napraviti novu ekstenziju za takve brojeve [default] exten => _900XXX,1,Dial(SIP/${EXTEN:-3},30,rtT) exten => _900XXX,n,Hangup • VAŽNO!!! Broj 9 u prethodnom primjeru trebate zamijeniti sa svojim brojem centrale
Ekstenzija za “vanjske” odlazne pozive • Sve šesteroznamenkaste brojeve treba uputiti prema glavnoj centrali (Centrala 90) putem već definiranog IAX2 trunka • asterisk*CLI> dialplan reload [default] exten => _XXXXXX,1,Dial(IAX2/centrala90/${EXTEN}@default,30,rtT) exten => _XXXXXX,n,Hangup
Priključak na Javnu govornu mrežu • Većina SIP / MGCP / IAX2 / SCCP / H.323 uređaja • Interne kartice u poslužitelju 4xISDN BRI 4xISDN PRI 2xISDN PRI 4x GSM 6x ANALOG
voopIX – Besplatni telefonski razgovori između CARNet članica • Baziran na DUNDi protokolu istog autora kao i Asterisk koji omogućava distribuiranu peer-to-peer objavu (razmjenu) telefonskih brojeva • Podrška je ugrađena u Asterisk • Automatski se gradi cache pojedinih upita kako bi se optimizirao broj upita • Krajnji korisnik nije svjestan da li je poziv ostvaren putem voopIX-a ili putem JGM-a • U CARNet-u je izgrađen na pet distribuiranih poslužitelja (Zagreb, Split, Rijeka, Osijek i Dubrovnik) • Trenutno pet ustanova sudjeluje u ovoj fazi projekta
voopIX (2) etfos: Telefonska numeracija 031/224-600 do 799 u voopIX-u se objavljuje: 38531224[6,7]XX izbirani broj: 0021365584 pretvara se u: 38521365584Takav se upit šalje u voopIX, koji unutar par milisekundi odgovara da li je taj broj pronađen. U ovom slučaju broj nije pronađen i poziv se ostvaruje kroz javnu govornu mrežu unidu: Telefonska numeracija: 020/445-700 do 999 u voopIX-u se objavljuje: 38520445[7-9]XX izbirani broj: 031224605pretvara se u: 38531224605Takav se upit šalje u voopIX, koji unutar par milisekundi odgovara da je broj u ovom slučaju pronađen, te se dinamički kreira IAX2 kanal direktno prema etfos-u. etfos ZG OS RI ST DU unidu
Spoj članice na voopIX bez Asteriska voopIX EthernetSIP, H323, MGCP PBX Klasična, analogna tel. linijaili ISDN BRI, PRI Klasične, analogne tel. linije