Posts tagged sip

snom300_2

Snom 320 e Snom 300

0

Come i lettori assidui del mio blog già sanno, siamo in fase di ricerca e valutazione per gli apparecchi VoIP da utilizzare all’interno dell’Ateneo di Siena, dove lavoro.

Proprio qualche giorno fa ci hanno portato in prova un appliance T-Vox per una valutazione sul prodotto in merito alle necessità ed esigenze dell’ateneo.

Insieme al T-Vox hanno consegnato, sempre in prova, due apparecchi Snom: il 320, con i tasti laterali aggiuntivi, e il 300.

Direttamente dal sito web del produttore, troviamo:

Snom 300

Quale modello base della famiglia di telefoni aziendali, il telefono SIP snom 300 risponde alle esigenze primarie in termini di impiego della telefonia VoIP ed offre numerose funzioni irrinunciabili in ambito professionale.

Sempre dal sito web ecco alcune delle caratteristiche principali:

  • Display a due righe (2×16 caratteri)
  • 27 tasti, 7 LEDs
  • 6 tasti funzione liberamente configurabili
  • 4 account SIP (“linee”)
  • 2 porte Ethernet
  • SIP RFC3261
  • Sicurezza: SIPS/SRTP, TLS
  • STUN, ENUM, NAT, ICE
  • Compressione: G.711, G.729A, G.723.1,G.722, G.726, GSM 6.10 (Full rate)

Snom 320

Ideale per l’ufficio e per chi telefona molto: lo snom 320 é un telefono SIP professionale dall’ottimo rapporto qualità prezzo e dotato del vivavoce (full duplex) come della funzione di conferenza a tre.

Display grafico a due righeLe relative caratteristiche principali:

  • 47 Tasti, 13 LEDs
  • 12 account SIP (“linee”)
  • 12 tasti funzione liberamente configurabili
  • Vivavoce
  • Alimentazione ethernet (PoE)
  • Tastiera aggiuntiva con 42 tasti funzione programmabili
  • SIP RFC3261
  • Sicurezza: SIPS/SRTP, TLS
  • STUN, ENUM, NAT, UPnP, ICE
  • Codecs: G.711, G.729A, G.723.1, G.722, G.726, GSM 6.10 (Full rate)
  • Supporto della lingua locale

Dopo qualche prova di utilizzo, dei due apparecchi apprezzo particolarmente la chiarezza delle informazioni sul display, a caratteri grandi (a prova di “utonto”). La suoneria è facilmente personalizzabile ed anche l’interfaccia di configurazione via web è facile e intuitiva. L’aspetto esteriore è abbastanza solido e robusto, con plastiche nere opache e tasti con buon feedback tattile.

La documentazione su come fare l’autoprovisioning è disponibile sul Wiki della Snom all’indirizzo:http://wiki.snom.com/Features/Mass_Deployment

Configurazione degli apparati

 

Entrambi i modelli hanno un comodo server Web sulla porta 80 per la configurazione degli stessi. Basterà recuperare l’IP (nmap -sP può essere di grande aiuto) ed aprire il browser.

Unica accortezza per la configurazione è nella parte relativa agli account SIP. La schermata è chiara ma nel caso si inserisca un nome a dominio nella parte “Server:” è necessario aggiungere, nell’URI, anche la porta UDP. Ad esempio:
voip.server.it:5060

Altrimenti la registrazione al server fallirà in un antipatico 404:

Transport Error: Pending packet 1000251: generating fake
Registrar 2169@voip.server.it refused with code 404
Will try to reregister in 300 seconds
Registration Metrics failed

About Michele Pinassi

Nato a Siena nel 1978, dopo aver conseguito il diploma in "Elettronica e Telecomunicazioni" e la laurea in "Storia, Tradizione e Innovazione", attualmente è Responsabile del Sistema telefonico di Ateneo presso l'Università degli Studi di Siena. Utilizza quasi esclusivamente software libero. Dal 2006 si occupa di politica locale come attivista nel Movimento Siena 5 Stelle.

2012-06-15 08.29.50

Cisco IP Phone SPA502G

0

