Capitolo 2 Installazione e configurazione di OpenIMSCore

Capitolo 2
Installazione e configurazione di
OpenIMSCore
In questo lavoro di tesi, è stato adoperato il software opensource OpenIMS per
implementare la struttura basilare di una architettura IMS.
Open Source IMS Core [22] è un software per il test dell’architettura IMS creato da
Fraunhofer Institute FOKUS. Gli sviluppatori di OpenIMSCore sottolineano che
OpenIMSCore non è destinato a diventare un prodotto commerciale. Il suo unico
scopo è quello di fornire una piattaforma IMS di riferimento per l'implementazione
della tecnologia IMS e per la sperimentazione di prototipi per scopi di ricerca.
Questo obiettivo ha inoltre motivato la decisione di rilasciare il codice
dell’applicativo sotto licenza GPL.
FOKUS ha sviluppato una piattaforma stabile che implementa le funzioni basilari
dell’architettura IMS. Ultimamente, la loro attenzione si sta focalizzando
58
sull’implementazione di applicativi opensource (Application Server), basati sugli
standard della IETF e di altri organi di standardizzazione.
L’Open Source IMS Playground@FOKUS è un ambiente opensource testbed in cui
implementare le funzionalità introdotte dagli standard IMS .
L’Open IMS Playground include i seguenti componenti:
Open Source IMS Core: è il cuore dell’Open IMS Playground e si compone di:
o Home Subscriber Server (HSS) – "FHoSS"
o Call Session Control Functions (CSCFs)
Open IMS Client – "OpenIC" : un client che gira sui terminali e apparati fissi e
mobili. Esso è disponibili in Java e .NET.
Open IMS SIP AS – "SIPSEE": è un SIP Application Server che fornisce un
ambiente di servizi convergenti SIP e HTTP per la creazione di nuovi servizi;
Parlay X Gateway – "OCS-X": il gateway fornisce agli sviluppatori le
interfacce API Parlay X Web Services utili per la creazione di nuovi servizi;
IMS Management: implementa il sistema di gestione della rete IMS al fine di
monitorare e controllare il funzionamento dei componenti cuore della
piattaforma IMS;
XML Document Management Server (XDMS): genera delle informazioni
accessibili per l’attivazione di servizi in riferimento ad un determinato
utente;
Presence Server: fornisce un servizio di presence per molteplici applicazioni
quali Instant Messaging, Push to Talk over Cellular, Video Calls/Conferences
e altri.
GBA - Generic Bootstrapping Architecture: abilita un sistema di
autenticazione forte (strong authentication);
59
PoCCA - Policy and Charging Control Architecture: fornisce i servizi di
controllo e gestione della risorse in base alle Policy e ai contratti stretti con
gli utenti [22].
1
Introduzione ad OpenIMSCore
Open Source IMS Core si compone di Call Session Control Functions (CSCFs), gli
elementi principali per il routing di messaggi di segnalazione all’interno della rete
IMS, e un Home Subscriber Server (HSS) per gestire i profili utente e le relative
regole di routing. I CSCF (Proxy, Interrogating, e Service) sono stati sviluppati da
FOKUS come estensioni del SIP Express Router (SER). Ma dal momento che anche la
funzionalità base di routing di messaggi di segnalazione in IMS richiede informazioni
look-up in un HSS. Per questo motivo, il FOKUS Home Subscriber Server (FHoSS) è
entrato a far parte del progetto OpenIMSCore.
Il progetto OpenIMSCore fornisce l’interfaccia 3GPP IMS Service Control (ISC) che
permette agli sviluppatori di usufruire delle funzioni di routing, delle funzioni di
applicazione dei trigger e altre funzioni ad essa legate [22].
In figura 2.1 viene presentata l’architettura IMS implementata dal progetto
OpenIMSCore.
60
Figura 2.1 – Architettura IMS implementata dal progetto OpenIMSCore
Sia i moduli CSCF che il FHoSS sono stati rilasciati sotto licenza GNU General Public
License v.2.
1.1
Open IMS Call Session Control Functions – CSCFs
Anche se l'IMS si basa su specifiche IETF, il protocollo SIP richiede determinate
estensioni per essere utilizzato in un ambiente IMS. Il principale requisito per
OpenIMS è stato quello di fornire un insieme di componenti base di IMS che
consentiranno lo sviluppo di altri componenti che si può poggiano su quest’ultimi.
L'obiettivo principale è quello di implementare le funzionalità CSCF richieste dalle
specifiche Release 6 dello standard 3GPP IMS.
61
Gli Open IMS CSCF sono costruiti su SIP Express Router (SER), che può agire come
SIP Registrar, SIP Proxy o Redirect Server ed è in grado di gestire la segnalazione di
di migliaia di chiamate al secondo. Ha una struttura modulare che permette di
estendere le funzionalità. Ogni CSCF entità della OpenIMSCore è stata
implementata come un modulo SER caricabile dinamicamente che aggiunge al SER
le operazioni richieste in modo che possa agire in base alle specifiche tecniche
3GPP. I moduli sono in grado di processare i dati in parallelo e mantenere le
informazioni di stato.
Un altro requisito per la CSCF è stato quello di mantenere il più possibile le
prestazioni del SER. Avendo SER ottenuto un vasto consenso nel mondo SIP,
diventando quasi uno standard per le sue prestazioni, l'OpenIMS CSCF ne ha
ereditato le stesse prestazioni [22].
1.1.1 P-CSCF
Il modulo P-CSCF svolge la funzione di firewall nella rete IMS: solo i terminali
registrati possono inviare messaggi all'interno della rete IMS. Inoltre, il P-CSCF
autentica gli utenti. Per questo, a seguito della registrazione, il P-CSCF stabilisce
canali garantiti individualmente per ogni User Endpoint (UE) e per ogni servizio. Per
tenere traccia degli utenti registrati, presenta un Registrar invertito, che viene
aggiornato attraverso la cattura dei messaggi del processo di registrazione. I dati
effettivi sono conservati in una tabella di hash per consentire un rapido recupero
delle informazioni.
Per la segnalazione di chiamate il P-CSCF genera un vettore di tariffazione e
inserisce gli identificatori di rete e di percorso che sono necessari per la corretta
ulteriore elaborazione dei messaggi SIP. Dopo il successo del processo di
registrazione a una rete IMS, i successivi messaggi sono trasmessi basandosi sulle
informazioni del DNS scambiante all’interno della rete IMS domestica. Per quanto
riguarda le questioni di NAT per la segnalazione SIP è in grado di agire come un
62
router in entrambe le reti. Inoltre, i moduli NAT Traversal sono stati adattati per
meccanismi di storage delle locazioni di uno specifico utente [22].
In figura 2.2 è presente la struttura del P-CSCF implementato dal progetto
OpenIMSCore.
Figura 2.2 – Struttura del modulo P-CSCF implementato dagli sviluppatori FOKUS
1.1.2 I-CSCF
Il Interrogating-CSCF (I-CSCF) ha il ruolo di un proxy stateless che, utilizzando
l'identità pubblica del chiamante o del chiamato, interroga l’Home Subscriber
Server (HSS) e si basandosi sulle risposte inoltra il messaggio al corretto S-CSCF. Il
progetto OpenIMSCore ha implementato l'interfaccia Cx tra l’I-CSCF e l’HSS.
Pertanto, supporta i comandi Diameter necessari per individuazione dell’S-CSCF
assegnato all’utente o per selezionare, sulla base dei dati di performance, un nuovo
S-CSCF e verificare le identità e le autorizzazioni di roaming così come specificato
nel 3GPP TS 29.228 [11].
Dopo aver ricevuto una risposta positiva ai messaggi Diameter inviati, l’I-CSCF
inoltra i messaggi SIP in una modalità transazionale. È stato ottimizzato per
aumentare la velocità di memorizzazione delle informazioni riducendole allo stretto
necessario. Per proteggere la rete, I-CSCF ha le funzioni di firewall che permette
63
l’invio di messaggi di segnalazione provenienti da reti di fiducia attraverso il
Network Domain Security (NDS) [22].
Le caratteristiche dell’I-CSCF sono:
Pieno supporto all’interfaccia Diameter Cx (LIR, UAR);
Selezione dell’S-CSCF basata sulle capability degli utenti;
Supporto agli header Visited-Network-ID e alla verifica dei diritti di roaming;
Capacità di nascondere la topologia di rete (THIG);
Network Domain Security (NDS).
In figura 2.3 è presente la struttura dell’I-CSCF implementato dal progetto
OpenIMSCore [22].
Figura 2.3 – Struttura del modulo I-CSCF implementato dagli sviluppatori FOKUS
1.1.3 S-CSCF
L’S-CSCF implementato dagli sviluppatori FOKUS comunica con l'HSS utilizzando
Diameter (per l'interfaccia Cx) al fine di recuperare i vettori di autenticazione, di
64
aggiornare informazioni di registrazione e di scaricare i profili utente, come
specificato nel 3GPP TS 23.228 [11]. L’S-CSCF può modificare il profilo utente
attraverso l’initial Filter Criteria (iFC) per far rispettare le specifiche di routing SIP.
Esso implementa il supporto per la realizzazione del IMS Digest AKA (Authentication
and Key Agreement) versione 1. Piuttosto che la generazione di vettori di
autenticazione esso si basa sulla HSS confrontando i valori ricavati dall’HSS con
quelli calcolati nella UE.
Per ottenere tempi di risposta rapidi, il Registar del S-CSCF ha una struttura
complessa basata su tabelle hash. L’informazione che è necessario per identificare
un utente relativo ad un determinato apparato (User Equipment) è memorizzato
nell’S-CSCF, e viene utilizzato successivamente per il routing della chiamata.
Le caratteristiche dell’OpenIMS S-CSCF sono [22]:
Supporto all’interfaccia Diameter Cx (MAR, RAS, PPR, RST);
Autenticazione attraverso AKAv1-MD5, AKAv2-MD5 e MD5;
Supporto agli header Service-Route;
Supporto agli header Path;
Supporto agli header P-Asserted-Identity;
Supporto agli header Visited-Network-ID;
Download degli User Profile dall’HSS;
Trigger degli intial Filter Criteria;
Supporto all’interfaccia ISC verso Application Server;
Server di notifica di eventi "Reg" con restrizioni di accesso;
Dialogo statefulness.
In figura 2.4 è presente la struttura dell’S-CSCF implementato dal progetto
OpenIMSCore.
65
Figura 2.4 - Struttura del modulo S-CSCF implementato dagli sviluppatori FOKUS
1.1.4 Moduli di OpenIMS CSCF
I moduli CSCF possono processare in parallelo le informazioni sullo stato. Inoltre, vi
è una particolare attenzione verso la scalabilità sia per la distribuzione del carico
che per la quantità di dati. I principali moduli di OpenIMS CSCFs sono:
CDiameterPeer Module (cdp): questo modulo è utilizzato per il routing nel
realm, dobbiamo specificare ogni volta il FQDN (Fully Qualified Domain
Name) dell’ host di destinazione quando il suddetto modulo viene utilizzato.
Si suppone che sia possibile instaurare comunicazioni Diameter efficenti da e
verso SER.
IMS Service Control Module (isc): è utilizzato per fornire il supporto per
l'interfaccia ISC tra il Serving-CSCF e l’Application Server. Per poterlo
utilizzare, abbiamo bisogno che il Serving-CSCF Module (scscf) sia stato
caricato in quanto esso utilizza il registrar e il filtro initial Filter Criteria.
Proxy-CSCF Module (pcscf): il Pcscf Module è utilizzato per fornire le
funzionalità necessarie per un Proxy-CSCF.
66
Interrogating-CSCF Module (icscf): fornisce le funzionalità richieste per uno
Interrogating-CSCF. Abbiamo bisogno che il Module cdp sia stato caricato in
quanto esso comunica con la Home Subscriber Server tramite l’interfaccia
Diameter.
Serving-CSCF Module (scscf): fornisce le funzionalità richieste da un ServingCSCF. Per poterlo utilizzare, il Module cdp deve essere caricato. Infatti, il
scscf comunica con HSS tramite l’interfaccia Diameter Cx.
SIP-to-IMS Gateway Module (sip2ims): essa fornisce il servizio di NAT Helper
per i client SIP. Ha le funzionalità di traduzione per permette ai client SIP
Endpoints di accedere all'OpenIMSCore tramite il Proxy-CSCF. L'open source
IMS SIP2IMS gateway consente la trasformazione di messaggi IETF SIP in
messaggi compatibili con IMS. Esso traduce i messaggi d’autenticazione
Digest MD5 in messaggi AKA compatibili con IMS [22].
1.2
FOKUS Home Subscriber Server (FHoSS)
Open Source Core IMS sarebbe incompleto senza una Home Subscriber Server.
FOKUS ha sviluppato un proprio prototipo HSS, la FOKUS HSS (FHoSS), che è
interamente scritto in Java e si basa su software Open Source. I profili utenti e le
configurazioni delle entità IMS sono memorizzate all'interno di un database MySQL.
Il FHoSS è indirizzato principalmente verso la conformità, piuttosto che le
prestazioni. Essa è soprattutto un configuratore per il Database Management
System e per le interfacce Diameter tra HSS e CSCF e tra HSS e gli Application
Server.
67
Figura 2.5 – Interfacce Diameter di comunicazione con le altre entità IMS
Dalla figura 2.5, possiamo constatare che gli attori che comunicano con il FHoSS
sono gli Application Server (AS) che ospitano e eseguono i servizi in un ambiente
IMS, il Security Domain e i Call State Control Function (CSCF). FHoSS memorizza le
configurazioni degli utenti presenti sugli Application Server attraverso l’interfaccia
Sh e comunica con i CSCF attraverso l’interfaccia Cx. Inoltre, si connette con il
Security Domain tramite interfaccia Zh [22].
FHoSS estende il progetto Open Source Open Diameter e implementa le funzionalità
specifiche dell’interfaccia Cx e Sh basate su Java. Il FHoSS memorizza i profili utente
per mezzo delle informazioni di autenticazione e autorizzazione e fornisce
informazioni di stato con un servizio di notifica agli Application Server attraverso
l’interfaccia Sh *24+.
In figura 2.6 è presente la struttura dell’FHoSS implementato dal progetto
OpenIMSCore.
68
Figura 2.6 - Struttura del modulo FHoSS implementato dagli sviluppatori FOKUS
1.2.1 Interface Layer
Il nucleo della FHoSS è il HssDiameterStack. Utilizza DiameterPeer per inviare le
richieste alle altre entità e recupera le richieste e le risposte attraverso il
CommandListener. Ci sono tre interfacce utilizzate in FHoSS: Sh, Cx, e Zh. Esse
possono essere trovate nel pacchetto de.fhg.fokus.cx, nel pacchetto de.fhg.fokus.sh
e nel pacchetto de.fhg.fokus.zh . Per ogni interfaccia vi è una implementazione
diretta.
Questa
implementazione
può
essere
ritrovata
nel
pacchetto
de.fhg.fokus.hss.server e nei successivi pacchetti. Per ogni metodo dell’interfaccia vi
sono delle classi di operazioni presenti nel pacchetto op.
Queste operazioni saranno chiamate dalle implementazioni delle interfaccia e, a sua
volta, essa sarà chiamata dai comandi Diameter. Per ogni interfaccia, a ogni metodo
è associata ad un certo numero di richieste Diameter. Tali richieste sono state
realizzate dall’implementazioni delle classi CommandAction e CommandListener.
69
Per ogni comando inviato attraverso i tre package (de.fhg.fokus.zh, de.fhg.fokus.cx
e de.fhg.fokus.sh), che saranno ricevuti dal Hss esiste un programma listener. Le
richieste saranno inviate ai rispettivi metodi usati dall'interfaccia [24].
1.2.2 Data Access Layer (DAL)
I dati degli utenti sono memorizzati in un database del FHoSS. Il framework
Hibernate è stato utilizzato per la costruzione del Data Access Layer. Esso è utile per
modificare il sistema del database. Le relative classi di dati si trovano nel pacchetto
de.fhg.fokus.hss.model.
Figura 2.7 – Struttura dei database presenti nel modulo FHoSS
I dati dell’utente sono mantenuti all'interno di un database MySQL. Tuttavia, vi è un
Data Access Layer (DAL), che è basato su JDBC (Java DataBase Connectivity), un
connettore per database che consente l'accesso alle basi di dati da qualsiasi
programma scritto con il linguaggio di programmazione Java, indipendentemente
dal tipo di DBMS utilizzato.
70
1.2.3 Graphical User Interface (GUI)
Per gestire il FHoSS, è stata implementata una interfaccia di gestione basata su una
interfaccia web. Questo fornisce una chiara struttura e la logica separazione dei task
connessi alla GUI. L’implementazione della GUI si trova nel pacchetto
de.fhg.fokus.hss.form e de.fhg.fokus.hss.action. Il rendering è costituito da molte
Java Server Page, che possono essere trovate nella cartella src-web [24].
2
Installazione e configurazione di OpenIMSCore
Adesso verrà presentata una guida di installazione e configurazione di
OpenIMSCore. Successivamente, verrà configurata l’OpenIMSCore in base alle
specifiche imposte da questo lavoro di tesi.
L’installazione di OpenIMSCore si compone delle seguenti fasi:
Installazione dei prerequisiti;
Installazione e configurazione di FHoSS;
Installazione e configurazione dei CSCF;
Configurazione del BIND DNS;
Attivazione delle entità IMS;
Configurazione degli utenti.
2.1
Installazione dei prerequisiti
Come si può notare dalla figura 2.8, prima di installare i componenti chiave di
OpenIMS, dobbiamo rispettare determinati prerequisiti hardware, software e di
rete.
71
Figura 2.8 – Setup del sistema OpenIMSCore
Per l'ambiente di hardware, abbiamo bisogno di un desktop Linux. Usiamo Ubuntu
7.10 scaricabile dal sito http://www.ubuntu.com/.
Inoltre, al fine di ottenere buone prestazioni, abbiamo bisogno di diversi gigabyte di
RAM e di una CPU performante.
Per quanto riguarda l'accesso alla rete, è sufficiente avere un indirizzo pubblico.
Al fine di garantire il buon funzionamento del sistema, sono necessari 100 MB di
spazio su disco. Inoltre sono necessari i software Subversion (o Svn), Gcc 3/4, JDK1.5
e ant.
Inoltre viene utilizzato MySQL come un sistema di gestione di database (DBMS)
all’interno di FHoSS, I-CSCF e altre funzioni che richiedono un DBMS. Sono
obbligatori i software libxml2 e libmysql. Il kernel Linux 2.6 e ipsec-tools, che viene
utilizzato per setkey, sono necessari per utilizzare IPSec SA. Inoltre, usiamo bind 9
come server DNS.
Una volta che tutti i requisiti sono stati soddisfatti, possiamo cominciare a installare
e configurare il FHoSS, che è la componente fondamentale di OpenIMS.
72
2.2
Installazione e configurazione di FHoSS
L’installazione e la configurazione di FHoSS si basa sui seguenti passi:
Scaricare il codice sorgente;
Compilare il codice sorgente;
Configurare il database;
2.2.1 Scaricare il codice sorgente
Possiamo
scaricare
il
codice
sorgente
http://svn.berlios.de/svnroot/repos/openimscore/FHoSS/trunk
dal
sito
utilizzando
Subversion. Il codice sorgente è pre-configurato per lavorare da uno percorso
standard.
Inzialmente creiamo la directory “OpenIMSCore” nella cartella “/opt/” e ci entriamo
dentro. Successivamente, creiamo la directory FHoSS e scarichiamo il codice
sorgente.
Le operazioni precedente descritte vengono tradotte dai seguenti comandi:
mkdir /opt/OpenIMSCore
cd /opt/OpenIMSCore
mkdir FHoSS
svn checkout http://svn.berlios.de/svnroot/repos/openimscore/FHoSS/trunk FHoSS
2.2.2 Compilare il codice sorgente
Prima di compilare il codice sorgente, dobbiamo accertarci di aver installato la JDK ≥
1.5 e di aver settato la variabile d’ambiente JAVA_HOME. Successivamente, compiliamo
e installiamo FHoSS utilizzando Ant.
Dobbiamo inizialmente eseguire il comando gen di Ant, per generare le classi di
dati:
ant gen
Dopo compiliamo i binari:
ant compile
e infine attraverso il comando deploy completiamo l’installazione di FHoSS:
ant deploy
73
Infine
modifichiamo
il
file
ZhDataType.xsd
presente
nella
cartella
“/opt/OpenIMSCore/FHoSS/xsd/”:
vi /opt/OpenIMSCore/FHoSS/xsd/ZhDataType.xsd
e sostituiamo la linea
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
con
schemaLocation="file:///opt/OpenIMSCore/FHoSS/xsd/xml.xsd"/>
2.2.3 Configurare il database
Abbiamo bisogno di un database, al fine di utilizzare FHoSS. Possiamo trovare due
script sql per il database MySQL nella directory root della nostra installazione.
Utiliziamo questi script per creare un nuovo database MySQL e per popolarlo con i
valori di default.
Per la creazione del database e delle tabelle lanciamo il comando:
mysql –uroot –p < hss_db.sql
Per creare i due utenti demo e settare i valori iniziali per i Service Profile lanciamo:
mysql –uroot –p < user_data.sql
Adesso FHoSS è stato installato con una configurazione di default. Successivamente,
verrà configurato in base alle richieste imposte da questo lavoro di tesi.
2.3
Installazione e configurazione dei CSCF
L’installazione e la configurazione dei CSCF si basa sui seguenti passi:
Scaricare il codice sorgente;
Compilare il codice sorgente;
Configurare il database.
2.3.1 Scaricare il codice sorgente
Possiamo
scaricare
il
codice
sorgente
http://svn.berlios.de/svnroot/repos/openimscore/ser_ims/trunk
dal
sito
utilizzando
74
Subversion. Il codice sorgente è pre-configurato per lavorare da uno percorso
standard.
Inzialmente creiamo la directory “ser_ims” nella cartella “/opt/OpenIMSCore” e
scarichiamo il codice sorgente.
Le operazioni precedente descritte vengono tradotte dai seguenti comandi:
mkdir ser_ims
svn checkout http://svn.berlios.de/svnroot/repos/openimscore/ser_ims/trunk
ser_ims
2.3.2 Compilare il codice sorgente
La compilazione del codice sorgente avviene lanciando il comando
cd ser_ims
make install-libs all
cd ..
Questa operazione può completarsi dopo diversi minuti.
2.3.3 Configurare il database
Abbiamo bisogno di settare correttamente il database, al fine di permette al
modulo dell’I-CSCF di accedere al database:
mysql –uroot –p < ser_ims/cfg/icscf.sql
2.4
Configurazione del BIND DNS
Dobbiamo adesso configurare il server DNS BIND che è stato installato durante
l’installazione dei prerequisiti software.
All’interno del codice sorgente è presente un file “open-ims.dnszone” nella cartella
“/opt/OpenIMSCore/ser_ims/cfg/” utile per la configurazione del server BIND.
Ricordo che la configurazione base di OpenIMSCore impone che l’installazione delle
4 funzioni di IMS avvenga sulla stessa macchina e che ogni entità CSCF sia in ascolto
sull’interfaccia di loopback e su una porta UDP diversa:
P-CSCF: porta UDP 4060
I-CSCF: porta UDP 5060
75
S-CSCF: porta UDP 6060
In appendice B è presente il file “open-ims.dnszone” contenuto nel codice sorgente.
Copiamo il file “open-ims.dnszone” nella cartella “/etc/bind”:
cp /opt/OpenIMSCore/ser_ims/cfg/open-ims.dnszone /etc/bind/
Aggiungiamo al file “/etc/bind/named.conf.local” le seguenti righe:
zone "open-ims.test" {
type master;
file "/etc/bind/open-ims.dnszone";
};
Riavviamo il server DNS con il seguente comando:
/etc/init.d/bind9 restart
Dobbiamo fare in modo che le entità OpenIMSCore possano contattare il server
DNS BIND. Per questo motivo editiamo il file “/etc/resolv.conf” aggiungendo le
seguenti righe:
search open-ims.test
nameserver 127.0.0.1
2.5
Attivazione delle entità IMS
Per semplificare l’esecuzione delle entità, possiamo copiare i file “pcscf.cfg”,
“pcscf.sh”, “icscf.cfg”, “icscf.xml”, “icscf.sh”, “scscf.cfg”, “scscf.xml” e “scscf.sh”
nella cartella “/opt/OpenIMSCore”:
cp /opt/OpenIMSCore/ser_ims/cfg/*.cfg /opt/OpenIMSCore
cp /opt/OpenIMSCore/ser_ims/cfg/*.xml /opt/OpenIMSCore
cp /opt/OpenIMSCore/ser_ims/cfg/*.sh
/opt/OpenIMSCore
76
Successivamente, possiamo lanciare i 4 script di shell che rappresentano le 4 entità
IMS:
./pcscf.sh
./icscf.sh
./scscf.sh
./fhoss.sh
2.6
Configurazione degli utenti
Si può accedere alla console di gestione usando un web browser e inserendo
l’indirizzo http://localhost:8080/hss.web.console. Dopo essersi loggato con l’utente
“hssAdmin” e la password “hss”, possiamo navigare all’interno del sistema di
gestione dell’architettura IMS.
Di default, sono stati creati due utenti IMS il cui Public User Identity è
sip:[email protected] e sip:[email protected]. Come si può notare, il realm nel
quale questi due utenti sono stati definiti è open-ims.test, il realm di default.
Ora vediamo come può essere creato un nuovo utente sfruttando l’interfaccia web
di gestione.
Supponiamo di voler creare un utente con le seguenti caratteristiche:
IMSU (IMS Subscription): davide
IMPI (IMS Private Identity): [email protected]
IMPU (IMS Public Identity): sip:[email protected]
Secret Key: davide
Come si può notare, l’utente creato ha un username davide e appartiene al realm di
default.
Nelle figure 2.9, 2.10 e 2.11 sono presenti gli screenshot dell’interfaccia web di
gestione per la creazione, rispettivamente, dell’IMSU, dell’IMPI e dell’IMPU
dell’utente davide.
77
Figura 2.9 – Screenshot dell’interfaccia web di gestione riguardante la creazione dell’IMSU
dell’utente davide
Dopo aver settato il Name (figura 2.9), possiamo opzionalmente associare all’utente
davide un Capabilities Set e un Preferred S-CSCF. Inoltre all’IMSU creato viene
associato il IMPI identity [email protected].
78
Figura 2.10 – Screenshot dell’interfaccia web di gestione riguardante la creazione dell’IMPI
dell’utente davide
Nell’interfaccia web (2.10), dobbiamo settare l’Identity e la Secret Key. Inoltre,
possiamo scegliere tra gli schemi di autenticazioni (Authentication Schemes) forniti
dal sistema OpenIMS quello che desideriamo utilizzare per quel determinato
utente. Infine, dobbiamo settare le associazioni della IMPI dell’utente con l’IMSU e
con l’IMPU dell’utente. Cosi come è stato descritto nel paragrafo 6.1.3 del capitolo
1, ad un IMSU possono essere associati più IMPI e ad un IMPI possono essere
associati più IMPU.
79
Figura 2.11 - Screenshot dell’interfaccia web di gestione riguardante la creazione dell’IMPU
dell’utente davide
Anche nella creazione dell’IMPU (figura 2.11), dobbiamo settare l’Identity, il Service
Profile, il IMPU Type, e dobbiamo associare all’IMPU la Visited-Network a cui
l’utente appartiene (nel nostro caso, open-ims.test), l’IMPI Identity e l’IMPU
Identity.
3
Configurazione personalizzata di OpenIMSCore
In questo lavoro di tesi è stata installata una configurazione personalizzata di
OpenIMSCore. In particolare, sono state create 4 macchine virtuali utilizzando il
software Vmware Server Edition installato su un PC HP Proliant con le seguenti
caratteristiche:
CPU: Intel Xeon CPU 3.40 GHz
Ram: 3 GB
80
SO: Microsoft Windows Server 2003 Service Pack 2
Le 4 macchine virtuali presentano le seguenti caratteristiche:
P-CSCF
o CPU: Intel Xeon CPU 3.40 GHz (condiviso)
o Ram: 512 MB
o SO: Ubuntu Linux 7.10 Gutsy Gibbon
o IP: 192.168.10.92
S-CSCF
o CPU: Intel Xeon CPU 3.40 GHz (condiviso)
o Ram: 512 MB
o SO: Ubuntu Linux 7.10 Gutsy Gibbon
o IP: 192.168.10.93
I-CSCF
o CPU: Intel Xeon CPU 3.40 GHz (condiviso)
o Ram: 512 MB
o SO: Ubuntu Linux 7.10 Gutsy Gibbon
o IP: 192.168.10.91
FHoSS
o CPU: Intel Xeon CPU 3.40 GHz (condiviso)
o Ram: 1024 MB
o SO: Ubuntu Linux 7.10 Gutsy Gibbon
o IP: 192.168.10.90
Su ogni macchina è stato installato e configurato OpenIMSCore, così come è stato
descritto nel paragrafo 2 del capitolo 2. Dato che intendiamo utilizzare un unico
server DNS che risolva i nomi, esso è stato installato sulla macchina FHoSS. Per
questo motivo, nella fase di installazione dei prerequisiti (paragrafo 2.1 del capitolo
81
2), il server bind non deve essere installato sulle macchine P-CSCF, S-CSCF e I-CSCF.
Al contrario, sulla macchina FHoSS bisogna installare il server bind ma non
configurarlo, così come era stato descritto nel paragrafo 2.4 del capitolo 2.
Inoltre, il realm utilizzato nella configurazione personalizzata è snodo.
La configurazione personalizzata di OpenIMSCore si basa sui seguenti passi:
Configurazione della macchina virtuale FHoSS;
Configurazione delle machine virtuali CSCF;
o Configurazione della macchina virtuale P-CSCF;
o Configurazione della macchina virtuale I-CSCF;
o Configurazione della macchina virtuale S-CSCF;
Configurazione personalizzata del BIND DNS.
In figura 2.12 è mostrata la topologia della rete IMS configurata.
192.168.10.90
Legend
SIP
Diameter
TCP
3868
192.168.10.92
TCP
3868
HSS
192.168.10.92
192.168.10.91
TCP
3869
UDP
4060
P-CSCF
UDP
5060
UDP
5060
I-CSCF
TCP
3870
UDP
6060
S-CSCF
Realm snodo
Figura 2.12 – Topologia di rete IMS post-configurazione
82
3.1
Configurazione della macchina virtuale FHoSS
La configurazione di FHoSS può essere eseguita attraverso la modifica dei seguenti
file:
"DiameterPeerHSS.xml": in questo file possiamo configurare le informazioni
dei CSCF e del FHoSS quali FQDN, Realm, Acceptor Port e Authorized
Identifier.
"hibernate.properties": si possono configurare le informazioni relative
all’accesso al database MySql; implicitamente è configurato per connettere
al database MySql all’indirizzo 127.0.0.1 e la porta 3306). Altri parametri
modificabili
sono
hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/hss_db
hibernate.connection.username=hss e hibernate.connection.password=hss.
"hss.properties": i parametri modificabili sono l’indirizzo e la porta sul quale
il server Tomcat è in ascolto (e.g. host=localhost, port=8080) e il relativo
percorso
dell’interfaccia
web
del
sistema
di
gestione
(e.g.
appPath=/hss.web.console). Altri parametri sono operatorId, amfId e
defaultPsiImpi.
"log4j.properties": Contiene le informazioni utili per configurare il logger. Le
più importarti informazioni presenti sono il percorso di output dei file di log
e il livello di logging desiderato.
I
file
appena
descritti
sono
contenuti
nella
cartella
“/opt/OpenIMSCore/FHoSS/deploy”. Inoltre è presente la configurazione di default
dei suddetti file in appendice B.
Nella configurazione della macchina virtuale FHoSS, all’interno del file
DiameterPeerHSS.xml sono state apportate le seguenti modifiche, indicate in
grassetto:
83
<?xml version="1.0" encoding="UTF-8"?>
<!-- HSS Server config -->
<DiameterPeer
FQDN="hss.snodo"
Realm="snodo"
Vendor_Id="10415"
Product_Name="JavaDiameterPeer"
AcceptUnknownPeers="1"
DropUnknownOnDisconnect="1"
Tc="30"
Workers="4"
QueueLength="32"
>
<Peer FQDN="icscf.snodo" Realm="snodo" port="3869" />
<Peer FQDN="scscf.snodo" Realm="snodo" port="3870" />
<Acceptor port="3868" bind="192.168.10.90" />
<Auth
<Auth
<Auth
<Auth
<Auth
id="16777216"
id="16777216"
id="16777216"
id="16777217"
id="16777221"
vendor="10415"/><!-- 3GPP Cx -->
vendor="4491"/><!-- CableLabs Cx -->
vendor="13019"/><!-- ETSI/TISPAN Cx -->
vendor="10415"/><!-- 3GPP Sh -->
vendor="10415"/>
</DiameterPeer>
Da notare, nel parametro FQDN viene indicato l’hostname di FHoSS (nel nostro caso
hss.snodo), nel parametro Realm viene settato il valore snodo. Al contrario, nei
parametri Peer vengono settati i valori attraverso i quali FHoSS può inviare le
richieste Diameter: gli hostname delle entità I-CSCF e P-CSCF (icscf.snodo e
scscf.snodo) e le loro rispettive porte TCP (3869 e 3870). Infine nel parametro
Acceptor viene indicato l’indirizzo IP di FHoSS (192.168.10.90) e la porta su cui
vengono ricevuti i messaggi Diameter (TCP 3868).
Nel file “hss.proprieties” sono state apportate le seguenti modifiche, indicate in
grassetto:
# FOKUS HSS Properties file
#----------------------------------------------------------------------------------------------------------------------------------# host & port : specify the IP address and the port where Tomcat is listening,
e.g. host=192.168.10.90; port=8080;
host=192.168.10.90
port=8080
# Authentication properties
#----------------------------------------------------------------------------------------------------------------------------------# default operator and amf values
84
#----------------------------------------------------------------------------------------------------------------------------------# operator_id, as hex bytes, required length 32 byte,
# e.g. 00000000000000000000000000000000
operatorId=00000000000000000000000000000000
# amf_id: Default amf id as hex bytes, required length 4 byte, e.g. 0000
amfId=0000
# configuration parameters relating to Milenage algorithm
#----------------------------------------------------------------------------------------------------------------------------------# Enable or disable the use of AK in the Milenage algorithm; if this flag is
enabled,
#then is mandatory to be enabled also on the client side
USE_AK=true
# IND_LEN property - contains the number of bits assigned for the Index; it is
used in the generation process of new SQN values
# We are using SQN values which are not time based, as is specified here C.1.1.2,
C.1.2, C.2, C3.2 and C.3.4 of TS 33.102
# (SQN = SEQ || IND)
IND_LEN=5
# delta value, assuring the protection against wrap around counter in the USIM
delta=268435456
# L - limit on the difference between SEQ_MS (Mobile Station) and SEQ_HE (HSS)
L=32
# Sh-Settings
#---------------------------------------------------------------------------------------------------------------------------------# Enable or disable IFC Notification mechanism. If you need this feature please
enable it. However, be aware that this feature imply
#important time for processing as more validation is required every time after an
update (for entities as: IFC, TP, SPT, AS, SP_IFC),
# and could affect the web console interface response-ness.
iFC_NOTIF_ENABLED=false
Come abbiamo detto precedentemente, in questo file sono contenute le
informazioni riguardanti l’interfaccia web. In particolare, viene modificato l’indirizzo
IP o host (192.168.10.90) e lasciata inalterata la porta (TCP 8080).
I file modificati, con le rispettive modifiche, sono presenti in appendice B.
Una volta terminata la configurazione, bisogna riaggiornare il database seguendo la
procedura descritta 2.2.3 e 2.3.3 del capitolo 2.
3.2
Configurazione delle macchine virtuali CSCF
La configurazione dei CSCF può essere eseguita attraverso la modifica dei seguenti
file:
85
“pcscf.cfg”,
“scscf.cfg”,
“icscf.cfg”:
sono
i
file
di
configurazione
rispettivamente del P-CSCF, dell’S-CSCF e dell’I-CSCF. In questi file sono
definiti i moduli da caricare all’avvio delle entità. Inoltre si posso settare i
parametri di configurazione, quali l’autenticazione richiesta, l’abilitazione
dello scambio di messaggi IPSec o TLS, etc.
“pcscf.xml”, “scscf.xml”, “icscf.xml”: sono i file di configurazione dei canali di
comunicazione Diameter. Come nel caso del file DiameterPeerHSS.xml, i
parametri modificabili sono: FQDN, Realm, Acceptor Port e Authorized
Identifier.
La configurazione di default dei file precedentemente descritti è presente in
appendice B.
Ricordiamo che nel paragrafo 2.5 del capitolo 2, abbiamo copiato file “pcscf.cfg”,
“icscf.cfg”, “icscf.xml”,“scscf.cfg”, e “scscf.xml” nella cartella “/opt/OpenIMSCore”.
Successivamente verranno descritte le seguenti operazioni:
Configurazione della macchina virtuale P-CSCF;
Configurazione della macchina virtuale I-CSCF;
Configurazione della macchina virtuale S-CSCF;
3.2.1 Configurazione della macchina virtuale P-CSCF
Nella configurazione della macchina virtuale P-CSCF, all’interno del file “pcscf.cfg”
sono state apportate le modifiche, indicate in grassetto, presenti in appendice B.
Nelle modifiche apportate al file “pcscf.cfg” abbiamo utilizzato le seguenti
informazioni:
Indirizzo IP P-CSCF: 192.168.10.92
Realm: snodo
Nel file “pcscf.xml” apportiamo le seguenti modifiche, indicate in grassetto:
86
<?xml version="1.0" encoding="UTF-8"?>
<DiameterPeer
FQDN="pcscf.snodo"
Realm="snodo"
Vendor_Id="10415"
Product_Name="CDiameterPeer"
AcceptUnknownPeers="1"
DropUnknownOnDisconnect="1"
Tc="30"
Workers="4"
QueueLength="8"
>
<Peer FQDN="clf.snodo" Realm="snodo" port="3868"/>
<Acceptor port="3867" bind="192.168.10.92"/>
<Auth id="16777231" vendor="13019"/><!-- ETSI e2 -->
<DefaultRoute FQDN="clf.snodo" metric="10"/>
<!-- Realm Routing configuration - Uncomment and Edit!
<Realm name="snodo">
<Route FQDN="clf1.snodo" metric="10"/>
<Route FQDN="clf2.snodo" metric="20"/>
</Realm>
<Realm name="another.snodo">
<Route FQDN="clf3.snodo" metric="10"/>
<Route FQDN="clf2.snodo" metric="20"/>
</Realm>
<DefaultRoute FQDN="clf.snodo" metric="10"/>
<DefaultRoute FQDN="clf4.snodo" metric="20"/>
-->
</DiameterPeer>
Contrariamente dalla configurazione del file “DiameterPeerHSS.xml”, in questo caso
abbiamo impostato che la macchina virtuale P-CSCF, il cui indirizzo IP è
192.168.10.92, riceve le richieste Diameter dal clf.snodo attraverso la porta TCP
3867 e invia le richieste Diameter alla porta TCP 3868 del clf.snodo.
Il CLF è una funzione componente del sistema NASS (Network Attachment SubSystem) che si occupa dell’attachment dell’utente alla rete tramite:
Fornitura dinamica dell’indirizzo IP e di altri parametri di configurazione degli
apparati in sede di utente;
Autenticazione dell’utente, prima o durante la fase di allocazione
dell’indirizzo IP;
Autorizzazione dell’accesso alla rete su base profilo utente;
87
Configurazione della rete di accesso, su base profilo utente;
Location management (ad esempio, per gestire le chiamate di emergenza).
3.2.2 Configurazione della macchina virtuale I-CSCF
Nella configurazione della macchina virtuale I-CSCF, all’interno del file “icscf.cfg”
sono state apportate le modifiche, indicate in grassetto, presenti in appendice B.
Nelle modifiche apportate al file “icscf.cfg” abbiamo utilizzato le seguenti
informazioni:
Indirizzo IP I-CSCF: 192.168.10.91
Realm: snodo
Nel file “icscf.xml” apportiamo le seguenti modifiche, indicate in grassetto:
<?xml version="1.0" encoding="UTF-8"?>
<DiameterPeer
FQDN="icscf.snodo"
Realm="snodo"
Vendor_Id="10415"
Product_Name="CDiameterPeer"
AcceptUnknownPeers="1"
DropUnknownOnDisconnect="1"
Tc="30"
Workers="4"
QueueLength="8"
>
<Peer FQDN="hss.snodo" Realm="snodo" port="3868"/>
<Acceptor port="3869" bind="192.168.10.91"/>
<Auth id="16777216" vendor="10415"/><!-- 3GPP Cx -->
<Auth id="16777216" vendor="4491"/><!-- CableLabs Cx -->
<Auth id="16777216" vendor="13019"/><!-- ETSI/TISPAN Cx -->
<DefaultRoute FQDN="hss.snodo" metric="10"/>
<!-- Realm Routing configuration - Uncomment and Edit!
<Realm name="snodo">
<Route FQDN="hss.snodo" metric="10"/>
<Route FQDN="hss2.snodo" metric="20"/>
</Realm>
<Realm name="another.open-ims.test">
<Route FQDN="hss3.open-ims.test" metric="10"/>
<Route FQDN="hss2.open-ims.test" metric="20"/>
</Realm>
<DefaultRoute FQDN="hss.open-ims.test" metric="10"/>
<DefaultRoute FQDN="hss4.open-ims.test" metric="20"/>
-->
</DiameterPeer>
88
La macchina virtuale I-CSCF, il cui indirizzo IP è 192.168.10.91, riceve le richieste
Diameter dal hss.snodo attraverso la porta TCP 3869 e invia le richieste Diameter
alla porta TCP 3868 del hss.snodo.
3.2.3 Configurazione della macchina virtuale S-CSCF
Nella configurazione della macchina virtuale S-CSCF, all’interno del file “scscf.cfg”
sono state apportate le modifiche, indicate in grassetto, presenti in appendice B.
Nelle modifiche apportate al file “scscf.cfg” abbiamo utilizzato le seguenti
informazioni:
Indirizzo IP S-CSCF: 192.168.10.93
Realm: snodo
Nel file “scscf.xml” apportiamo le seguenti modifiche, indicate in grassetto:
<?xml version="1.0" encoding="UTF-8"?>
<DiameterPeer
FQDN="scscf.snodo"
Realm="snodo"
Vendor_Id="10415"
Product_Name="CDiameterPeer"
AcceptUnknownPeers="1"
DropUnknownOnDisconnect="1"
Tc="30"
Workers="4"
QueueLength="8"
>
<Peer FQDN="hss.snodo" Realm="snodo" port="3868"/>
<Acceptor port="3870" bind="192.168.10.93"/>
<Auth id="16777216" vendor="10415"/><!-- 3GPP Cx -->
<Auth id="16777216" vendor="4491"/><!-- CableLabs Cx -->
<Auth id="16777216" vendor="13019"/><!-- ETSI/TISPAN Cx -->
<DefaultRoute FQDN="hss.snodo" metric="10"/>
<!-- Realm Routing configuration - Uncomment and Edit!
<Realm name="snodo">
<Route FQDN="hss1.snodo" metric="10"/>
<Route FQDN="hss2.snodo" metric="20"/>
</Realm>
<Realm name="another.snodo">
<Route FQDN="hss3.snodo" metric="10"/>
<Route FQDN="hss2.snodo" metric="20"/>
</Realm>
<DefaultRoute FQDN="hss.snodo" metric="10"/>
<DefaultRoute FQDN="hss4.snodo" metric="20"/>
-->
89
</DiameterPeer>
La macchina virtuale S-CSCF, il cui indirizzo IP è 192.168.10.93, riceve le richieste
Diameter dal hss.snodo attraverso la porta TCP 3870 e invia le richieste Diameter
alla porta TCP 3868 del hss.snodo.
3.3
Configurazione personalizzata del BIND DNS
Dobbiamo adesso configurare il server DNS BIND che è stato installato sulla
macchina virtuale FHoSS.
È stato creato un file di configurazione “snodo.dnszone” nella cartella “/etc/bind”. Il
file “snodo.dnszone” è il seguente:
$ORIGIN snodo.
$TTL 1W
@
1D IN SOA
localhost. root.localhost. (
2006101001
; serial
3H
; refresh
15M
; retry
1W
; expiry
1D )
; minimum
ns
1D IN NS
1D IN A
ns
192.168.10.91
pcscf
1D IN A
192.168.10.92
snodo.
icscf
_sip
_sip._udp
_sip._tcp
1D IN A
snodo.
snodo.
1D IN NAPTR 10 50 "s" "SIP+D2U"
1D IN NAPTR 20 50 "s" "SIP+D2T"
1D
1D
1D
1D
192.168.10.91
IN A
192.168.10.91
SRV 0 0 5060 icscf
SRV 0 0 5060 icscf
SRV 0 0 5060 icscf
""
""
scscf
1D IN A
192.168.10.93
hss
1D IN A
192.168.10.90
ue
1D IN A
127.0.0.1
presence
1D IN A
127.0.0.1
_sip._udp.snodo.
_sip._tcp.snodo.
Come si può notare, sono stati settati gli indirizzi IP delle varie entità. Al contrario,
non sono stati settati gli indirizzi dell’ue e del presence dato che i servizi di Presence
non sono attivi.
90
In appendice B è presente il file “snodo.dnszone”.
Aggiungiamo al file “/etc/bind/named.conf.local” le seguenti righe:
zone "snodo" {
type master;
file "/etc/bind/snodo.dnszone";
};
Riavviamo il server DNS con il seguente comando:
/etc/init.d/bind9 restart
Dobbiamo fare in modo che le entità OpenIMSCore, installate sulle macchine
virtuali, possano contattare il server DNS BIND. Per questo motivo editiamo il file
“/etc/resolv.conf” su ogni macchina CSCF aggiungendo le seguenti righe:
search snodo
nameserver 192.168.10.90
Infine, per attivare le varie entità dell’architettura IMS dobbiamo lanciare i comandi
“pcscf.sh”, “scscf.sh”, “icscf.sh” e “fhoss.sh” nelle rispettive macchine virtuali PCSCF, S-CSCF, I-CSCF e FHoSS.
91