Sei sulla pagina 1di 7

Interfacciare Asterisk ed Alice Voce

Introduzione
Seguendo questo tutorial ` possibile congurare Asterisk per ricevere ed inviare chiamate tramite e Asterisk, su Linux, verso e da una linea Alice Voce. Inoltre, una seconda parte spiega come congurare il proprio server per collegare i dispostivi Aladino VoIP ad Asterisk.

Prerequisiti
1. Python 2.x 2. I sorgenti di Asterisk, per ricompilarlo (per la parte Alice Voce).

Alice Voce ed Asterisk


Installazione della scheda di rete
Dovrete collegare il vostro server Asterisk al router Alice Voce con una scheda ed un indirizzo IP riservati esclusivamente al VoIP. Il router Alice Gate, apparentemente, una volta attivato il servizio Alice Voce gestisce non una, ma due connessioni diverse, forse su VC/VP (virtual channel/virtual path) diversi, e certamente con indirizzi IP diversi. In una versione precedente di questo documento, aermavo erroneamente che sono necessari MAC address diversi per comunicare con Internet e con il server VoIP. Questa svista era dovuta ad un problema hardware della macchina su cui avevo eseguito i test. In realt` ` suciente una sola scheda di rete con ae pi` alias. u Nel seguito, supporremo che la vostra interfaccia di rete si chiami eth0 ed abbia lIP 192.168.0.2.

Patch e ricompilazione di Asterisk


Scompattare i sorgenti di Asterisk e portarsi nella loro directory. Applicare la patch fornita con: patch -p0 < /percorso/sip-alice.diff Procedere poi alla ricompilazione ed installazione come indicato nella documentazione di Asterisk.

Nota
` La patch fornita ` relativa alla versione 1.4.17 di Asterisk. E probabile che funzioni anche con e altre versioni, ma non ` garantito; in questo caso pu` essere necessaria qualche piccola modica. e o

Installazione del software


Scompattate il software ed installatelo con il classico comando: # python setup.py install

Alias IP
Aggiungete un alias nuovo alla vostra scheda di rete. Supponiamo che vogliate usare lindirizzo IP 192.168.0.10: baster` il comando: a ifconfig eth0:1 192.168.0.10 Per rendere la modica permanente, in Debian/Ubuntu vi baster` aggiungere al le /etc/network/interfaces a qualcosa come: auto eth0:1 iface eth0:1 inet static address 192.168.0.10 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 Si pu` attivare subito con ifup eth0:1; al reboot verr` comunque automaticamente attivata. o a

File di congurazione
Il software fornito fa essenzialmente due cose: 1. dialoga con il router per attivare e disattivare le numerazioni VoIP; 2. crea automaticamente i les di congurazione per Asterisk. Copiate i les di congurazione pivelli.ini e *_template.conf nella directory /etc/pivelli. Modicate il le pivelli.ini secondo i commenti al suo interno. Ricordatevi di impostare almeno lindirizzo IP per il VoIP con lopzione bind_ip, ad es. bind_ip=192.168.0.10. Indicare i numeri VoIP ` facoltativo. Se volete gli automatismi allattivazione delle numerazioni e VoIP, cio` la scrittura dei les di congurazione di Asterisk e limpostazione delle route, attivate le e opzioni relative.

Test del software


Il comando alice-client.py va eseguito sempre come utente root, altrimenti non pu` scegliere lino terfaccia di rete giusta quando comunica con il router. Eseguite il comando: # alice-client.py --status Comparir` una lista delle numerazioni VoIP disponibili, ed un valore True o False che indica se a sono disponibili per la registrazione oppure no. Eseguite il comando: # alice-client.py --enable-all --verbose Comparir` unelenco delle numerazioni abilitate ed il relativo proxy in uscita. a Ricordatevi di modicare il le degli hosts /etc/hosts, e di aggiungere la riga: 80.11.22.33 wifi.apt.telecomitalia.it

dove 80.11.22.33 ` lindirizzo IP del proxy come comunicato dal comando. e ` E indispensabile che Asterisk comunichi con Telecom Italia tramite lIP aggiuntivo (192.168.0.10), e con il resto del mondo tramite lIP originale (192.168.0.2). A questo ne, lasciate abilitata nel le di congurazione di esempio lopzione per impostare il routing, oppure eseguite manualmente: ip route add 80.11.22.33 via 192.168.0.1 src 192.168.0.10 A questo punto, il gioco dovrebbe essere fatto!

Aladino VoIP ed Asterisk


