Product SiteDocumentation Site

11.8. Sanntids kommunikasjonstjenester

Real-Time Communication (RTC)-tjenester (sanntids kommunikasjonstjenester) inkluderer tale, video/nettkamera, lynmelding (IM) og skrivebordsdeling. Dette kapitlet gir en kort innføring i tre av de tjenester som kreves for å drive RTC, omfattende en TURN-tjener, SIP-tjener og XMPP-tjener. Omfattende detaljinformasjon om hvordan planlegge, installere og administrere disse tjenestene er tilgjengelige i Real-Time Communications Quick Start Guide (Hurtigstartveiledning) som inneholder eksempler som er spesifikke for Debian.
Både SIP og XMPP kan gi den samme funksjonaliteten. SIP er litt mer kjent for tale og video, mens XMPP er tradisjonelt ansett som en IM-protokoll. Faktisk kan begge anvendes for hvilke som helst av disse formålene. For å maksimere tilkoblingsmuligheter anbefales det å kjøre begge parallelt.
Disse tjenestene er avhengige av X.509-sertifikater både for autentiserings- og konfidensialitetsformål. Se Seksjon 10.2.1.1, «Offentlig nøkkel-infrastruktur: easy-rsa» for mer informasjon om hvordan du oppretter dem. Alternativt har også Real-Time Communications Quick Start Guide (Sanntids kommunikasjonstjenesters Hurtigstartveiledning) noen nyttige forklaringer:

11.8.1. DNS-innstillinger for RTC-tjenester

RTC-tjenester krever DNS SRV- og NAPTR-registrering. Ett eksempel på oppsett som kan plasseres i sonefilen for falcot.com:
; tjenermaskinen der alt kommer til å kjøre
server1            IN     A      198.51.100.19
server1            IN     AAAA   2001:DB8:1000:2000::19

; Kun IPv4 for TURN akkurat nå, da noen klienter har problemer med IPv6
turn-server        IN     A      198.51.100.19

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

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

; DNS SRV og 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- og NAPTR-oppføringer 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-oppføringer for XMPP-tjener- og klient-modus:
_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-tjener

TURN er en tjeneste som hjelper klientene bak NAT-rutere og brannmurer med å finne den mest effektive måten å kommunisere med andre klienter på, og for å formidle mediestrømmer hvis ingen direkte mediabane blir funnet. Det anbefales sterkt at TURN-tjeneren installeres før noen av de andre RTC-tjenestene tilbys til sluttbrukere.
TURN og den tilhørende ICE-protokollen er åpne standarder. For å dra nytte av disse protokollene, maksimere tilkoblingsmuligheter, og minimere brukerfrustrasjon, er det viktig å sikre at alle klientprogramvarene støtter ICE og TURN.
For å få ICE-algoritmene til å fungere effektivt må tjeneren ha to offentlige IPv4-adresser.

11.8.2.1. Å installere TURN-tjeneren

Å installere resiprocate-turn-server-pakken.
Rediger oppsettsfilen /etc/reTurn/reTurnServer.config. Det viktigste er å sette inn IP-adressene til tjeneren.
# 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
Start tjenesten på nytt.

11.8.2.2. Å håndtere TURN-brukerne

Bruk htdigest-verktøyet for å håndtere TURN-tjenestens brukerliste.
# htdigest /etc/reTurn/users.txt myrealm joe
Å bruke HUP-signalet til å få tjeneren til å laste /etc/reTurn/users.txt-filen på nytt etter å ha endret den, eller aktivere den automatiske gjenopplastingsfunksjonen i /etc/reTurn/reTurnServer.config.

11.8.3. SIP-mellomtjener

En SIP-mellomtjener håndterer innkommende og utgående SIP-forbindelser mellom andre organisasjoner, SIP-kanalleverandører, SIP PBXer som Asterisk, SIP-telefoner, SIP-baserte PC-telefoner og WebRTC-applikasjoner.
Det anbefales sterkt å installere og sette opp SIP-mellomtjeneren før du prøver et SIP PBX-oppsett. SIP-mellomtjeneren normaliserer mye av trafikken som når PBX, og gir større tilkoblingsmuligheter og elastisitet.

11.8.3.1. Å installere SIP-mellomtjener

Å installere repro-pakken. Å bruke pakken fra jessie-backports er sterkt anbefalt, ettersom den har de nyeste forbedringene for å maksimere tilkoblingsmuligheter og elastisitet.
Å redigere /etc/repro/repro.config-oppsettsfilen. Det viktigste å gjøre er å sette inn IP-adressene til tjeneren. Eksempelet nedenfor viser hvordan du setter opp både vanlig SIP og WebSockets/WebRTC, ved hjelp av TLS, IPv4 og IPv6:
# 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
Å bruke htdigest-verktøyet for å administrere admin-passordet for nettgrensesnittet. Brukernavnet må være admin, og områdenavnet må samsvare med verdien som er angitt i repro.config.
# htdigest /etc/repro/users.txt repro admin
Start tjenesten på nytt for å bruke det nye oppsettet.

11.8.3.2. Å håndtere SIP-mellomtjeneren