Proprio ieri abbiamo ricevuto, in visione, il telefono Cisco SPA502G per i contesti con stack SIP. Anche se Cisco ha tutto il suo sistema di Unified Communications basato su protocollo proprietario Skinny (SCCP), per poter rimanere anche sul mercato open source, ha prodotto anche qualche apparecchio SIP.

La qualità percepita del prodotto è davvero molto molto buona, come quasi tutti i prodotti Cisco: ottimo assemblaggio, plastiche solide e design curato.

Il display LCD, praticamente omnipresente su tutti i telefoni VoIP, ha un buon contrasto e la navigazione tra le varie voci di menu è semplice e intuitiva.

Sul retro le due prese RJ45 per la connessione alla rete e al PC ed il connettore per l’alimentazione a 5V. Questo modello supporta il POE.

Tra le varie caratteristiche segnalo:

  • Smart Phone Control Protocol (SPCP)
  • Audio codecs G.711a, G.711u, G.726_32, G.729ab, G.722
  • Secure Real-Time Transport Protocol (SRTP) e Transport Layer Security (TLS)
  • Autoprovisioning via TFTP (DHCP option 66)

 

Impostare l’autoprovisioning

Premesso che dovete avere già un server TFTP funzionante e un server DHCPD che invia l’opzione “66″ con l’IP del server TFTP dove cercare le configurazione, potete impostare l’autoprovisioning seguendo le istruzioni che trovate  su https://supportforums.cisco.com/docs/DOC-9954.

Per aiutarvi, ecco le richieste che il telefono (172.20.1.10) invia al server TFTP (172.20.1.2):

11:35:47.155280 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 79)
 172.20.1.10.1024 > 172.20.1.2.tftp: [udp sum ok] 51 RRQ "SEPCCEF485E8FE4.cnf.xml" octet timeout 10 tsize 0
11:35:47.176136 IP (tos 0x0, ttl 64, id 2, offset 0, flags [none], proto UDP (17), length 78)
 172.20.1.10.1025 > 172.20.1.2.tftp: [udp sum ok] 50 RRQ "XMLDefault502G.cnf.xml" octet timeout 10 tsize 0
11:35:47.198578 IP (tos 0x0, ttl 64, id 3, offset 0, flags [none], proto UDP (17), length 74)
 172.20.1.10.1026 > 172.20.1.2.tftp: [udp sum ok] 46 RRQ "XMLDefault.cnf.xml" octet timeout 10 tsize 0
11:36:05.656666 IP (tos 0x0, ttl 64, id 6, offset 0, flags [none], proto UDP (17), length 68)
 172.20.1.10.1028 > 172.20.1.2.tftp: [udp sum ok] 40 RRQ "/spa502G.cfg" octet timeout 10 tsize 0
11:37:00.205328 IP (tos 0x0, ttl 64, id 2, offset 0, flags [none], proto UDP (17), length 87)
 172.20.1.10.1025 > 172.20.1.2.tftp: [udp sum ok] 59 RRQ "/Cisco/SPA502G/[MAC Address del Telefono].xml" octet timeout 10 tsize 0

In particolare, nel mio caso, ho scelto di avere il file “spa502.cfg” nella root del server TFTP:

<flat-profile>
<Resync_On_Reset>Yes</Resync_On_Reset>
<Resync_Periodic>10</Resync_Periodic>
<Profile_Rule>tftp://172.20.1.2/Cisco/SPA502G/$MA.xml</Profile_Rule>
<Primary_NTP_Server ua="na">172.20.1.2</Primary_NTP_Server>
<Time_Zone ua="na">GMT+2:00</Time_Zone>
<Date_Format ua="na">day/month</Date_Format>
<Daylight_Saving_Time_Enable ua="na">No</Daylight_Saving_Time_Enable>
<TFTP_Server ua="na">172.20.1.2</TFTP_Server>
<Current_Gateway ua="na">172.20.1.2</Current_Gateway>
<Primary_DNS ua="na">172.20.1.2</Primary_DNS>
<Proxy_1_ ua="na"></Proxy_1_>
<Signaling_Protocol group="System/System_Configuration">SIP</Signaling_Protocol>
<SPCP_Auto-detect group="System/System_Configuration">No</SPCP_Auto-detect>
<Upgrade_Enable ua="na">Yes</Upgrade_Enable>
<Upgrade_Error_Retry_Delay ua="na">3600</Upgrade_Error_Retry_Delay>
<Downgrade_Rev_Limit ua="na"></Downgrade_Rev_Limit>
<License_Keys ua="na"></License_Keys>
</flat-profile>

