11.8. Echtzeit-Kommunikationsdienste
Real-Time Communication (RTC) Dienste umfassen Sprache, Video/Webcam, Instant Messaging (IM) und Desktop-Freigaben. Dieses Kapitel gibt eine kurze Einführung in drei der für den Betrieb von RTC erforderlichen Dienste, darunter ein TURN-Server, SIP-Server und XMPP-Server. Ausführliche Informationen zur Planung, Installation und Verwaltung dieser Dienste finden Sie im Real-Time Communications Quick Start Guide, der Beispiele speziell für Debian enthält.
Sowohl SIP als auch XMPP können die gleiche Funktionalität bieten. SIP ist etwas bekannter für Sprache und Video, während XMPP traditionell als IM-Protokoll angesehen wird. Allerdings können beide für jeden dieser Zwecke verwendet werden. Um die Konnektivitätsmöglichkeiten zu maximieren, wird empfohlen, beide parallel zu betreiben.
Diese Dienste stützen sich sowohl zur Authentifizierung als auch zur Wahrung der Vertraulichkeit auf X.509-Zertifikate. Siehe
Abschnitt 10.2, „X.509-Zertifikate“ für weitere Informationen.
11.8.1. DNS-Einstellungen für RTC-Dienste
RTC-Dienste erfordern DNS SRV- und NAPTR-Einträge. Eine Beispielkonfiguration, die in der Zonendatei für falcot.com
abgelegt werden kann:
; 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.
TURN ist ein Dienst, der Clients hinter NAT-Routern und Firewalls hilft, die effizienteste Art der Kommunikation mit anderen Clients zu finden und die Medienströme weiterzuleiten, wenn kein direkter Medienpfad gefunden werden kann. Es wird dringend empfohlen, den TURN-Server zu installieren, bevor die anderen RTC-Dienste den Endbenutzern angeboten werden.
TURN und das zugehörige ICE-Protokoll sind offene Standards. Um von diesen Protokollen zu profitieren, die Konnektivität zu maximieren und die Frustration der Benutzer zu minimieren, ist es wichtig sicherzustellen, dass jede Client-Software ICE und TURN unterstützt.
Damit der ICE-Algorithmus effektiv funktioniert, muss der Server zwei öffentliche IPv4-Adressen haben.
Installieren Sie das Paket coturn und bearbeiten Sie die Konfigurationsdatei /etc/turnserver.conf
. Standardmäßig wird eine SQLite-Datenbank in /var/db/turndb
für Benutzerkontoeinstellungen konfiguriert, aber stattdessen können auch PostgreSQL, MySQL oder Redis eingerichtet werden, wenn dies gewünscht wird. Das Wichtigste ist die Eingabe der IP-Adressen des Servers.
Der Server kann per /usr/bin/turnserver
gestartet werden. Wir möchten, dass der Server ein automatisch gestarteter Systemdienst ist, also editieren wir die Datei /etc/default/coturn
wie folgt:
#
# Uncomment it if you want to have the turnserver running as
# an automatic system service daemon
#
TURNSERVER_ENABLED=1
Standardmäßig verwendet der TURN-Server anonymen Zugriff. Wir müssen die Benutzer hinzufügen, die wir verwenden wollen:
#
turnadmin -a -u roland -p secret_password -r falcot.com
#
turnadmin -A -u admin -p secret_password
Wir verwenden das Argument -a
, um einen normalen Benutzer und -A
, um einen Admin-Benutzer hinzuzufügen.
Ein SIP-Proxy-Server verwaltet die ein- und ausgehenden SIP-Verbindungen zwischen anderen Organisationen, SIP-Trunking-Providern, SIP-Telefonanlagen wie Asterisk, SIP-Telefonen, SIP-basierten Softphones und WebRTC-Anwendungen.
Es wird dringend empfohlen, den SIP-Proxy zu installieren und zu konfigurieren, bevor Sie eine SIP-Telefonanlage einrichten. Der SIP-Proxy normalisiert einen Großteil des Datenverkehrs, der die Telefonanlage erreicht und sorgt für mehr Konnektivität und Ausfallsicherheit.
11.8.3.1. SIP-Proxy installieren
Installieren Sie das Paket kamailio und das Paket für das Datenbank-Backend, die Falcot-Administratoren wählten MySQL, deshalb installierten sie mariadb-server. /etc/kamailio/kamctlrc
ist die Konfigurationsdatei für die Steuerungswerkzeuge kamctl
und kamdbctl
. Sie müssen die SIP_DOMAIN
bearbeiten und auf Ihre SIP-Service-Domäne und die DBENGINE
auf MySQL setzen, ein anderes Datenbank-Backend kann verwendet werden.
[...]
## 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
[...]
Nun konzentrieren wir uns auf die Konfigurationsdatei /etc/kamailio/kamailio.cfg
. Falcot benötigt eine Benutzerauthentifizierung und einen dauerhaften Benutzerort, daher fügen sie die folgenden #!define
Direktiven am Anfang dieser Datei hinzu:
#!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 benötigt eine Datenbankstruktur, die wir per kamdbctl create
als root erstellen können.
Schließlich können wir Benutzer mit kamctl
hinzufügen.
#
kamctl add roland secret_password
Wenn alles richtig konfiguriert ist, können Sie den Dienst mit
systemctl restart kamailio
starten oder neu starten. Sie können eine Verbindung mit einem SIP-Client herstellen, der die IP-Adresse und den Port (5090 ist der Standardport) bereitstellt. Die Benutzer haben die folgende ID:
roland@sip.falcot.com
und sie können sich mit einem Client anmelden (siehe
Abschnitt 13.10, „Echtzeit-Kommunikationssoftware“)
Ein XMPP-Server verwaltet die Konnektivität zwischen lokalen XMPP-Benutzern und XMPP-Benutzern in anderen Domänen im öffentlichen Internet.
Prosody ist ein beliebter XMPP-Server, der zuverlässig auf Debian-Servern läuft.
11.8.4.1. Installieren des XMPP-Servers
Installieren Sie das Paket prosody.
Überprüfen Sie die Konfigurationsdatei /etc/prosody/prosody.cfg.lua
. Das Wichtigste ist das Einfügen von JIDs der Benutzer, die den Server verwalten dürfen.
admins = { "joe@falcot.com" }
Außerdem wird für jede Domäne eine eigene Konfigurationsdatei benötigt. Kopieren Sie das Beispiel aus /etc/prosody/conf.avail/example.com.cfg.lua
und verwenden Sie es als Ausgangspunkt. Hier ist falcot.com.cfg.lua
:
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"
Um die Domain zu aktivieren, muss ein Symlink von /etc/prosody/conf.d/
vorhanden sein. Erstellen Sie es so:
#
ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
Starten Sie den Dienst neu, um die neue Konfiguration zu verwenden.
11.8.4.2. Verwalten des XMPP-Servers
Einige Verwaltungsvorgänge können mit dem Kommandozeilenprogramm prosodyctl
durchgeführt werden. Zum Beispiel, um das unter /etc/prosody/prosody.cfg.lua
angegebene Administratorkonto hinzuzufügen:
# prosodyctl adduser joe@falcot.com
11.8.5. Laufende Dienste auf Port 443
Einige Administratoren bevorzugen alle ihre RTC-Dienste auf Port 443 laufen zu lassen. Dies hilft Benutzern, sich von entfernten Orten wie Hotels und Flughäfen aus zu verbinden, wo andere Ports blockiert werden können oder der Internetverkehr über HTTP-Proxy-Server geleitet wird.
Um diese Strategie zu nutzen, benötigt jeder Dienst (SIP, XMPP und TURN) eine andere IP-Adresse. Alle Dienste können sich weiterhin auf demselben Host befinden, da Linux mehrere IP-Adressen auf einem einzigen Host unterstützt. Die Portnummer 443 muss in den Konfigurationsdateien für jeden Prozess und auch in den DNS-SRV-Einträgen angegeben werden.
11.8.6. WebRTC hinzufügen
Falcot möchte Kunden direkt von der Website aus telefonieren lassen. Die Falcot-Administratoren wollen WebRTC auch als Teil ihres Disaster-Recovery-Plans nutzen, so dass sich die Mitarbeiter zu Hause über Webbrowser in die Telefonanlage des Unternehmens einloggen und im Notfall normal arbeiten können.
WebRTC ist eine sich schnell entwickelnde Technologie und es ist wichtig, Pakete aus der Distribution Testing zu verwenden. Eine andere Möglichkeit ist, die Software selbst zu kompilieren.
WebRTC verwendet eine einfache API, um Browser und mobile Anwendungen mit RTC auszustatten, es ist freie Software und wird von Google entwickelt.
Ein sehr flexibler Ansatz ist die Verwendung der WebRTC-Implementierung von GStreamer. Sie ermöglicht Pipeline-basierte Multimedia-Anwendungen, was die Entwicklung interessanter und hocheffizienter Anwendungen ermöglicht. Ein guter Ausgangspunkt ist die folgende Demo von Centricular, der Hauptfirma, die sie entwickelt:
Erweiterte Click-to-Call-Websites verwenden normalerweise serverseitiges Scripting, um die Datei
config.js
dynamisch zu erzeugen. Der
DruCall Quellcode zeigt, wie man dies mit PHP macht.
Dieses Kapitel hat nur einen Bruchteil der verfügbaren Serversoftware dargestellt; jedoch wurden die meisten der üblichen Netzwerkdienste beschrieben. Jetzt ist es Zeit für ein noch technischeres Kapitel: wir werden tiefer in die Einzelheiten einiger Konzepte eindringen, sowie Masseneinsätze und Virtualisierungen beschreiben.