Gå til nettgrensesnittet på http://sip-proxy.falcot.com:5080 for å fullføre oppsettet ved å legge til domener, lokale brukere og statiske ruter.
Det første trinnet er å legge til det lokale domenet. Prosessen må startes på nytt etter å ha lagt til, eller fjernet, domener fra listen.
Mellomtjeneren vet hvordan du skal koble samtaler mellom lokale brukere og full SIP-adresse. Koblingsoppsettet er bare nødvendig for å overstyre standardoppførsel, for eksempel til å gjenkjenne telefonnumre, legge til et prefiks, og viderekoble dem til en SIP-leverandør.

11.8.4. XMPP-tjener

En XMPP-tjener håndterer tilkobling mellom lokale XMPP-brukere og XMPP-brukere i andre domener på det offentlige Internettet.
Prosodi er en populær XMPP-tjener som opererer pålitelig på Debian-tjenere.

11.8.4.1. Å installere XMPP-tjener

Installer prosody-pakken. Å bruke pakken fra jessie-backports er sterkt anbefalt, ettersom den har de nyeste forbedringene for å maksimere tilkoblingsmuligheter og elastisitet.
Gjennomgå /etc/prosody/prosody.cfg.lua-oppsettsfilen. Det viktigste å gjøre er å sette inn JISs til brukerne som har tillatelse til å håndtere tjeneren.
admins = { "joe@falcot.com" }
Et individuell oppsettsfil er også nødvendig for hvert domene. Kopier eksemplet fra /etc/prosody/conf.avail/example.com.cfg.lua, og bruk det som et startpunkt. Her er 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";
                }
For å aktivere domenet må det være en symlink fra /etc/prosody/conf.d/. Lag den på denne måten:
# ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
Start tjenesten på nytt for å bruke det nye oppsettet.

11.8.4.2. Å håndtere XMPP-tjeneren

Noen håndteringsoperasjoner kan utføres ved hjelp av prosodyctl-kommandolinjeverktøyet. For eksempel, å legge til administratorkontoen som er angitt i /etc/prosody/prosody.cfg.lua:
# prosodyctl adduser joe@falcot.com
Se Prosodi-dokumentasjon på nettet for mer informasjon om hvordan du kan tilpasse oppsettet.

11.8.5. Å kjøre tjenester på port 443

Noen administratorer foretrekker å kjøre alle sine RTC-tjenester på port 443. Dette hjelper brukere å koble til fra eksterne steder, som hoteller og flyplasser, der andre porter kan være blokkert, eller Internett-trafikken rutet gjennom HTTP-mellomtjenere.
For å bruke denne strategien trenger hver tjeneste (SIP, XMPP og TURN) en ulik IP-adresse. Alle tjenestene kan fortsatt være på samme vert ettersom Linux støtter flere IP-adresser på en enkelt vert. Portnummeret 443 må spesifiseres i oppsettsfilene for hver prosess, og også i DNS SRV-registreringene.

11.8.6. Å legge til WebRTC

Falcot ønsker å la kundene ringe direkte fra nettstedet. Falcot-administratorene ønsker også å bruke WebRTC som en del av sin gjenopprettingsplan etter uhell, slik at ansatte kan bruke nettlesere hjemme til å logge inn på selskapets telefonsystem, og fungere normalt i en nødsituasjon.
WebRTC er en teknologi i rask utvikling, og det er viktig å bruke pakker fra jessie-backports, eller Testing-distribusjonene.
JSCommunicator er en generisk, ikke-varemerket WebRTC-telefon som ikke krever noen tjener-side skripting som PHP. Den er bygget utelukkende med HTML, CSS og Javascript. Den er grunnlaget for mange andre WebRTC-tjenester og moduler til mer avanserte nettpubliseringsrammeprogrammer.
Pakken jscommunicator-web-phone er den raskeste måten å installere en WebRTC-telefon på i et nettsted. Den krever en SIP-mellomtjener med WebSocket-transport. Instruksjonene i Seksjon 11.8.3.1, «Å installere SIP-mellomtjener» inkluderer de nødvendige opplysninger for å aktivere WebSocket-transport i repro SIP-mellomtjeneren.
Etter å ha installert jscommunicator-web-phone, er det ulike måter å bruke den på. En enkel strategi er å inkludere eller kopiere oppsettsfilene fra /etc/jscommunicator-web-phone/apache.conf i et virtuelt vertsoppsett for Apache.
Når web-telefonfiler er tilgjengelig i nett-tjeneren, tilpass /etc/jscommunicator-web-phone/config.js til å peke på TURN-tjeneren og SIP-mellomtjeneren. For eksempel:
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
  },

  ...
Mer avanserte «klikk for å ringe»-nettsider bruker vanligvis tjenerside skripting for å generere config.js-filen dynamisk. DruCall-kildekoden demonstrerer hvordan det kan gjøres med PHP.
Dette kapittelet har valgt ut bare en brøkdel av den tilgjengelige tjenerprogramvaren; men de fleste av de vanlige nett-tjenestene er beskrevet. Nå er tiden inne for et enda mer teknisk kapittel: Vi vil gå dypere inn i detaljene for noen begreper, beskrive massive utplasseringer og virtualisering.