Tutti i file di configurazione dei singoli apparecchi sono nella directory tftp://172.20.1.2/Cisco/SPA502G/$MA.xml. La variabile $MA viene sostituita con il MAC address del telefono.

Esempio di file di configurazione:

<flat-profile>
<Station_Name ua="na">[Nome utente]</Station_Name>
<Display_Name_1_ ua="na">[Nome da visualizzare nel display]</Display_Name_1_>
<Proxy_1_ ua="na">[Server VoIP]</Proxy_1_>
<User_ID_1_ ua="na">[User account SIP]</User_ID_1_>
<Password_1_ ua="na">[Password account SIP]</Password_1_>
<Resync_Periodic>432000</Resync_Periodic>
</flat-profile>

Nel documento di cui vi ho segnalato l’URL trovate comunque la spiegazione approfondita di tutte le opzioni.

About Michele Pinassi

Nato a Siena nel 1978, dopo aver conseguito il diploma in "Elettronica e Telecomunicazioni" e la laurea in "Storia, Tradizione e Innovazione", attualmente è Responsabile del Sistema telefonico di Ateneo presso l'Università degli Studi di Siena. Utilizza quasi esclusivamente software libero. Dal 2006 si occupa di politica locale come attivista nel Movimento Siena 5 Stelle.

VoIP diagram

Primi esperimenti con il VoIP: Asterisk + OpenSIPS

0

Come avevo già scritto precedentemente, sono al lavoro per la progettazione e successiva realizzazione di un sistema VoIP piuttosto grande. Dopo aver realizzato diversi PBX Asterisk, con limitato numero di interni (10-20), indubbiamente la mia predisposizione era fortemente indirizzata verso software libero. Tuttavia Asterisk, come confermato anche da esperti del settore, non è adatto a sopportare un elevato numero di interni (si parla di 1000-2000 telefoni) perché offre tutta una serie di servizi avanzati e di transcoding non sempre necessari. Per la semplice gestione della registrazione e gestione del routing è sufficiente un SIP proxy, molto più snello di un completo sistema PBX come Asterisk. Moltissimi, compresi appliances commerciali, hanno scelto OpenSIPS:

OpenSIPS (Open SIP Server) is a mature Open Source implementation of a SIP server. OpenSIPS is more than a SIP proxy/router as it includes application-level functionalities. OpenSIPS, as a SIP server, is the core component of any SIP-based VoIP solution. With a very flexible and customizable routing engine, OpenSIPS ‘unifies voice, video, IM and presence services in a highly efficient way, thanks to its scalable (modular) design.
What OpenSIPS has to offer, comes in a reliable and high-performance flavour - OpenSIPS is one of the fastest SIP servers, with a throughput that confirms it as a solution up to enterprise or carrier-grade class.

Premetto che un forte supporto e aiuto nella comprensione del tutto mi è stata data dal libro “Building Telephony Systems with OpenSIPS 1.6“, disponibile anche su Amazon.it.

Senza voler ripetere le basi già descritte nel mio precedente post (OpenSIPS: l’Installazione), il contesto nel quale  lavoreremo in questo post è composto da:

Per quanto riguarda l’installazione di Asterisk ho scelto di NON mettere FreePBX e di configurare manualmente il tutto. Asterisk, soprattutto in questa prima fase, servirà esclusivamente come gateway con la rete telefonica tradizionale.

Vediamo velocemente la configurazione di Asterisk. In particolare ho dovuto modificare i files sip.conf:

[voip-trunk]
type=peer
fromdomain=voip.unisi.it
host=voip.unisi.it
insecure=invite
disallow=all
allow=alaw

e extensions.conf:

[macro-from-pstn-1]
exten => s,1,Noop(Entering macro-from-pstn-1 with DID = ${DID} and setting to: 2617)
exten => s,n,Set(DNID=2617)

[macro-from-pstn-2]
exten => s,1,Noop(Entering macro-from-pstn-2 with DID = ${DID} and setting to: 2650)
exten => s,n,Set(DNID=2650)

[from-pstn]
exten => _X.,1,Set(DID=${EXTEN})
exten => _X.,n,Goto(s,1)
exten => s,1,Noop(Entering from-dahdi with DID == ${DID})
exten => s,n,Ringing()
exten => s,n,Set(DID=${IF($["${DID}"= ""]?s:${DID})})
exten => s,n,Noop(DID is now ${DID})
exten => s,n,Set(CHAN=${CHANNEL:6})
exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
exten => s,n,Macro(from-pstn-${CHAN},${DID},1)
exten => s,n,Noop(Returned from-pstn-${CHAN})
exten => s,n,Dial(SIP/${DNID}@voip-trunk,20);
exten => s,n,Hangup()

[from-voip]
exten=s,1,NooP("from-voip: ${EXTEN}")
exten=>_[0-9].,1,Dial(DAHDI/g0/${EXTEN})
exten=>_[0-9].,2,hangup()

Notare che in questo caso ho solamente 2 canali PSTN configurati all’interno del gruppo 0 (DAHDI/g0). Queste impostazioni si gestiscono nel file dahdi-channels.conf:

; Span 1: WCTDM/4 "Wildcard TDM400P REV I Board 5" (MASTER) 
;;; line="1 WCTDM/4/0 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 1

...

Adesso passiamo al cuore del sistema: OpenSIPS. In questo caso deve occuparsi del routing, dell’accounting e della registrazione/autenticazione dei telefoni VoIP. Ho scelto di basare il tutto su database MySQL, creando le opportune tabelle.

Per semplificarne la gestione ho fatto configurare una VLAN sulla rete e ho messo un server DHPC che, oltre a fornire l’indirizzo IP e la configurare di rete, invia anche l’opzione 66, “tftp-server-name“, per la configurazione automatica dei telefoni (autoprovisioning). Nel nostro caso si tratta di telefoni Yealink SIP-T20P che supportano l’autoprovisioning: inviando tale opzione DHCP, i telefoni tentano di scaricare la configurazione attraverso il server TFTP indicato. Ovviamente la configurazione di ogni singolo apparecchio deve essere salvata in un file dal nome [mac-address].cfg ma anche questo dipende dal modello del telefono e dalle specifiche del produttore.

Tornando all’OpenSIPS, usato come SIP proxy, ecco la configurazione:

####### Global Parameters #########
debug=4
log_stderror=no
log_facility=LOG_LOCAL7
fork=yes
children=4
# default db_url to be used by modules requiring DB connection
db_default_url="mysql://opensips:xxx@localhost/opensips"
port=5060
listen=udp:172.20.0.1:5060