Per far funzionare una base Aladino VoIP con Asterisk ` suciente: e 1. congurare un server DHCP che assegni lindirizzo IP alla base; 2. congurare sulla stessa macchina un web server che renda disponibile lo script CGI di provisioning; 3. congurare iptables perch intercetti le comunicazioni destinate dalla base Aladino al proxy e SIP di Telecom; 4. inne, aggiungere delle normali utenze SIP ad Asterisk. Anche in questa situazione supporremo che il vostro server abbia lindirizzo IP 192.168.0.2.

Server DHCP
Oltre allindirizzo IP, la base pu` ricevere dal server DHCP una URL alla quale contattare il registration o manager di Telecom Italia. Possiamo approttare di questa particolarit` per fornire una URL fasulla a sul nostro server, in modo che la base eviti di contattare lesterno, se non per ricevere la data e lora dal server NTP di Telecom. Le indicazioni fornite sono per il server ISC DHCP versione 3, il pacchetto fornito in Ubuntu e Debian come dhcp3-server. In questo caso il le di congurazione ` /etc/dhcp3/dhcpd.conf; in altre e distribuzioni potrebbe essere diverso. Si suppone che il server DHCP sia gi` operativo e correttamente a congurato. Innanzitutto dobbiamo denire lo spazio congurazione personalizzato per i dispositivi TR-069. In questo modo DHCPD ci permette di utilizzare una sintassi facilitata. Aggiungiamo in testa al le di congurazione le righe: option space REGMAN; option option option option option REGMAN.url code 1 = text; REGMAN.cpeid code 2 = text; REGMAN.hexcode code 3 = text; REGMAN.mac code 4 = text; REGMAN.devicename code 5 = text;

Poi dobbiamo specicare le opzioni aggiuntive per i dispositivi VoIP. In fondo al le, dopo le denizioni gi` operative per la nostra rete locale, aggiungiamo: a class dslforum { match if substring (option vendor-class-identifier, 0, 12) = dslforum.org; option dhcp-parameter-request-list = concat(option dhcp-parameterrequest-list,2b,3c); option vendor-class-identifier dslforum.org;

option REGMAN.url http://192.168.0.2/acs-empty/; vendor-option-space REGMAN; option routers 192.168.0.2; } (Nota: fate riferimento al le asterisk.txt per la sintassi esatta, perch la trasformazione in PDF e pu` far sparire delle indispensabili virgolette.) o La riga match chiede al server DHCP di applicare le denizioni contenute nella classe soltanto ai dispositivi che si identicano con la vendor class dslforum.org. La seconda riga costringe il server a fornire i parametri 0x2b (43, Vendor Options) e 0x3c (60, Vendor Class Identier) anche se il dispositivo non li ha richiesti esplicitamente. Seguono i parametri richiesti, con la URL ttizia (si tratta di un qualsiasi le non presente sul vostro web server). Lultima riga specica il gateway da utilizzare; ` e importante, perch la base lo user` anche come web server a cui richiedere i parametri per il provisioning. e a

Web server
Leseguibile alice-cgi.py fornito ` uno script CGI che gestisce il provisioning dei dispositivi. e Per prima cosa, create la directory specicata nel le di congurazione pivelli.ini come status_dir, e rendetene proprietario lutente del web server. Ad esempio: # mkdir -p /var/run/pivelli # chown www-data /var/run/pivelli Poi congurate il web server per rendere lo script visibile allurl http://192.168.0.2/aptconfig.xml. Nel caso di Apache 2.x, vi baster` aggiungere al le di congurazione (in uninstallazione standard di a Debian/Ubuntu ` /etc/apache2/sites-available/default): e ScriptAlias /aptconfig.xml /usr/bin/alice-cgi.py <Files /usr/bin/alice-cgi.py> Options +ExecCGI Order deny,allow Deny from all Allow from 192.168.0.0/255.255.255.0 </Files> Vericate aprendo lurl http://192.168.0.2/aptcong.xml?WINDWEB URL=/doc2/askcli: dovrebbe comparire un le XML che indica come Available tutte le numerazioni da voi congurate.

IPTables
Purtroppo, la base Aladino VoIP in mio possesso sembra leggere dal le di congurazione soltanto il numero telefonico, ignorando le altre impostazioni (dominio SIP, password, outbound proxy). Pertanto si rende necessario aggiungere il dominio wi.apt.telecomitalia.it a quelli gestiti da Asterisk, non utilizzare una password ed intercettare le comunicazioni verso loutbound proxy, che ` anche registration e proxy. Questultima cosa pu` essere fatta direttamente con il supporto di rete di Linux. Alla catena o PREROUTING della tabella nat di IPTables bisogna aggiungere lentry: Chain PREROUTING (policy ACCEPT 4090 packets, 302K bytes) pkts bytes target prot opt in out source stination 8 4201 REDIRECT udp -- eth0 any anywhere dir ports 5060 de80.11.22.33 udp dpt:sip re-

Se utilizzate lottimo Shorewall, questo risultato si pu` ottenere semplicemente aggiungendo al le o /etc/shorewall/rules la riga:

REDIRECT

loc

5060

udp

5060 -

80.11.22.33

(dove ovviamente 80.11.22.33 ` il vostro outbound proxy, come fornito dal router Alice e recuperato, e per esempio, da alice-client.py -a -v).

Asterisk
Modicate il le sip.conf per rendere utilizzabile il dominio wifi.apt.telecomitalia.it, aggiungendolo allopzione domains nella sezione [general]. Ad esempio: [general] domains=192.168.0.2,alternativa.xyz.net,wifi.apt.telecomitalia.it Nel le sip.conf o in un qualsiasi le da lui incluso, ad esempio sip-phones.d/aladino.conf, aggiungete le entry per i singoli client. Ad esempio: [204] type=peer context=default host=dynamic allow=alaw [205] type=peer context=default host=dynamic allow=alaw ` E importante specicare il codec (allow=alaw), o la comunicazione probabilmente non funzioner`. a A questo punto, siete pronti|

Note aggiuntive
Se avete pi` basi DECT o altri dispositivi compatibili con il sistema di Telecom Italia e desiderate u limitare la lista di numerazioni accessibili, specicatele nella sezione [local_lines] di pivelli.ini. Ogni indirizzo IP che abbia la propria riga di congurazione vedr` soltanto le numerazioni elencate su a quella riga. Gli altri vedranno solo le numerazioni elencate nella riga default=. Ovviamente ` possibile e elencare la stessa numerazione su pi` righe; un solo dispositivo alla volta, per`, potr` registrarla. u o a Se avete cordless DECT aggiuntivi, di qualsiasi tipo, e volete registrarli sulla base Aladino VoIP, potete farlo dalla pagina web interna della base DECT. Ad esempio, se alla base DECT ` stato assegnato e lindirizzo IP 192.168.0.91, la potrete congurare allindirizzo http://192.168.0.91.

Appendice tecnica
Architettura
Qualche ricerca su Internet suggerisce che il sistema Alice Voce funzioni in questo modo: il router Alice Gate crea due connessioni parallele (pi`, eventualmente, altre per la telegestione o altre funzionalit`) u a verso loperatore. Si presume che questo serva a isolare la rete IP su cui lavorano gli apparati di centrale da Internet e ad allocare ecacemente la banda destinata alle comunicazioni VoIP. Ciascun nodo della rete interna pu` comunicare soltanto con una delle due connessioni, e non eno trambe. Per default, un nodo della rete interna comunica con Internet. Quando desidera comunicare con la rete destinata al VoIP, deve usare le API messe a disposizione dal router agli indirizzi web:

http://router-ip/aptconfig.xml?WINDWEB_URL=%2Fdoc2%2Faskcli per ottenere un elenco XML delle numerazioni disponibili e del loro stato; http://router-ip/aptconfig.xml?WINDWEB_URL=%2Fdoc2%2Fsetcli&CLI=0212345678 per associarsi ad una numerazione; http://router-ip/aptconfig.xml?WINDWEB_URL=%2Fdoc2%2Fdelallcli per disassociarsi da Alice Voce. Questo ` anche il motivo per cui una macchina su cui gira Il Telefono di Alice non ` in grado di e e navigare.

Il boot della base Aladino VoIP


Ecco che cosa succede allavvio di una base Aladino VoIP (DECT). In questo caso si tratta di un modello commercializzato con il marchio Master / Telecom Italia, customizzazione di un prodotto della SunCorp. Il produttore originario si evince dalla pagina web interna presentata dal prodotto e dal MAC address. La sequenza indicata ` quella prevista dallo standard TR-069. e 1. La base DECT chiede un indirizzo IP al server DHCP. Nella richiesta imposta lopzione Vendor Class (60) a dslforum.org e fornisce il client hostname BaseEthDECT. 2. Il server DHCP integrato nel router Alice risponde specicando la stessa Vendor Class, e fornendo le informazioni aggiuntive indicate al paragrafo 3.1 di TR-069, pi` alcune altre. u Ad esempio: ACS_URL = https://regman-tl.interbusiness.it:10500 ProvisioningCode = BVF02-20080108094151-000021234567879.11.22.213 CODE = 001234 CPE_MAC = 001CA2112233 DEVICE = Alice Gate 3. La base DECT contatta il conguration server specicato dalla risposta DHCP, informandolo che ha fatto il boot e fornendogli una URL alla quale poter essere ricontattata. Purtroppo non sono riuscito ad intercettare una seguente comunicazione dellACS alla base. Suppongo che allinterno di questa si possano trovare i parametri di provisioning delloutbound proxy e delle password.

Con chi parliamo?


Un esame dei messaggi SIP scambiati riporta: Server: SHS/rel-3_7_3m StarSIP/rel-2_7_3y durante la fase di registrazione, e: Server: SSW/0.0.0 alla terminazione di alcune richieste. Corrispondono allarchitettura su switch di Classe 5 Italtel descritta in numerosi documenti (esempi: 1, 2, 3, 4).

Patch di Asterisk: lunghezza di Call-ID


Usando Asterisk senza patch, la registrazione al proxy SIP appare impossibile per un misterioso UDB Internal Error 1. Pare che in qualche punto la comunicazione tra SHS, StarSIP (le parti che gestiscono i messaggi SIP) e UDB (il DB universale con i dati degli utenti) si interrompa quando si usa un Call-ID troppo lungo nel messaggio SIP. Asterisk li genera utilizzando 32 caratteri random seguiti da @ e lidenticativo dello host locale; RFC 3261 non riporta esplicitamente limitazioni sulla lunghezza n nella sezione 8.1.1.4 n nella sezione e e 20.8. Ad ogni modo, limitando i caratteri ad 8, diventa possibile registrarsi correttamente.

Patch di Asterisk: RTP Payload Type di G.729


Gli apparati con cui comunichiamo orono solo i codec G.711 (a-law) e G.729a. G.711 impegna 64 kb/s, mentre G.729a ne impegna soltanto 8 kb/s. Tenuto in considerazione loverhead dei protocolli RTP, UDP e IP si contano comunque 80 kb/s contro 24 kb/s: un risparmio di banda di oltre tre volte. RTP ` il protocollo con il quale vengono scambiati i pacchetti contenenti i dati audio (e non solo). e Dal punto di vista di RTP, un codec ` un Payload Format: uno dei possibili formati di dati che pu` e o trasportare. Il protocollo SIP, prima di stabilire una sessione RTP, negozia i Payload Format che verranno usati mediante il protocollo SDP (Session Description Protocol). Le due parti si comunicano quali tipi di Payload Format hanno disponibili, usando il nome MIME standard di ciascun codec (MIME subtype), e si mettono daccordo su quale usare. Inoltre, nello scambio SDP viene denito il Payload Type, che ` il codice da 0 a 127 che poi verr` usato in ciascun e a pacchetto RTP per identicarne il contenuto. Alcuni codec hanno dei Payload Type standard rispetto al protocollo in cui vengono usati, e non ` indispensabile specicarli; gli altri possono essere negoziati e in questa maniera. Il codec G.729 ha assegnati, come standard, il nome MIME G729 ed il codice 18. Il malfunzionamento, senza patch, ` causato dal fatto che gli apparati remoti pretendono, durante la e negoziazione SDP, che venga chiamato G.729a e che abbia un codice allocato dinamicamente (il 102); durante lo scambio RTP, che i pacchetti siano contrassegnati con il Payload Type standard (18). Se si tenta di negoziarlo con il nome standard, o con il Payload Type standard, la chiamata viene riutata: SIP/2.0 500 Internal Server Error Via: SIP/2.0/UDP IP:5060;received=IP;branch=z9hG4bK60b47e38;rport=5060 From: xxx <sip:NN@wifi.apt.telecomitalia.it>;tag=as1733bbd3 To: <sip:NN@wifi.apt.telecomitalia.it>;tag=86ae3fd9 Call-ID: 669839dc63b9855f709b37c83113930c@wifi.apt.telecomitalia.it CSeq: 103 INVITE Reason: Q.850; cause=42; text=3 Server: SSW/0.0.0 Contact: <sip:NN-coreapt00-mmr1q5rbudajf@IP> l: 0 (Lo standard Q.850 denisce la causa n. 42 come Switching equipment congestion.) Se si negozia il codec con nome MIME e Payload Type graditi, ma si rispetta lo standard e si inviano pacchetti RTP con il Payload Type negoziato, essi vengono ignorati: ` necessario che siano contrassegnati con il 18. e La patch fornita controlla la presenza dellimpostazione italtel_g729=yes allinterno del le di congurazione SIP relativo al numero Alice. Se ` presente, avr` cura di negoziare il codec G.729 e a (se richiesto) sul Payload Type 102 anzich sul 18, ma di forzare il Payload Type a 18 durante la e preparazione dei pacchetti RTP.