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, «X.509-sertifikater» for mer informasjon.

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 (sjekk Eksempel 10.13, «Utdrag av /etc/bind/db.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.
Installer pakken coturn og rediger oppsettfilen /etc/turnserver.conf. Som standard er en SQLite-database satt opp i /var/db/turndb for brukerkontoinnstillinger, men PostgreSQL, MySQL eller Redis kan settes opp i stedet hvis ønskelig. Det viktigste er å sette inn IP-adressene til tjenerne.
Tjerneren kan startes med å kjøre turnserver fra coturn-pakken. Vi vil at tjeneren skal være en automatisk startet systemtjeneste. Dette er forvalgt adferd ved bruk av systemd. Kun når man bruker det gamle SysVinit må man redigere /etc/default/coturn-filen slik:
#
# Kommenter ut hvis du ønsker å ha turn-tjeneren kjørende automatisk som
# en bakgrunnstjenesteprosess
#
TURNSERVER_ENABLED=1
Som standard bruker TURN-tjeneren anonym tilgang. Vi må legge til de brukerne vi vil bruke:
# turnadmin -a -u roland -p hemmelig_passord -r falcot.com
# turnadmin -A -u admin -p hemmelig_passord
Vi bruker argumentet -a til å legge til en vanlig bruker og -A for å legge til en administratorbruker.

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

Installer pakken kamailio og pakken for sluttbrukerprogrammer. Falcot-administratorene valgte MySQL, slik at de installerer kamailio-mysql-modules og mariadb-server. /etc/kamailio/kamctlrc er oppsettsfilen for kontrollverktøyene kamctl og kamdbctl. Du må redigere og sette SIP_DOMAIN til SIP-tjenestedomenet og sette DBENGINE til MySQL, kan en annen database for sluttbrukerprogrammer som kan brukes.
[...]
## 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
[...]
Nå fokuserer vi på oppsettsfilen /etc/kamailio/kamailio.cfg. Falcot trenger brukerautentisering og en fast brukerplassering, slik at de legger til de følgende #!define-anvisningene øverst i denne filen:
#!KAMAILIO
#
# Kamailio (OpenSER) SIP-tjener v5.2 - forvalgt oppsettskript
#     - web: https://www.kamailio.org
#     - git: https://github.com/kamailio/kamailio
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
[...]
Kamailio trenger en databasestruktur vi kan lage ved å kjøre kamdbctl create som rot-bruker. Til slutt kan vi legge til noen brukere ved bruk av kamctl.
# kamdbctl create
[...]
# kamctl add roland hemmelig_passord
Når alt er riktig satt opp, kan du starte eller restarte tjenesten på nytt med systemctl restart kamailio, du kan koble til en SIP-klient som gir IP-adressen og porten (5090 er forvalget). Brukerne har følgende ID: roland@sip.falcot.com, og de kan logge inn ved hjelp av en klient (sjekk Seksjon 13.9, «Sanntidskommunikasjonsprogramvare»).

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.
prosody er en populær og pålitelig XMPP-tjener som kan kjøres på Debian-tjenere.

11.8.4.1. Installasjon av XMPP-tjeneren

Installer pakken prosody.
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";
                certificate = "/etc/ssl/certs/falcot.com.pem";
                }

-- Set up a MUC (multi-user chat) room server on conference.example.com:
Component "conference.falcot.com" "muc"
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 Testing-distribusjonen. Et annet alternativ er å kompilere programvaren.
WebRTC bruker et enkel API for å tilby nettlesere og mobilapplikasjoner RTC, det er fri programvare og den blir utviklet av Google.
En svært fleksibel tilnærming er å bruke GStreamers WebRTC-implementering. Det muliggjør pipeline-baserte multimedia applikasjoner, som gjør det mulig å utvikle interessante og svært effektive applikasjoner. Et godt utgangspunkt er følgende demo fra Centricular, hovedselskapet som utvikler det:
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.