####### Modules Section ########
mpath="/usr/lib/opensips/modules/"
loadmodule "db_mysql.so"
loadmodule "signaling.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"
loadmodule "uri.so"
loadmodule "acc.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "alias_db.so"
loadmodule "domain.so"
loadmodule "presence.so"
loadmodule "permissions.so"
# ----------------- setting module-specific parameters ---------------
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("rr", "append_fromtag", 1)
modparam("registrar", "max_contacts", 10)
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "db_url","mysql://opensips:xxxx@localhost/opensips")
modparam("uri", "use_uri_table", 0)
modparam("acc", "early_media", 1)
modparam("acc", "cdr_flag", 1)
modparam("acc", "report_cancels", 1)
modparam("acc", "detect_direction", 1)
modparam("acc", "failed_transaction_flag", 3)
modparam("acc", "log_flag", 1)
modparam("acc", "log_missed_flag", 2)
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
modparam("acc", "db_table_acc", "acc")
modparam("acc", "db_url", "mysql://opensips:xxx@localhost/opensips")
modparam("acc", "db_extra", "from_uri=$fU; to_uri=$tU; ip=$si; ua=$hdr(User-Agent)")
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url","mysql://opensips:xxx@localhost/opensips")
modparam("auth_db", "load_credentials", "")
modparam("auth_db", "use_domain", 1)
modparam("alias_db", "db_url","mysql://opensips:xxxx@localhost/opensips")
modparam("domain", "db_url","mysql://opensips:xxx@localhost/opensips")
modparam("domain", "db_mode", 1) # Use caching
modparam("auth_db|usrloc|uri", "use_domain", 1)
modparam("presence", "db_url","mysql://opensips:xxx@localhost/opensips")
modparam("presence", "presentity_table", "presentity")
modparam("presence", "active_watchers_table", "active_watchers")
modparam("presence", "watchers_table", "watchers")
modparam("presence", "db_update_period", 100)
modparam("presence", "notify_offline_body", 1)
modparam("permissions", "db_url", "mysql://opensips:xxxx@localhost/opensips")
modparam("permissions", "address_table", "address")
modparam("permissions", "grp_col", "grp")
modparam("permissions", "ip_col", "ip")
modparam("permissions", "mask_col", "mask")
modparam("permissions", "port_col", "port")
modparam("permissions", "proto_col", "proto")
modparam("permissions", "info_col", "context_info")

####### Routing Logic ########

route{
 if (!mf_process_maxfwd_header("10")) {
   sl_send_reply("483","Too Many Hops");
   exit;
 }
 if (has_totag()) {
  if (loose_route()) {
   if (is_method("BYE")) {
    setflag(1); # do accounting ...
    setflag(3); # ... even if the transaction fails
   } else if (is_method("INVITE")) {
    record_route();
   }
  route(1);
 } else {
  if (is_method("SUBSCRIBE") && $rd == "172.20.0.1") {
  # in-dialog subscribe requests
   route(2);
   exit;
  }
  if ( is_method("ACK") ) {
   if ( t_check_trans() ) {
    # non loose-route, but stateful ACK; must be an ACK after 
    # a 487 or e.g. 404 from upstream server
    t_relay();
    exit;
   } else {
    # ACK without matching transaction ->
    # ignore and discard
    exit;
   }
  }
  sl_send_reply("404","Not here");
  }
 exit;
}
# CANCEL processing
if (is_method("CANCEL")) {
 if (t_check_trans())
  t_relay();
 exit;
 }
 t_check_trans();

 if (!(method=="REGISTER") && is_from_local()) {
  if(!check_source_address("0")){
   if (!proxy_authorize("", "subscriber")) {
    proxy_challenge("", "0");
    exit;
   }
   if (!db_check_from()) {
    sl_send_reply("403","Forbidden auth ID");
    exit;
   }
   consume_credentials();
   # caller authenticated
  }
 }
 # preloaded route checking
 if (loose_route()) {
  xlog("L_ERR", "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");
  if (!is_method("ACK"))
    sl_send_reply("403","Preload Route denied");
  exit;
 }
 # record routing
 if (!is_method("REGISTER|MESSAGE"))
  record_route();
 # account only INVITEs
  if (is_method("INVITE")) {
   setflag(1); # do accounting
  }
  if (!is_uri_host_local()) {
   append_hf("P-hint: outbound\r\n"); 
   route(1);
  }

 if( is_method("PUBLISH|SUBSCRIBE"))
  route(2);

 if (is_method("PUBLISH")) {
  sl_send_reply("503", "Service Unavailable");
  exit;
 }
 if (is_method("REGISTER")) {
  # authenticate the REGISTER requests
  if (!www_authorize("", "subscriber")) {
   www_challenge("", "0");
   exit;
  }
  if (!db_check_to()) {
   sl_send_reply("403","Forbidden auth ID");
   exit;
  }
  if (!save("location")) 
   sl_reply_error();
  exit;
 }
 if ($rU==NULL) {
  # request with no Username in RURI
  sl_send_reply("484","Address Incomplete");
  exit;
 }
 # apply DB based aliases 
 alias_db_lookup("dbaliases");
 # do lookup with method filtering
 if (!lookup("location","m")) {
  switch ($retcode) {
   case -1: # no contact - forward to the call to Asterisk PSTN gateway
   route(4);
   exit;
  case -3: # internal error
   t_newtran();
   t_reply("404", "Not Found");
   exit;
  case -2: # method not supported
   sl_send_reply("405", "Method Not Allowed");
   exit;
  }
 }

 # when routing via usrloc, log the missed calls also
 setflag(2);
 route(1);
}

