Sei sulla pagina 1di 27

EsercitazionedilaboratoriosuAsterisk MarcoRomagnoli,DavideQuaglia 14gennaio2011 Indice 1Introduzione..................................2 2Installazione..................................2 3ConfigurazionediAsterisk.................... 5 3.1Gliutentiinasterisk......................... 5 3.2Ilfilesip.conf............................... 6 3.3Ilfileextensions.conf........................ 8 3.3.1Regole................................. 9 3.3.2Estensioniparticolari..................... 9 3.3.3Applicazioni........................ .... 10 3.4PatternMatching.........................

11 3.5UtilizzodeicontestiMacro...................12 3.6Voicemail................................. 13 3.7AsteriskeNAT............................ 14 4Esercitazione...............................18 4.1Creazionedegliutenti........................ 18 4.2Dialplan.................................. 18 4.3Configurazionesoftphone.....................19 4.4Dialplanavanzati............................ 23 4.5AsteriskeGoogletalk........................24

1.Introduzione AsteriskunPBX(PrivateBranchExchange)ciouncentralinoche permettedicreareunapropriaretetelefonicaprivataconnotevoleflessibilit. SupportaiprotocolliSIPeH.323 PuessereconfiguratoperlavorareconaltristrumentiSIPcomeSipExpress Router(SER)(http://www.iptel.org/ser/) 2. Installazione

L'esercitazionediLaboratorioconsisternell'installareAsterisksuuna distribuzioneLinuxUbuntuinstallatasumacchinavirtualeutilizzandoVMware.I passidasvolgeresonoquindiiseguenti,aprescinderedalS.O.dipartenzasiaesso Windows,MACoLinux: I.)InstallareVMwarePlayer(Downloaddalsito http://downloads.vmware.com/d/info/desktop_downloads/vmware_player/3_0) II.)CreareunamacchinavirtualeeinstallarcisopraLinuxUbuntu10.10a partiredalfileISOscaricabiledalsitohttp://www.ubuntu.com. NOTA:possibileusaredirettamenteunamacchinavirtualeconUbuntu10.10se statamessaadisposizionedaldocente. OrapassiamoadinstallareAsterisksuUbuntu10.10. I.)AccedereaSynapticPacketManageredigitare:asteriskcomekeyword nelcamposearchdiSynaptic.Alcompariredeivaripacchettiselezionareper l'installazione: 1) 2) 3) 4) 5) 6) 7) 8) 9) Asterisk Asteriskpromptit Asteriskdoc Asteriskconfig Asterisksoundsmain Asteriskdbg Dahdi Dahdidkms Dahdilinux II.)Aquestopunto,tenendopresentechetutteleoperazioniandranno 2

effettuatecomeroot,sipuavviareAsteriskecollegarsiallaconsole,conilcomando: >sudoasteriskvvvc Asterisktipicamentegirainbackgroundcomeunserviziodireteo daemon.SeAsteriskstagigirando,occorredigitareilcomandoseguenteper connettersiallacommandlineinterface. [root@server~]#asteriskr Ilparametrordicealsistemachecisivuolericollegareallaconsole.Siottiene alloraunaschermataanalogaaquesta(CLIstaperCommandLineInterface): [root@server~]#asteriskr Asteriskversion,Copyright(C)19992010Digium,Inc.andothers. CreatedbyMarkSpencer<markster@digium.com> AsteriskcomeswithABSOLUTELYNOWARRANTY;type'coreshowwarranty' fordetails. Thisisfreesoftware,withcomponentslicensedundertheGNUGeneral Public Licenseversion2andotherlicenses;youarewelcometoredistribute itunder certainconditions.Type'coreshowlicense'fordetails. ==================================================================== ConnectedtoAsteriskversioncurrentlyrunningonserver(pid= 11187) server*CLI> Icomandiprendonolaformadimoduleactionparameters.Peresempiocore showuptimeilcomandopervederedaquantotempoilserviziostagirando. *CLI>coreshowuptime Systemuptime:1hour,34minutes,17seconds Lastreload:1hour,34minutes,17seconds Sipuutilizzareilbuiltinhelpperaveremaggioriinformazioniriguardoaivari comandi.Digitandocoreshowhelpalpromptperunalistacompletadicomandi, oppurecoreshowhelpcomandoperl'helpsuunparticolarecomando. Esempi: Perusciredallashell: 3

*CLI>quit PerriavviareAsterisk: *CLI>reload Perchiudere/fermareilprocessoAsterisk: *CLI>corestopnow Comesiripete,peravviareAsterisk: *CLI>sudoasteriskvvvc Levstannoperverboseeilloronumeroindicaillivellodiverbosityciola quantitdiinformazioniriguardantilechiamate. Asteriskallowsyoutocontroltheverbositylevelofthecommandlineinterface.At averbositylevelofzero,you'llreceiveminimalinformationaboutcallsonyoursystem.As youincreasetheverbositylevel,you'llseemoreandmoreinformationaboutthecalls.For example,ifyousettheverbosityleveltothreeorhigher,you'llseeeachstepacalltakes asitmakesitswaythroughthedialplan.Thereareveryfewmessagesthatonlyappear atverbositylevelshigherthanthree. AltricomandiimportantiperfermareeriavviareAsterisk: Perfermareilservizio: 1. corestopnowThiscommandstopstheAsteriskserviceimmediately,endingany callsinprogress. 2. corestopgracefullyThiscommandpreventsnewcallsfromstartingupin Asterisk,butallowscallsinprogresstocontinue.Whenallthecallshavefinished, Asteriskstops. 3. corestopwhenconvenientThiscommandwaitsuntilAsteriskhasnocallsin progress,andthenitstopstheservice.Itdoesnotpreventnewcallsfromentering thesystem. Perriavviareilservizio: 1. corerestartnowThiscommandrestartstheAsteriskserviceimmediately, endinganycallsinprogress.

2. corerestartgracefullyThiscommandpreventsnewcallsfromstartingupin Asterisk,butallowscallsinprogresstocontinue.Whenallthecallshavefinished, Asteriskrestarts. 3. corerestartwhenconvenientThiscommandwaitsuntilAsteriskhasnocalls inprogress,andthenitrestartstheservice.Itdoesnotpreventnewcallsfrom enteringthesystem. 3.ConfigurazionediAsterisk Tuttiifilediconfigurazionediasteriskterminanoconlestensione.confe sitrovanonellacartella/etc/asterisk/.Ipiimportantisono: sip.conf:filediconfigurazionedovevengonospecificatelecaratteristiche degliutenticheutilizzanoilcentralinomedianteilprotocolloSIP. extensions.conf:questofilediconfigurazionecontieneildialplan,specifica leoperazionichevengonoeseguitedaasteriskaseguitodiunachiamata. iax.conf:filediconfigurazionedovevengonospecificatelecaratteris tichedegliutenticheutilizzanoilcentralinomedianteilprotocolloIAX. Intuttiifilediconfigurazione,lerighedicommentosonopreceduteda;.

3.1Gliutentiinasterisk Gliutentivengonosuddivisiintrecategorie: user:gliuserpossonosolofaretelefonate. peer:ipeerpossonosoloriceveretelefonate. friend:ifriendpossonosiariceverechefaretelefonate,unoshortcut perladefinizionecontemporaneadiunousereunpeer.

Figura1.tipologiediutenti. 3.2Ilfilesip.conf Allinternodelfile/etc/asterisk/sip.confvengonospecificatituttigliutentiche hannoaccessoalcentralinoasteriskmedianteilprotocolloSIP.Questofiledi configurazionesuddivisoinsezioniilcuinomecontenutotraparentesiquadre.La primasezionechiamatageneralecontieneleopzionididefaultchedeveavereogni utente,questeopzionipossonocomunqueesseresovrascrittedallesezionisuccessive allinternodelfile.Ognialtrasezionedescrivelutentecorrispondente. [general] context=default bindport=5060 bindaddr=0.0.0.0 srvlookup=yes Inquestoesempiolasezionegeneralcontienequattroopzioni: context:definiscequalecontestogestiscelutenteinquestione,allinternodelfile extensions.conf. bindport:DeterminasuqualeportaUDPlocaleAsteriskinascoltoper connessioni. bindaddr:Indirizzodellinterfacciadiretesulqualeasteriskascoltaperconnessioni 6

(didefault0.0.0.0simetteinascoltosututteleinterfacciediretelocali). srvlookup:SeabilitataecomeargomentodellapplicazioneDial()vienespecificato unnomeInternetalloravengonointerrogatiiDNSpercercarelassociazionenome logicoindirizzo. Diseguitosidefinisceunesempiodiutenteconleopzioniminime: [user];spessounnumeroditelefono. type=friend secret=password qualify=yes host=dynamic canreinvite=no context=internal Inquestasezionesidefinisconoleopzionidellutenteuser:Inmancanzadelcampo username,perlautenticazionevieneusatouser(lastringatraparentesiquadre). type:friend|user|peer:definiscechetipodiutenteuser,inbaseallafiguradi paginaprecedente. secret:Lapasswordchepermettediregistrarelutenteuser. qualify:yes|no|val:determinaquantodevonoesseredistantiipeersclassificati raggiungibili,didefault(conyes)dopoduesecondiipeersnonvengonopi consideatiraggiungibiliequndinonpotrannopiriceverechiamate.Conval possibilespecificaremanualmenteunvalore. host:dynamic|IP|static:consenteallendpointdellutentediregistrarsicon asteriskinmanieratalecheasterisksappiacomeraggiungerelendpoint dellutente.Inquestocasoasteriskagisceinuncertoqualsensocomeunregistrar serverdelprotocolloSIP.PerlimitarelendpointadunsingoloindirizzoIP possibilespecificarloquialpostodelvaloredynamic.Mentreconstaticsidicead Asteriskchenonnecessariochelutentesiregistriprimadiriceveretelefonate. context:definiscequalecontextallinternodelfileextensions.confgestiscelutente. Inquestocasovieneridefinitalopzionecontextdefinitanellasezione[general]. canreinvite:yes|no:Questaopzionedidefaultsettataano:normalmente asterisknonutilizzaimessaggidireinvito. ImessaggidiINVITEallinternodelprotocollosipvengonousatiperstabilire comunicazioni.AllinternodiunmessaggiodiINVITEsitrovanoleinformazioniper renderenotoallaltroendpointdoveinviareilmediastreamdellachiamata. Asterisknormalmentesiponeluistessocomeendpointdellachiamataancheperil flussoRTPmaquandosivuoleforzareilpassaggiodirettodeipacchettiRTPtrai 7

dueendpointalloraAsteriskmandaunmessaggiodiREINVITEaidueendpoint dandoloroleinformazioninecessarieperlacomunicazionediretta.

Figura2:effettodellopzionecanreinvite Iparametriquidescrittisonolostrettonecessarioperladefinizionediunutente,perla listacompletadelleopzionisirimandaalfile/etc/asterisk/sip.confgeneratodurante linstallazionediasteriskoalmanuale:http://www.asterisk.org/docs. 3.3Ilfileextensions.conf Allinternodelfile/etc/asterisk/extensions.confcontenutoildialplandel centralinoasterisk.Undialplanspecificacomedevonoesseregestitedaasteriskle chiamateiningressoeinuscita,daeversogliendpoint. Ilfileextensions.confsuddivisoinsezionichiamaticontesti.Neicontestisono contenuteleregoledichiamataraggruppateindialplan,leregolediuncontestosono totalmentescorrelatedalleregolediunaltrocontesto,amenochequestononsia richiamatoconilcomandoinclude. Ilnomediuncontestovienespecificatoinserendoloallinternodiparentesiquadre. Esitonoduecontestiparticolariallinternodelfileextensions.conf: general:inquestocontestopossonoesseredefiniteopzionicheriguardanolintero dialplan. globals:inquestocontestovannodefinitelevariabiliglobalichepossonoessere referenziateallinternodeldialplanmediantelafunzioneglobal,conlaseguente sintassi: ${GLOBAL(VARIABILE)}

3.3.1Regole Ildialplanformatodaregoleaventilaseguenteforma: exten=>nome,priorit,applicazione() nome:lidentificativodiunutentedelcentralino(stringaoclassiconumerodi telefono). priorit:unnumerointerocheidentificailpassodellasequenzadiregole relativeadunnome.Ognisequenzacompostadapipassi,ognipassohaunasua prioritchedeveesseredatainordinesequenzialeapartireda1. applicazione():rappresentalazionechedevecompiereAsteriskquandoquelpasso dellasequenzavieneeseguito. Vediamounesempiodidialplanformatodatreregoleinsequenza: exten=>123,1,Playback(helloworld) exten=>123,2,Dial(SIP/123) exten=>123,3,Hangup() Quandoarrivaunachiamatasuasteriskalnumero(estensione)123,viene eseguitoilprimopassodeldialplan:lutentesentirilmessaggioHelloworld.Al terminedelmessaggioasteriskesegueinsequenzailsecondopassodeldialplan:la priorit2,cheprevedelachiamataeffettivadi123tramiteilprotocolloSIPinquanto l'utente123utilizzataleprotocolloedstatodefinitonelfilesip.conf.Alterminedella conversazionevieneeseguitoilterzopassodeldialplanconlapplicazioneHangup(), applicazionechenonriceveargomentiepermetteadasteriskdichiuderela comunicazione(altrimentiilchiamantedeveperforzariattaccarelui). 3.3.2Estensioniparticolari Esistonodelleestensionichehannounsignificatoparticolareechenon corrispondonoastringhedigitatedalchiamante: estensiones:siusaquestaestensionequandosivuolemettereunaregolachevenga eseguitasemprecomepuntodipartenzadiuncontesto.Adesempiosupponiamoche ilnostrocentralinoasterisksiaconnessoadunalineaesternaPSTNeche dallesternosiasolopossibilechiamaretalecentralinoenondirettamenteinumeri interniallorganizzazione.Allorapuessereutile,ognivoltachedallalineaPSTN vienedigitatoilnumerodelcentralinoasterisk,usarelestensionesperscrivereuna regolachefacciainmodocheilcentralinorispondaautomaticamenteallachiamata 9

chiedendoconcheinternosidesideraesseremessiincomunicazioneeinfineinoltri lachiamataallinternodigitato. exten=>s,1,Background(enterextofperson) exten=>123,1,Dial(SIP/123) exten=>321,1,Dial(SIP/321) estensionei:lestensionei(invalid)vieneutilizzatapergestireautomaticamentela digitazionediestensioninonvalidecionondescritteneifilediconfigurazione(da usareassiemeallapplicazioneBackgroundchechiedeladigitazionediunnumero ditelefono). exten=>s,1,Background(enterextofperson) exten=>123,1,Dial(SIP/123) exten=>321,1,Dial(SIP/321) exten=>i,1,Playback(invalidext) exten=>i,2,Hangup() Inquestoesempioesistonosologliutenti123e321eseilchiamantedigitaun numerodifferentesarannoeseguitiinsuccessioneipassi1e2dellestensionei. estensionet:vieneusataperrenderenotoalchiamantechelestensione(utente) digitatatramitelapplicazioneBackgroundnonalmomentodisponibile. Adesempio: exten=>s,1,Background(enterextofperson) exten=>123,1,Dial(SIP/123,5) exten=>321,1,Dial(SIP/321,5) exten=>t,1,Playback(allbusy) exten=>t,2,Hangup() Dopo5secondicheiltelefonochiamatosquillaenessunorisponde,ilcontrollopassa allestensionet,eseguendoinsequenzalepriorit1e2. Perunalistacompletadelleestensioniparticolari: http://www.voipinfo.org/wiki/view/Asterisk+standard+extensions. 3.3.3Applicazioni Leapplicazionipiusateallinternodiundialplansono: Dial:permettedichiamareunaestensione(utente) exten=>123,1,Dial(SIP/123,10)

10

Lapplicazionedialrispondeinmodidifferentiinbaseallerisposteottenute: QuandolestensionevienedigitatalapplicazioneDialfarsuonareiltelefono connessoallalineaSIP/123.Lalineachiamatavienesempreidentificatacon protocollo/utente.Ilsecondoargomentospecificadifarsuonareiltelefonoper10 secondi. Selutentechiamatorisponde,alterminedellaconversazionelapplicazionedial escesenzaalcunstatodierrore.Seinvecenessunorisponde,passatii10secondi verreseguitolostatementconprioritsuccessiva. SelapplicazioneDialottieneunsegnaledioccupatodaltelefonoremotoalloraviene aggiunto101allaprioritchesistaeseguendoesipassaadeseguirequellapriorit sedefinita. Perunalistacompletadeipossibiliargomentisirimandaalladocumentazione ufficialediAsterisk. Playback:questaapplicazionefaascoltarealchiamanteunfileaudiopassatocome argomento(soloilnomedelfilesenzaindicarnelestensione).Senonviene specificatoilpercorsocompletodelfilebenssoloilnome,Asteriskcercailfilein /var/lib/asterisk/sounds Background:LapplicazioneBackgroundsimileaPlaybackmahaunuso differente:dopoaverfattoascoltareunfileaudioallutentelapplicazionesimettein attesachelutentedigitiunestensionesullatastieradelpropriotelefono. exten=>123,2,Background(enterextofperson) exten=>100,1,Dial(SIP/100) exten=>101,1,Dial(SIP/101) Perunalistacompletadellepossibiliapplicazionisirimandaalladocumentazione ufficiale. 3.4PatternMatching Perpotersemplificareildialplan,sopratuttoquandoleestensionidagestiresono molteconvenienteutilizzareilpatternmatching. _:ognivoltachesiintendesfruttareilpatternmatchingnecessarioinserire lunderscoredavantialnumero(estensione)chesiintendecatturare X:rappresentaqualsiasinumerointeroda0a9 N:rappresentaqualsiasinumerointeroda2a9 Z:rappresentaqualsiasinumerointeroda1a9 [358]:ilmatchavvienesuinumeri3,5,6,7,8 .:ilpatternmatchingavvinesuqualsiasistringaalfanumerica. 11

Esempio [chiama] exten=>100,1,Dial(SIP/100) exten=>101,1,Dial(SIP/101) .. .. .. exten=>200,1,Dial(SIP/200) Pergestire200estensionisenzautilizzareilpatternmatchingnecessariospecificare 200righeallinternodeldialplan.Usandoilpatternmatching: [chiama] exten=>_[12]XX,1,Dial(SIP/${EXTEN}) LavariabileEXTENunavariabiledicanale(visibilesoloallinternodelcanaledi comunicazionechesicreatraidueinterlocutori)eassumeilvaloredellestensione chiamata. 3.5UtilizzodeicontestiMacro IlcomandoMacropermettediorganizzareildialplaninmanierapisemplice, permettendoacontestidifferentidicondividerelestesseestensioni,riducendole ripetizioniallinternodeldialplan. Macro(nome,arg1,arg2,...,argN) Allinternodellamacropossibilericavarelutentechiamato(estensione),ilcontestoela prioritrispettivamentecon${MACRO_EXTEN},${MACRO_CONTEXT}e$ {MACRO_PRIORITY}. Piingeneralepossibilericavaregliargomentipassatiaunamacrocon:${ARG1}, ${ARG2}...${ARGN}. Lunicofattorelimitanteallinternodiunamacrolutilizzodellestensiones.

Esempio [context_1] exten=>222,1,Dial(SIP/222,10) 12

exten=>222,2,Playback(vmnobodyavail) [context_2] exten=>333,1,Dial(SIP/333,10) exten=>333,2,Playback(vmnobodyavail) Usandoilcomandomacro: [context_1] exten=>222,1,Macro(chiama,SIP/222) [context_2] exten=>333,1,Macro(chiama,SIP/333) [Macrochiama] exten=>s,1,Dial(${ARG1},10) exten=>s,2,Playback(vmnobodyavail) 3.6Voicemail(segreteriatelefonica) Asteriskpermettelutilizzodellevoicemailallinternodeldialplan.Laconfigurazione avvienemedianteilfile/etc/asterisk/voicemail.conf.Questofile,suddivisoincontesti, contieneidettagliriguardantilevoicemaildegliutenti: extension_number=>voicemail_password,username,user_email extension_number:numeroditelefonopercuiattivalasegreteriatelefonica voicemail_password:passwordnumericadellavoicemail username:lutentedellamailbox user_email:indirizzoemaildellutente.Ognivoltacheunchiamantelasciaun messaggionellavoicemailasteriskmandaunmessaggiodinotificaaquesto indirizzo. Adesempio: [default] 100=>6262,Nancy,nancy@acmewidgets.com

13

Dopoaverconfiguratolavoicemailsidevepermetternelaccessoallinternodeldialplan [esempio] exten=>100,1,Dial(SIP/100,10) exten=>100,2,VoiceMail(u100@default) Conlapriorit2delcontestoesempiosispecificacheselutentenondisponibileentro 10secondisipassilachiamataallapplicazionevoicemailacuisipassailparametro u100@defaultperforzarlaaeseguireunmessaggiodiutentenondisponibile(usta perunavailable),achiederedilasciareunmessaggiovocale,amemorizzaretale messaggionellacasellavocaledell'utente100delcontesto"default"(cioappunto 100@default). Lutente100devepotertelefonareadAsteriskpervederesehamessagginellapropria casella;occorrequindiimpostareunnumeroditelefonoappositoneldialplan. [voicemail] exten=>500,1,VoicemailMain() 3.7AsteriskeNAT LamaggiorpartedeiprotocollipensatiperilVOIP(comeilprotocolloSIP)nonsonostati pensatiperlavorareconilNetworkAddressTranslation. Ilproblemapifrequente,riguardailonewayaudio:almomentodelsetupdella chiamatasiailtelefonoconIPpubblicocheiltelefonoallinternodellareteprivata squillanomaalmomentodellaconversazionesololutenteconiltelefonoconIPpubblico sentirlavocedellinterlocutore. Ilproblemadescrittodallafigura3:lacomunicazionecominciadallhostA,interno allaNAT,conunmessaggioSIPspecificandoalsuointerno:sonoA,aspettoilmedia dellachiamataallindirizzo192.168.3.5.AllostessomodoBrispondeconunmessaggio SIP(ilmessaggio2)sonoBaspettoilmediadellachiamataallindirizzo203.34.5.23. QuandoiduehostcomincianoascambiarsimessaggiRTP,contententilaparte multimedialedellacomunicazione,tuttiimessaggidiBrivoltiadAnonvengono recapitaticonsuccessoacausadiunindirizzoprivatospecificatoneimessaggiSIPdiA. Alcontrario,Bhaunindirizzopubblico,quindiAriesceaspedireconsuccessoisuoi messaggiRTP. Insostanza,lutentecherispondealtelefonoconIPpubblicosaringradodiascoltare lavocedellinterlocutore,mentrelutenteconindirizzoprivatononriusciradascoltare lavocedelsuointerlocutore.

14

Figura3.Scenariochedeterminailproblema"onewayaudio". Perovviarealproblemaesistonodelleconfigurazioniparticolaridiasteriskche varianoinbaseallaconfigurazionedelleretesullaqualepostoilserverstesso: AsteriskechiamantedietrounaNAT,destinatarioconindirizzopubblico Inquestocasoilproblemapuessereevitatoutilizzandoilportforwarding:sul firewallvieneapertalaportautilizzataperlasegnalazionedellachiamata(di default5060,nelcasodiSIP)etutteleportecheasteriskutilizzaperilprotocollo RTP(definiteallinternodelfile/etc/asterisk/rtp.conf)infinevannodefiniti allinternodelfilesip.confiparametrilocalnetedexternipnellasezionegeneral: [general] . . . localnet=192.168.1.0/8;Lareteprivatadoveasteriskconnesso externip=147.34.56.23;L'indirizzopubblicochelareteprivatausa ;percomunicareconl'esterno Insip.conf,perognitelefonochesuunareteprivata,vaaggiuntoilparametro: nat=yes;Iltelefonolavoradietrounanat 15

Inquestomodosirisolveilproblemaonewayaudio:ognivoltacheuntelefonocon IPprivatointendeiniziareunacomunicazioneversolesternocontattailserver asterisk,asteriskriconoscecheundispositivonattato(allinternodellasua configurazioneconfiguratonat=yes)equindicambialindirizzoprivato, specificatoallinternodeimessaggiSIPdeldispositivo,conilparametroexternip.In questomodoognimessaggioSIPcheraggiungerlesternoconterrunindirizzo valido(lindirizzodelnatrouter)chesarutilizzatodaldispositivoconIPpubblico permandareisuoipacchettiRTP. AsteriskechiamantedietrounareteNATtata,destinatariodietrounaltra reteNATtata Inquestocasosideveusareunmediatore,comeadesempiounaltroserverasterisk, internoallasecondareteNATtatacheabbiailcompitodidirigereiltrafficoversoil serverasteriskinternoallaprimanat.IlprotocolloIAXinquestocasorisultaessere ilpiefficienteperconnettereidueasterisk:utilizzaunasolaporta(la4069)sia peridatiriguardantilasegnalazionesiaperipacchettiriguardantilachiamata, chesitraduceinunnumerominorediportedaapriresuifirewalleunamaggiore sicurezzaperlaleretiprivate.

Figura4:AsteriskinunaNAT,peersinunaltraNAT AsteriskconIPpubblicoetelefonidietrounareteNATtata: Inquestocasoitelefonidevonoriuscirearicavarelindirizzopubblicousatodal proprionatrouter,cosidapoterloincludereneimessaggichevengonoinviativerso 16

ilserverasterisk. UnapossibilesoluzionelutilizzodelserverSTUNchepermettealdevice allinternodellareteprivatadiconoscereiltipodinatnelqualepostoelindirizzo pubblicoconilqualepucomunicareconlesterno.IlprotocolloSTUNdefinito dallanormaRFC3489.

17

4. Esercitazione 4.1Creazionedegliutenti DopoaverinstallatoAsteriskcomedaistruzioninellesezioni2e3,edaverpreso dimestichezzaconicomandi. Aprireilfilesip.conconipermessidiamministratore >sudogedit/etc/asterisk/sip.conf oppure>sudonautilus Modificareilfilesip.conf,aggiungendoviinfondoalfileleseguentirighe: [1234] type=friend username=1234 secret=youpasswd host=dynamic context=internal qualify=yes nat=yes [1000] type=friend username=1000 secret=youpasswd host=dynamic context=internal qualify=yes nat=yes 4.2Dialplan Modificareorailfileextensions.confaggiungendoviinfondoalfileleseguenti righe: [internal] exten=>1234,1,Dial(SIP/1234) exten=>1234,2,Hangup() exten=>1000,1,Dial(SIP/1000) exten=>1000,2,Hangup()

18

4.3Configurazionedeisoftphones Occorreorafareunadistinzioneinbaseaqualesistemaoperativohostsista utilizzando. UtentiWindowseMAC: InstallareXlitehttp://www.counterpath.com/xlitedownload.html ConfigurazioneXLitesuWindows:cliccare"SoftPhone"sulmeninaltoasinistrae successivamente"AccountSettings".SiraggiungelaschedaSIPaccountdifigura5.Si impostinooraidatiinbaseall'utentecomedaistruzionidiseguito:

Figura5.ConfigurazioneXLite 19

Accountname:inserireunastringaapiacere UserID,DisplayNameeAuthorizationName:Ilnome(numero)datoalla sezioneriguardantel'utente,inquestocaso1234,quellodefinitoall'internodelfile sip.conf. Domain:L'indirizzodelServerAsterisk,unmodopertrovarlofacilmentesu UbuntutastodestrosuNetworkManagerepoiclicksuConnectioninformationdacui sileggel'IPaddressdellamacchinavirtuale. Password:quelladecisanelfilesip.conf. Proxy:nuovamentel'IPgidigitatoperDomain.

UtentiLinux: Siasull'hostsiasulguestinstallareZoiper: http://www.zoiper.com/download_list.php. IlsoftphoneZoipersiavviacliccandosulfileZoiperscaricatoedecompresso, apparirlafinestracomeinfigura6.

Figura6.Zoiper DopoaverinstallatoZoipersiasullamacchinadipartenzachesullamacchina virtuale,assegnaredueaccountdiversicomedafilesip.conf.CliccandosuOptionssi accedeallafinestradelleimpostazioni,siscelgaAddnewSIPaccount(Figura7).

20

Figura7OpzioniSIP. Username:Ilnome(numero)datoallasezioneriguardantel'utente,inquesto caso1000,quellodefinitoall'internodelfilesip.conf. Domain:L'indirizzodelServerAsterisk,unmodopertrovarlofacilmentesu ubuntutastodestrosuNetworkManagerepoiclicksuConnectioninformationdacui sileggel'IPaddressdellamacchinavirtuale. Password:quelladecisanelfilesip.conf. InfinecliccaresuRegister.Eseguendol'operazioneperentrambelemacchine (virtualeenon),siamooraingradodichiamareunSoftphoneconl'altro(Figura8).

Figura8Utilizzodell'account1000.

21

Lafigura9riproduceiduesoftphoneinstallatiunosullamacchinafisicaelaltro sullamacchinavirtuale,insiemealserverasterisk,gliindirizziIPsonopuramente indicativi,enonrispecchianoleconfigurazionidellemacchinedurantel'esercitazione.

Figura9.PosizionedeisoftphonerispettoadAsterisk. Aquestopuntoriavviamoasterisk(comesuperutente)perrendereeffettivele modifichecompiute;siusailcomandocorerestartnow. Sipuadognimodificadelfilesip.confaggiornareAsteriskconilcomandosip reloadeadognimodificadelDialplanaggiornarloconilcomandodialplanreload. ConnettiamociallaconsoleCLI,dovesipossonovederetutteleoperazioniche compieasteriskdurante lenostrechiamate. >sudoasteriskvvvr Aquestopuntoconunodeicomandi: sipshowusers sipshowpeers sivedrannoiduetelefoniregistratisulserverasterisk. 22

4.4Dialplanavanzati Iduetelefoniregistratipossonocomunicaretradiloro,questopossibileperch abbiamospecificatoadasteriskcomegestirelechiamateiningressoeinuscitadai softphones,avendocreatoprecedentementeundialplan.ComeprimoDialplanabbiamo permessosemplicementecheiduetelefonipossanocomunicaretraloro:allinternodel file/etc/asterisk/extensions.conf [internal] exten=>1234,1,Dial(SIP/1234) exten=>1000,1,Dial(SIP/1000) Ilcontextsichiamainternalcomedefinitonelfilesip.conf.Laprimarigapermette dichiamarel'utente1234digitando1234sullatastieradelsoftphone,lasecondariga permettedichiamarel'utente1000digitando1000,tuttoattraversolapplicazioneDial. DallaconsoleCLIdiAsteriskverifichiamoseriusciamoaraggiungereisoftphone medianteildialplanappenascritto: *CLI>consoledial1000@internal Questocomandopermettedieseguireunestensioneallinternodiuncontesto,a questopuntoilsoftphoneconnumero1000dovrebbesquillare.Datocheentrambii softphonesonogestitidalcontestointernalpossibilechiamarelestensione1000 dallestensione1234eviceversa. Perrenderepirobustoildialplanpossiamogestireicasiincuilutentechiamato nonrispondaentroundeterminatotempo,utilizzandolapplicazioneplaybackche permettedirisponderealchiamanteconunmessaggiovocale: [internal] exten=>1234,1,Dial(SIP/1234,5) exten=>1234,2,Playback(vmnobodyavail) exten=>100,3,Hangup() exten=>1000,1,Dial(SIP/1000,5) exten=>1000,2,Playback(vmnobodyavail) exten=>1000,3,Hangup() IlsecondoargomentodellapplicazioneDialpermettedifarsquillareiltelefonoper 5secondi,dopoquestotemposirinuciaallachiamata.Lepriorit2e3permettonodi gestireilcasoincuilutentenonrispondaallachiamataentro5secondimandandoil messaggiovmnobodyavailediseguitochiudendolachiamatatramitelapplicazione 23

hangup. Sesivoglionoutilizzarelevociinitalianopresentinellacartella /usr/share/asterisk/sounds/it/occorremodificareilfileextension.confutilizzandola funzioneSet(CHANNEL(language)=it) [internal] exten=>1000,1,Set(CHANNEL(language)=it) exten=>1000,2,Dial(SIP/1000,5) exten=>1000,3,Playback(vmnobodyavail) exten=>1000,4,Hangup()

4.5AsteriskeGoogleTalk Asteriskincludelafunzionalitdipotersiconnettere,comeclient,alserver GoogleTalkeinquestomodoricevereeeffettuarechiamate: AsteriskGTalk GtalkAsterisk Primadiiniziaresicontrollacheilmodulores_jabbersiastatoinstallato.Dalla consolediAsterisk,siscriveilcomando: CLI>helpjabber jabberreloadReloadJabberconfiguration jabbersetdebug{on|off}Enable/DisableJabberdebug jabbershowbuddiesShowbuddylistsofourclients jabbershowconnectedShowstateofclientsandcomponents jabbertestShowsroster,butisgenerallyusedformogs debugging. Secompaionoquestimessaggi,ilmodulocaricatoefunzionante. Perleprocedurespiegateinseguitouseremoil";"percommentareicomandi. Sicreaunnuovoutentenellapaginadigoogle(inquestoesempiol'utentecreato marco@gmail.com). PerconfigurareGoogleTalkinAsterisk,bisognamodificareduefiles: jabber.conf gtalk.conf Sicominciaconjabber.conf: gedit/etc/asterisk/jabber.conf 24

[general] debug=yes ;siattivaildebug autoprune=yes ;rimuoveautomaticamentegliutentichenefannorichiestadallalista ;diamici autoregister=yes [gtalk] type=client ;aggiungeautomaticamentenuoviutentichenefannorichiesta ;allalistadiamici ;etichettacheidentificaquestaconnessione ;Asterisksicolleghercomeunutente

serverhost=talk.google.com;nomedelserverGoogleTalk username=marco@gmail.com;utentecheregistreremoinGoogleTalk secret=password;passwordassociataall'utente port=5222;portadiconnessioneaGoogleTalk usetls=yes;attivailprotocolloTLS usesasl=yes;attivailprotocolloSASL buddy=amico_1@gmail.com;apartiredaquestalineapossiamodefinireunalistadi ;amicipredefiniti(unoperlinea) buddy=amico_2@gmail.com buddy=amico_3@gmail.com statusmessage=AsteriskServer;messaggiodistatoassociatoall'utente timeout=100;tempomassimodisponibileperconnettersialserverdiGoogleTalk possibileconfigurareinquestofilepidiunutenteGoogleTalk;perfarlosi configuraunaltrobloccosimilealprecedenteavendocuradicambiarel'etichetta[gtalk] conunaltronome. Configurazionedigtalk.conf: gedit/etc/asterisk/gtalk.conf [general];inizialapartegenerale context=googlein ;contestodoveentrerannolechiamateprovenientidautenti ;GoogleTalk bindaddr=IPAsterisk;indirizzoIPdovesiaccetterannolechiamateperquesto ;canale(IPpubblicodiasterisk) allowguest=yes [guest] ;sipermettonochiamatedautentiGoogleTalknonpresenti ;nellalistadegliamici

25

disallow=all allow=ulaw context=googlein;configurazioneperlechiamatediutentiGoogleTalkospiti(non ;presentinellalistadiamici) [amico_1] ;inquestobloccosidefinisceilprimoamicoinseritoin ;jabber.confconilparametrobuddy.Siripeteilbloccopergli ;altridueutentidefiniti: username=amico_1@gmail.com disallow=all allow=ulaw connection=gtalk context=googlein [amico_2] username=amico_2@gmail.com disallow=all allow=ulaw connection=gtalk context=googlein [amico_3] username=amico_3@gmail.com disallow=all allow=ulaw connection=gtalk context=googlein Sisalvanolemodifiche. Sesivuole,sipossonodifferenziareicontestidellechiamateinentrataprovenienti daGoogleTalkasecondachesianodiutentipresentinellalistadiamicioutentiospiti. Perfarloinguestsimetteuncontestodiversodaquelloconfiguratoperamici. Perogniutenteamicoconfiguratostatodefinitounparametro(connection).Se siosservabeneilsuovalore(gtalk)quellopresenteinjabber.confcomeetichettadi iniziodellaconfigurazionedell'utentemarco@gmail.com Terminatalaconfigurazionedeiduefiles,simodificaildialplaninmododa configurarelechiamateinentrataeinuscitausandoilcanaleAsteriskchan_gtalk: gedit/etc/asterisk/extensions.conf

26

Perlechiamateentrantisiconfigurailcontestogooglein(comedefinitoin gtalk.conf)dopoilcontestoesterne,esiaggiungonoleseguentilinee: [googlein] exten=>s,1,NoOp(CallfromGtalk) exten=>s,n,Dial(SIP/1000,30) exten=>s,n,GotoIf($["${DIALSTATUS}"="BUSY"]?busy:unavail) exten=>s,n(unavail),Voicemail(1000@default,u) exten=>s,n,Hangup() exten=>s,n(busy),VoiceMail(1000@default,b) exten=>s,n,Hangup() TuttelechiamateentrantidaGoogleTalksiinoltranoall'interno1000.Seentro30 secondinessunorisponde,lachiamatesitrasferisconoallasegreteriatelefonicadello stessointerno. Perlechiamateinuscita(versoitreutentiamiciconfiguratiingtalk.conf)nel contestointernesiaggiungonoleseguentilinee: exten=>10000,1,Dial(gtalk/gtalk/amico_1@gmail.com) exten=>10000,n,Hangup exten=>10001,1,Dial(gtalk/gtalk/amico_2@gmail.com) exten=>10001,n,Hangup exten=>10002,1,Dial(gtalk/gtalk/amico_3@gmail.com) exten=>10002,n,Hangup Digitandoilnumero10000chiameremoall'utenteamico_1@gmail.com,digitandoil numero10001l'utenteamico_2@gmail.comedigitandoilnumero10002l'utente amico_3@gmail.com. NeiparametridiDial()ilprimoparametroindicailprotocollousatopereffettuare lachiamata,inquestocasoilcanalechan_gtalk,ilsecondoparametroindicailnome dell'etichettadefinitainjabber.confperl'utentemarco@gmail.com;ilterzol'utente GoogleTalkdachiamare. SiaggiornalaconfigurazionediAsterisk,riavviandolo. ApriamoilclientGoogleTalkevedremoilnuovoutentepresentenellalistadi amici.

27

Potrebbero piacerti anche