Product SiteDocumentation Site

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.

11.8.2. TURN-Server

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.

11.8.3. SIP Proxy-Server

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“)

11.8.4. XMPP-Server

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
Finden Sie in der Prosody online documentation weitere Details zur Anpassung der Konfiguration.

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.