route[1] {
 # for INVITEs enable some additional helper routes
 if (is_method("INVITE")) {
  t_on_branch("2");
  t_on_reply("2");
  t_on_failure("1");
 }
 if (!t_relay()) {
  sl_reply_error();
 };
 exit;
}

# Presence route
route[2]
{
 if (!t_newtran()) {
  sl_reply_error();
  exit;
 };
 if(is_method("PUBLISH")) {
  handle_publish();
 }
 else if( is_method("SUBSCRIBE")) {
  handle_subscribe();
 }
 exit;
}
route[4] {
 # Forward call to Asterisk 
 rewritehostport("172.20.0.5:5060");
 route(1);
}
branch_route[2] {
 xlog("new branch at $ru\n");
}
onreply_route[2] {
 xlog("incoming reply\n");
}
failure_route[1] {
 if (t_was_cancelled()) {
   exit;
 }
}

Utilizzando ngrep (ngrep -W byline -td any . port 5060) vediamo la fase di REGISTER all’accensione di un telefono (2617):

U 2012/06/08 12:18:23.083810 172.20.0.10:5062 -> 172.20.0.1:5060
REGISTER sip:voip.unisi.it SIP/2.0.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1849514868.
From: "2617" <sip:2617@voip.unisi.it>;tag=1735972936.
To: "2617" <sip:2617@voip.unisi.it>.
U 2012/06/08 12:18:24.916666 172.20.0.1:5060 -> 172.20.0.10:5062
SIP/2.0 200 OK.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1844770290.

Alla registrazione di un telefono, OpenSIPS memorizza il relativo numero (oltre ad altri dati tecnici), nella tabella “location“:

Quando dall’interno 2617 chiamo un altro numero “interno” (ad es. 2650), inteso come registrato sul medesimo proxy, ecco il flusso delle segnalazioni:

U 2012/06/08 12:32:32.512136 172.20.0.10:5062 -> 172.20.0.1:5060
INVITE sip:2650@voip.unisi.it SIP/2.0.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1302839294.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
To: <sip:2650@voip.unisi.it>
U 2012/06/08 12:32:32.611392 172.20.0.1:5060 -> 172.20.0.10:5062
SIP/2.0 100 Giving a try.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK836251423.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
To: <sip:2650@voip.unisi.it>.
U 2012/06/08 12:32:32.611712 172.20.0.1:5060 -> 172.20.0.12:5062
INVITE sip:2650@172.20.0.12:5062 SIP/2.0.
Record-Route: <sip:172.20.0.1;lr;ftag=533584413>.
Via: SIP/2.0/UDP 172.20.0.1;branch=z9hG4bK6231.d78da302.0.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK836251423.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
To: <sip:2650@voip.unisi.it>.
U 2012/06/08 12:32:32.790067 172.20.0.12:5062 -> 172.20.0.1:5060
SIP/2.0 180 Ringing.
Via: SIP/2.0/UDP 172.20.0.1;branch=z9hG4bK6231.d78da302.0.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK836251423.
Record-Route: <sip:172.20.0.1;lr;ftag=533584413>.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
To: <sip:2650@voip.unisi.it>;tag=379428395.
U 2012/06/08 12:32:32.792249 172.20.0.1:5060 -> 172.20.0.10:5062
SIP/2.0 180 Ringing.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK836251423.
Record-Route: <sip:172.20.0.1;lr;ftag=533584413>.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
To: <sip:2650@voip.unisi.it>;tag=379428395.

Se il 2650 non risponde e il chiamante decide di rinunciare, ecco che parte una segnalazione CANCEL e si chiude la chiamata:

