Product SiteDocumentation Site

11.8. Echtzeit-Kommunikationsdienste

Real-Time Communication (RTC) Dienste beinhalten Sprache, Video/Webcam, Instant Messaging (IM) und Desktop Sharing. 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 basieren auf X.509-Zertifikaten, sowohl für die Authentifizierung als auch für Vertraulichkeit. Siehe Abschnitt 10.2.1.1, „Public-Key-Infrastrultur: easy-rsa für Details zur Erstellung. Alternativ dazu bietet die Real-Time Communications Quick Start Guide auch nützliche Erklärungen:

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.

11.8.2.1. Den TURN-Server installieren

Das Paket resiprocate-turn-server Paket installieren.
Bearbeiten Sie die Konfigurationsdatei /etc/reTurn/reTurnServer.config. Das Wichtigste ist, die IP-Adressen des Servers einzugeben.
# your IP addresses go here:
TurnAddress = 198.51.100.19
TurnV6Address = 2001:DB8:1000:2000::19
AltStunAddress = 198.51.100.20
# your domain goes here, it must match the value used
# to hash your passwords if they are already hashed
# using the HA1 algorithm:
AuthenticationRealm = myrealm

UserDatabaseFile = /etc/reTurn/users.txt
UserDatabaseHashedPasswords = true
Dienst neu starten.

11.8.2.2. TURN-Benutzer verwalten

Verwenden Sie das Dienstprogramm htdigest, um die Benutzerliste des TURN-Servers zu verwalten.
# htdigest /etc/reTurn/users.txt myrealm joe
Verwenden Sie das HUP-Signal, damit der Server die Datei /etc/reTurn/users.txt nach dem Ändern neu lädt oder aktivieren Sie die automatische Reload-Funktion in /etc/reTurn/reTurnServer.config.

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 repro. Die Verwendung des Pakets von jessie-backports wird dringend empfohlen, da es die neuesten Verbesserungen zur Maximierung der Konnektivität und Ausfallsicherheit enthält.
Bearbeiten Sie die Konfigurationsdatei /etc/repro/repro/repro.config. Das Wichtigste ist, die IP-Adressen des Servers einzugeben. Das folgende Beispiel zeigt, wie man sowohl normale SIP- als auch WebSockets/WebRTCs mit TLS, IPv4 und IPv6 einrichtet:
# Transport1 will be for SIP over TLS connections
# We use port 5061 here but if you have clients connecting from
# locations with firewalls you could change this to listen on port 443
Transport1Interface = 198.51.100.19:5061
Transport1Type = TLS
Transport1TlsDomain = falcot.com
Transport1TlsClientVerification = Optional
Transport1RecordRouteUri = sip:falcot.com;transport=TLS
Transport1TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport1TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport2 is the IPv6 version of Transport1
Transport2Interface = 2001:DB8:1000:2000::19:5061
Transport2Type = TLS
Transport2TlsDomain = falcot.com
Transport2TlsClientVerification = Optional
Transport2RecordRouteUri = sip:falcot.com;transport=TLS
Transport2TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport2TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport3 will be for SIP over WebSocket (WebRTC) connections
# We use port 8443 here but you could use 443 instead
Transport3Interface = 198.51.100.19:8443
Transport3Type = WSS
Transport3TlsDomain = falcot.com
# This would require the browser to send a certificate, but browsers
# don't currently appear to be able to, so leave it as None:
Transport3TlsClientVerification = None
Transport3RecordRouteUri = sip:falcot.com;transport=WSS
Transport3TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport3TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport4 is the IPv6 version of Transport3
Transport4Interface = 2001:DB8:1000:2000::19:8443
Transport4Type = WSS
Transport4TlsDomain = falcot.com
Transport4TlsClientVerification = None
Transport4RecordRouteUri = sip:falcot.com;transport=WSS
Transport4TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport4TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport5: this could be for TCP connections to an Asterisk server
# in your internal network.  Don't allow port 5060 through the external
# firewall.
Transport5Interface = 198.51.100.19:5060
Transport5Type = TCP
Transport5RecordRouteUri = sip:198.51.100.19:5060;transport=TCP

