Product SiteDocumentation Site

11.8. Serveis de comunicació en temps real

Els serveis de comunicació en temps real (RTC és l'acrònim en anglès) inclouen la veu, vídeo/webcam, la missatgeria instantània (IM) i la compartició de l'escriptori. Aquest capítol ofereix una breu introducció a tres dels serveis necessaris per operar RTC, incloent un servidor TURN, un servidor SIP i un servidor XMPP. Els detalls globals de com planificar, instal·lar i gestionar aquests serveis estan disponibles a la Real-Time Communications Quick Start Guide que inclou exemples específics per a Debian.
Tant SIP com XMPP poden proporcionar la mateixa funcionalitat. El SIP és una mica més conegut per a veu i vídeo, mentre que el XMPP es considera tradicionalment un protocol IM (missatgeria instantània). De fet, tots dos es poden utilitzar per a qualsevol d'aquests propòsits. Per maximitzar les opcions de connectivitat, es recomana executar ambdues en paral·lel.
Aquests serveis es basen en certificats X.509 tant per a l'autenticació com per a la confidencialitat. Vegeu Secció 10.2, «Certificats X.509» per a més informació.

11.8.1. Paràmetres del DNS per als serveis RTC

Els serveis RTC requereixen registres DNS SRV i NAPTR. Una configuració de mostra que es pot col·locar en el fitxer de zona per falcot.com (vegeu també Exemple 10.13, «Extracte de /etc/bind/db.falcot.com»):
; the server where everything will run
server1            IN     A      198.51.100.19
server1            IN     AAAA   2001:DB8:1000:2000::19

; IPv4 only for TURN for now, some clients are buggy with IPv6
turn-server        IN     A      198.51.100.19

; IPv4 and IPv6 addresses for SIP
sip-proxy          IN     A      198.51.100.19
sip-proxy          IN     AAAA   2001:DB8:1000:2000::19

; IPv4 and IPv6 addresses for XMPP
xmpp-gw            IN     A      198.51.100.19
xmpp-gw            IN     AAAA   2001:DB8:1000:2000::19

; DNS SRV and NAPTR for STUN / TURN
_stun._udp  IN SRV    0 1 3467 turn-server.falcot.com.
_turn._udp  IN SRV    0 1 3467 turn-server.falcot.com.
@           IN NAPTR  10 0 "s" "RELAY:turn.udp" "" _turn._udp.falcot.com.

; DNS SRV and NAPTR records for SIP
_sips._tcp  IN SRV    0 1 5061 sip-proxy.falcot.com.
@           IN NAPTR  10 0 "s" "SIPS+D2T" "" _sips._tcp.falcot.com.

; DNS SRV records for XMPP Server and Client modes:
_xmpp-client._tcp  IN     SRV    5 0 5222 xmpp-gw.falcot.com.
_xmpp-server._tcp  IN     SRV    5 0 5269 xmpp-gw.falcot.com.

11.8.2. Servidor TURN

TURN és un servei que ajuda els clients darrere els encaminadors NAT i els tallafocs a descobrir la manera més eficient de comunicar-se amb altres clients i transmetre els fluxos de dades si no es pot trobar cap camí directe. Es recomana instal·lar el servidor TURN abans que qualsevol dels altres serveis RTC s'ofereixi als usuaris finals.
TURN i el protocol ICE relacionat són estàndards oberts. Per beneficiar-se d'aquests protocols, maximitzant la connectivitat i minimitzant la frustració de l'usuari, és important assegurar que tot el programari del client suporten ICE i TURN.
Perquè l'algorisme ICE funcioni eficaçment, el servidor ha de tenir dues adreces públiques IPv4.
Instal·leu el paquet coturn i editeu el fitxer de configuració /etc/turnserver.conf. Per defecte, una base de dades SQLite està configurada a /var/db/turndb per a la configuració del comptes d'usuari, però PostgreSQL, MySQL o Redis es poden configurar si així es prefereix. El més important és inserir les adreces IP del servidor.
El servidor es pot iniciar executant turnserver del paquet coturn. Volem que el servidor sigui un servei de sistema iniciat automàticament. Aquest és el funcionament per defecte usant systemd. Només quan s'usa l'antic SysVinit cal editar el fitxer /etc/default/coturn així:
#
# Uncomment it if you want to have the turnserver running as
# an automatic system service daemon
#
TURNSERVER_ENABLED=1
Per defecte, el servidor TURN utilitza accés anònim. Hem d'afegir els usuaris que volem utilitzar:
# turnadmin -a -u roland -p clau_secreta -r falcot.com
# turnadmin -A -u admin -p clau_secreta
Usem l'argument -a per afegir un usuari normal i -A per afegir un usuari administrador.

11.8.3. Servidor Proxy SIP

Un servidor intermediari («proxy») SIP gestiona les connexions SIP entrants i sortints entre altres organitzacions, proveïdors d'enllaços SIP, centraletes privades (SIP PBX) com Asterisk, telèfons SIP, programari de telefonia basat en SIP i aplicacions WebRTC.
Es recomana instal·lar i configurar el servidor intermediari SIP abans d'intentar la configuració d'una centraleta (SIP PBX). El servidor intermediari SIP normalitza una gran part del trànsit que arriba a la PBX i proporciona una major connectivitat i resiliència.

11.8.3.1. Instal·lació del servidor intermediari SIP

Instal·leu el paquet kamailio i el paquet per al «backend» de la base de dades. Els administradors de Falcot han triat MySQL, de manera que instal·len kamailio-mysql-modules i mariadb-server. /etc/kamailio/kamctlrc és el fitxer de configuració per a les eines de control kamctl i kamdbctl. Cal editar i establir el SIP_DOMAIN al vostre domini de servei SIP i establir el DBENGINE a MySQL. Es pot utilitzar un altre «backend» de base de dades.
[...]
## your SIP domain
SIP_DOMAIN=sip.falcot.com

## chrooted directory
# CHROOT_DIR="/path/to/chrooted/directory"

## database type: MYSQL, PGSQL, ORACLE, DB_BERKELEY, DBTEXT, or SQLITE
# by default none is loaded
#
# If you want to setup a database with kamdbctl, you must at least specify
# this parameter.
DBENGINE=MYSQL
[...]
Ara ens centrem en el fitxer de configuració /etc/kamailio/kamailio.cfg. Falcot necessita l'autenticació de l'usuari i la ubicació persistent de l'usuari, així que afegeixen les següents directives #!define a la part superior d'aquest fitxer:
#!KAMAILIO
#
# Kamailio (OpenSER) SIP Server v5.2 - default configuration script
#     - web: https://www.kamailio.org
#     - git: https://github.com/kamailio/kamailio
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
[...]
Kamailio necessita una estructura de base de dades que puguem crear executant kamdbctl creant com a superusuari. Finalment, podem afegir alguns usuaris amb kamctl.
# kamdbctl create
[...]
# kamctl add roland secret_password
Un cop tot està ben configurat podeu iniciar o reiniciar el servei amb systemctl restart kamailio, podeu connectar amb un client SIP proporcionant l'adreça IP i el port (5090 és el port per defecte). Els usuaris tenen el següent identificador: roland )sip.falcot.com, i poden connectar-se utilitzant un client (vegeu Secció 13.9, «Programari de comunicacions en temps real»).

11.8.4. Servidor XMPP

Un servidor XMPP gestiona la connectivitat entre usuaris locals XMPP i usuaris XMPP en altres dominis de la Internet pública.
prosody és un popular servidor XMPP que opera de manera fiable en servidors Debian.

11.8.4.1. Instal·lació del servidor XMPP

Instal·leu el paquet prosody.
Reviseu el fitxer de configuració /etc/prosody/prosody.cfg.lua. El més important és inserir els JID dels usuaris als quals es permet gestionar el servidor.
admins = { "joe@falcot.com" }
També es necessita un fitxer de configuració individual per a cada domini. Copieu la mostra de /etc/prosody/conf.avail/example.com.cfg.lua i utilitzeu-la com a punt d'inici. Aquí teniu falcot.com.cfg.lua:
VirtualHost "falcot.com"
        enabled = true
        ssl = {
                key = "/etc/ssl/private/falcot.com.key";
                certificate = "/etc/ssl/certs/falcot.com.pem";
                }

-- Set up a MUC (multi-user chat) room server on conference.example.com:
Component "conference.falcot.com" "muc"
Per activar el domini, ha d'haver-hi un enllaç simbòlic de /etc/prosody/conf.d/. Creeu-lo així:
. ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
Reinicieu el servei per utilitzar la configuració nova.

11.8.4.2. Gestió del servidor XMPP

Algunes operacions de gestió es poden realitzar usant la utilitat de línia d'ordres prosodyctl. Per exemple, per afegir el compte d'administrador especificat a /etc/prosody/prosody.cfg.lua:
# prosodyctl adduser joe@falcot.com
Vegeu la documentació en línia de Prosody per a més detalls sobre com personalitzar la configuració.

11.8.5. Serveis en execució al port 443

Alguns administradors prefereixen executar tots els seus serveis RTC al port 443. Això ajuda els usuaris a connectar-se des d'ubicacions remotes com ara hotels i aeroports on altres ports poden estar bloquejats o on el trànsit d'Internet s'encamina a través de servidors intermediaris HTTP.
Per utilitzar aquesta estratègia, cada servei (SIP, XMPP i TURN) necessita una adreça IP diferent. Tots els serveis encara poden estar en el mateix amfitrió ja que Linux admet múltiples adreces IP en un sol amfitrió. El número de port, 443, s'ha d'especificar en els fitxers de configuració per a cada procés i també en els registres SRV del DNS.

11.8.6. Afegir WebRTC

Falcot vol permetre que els clients facin trucades telefòniques directament des del lloc web. Els administradors de Falcot també volen utilitzar WebRTC com a part del seu pla de recuperació de desastres, de manera que el personal pot utilitzar navegadors web a casa per accedir al sistema de telefonia de l'empresa i treballar normalment en una emergència.
WebRTC és una tecnologia que evoluciona ràpidament i és essencial utilitzar paquets de la distribució Testing. Una altra opció és compilar el programari.
WebRTC utilitza una API senzilla per proporcionar navegadors i aplicacions mòbils amb RTC, és programari lliure i està sent desenvolupat per Google.
Un enfocament molt flexible és utilitzar la implementació WebRTC de GStreamer. Permet aplicacions multimèdia basades en canonades, fet que permet desenvolupar aplicacions interessants i altament eficients. Un bon punt de partida és la següent demostració de Centricular, la principal empresa que l'està desenvolupant:
Llocs web més avançats de tipus “clica-i-truca” solen utilitzar scripts al costat del servidor per generar el fitxer config.js dinàmicament. El codi font de DruCall demostra com fer-ho amb PHP.
Aquest capítol mostrava només una fracció del programari del servidor disponible; no obstant això, s'hi han descrit la majoria dels serveis de xarxa més comuns. Ara és el moment d'un capítol encara més tècnic: entrarem en més detall per a alguns conceptes, descriurem desplegaments massius i virtualització.