U 2012/06/08 12:32:37.588802 172.20.0.1:5060 -> 172.20.0.10:5062
SIP/2.0 200 canceling.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK836251423.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
To: <sip:2650@voip.unisi.it>;tag=643c56a457061490c918aea728c07866-83f3.
U 2012/06/08 12:32:37.589140 172.20.0.1:5060 -> 172.20.0.12:5062
CANCEL sip:2650@172.20.0.12:5062 SIP/2.0.
Via: SIP/2.0/UDP 172.20.0.1;branch=z9hG4bK6231.d78da302.0.
From: "2617" <sip:2617@voip.unisi.it>;tag=533584413.
Call-ID: 1123041723@172.20.0.10.
To: <sip:2650@voip.unisi.it>.

Quando l’interno 2617 chiama un numero esterno, esempio 2169, ecco che OpenSIPS reindirizza la chiamata all’Asterisk:

U 2012/06/08 12:38:37.068478 172.20.0.10:5062 -> 172.20.0.1:5060
INVITE sip:2169@voip.unisi.it SIP/2.0.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1064669372.
From: "2617" <sip:2617@voip.unisi.it>;tag=969196503.
To: <sip:2169@voip.unisi.it>.
U 2012/06/08 12:38:37.072909 172.20.0.1:5060 -> 172.20.0.10:5062
SIP/2.0 100 Giving a try.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1064669372.
From: "2617" <sip:2617@voip.unisi.it>;tag=969196503.
To: <sip:2169@voip.unisi.it>.
U 2012/06/08 12:38:37.074540 172.20.0.1:5060 -> 172.20.0.5:5060
INVITE sip:2169@172.20.0.5:5060 SIP/2.0.
Record-Route: <sip:172.20.0.1;lr;ftag=969196503>.
Via: SIP/2.0/UDP 172.20.0.1;branch=z9hG4bKe413.748e1db.0.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1064669372.
U 2012/06/08 12:38:37.077108 172.20.0.5:5060 -> 172.20.0.1:5060
SIP/2.0 100 Trying.
Via: SIP/2.0/UDP 172.20.0.1;branch=z9hG4bKe413.748e1db.0;received=172.20.0.1.
Via: SIP/2.0/UDP 172.20.0.10:5062;branch=z9hG4bK1064669372.

Se accade l’opposto, ovvero dalla rete PSTN (es. numero 2169) chiamano un numero interno 2617:

U 2012/06/08 12:41:27.002715 172.20.0.5:5060 -> 172.20.0.1:5060
INVITE sip:2617@voip.unisi.it SIP/2.0.
Via: SIP/2.0/UDP 172.20.0.5:5060;branch=z9hG4bK1fce9b73;rport.
Max-Forwards: 70.
From: "asterisk" <sip:asterisk@voip.unisi.it>;tag=as49579a42.
To: <sip:2617@voip.unisi.it>.
Contact: <sip:asterisk@172.20.0.5>.

Su Asterisk ho:

-- Starting simple switch on 'DAHDI/1-1'
 -- Executing [s@from-pstn:1] NoOp("DAHDI/1-1", "Entering from-dahdi with DID == ") in new stack
 -- Executing [s@from-pstn:2] Ringing("DAHDI/1-1", "") in new stack
 -- Executing [s@from-pstn:3] Set("DAHDI/1-1", "DID=s") in new stack
 -- Executing [s@from-pstn:4] NoOp("DAHDI/1-1", "DID is now s") in new stack
 -- Executing [s@from-pstn:5] Set("DAHDI/1-1", "CHAN=1-1") in new stack
 -- Executing [s@from-pstn:6] Set("DAHDI/1-1", "CHAN=1") in new stack
 -- Executing [s@from-pstn:7] Macro("DAHDI/1-1", "from-pstn-1,s,1") in new stack
 -- Executing [s@macro-from-pstn-1:1] NoOp("DAHDI/1-1", "Entering macro-from-pstn-1 with DID = s and setting to: 2617") in new stack
 -- Executing [s@macro-from-pstn-1:2] Set("DAHDI/1-1", "DNID=2617") in new stack
 -- Executing [s@from-pstn:8] NoOp("DAHDI/1-1", "Returned from-pstn-1") in new stack
 -- Executing [s@from-pstn:9] Dial("DAHDI/1-1", "SIP/2617@voip-trunk,20") in new stack
 == Using SIP RTP CoS mark 5
 -- Called 2617@voip-trunk
 -- SIP/voip-trunk-0000006b is ringing