HttpBindAddress = 198.51.100.19, 2001:DB8:1000:2000::19
HttpAdminUserFile = /etc/repro/users.txt

RecordRouteUri = sip:falcot.com;transport=tls
ForceRecordRouting = true
EnumSuffixes = e164.arpa, sip5060.net, e164.org
DisableOutbound = false
EnableFlowTokens = true
EnableCertificateAuthenticator = True
Verwenden Sie das Dienstprogramm htdigest, um das Admin-Passwort für das Web-Interface zu verwalten. Der Benutzername muss admin sein und der Realmname muss mit dem in repro.config angegebenen Wert übereinstimmen.
# htdigest /etc/repro/users.txt repro admin
Starten Sie den Dienst neu, um die neue Konfiguration zu verwenden.

11.8.3.2. Den SIP-Proxy verwalten

Gehen Sie zum Webinterface unter http://sip-proxy.falcot.com:5080, um die Konfiguration durch Hinzufügen von Domänen, lokalen Benutzern und statischen Routen abzuschließen.
Der erste Schritt ist das Hinzufügen der lokalen Domäne. Der Vorgang muss nach dem Hinzufügen oder Entfernen von Domänen aus der Liste neu gestartet werden.
Der Proxy weiß, wie man Anrufe zwischen lokalen Benutzern und vollen SIP-Adressen weiterleitet, die Routing-Konfiguration ist nur notwendig, um das Standardverhalten zu überschreiben, z.B. um Telefonnummern zu erkennen, ein Präfix hinzuzufügen und sie an einen SIP-Provider weiterzuleiten.

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 repro. Die Verwendung des Pakets von jessie-backports wird dringend empfohlen, da es die neuesten Verbesserungen zur Maximierung der Konnektivität und Ausfallsicherheit enthält.
Ü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";
                }
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 jessie-backports oder Testing Distributionen zu verwenden.
JSCommunicator ist ein generisches, markenfreies WebRTC-Telefon, das kein serverseitiges Scripting wie PHP benötigt. Es wurde ausschließlich mit HTML, CSS und JavaScript erstellt. Es ist die Basis für viele weitere WebRTC-Dienste und Module für erweiterte Web-Publishing-Frameworks.
Das Paket jscommunicator-web-phone ist der schnellste Weg, ein WebRTC-Telefon in eine Website zu installieren. Es wird ein SIP-Proxy mit einem WebSocket-Transport benötigt. Die Anweisungen in Abschnitt 11.8.3.1, „SIP-Proxy installieren“ enthalten die notwendigen Details, um den WebSocket-Transport in der repro SIP-Proxy zu aktivieren.
Nach der Installation von jscommunicator-web-phone gibt es verschiedene Möglichkeiten, es zu verwenden. Eine einfache Methode besteht darin, die Konfiguration von /etc/jscommunicator-web-phone/apache.conf in eine virtuelle Apache-Host-Konfiguration einzubinden oder zu kopieren.
Sobald die Web-Telefondateien im Webserver verfügbar sind, passen Sie den /etc/jscommunicator-web-phone/config.js so an, dass er auf den TURN-Server und den SIP-Proxy zeigt. Zum Beispiel:
JSCommSettings = {

  // Web server environment
  webserver: {
    url_prefix: null            // If set, prefix used to construct sound/ URLs
  },

  // STUN/TURN media relays
  stun_servers: [],
  turn_servers: [
    { server:"turn:turn-server.falcot.com?transport=udp", username:"joe", password:"j0Ep455d" }
  ],

  // WebSocket connection
  websocket: {
      // Notice we use the falcot.com domain certificate and port 8443
      // This matches the Transport3 and Transport4 example in
      // the falcot.com repro.config file
    servers: 'wss://falcot.com:8443',
    connection_recovery_min_interval: 2,
    connection_recovery_max_interval: 30
  },

  ...
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.