Uspostava VoIP centrale bazirane na otvorenom koduv2.0v2.0
Branko Radojević ([email protected]) 29.3.2007. godine
2/53
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
3/53
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 skup i 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
4/53
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
5/53
Asterisk
X
6/53
Verzije Asteriska
Asterisk (Open Source verzija)
Asterisk Business Edition
Asterisk NOW!
Linux live CD distribucija s grafičkim sučeljem
7/53
Š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-avrlo je skalabilan, tako da može biti i mali hobi telefonski sustav, ali i veliki korporativni sustavinicijalno ga je napisao Mark Spencer, sada predsjednik tvrtke Digium Inc.
8/53
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
9/53
Komponente Asterisk sustava
JGM
voopIX
10/53
Dimenzioniranje Asterisk poslužitelja
Namjena sustava Broj kanala Preporučeni minimum
Hobi < 5CPU: 400 MHz x86
RAM: 256 MB
SOHO 5 do 10CPU: 1 GHz x86
RAM: 512 MB
Mali sustav < 15 CPU: 3 GHz x86
RAM: 1 GB
Srednji i veliki sustavi > 15Više procesora ili više poslužitelja
11/53
Š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
12/53
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 koristitiuser : root
pass : asterisk
13/53
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
14/53
Pokretanje Asteriska
Pokretanje asterisk
Ulazak u Asterisk CLIasterisk –r
Izlazak iz Asteriskaasterisk*CLI> quit
Restart Asteriska (iz CLI-a)asterisk*CLI> restart now
asterisk*CLI> restart when convenient
Postavljanje nivoa logiranja podatakaasterisk*CLI> core set verbose n
15/53
IP adresna shema
710.7.0.2
610.6.0.2
510.5.0.2
410.4.0.2
310.3.0.2
210.2.0.2
110.1.0.2
9010.90.0.2
16/53
IP adresna shema (2)
Generalno pravilo Za mrežu 90
IP mreža 10.x.0.0 10.90.0.0
Netmask 255.255.255.0 255.255.255.0
IP gateway
DHCP/NTP server10.x.0.1 10.90.0.1
SIP proxy
TFTP server10.x.0.2 10.90.0.2
IP telefoni (DHCP) 10.x.0.10 - 254 10.90.0.10 - 254
17/53
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 …
18/53
Asterisk IP telefoni (softphone)
Većina SIP / MGCP / IAX2 / SCCP / H.323 telefona
X-lite (SIP) IDEFISK (IAX2)
19/53
Cisco 7940 (7960) IP phone (SIP software)
20/53
Cisco 7940 (7960) konektori
2x ethernet port (Switch s napajanjem + PC)
vanjsko napajanje
AUX
2x slušalice (standardna + naglavna)
21/53
Cisco 7940 karakteristike
Podržani kodeci:
g729
g711 ulaw
g711 alaw
Podržani protokoli:
SCCP (standadno)
SIP
MGCP
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
22/53
Kodeci (voice coders-decoders)
Codec Bit Rate (Kbps) Bandwidth (Kbps)
G.711 (alaw/ulaw) 64 87.2
G.726 32 55.2
G.726 24 47.2
G.728 16 31.5
iLBC 13.3 N/A
GSM 13.2 N/A
G.729 8 31.2
G.723.1 6.4 21.9
G.723.1 5.3 20.8
LO
W
HIG
H
CO
MP
EX
ITY
23/53
Kodeci u Asteriskucore show codecsasterisk*CLI> core show codecsDisclaimer: 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)
24/53
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)
25/53
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 pozivaRFC 2543, novija verzija RFC 3261Trenutno postoje 45 prijedloga proširenja standarda
26/53
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.
27/53
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
28/53
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)
29/53
SIP uspostava poziva (bez poslužitelja)
Alice Bob
Alice poziva Boba
INVITE
180 Ringing
180 Ringing
200 OK
ACK
RTP
RTP
Sig
na
liza
cij
sk
i d
ioP
rije
no
s
UDP
TCP
SCTP
TLS over TCP
UDP
30/53
SIP uspostava poziva (s poslužiteljem)
Alice Bob
Pretpostavlja se da Alice ne zna Bobovu IP adresu
INVITE
100 Trying
200 OK
ACK
RTP
RTP
Sig
na
liza
cij
sk
i d
ioP
rije
no
s
UDP
TCP
SCTP
TLS over TCP
UDP
INVITE
180 Ringing
180 Ringing
200 OK
31/53
SIP INVITE poruka INVITE sip:[email protected]:5060 SIP/2.0Via: SIP/2.0/UDP 192.168.2.10:5060;branch=z9hG4bK125b24b6From: "Radojevic Branko" <sip:[email protected]>;tag=16984467To: <sip:[email protected]>Date: Wed, 28 Feb 2007 15:37:11 GMTCall-ID: [email protected]: timerMin-SE: 1800User-Agent: Cisco-CCM4.1Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACKCSeq: 101 INVITEMax-Forwards: 70Remote-Party-ID: "Radojevic Branko" <sip:[email protected]>;party=calling;screen=no;privacy=offContact: <sip:[email protected]:5060>Expires: 180Allow-Events: telephone-eventContent-Type: application/sdpContent-Length: 227
v=0o=CiscoSystemsCCM-SIP 2000 1000 IN IP4 192.168.2.10s=SIP Callc=IN IP4 192.168.2.10t=0 0m=audio 26124 RTP/AVP 0 101a=sendrecva=rtpmap:0 PCMU/8000a=ptime:20a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15
32/53
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
33/53
Cisco 7940 konfiguracija (SIP)
ručna
automatskaDHCP (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
34/53
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.
35/53
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.
36/53
Asterisk SIP konfiguracija
/etc/asterisk/sip.conf
[101]type=friend host=dynamiccallerid=Branko Radojevic <101>context=defaultcanreinvite=no progressinband=nodtmfmode=inband nat=no
asterisk*CLI> sip reload
37/53
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]
38/53
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)
39/53
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)
40/53
Ekstenzije i konteksti (2)
definicija ekstenzija 500 i 600 iz prošlog primjera
exten => 500,1,Playback(demo-abouttotry)
exten => 500,n,Dial(IAX2/[email protected]/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)
41/53
Ekstenzije i konteksti (3)
tipovi ekstenzijaeksplicitne (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)
42/53
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
43/53
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
44/53
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
45/53
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
46/53
Ekstenzija za “vanjske” odlazne pozive
[default]exten => _XXXXXX,1,Dial(IAX2/centrala90/${EXTEN}@default,30,rtT)exten => _XXXXXX,n,Hangup
Sve šesteroznamenkaste brojeve treba uputiti prema glavnoj centrali (Centrala 90) putem već definiranog IAX2 trunka
asterisk*CLI> dialplan reload
47/53
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
48/53
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
49/53
voopIX (2)
ZG
OSRI
DU
ST
etfos
unidu
etfos:
Telefonska numeracija 031/224-600 do 799
u voopIX-u se objavljuje: 38531224[6,7]XX
izbirani broj: 0021365584 pretvara se u: 38521365584
Takav 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: 38531224605
Takav 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.
50/53
Spoj članice na voopIX bez Asteriska
voopIX
PBX
Klasične, analognetel. linije
Klasična, analogna tel. linijaili ISDN BRI, PRI
EthernetSIP, H323, MGCP
51/53
Spoj članice na voopIX s Asteriskom
voopIX
PBX
Klasične, analognetel. linije
Klasična, analogna tel. linijaili ISDN BRI, PRI
EthernetDUNDi+IAX2
Asterisk
52/53
Zanimljive adrese
www.asterisk.org
www.digium.com
www.dundi.com
www.voip-info.org
www.asteriskguru.com (IDEFISK)
www.counterpath.com (x-lite)
53/53
Pitanja?