11.8. Services de communication en temps réel
Real-Time Communication (RTC) services include voice, video/webcam, instant messaging (IM) and desktop sharing. This chapter gives a brief introduction to three of the services required to operate RTC, including a TURN server, SIP server and XMPP server. Comprehensive details of how to plan, install and manage these services are available in the Real-Time Communications Quick Start Guide which includes examples specific to Debian.
SIP et XMPP peuvent fournir les mêmes services. SIP est un peu plus connu pour la voix sur IP et la vidéo alors que XMPP est traditionnellement utilisé comme protocole de messagerie instantanée. En réalité, les deux peuvent être utilisés pour les deux services. Pour optimiser les options de connectivité, il est recommandé d'exploiter les deux en parallèle.
11.8.1. Paramètres DNS pour les services RTC
Les services RTC nécessitent des enregistrements DNS SRV et NAPTR. Voici un exemple de configuration qui peut être mis dans le fichier de zone pour falcot.com
:
; le serveur où tout va fonctionner
server1 IN A 198.51.100.19
server1 IN AAAA 2001:DB8:1000:2000::19
; IPv4 seulement pour TURN pour le moment, certains clients
; ne fonctionnent pas avec IPv6
turn-server IN A 198.51.100.19
; adresses IPv4 et IPv6 pour SIP
sip-proxy IN A 198.51.100.19
sip-proxy IN AAAA 2001:DB8:1000:2000::19
; adresses IPv4 et IPv6 pour XMPP
xmpp-gw IN A 198.51.100.19
xmpp-gw IN AAAA 2001:DB8:1000:2000::19
; DNS SRV et NAPTR pour 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 et NAPTR pour SIP
_sips._tcp IN SRV 0 1 5061 sip-proxy.falcot.com.
@ IN NAPTR 10 0 "s" "SIPS+D2T" "" _sips._tcp.falcot.com.
; enregistrements DNS SRV pour les modes XMPP Server et Client:
_xmpp-client._tcp IN SRV 5 0 5222 xmpp-gw.falcot.com.
_xmpp-server._tcp IN SRV 5 0 5269 xmpp-gw.falcot.com.
TURN est un service qui aide les clients derrière des routeurs NAT et des pare-feu à trouver le chemin le plus efficace pour communiquer avec d'autres clients et pour relayer les flux media si aucun chemin direct n'est trouvé. Il est grandement recommandé d'installer le serveur TURN avant que tous les autres services RTC ne soient disponibles pour les utilisateurs finaux.
TURN et le protocole ICE sont des standards ouverts. Pour tirer profit de ces protocoles, en maximisant la connectivité et en minimisant la frustration des utilisateurs, il est important de s'assurer que tous les logiciels clients les supportent.
Pour que l'algorithme ICE fonctionne efficacement, le serveur doit avoir deux adresses publiques IPv4.
Install the coturn package and edit the /etc/turnserver.conf
configuration file. By default, a SQLite database is configured in /var/db/turndb
for user account settings, but PostgreSQL, MySQL or Redis can be set up instead if preferred. The most important thing to do is insert the IP addresses of the server.
The server can be started running /usr/bin/turnserver
. We want the server to be an an automatically started system service, so we edit the /etc/default/coturn
file like this:
#
# Uncomment it if you want to have the turnserver running as
# an automatic system service daemon
#
TURNSERVER_ENABLED=1
By default, the TURN server uses anonymous access. We have to add the users we want to use:
#
turnadmin -a -u roland -p secret_password -r falcot.com
#
turnadmin -A -u admin -p secret_password
We use the argument -a
to add a normal user and -A
to add an admin user.
11.8.3. Serveur Proxy SIP
Un serveur proxy SIP gère les connexions SIP entrantes et sortantes entre différentes organisations, les fournisseurs de tronc SIP (SIP trunking), les autocommutateurs téléphoniques privés (Private Automatic Branch eXchange, PBX) comme Asterisk, les téléphones SIP, les logiciels de téléphonie basés sur SIP et les applications WebRTC.
Il est fortement recommandé d'installer et de configurer le proxy SIP avant d'essayer de mettre en place un PBX (autocommutateur téléphonique privé). Le proxy SIP normalise une large partie du trafic arrivant au PBX et fournit une plus grande connectivité et une résilience plus importante.
11.8.3.1. Installation du proxy SIP
Install the kamailio package and the package for the database backend, the Falcot administrators chose MySQL, so they install mariadb-server. /etc/kamailio/kamctlrc
is the configuration file for the control tools kamctl
and kamdbctl
. You need to edit and set the SIP_DOMAIN
to your SIP service domain and set the DBENGINE
to MySQL, another database backend can be used.
[...]
## 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
[...]
Now we focus on the configuration file /etc/kamailio/kamailio.cfg
. Falcot needs user authentication and persistent user location, so they add the following #!define
directives at the top of that file:
#!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 needs a database structure that we can create running kamdbctl create
as root.
Finally, we can add some users with kamctl
.
#
kamctl add roland secret_password
Once everything is properly configured you can start or restart the service with
systemctl restart kamailio
, you can connect with a SIP client providing the IP address and the port (5090 is the default port). The users have the following id:
roland@sip.falcot.com
, and they can login using a client (see
Section 13.10, « Logiciels de communication en temps réel »)
Un serveur XMPP gère la connectivité entre les utilisateurs XMPP locaux et les utilisateurs XMPP dans d'autres domaines de l'Internet public.
Prosody est un serveur XMPP populaire qui fonctionne bien sur les serveurs Debian.
11.8.4.1. Installation du serveur XMPP
Install the prosody package.
Vérifiez le fichier de configuration /etc/prosody/prosody.cfg.lua
. La principale chose à faire est de renseigner l'identifiant des utilisateurs autorisés à gérer le serveur.
admins = { "joe@falcot.com" }
Il faut également un fichier de configuration pour chaque domaine. Copiez l'exemple de /etc/prosody/conf.avail/example.com.cfg.lua
et adaptez le suivant les besoins. Voici le fichier falcot.com.cfg.lua
créé par les administrateurs de Falcot :
VirtualHost "falcot.com"
enabled = true
ssl = {
key = "/etc/ssl/private/falcot.com-key.pem";
certificate = "/etc/ssl/public/falcot.com.pem";
}
-- Set up a MUC (multi-user chat) room server on conference.example.com:
Component "conference.falcot.com" "muc"
Pour activer le domaine, il faut créer un lien symbolique dans /etc/prosody/conf.d/
:
#
ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
Redémarrez le service pour utiliser la nouvelle configuration.
11.8.4.2. Gestion du serveur XMPP
Certaines opérations de gestion peuvent être réalisées avec l'utilitaire en ligne de commande prosodyctl
. Par exemple, pour ajouter le compte administrateur spécifié dans /etc/prosody/prosody.cfg.lua
:
# prosodyctl adduser joe@falcot.com
11.8.5. Services fonctionnant sur le port 443
Certains administrateurs préfèrent faire tourner tous leurs services RTC sur le port 443. Cela simplifie la connexion des utilisateurs qui sont dans des endroits éloignés, tels que des hôtels et des aéroports où les autres ports risquent d'être bloqués et où le trafic Internet est acheminé à travers des serveurs proxy HTTP.
Pour réaliser ceci, chaque service (SIP, XMPP et TURN) doit avoir une adresse IP différente. Tous les services peuvent cependant être sur le même hôte puisque Linux gère des adresses IP multiples sur un seul hôte. Le numéro de port, 443, doit être spécifié dans les fichiers de configuration de chaque service et aussi dans les enregistrements DNS de type SRV.
Falcot souhaite que les clients puissent téléphoner directement à partir du site web. Les administrateurs de Falcot veulent aussi utiliser WebRTC dans le cadre de leur plan de reprise après sinistre, pour que le personnel puisse utiliser les navigateurs web de chez eux pour se connecter au système téléphonique de l'entreprise et travailler normalement en cas d'urgence.
WebRTC is a rapidly evolving technology and it is essential to use packages from the Testing distribution. Another option is to compile the software.
WebRTC uses a simple API to provide browsers and mobile applications with RTC, it is free software and it is being developed by Google.
A very flexible approach is using GStreamer's WebRTC implementation. It enables pipeline-based multimedia applications, which allows developing interesting and highly efficient applications. A good starting point is the following demo by Centricular, the main company that is developing it:
More advanced click-to-call web sites typically use server-side scripting to generate the
config.js
file dynamically. The
DruCall source code demonstrates how to do this with PHP.
Le tour d'horizon des logiciels serveurs proposé par ce chapitre est loin d'être exhaustif, mais il recouvre toutefois la réalité des services réseau les plus employés. Passons sans plus tarder à un chapitre encore plus technique : approfondissement de certains concepts, déploiement à grande échelle, virtualisation sont autant de sujets passionnants que nous allons aborder.