Ho ovviamente rimosso tutte le segnalazioni di ACK e di OK non necessarie alla comprensione del flusso di funzionamento. Credo comunque che sia piuttosto chiaro il flusso delle segnalazioni SIP. Importante citare che la voce viene inviata via RTP da telefono a telefono pertanto considerate che, a meno di prevedere proxy RTP, tutti gli apparecchi devono essere raggiungibili sulla rete.

Ovviamente queste sono da considerarsi note di lavoro e sono, pertanto, soggette a errori, imprecisioni e omissioni.

 

About Michele Pinassi

Nato a Siena nel 1978, dopo aver conseguito il diploma in "Elettronica e Telecomunicazioni" e la laurea in "Storia, Tradizione e Innovazione", attualmente è Responsabile del Sistema telefonico di Ateneo presso l'Università degli Studi di Siena. Utilizza quasi esclusivamente software libero. Dal 2006 si occupa di politica locale come attivista nel Movimento Siena 5 Stelle.

SIP-T20P

Yealink SIP-T20P VoIP Phone

0

Per motivi di lavoro mi occupo di VoIP, così ho iniziato ad aver a che fare anche con i telefoni VoIP che supportano protocollo SIP (Esistono anche altri protocolli VoIP, quali Skinny -Cisco- e H.323).

Ultimamente abbiamo acquistato una dozzina di Yealink SIP-T20P, che hanno un costo relativamente basso e sembrano possedere discrete qualità tecniche.

Direttamente dal sito web Yealink si possono vedere le caratteristiche. Di seguito riassumo le principali:

  • 2 VoIP accounts, hotline, emergency call
  • Multi-language (more than 20)
  • IP PBX System Integration
  • Codecs: G.722 G.711, G.723.1, G.726, G.729AB
  • VAD, CNG, AEC, PLC, AJB, AGC
  • SIP v1 (RFC2543), v2 (RFC3261)
  • NAT Traversal: STUN mode
  • DTMF: In-Band, RFC2833, SIP Info
  • TFTP/DHCP/PPPoE client
  • Telnet/HTTP/HTTPS server
  • FTP/TFTP/HTTP/PnP auto-provision
  • Security: HTTPS (server/client), SRTP (RFC3711), Transport Layer Security (TLS), VLAN (802.1 pq), QoS

Nella scatola, oltre al telefono e alla base, trovate l’alimentatore da rete 110/220V, il cavo ethernet cat. 5 e il CD con il manuale.

Ecco qualche foto del telefono e screenshots della configurazione:

La programmazione può essere fatta dal display del telefono oppure via web, assegnando un IP via DHCP. L’account di default per accedere all’interfaccia di amministrazione via web è: admin/admin.

Altra caratteristica interessante, oltre alle numerosissime opzioni offerte dal firmware, è la possibilità di esportare e importare la configurazione completa dell’apparecchio. Noi ne abbiamo presi due di scorta e, a seguito del guasto di un telefono, in 5 minuti ne avevo subito uno pronto con la stessa configurazione.

La qualità costruttiva è standard di un prodotto cinese, tuttavia la Yealink è una delle leader della produzione di questi telefoni e molte marche rivendono questi apparecchi semplicemente ribrandizzandoli.

L’audio è molto buono e nei 3 mesi di utilizzo non hanno dato problemi segni di nota (se non un apparecchio che ha avuto problemi con il display).

Alla fine sono un buon rapporto qualità/prezzo.

About Michele Pinassi

Nato a Siena nel 1978, dopo aver conseguito il diploma in "Elettronica e Telecomunicazioni" e la laurea in "Storia, Tradizione e Innovazione", attualmente è Responsabile del Sistema telefonico di Ateneo presso l'Università degli Studi di Siena. Utilizza quasi esclusivamente software libero. Dal 2006 si occupa di politica locale come attivista nel Movimento Siena 5 Stelle.

Go to Top