Server relay (TURN)¶
Le connessioni puramente peer-to-peer a volte non riescono a stabilirsi, a causa di firewall o di NAT presso uno degli utenti o presso tutti. Per rimediarvi e superare i firewall più recalcitranti, si possono mettere in atto uno o più server TURN (Traversal Using Relay NAT).
Usiamo coturn (github.com/coturn/coturn) per i nostri server TURN, come la maggior parte degli editori, tra cui Slack e Zoom. Coturn fa anche da server STUN, incaricato di rispondere alla domanda «qual è il mio indirizzo IP pubblico».
Macchina dedicata
Sconsigliamo di distribuire un server TURN sulla macchina che ospita già Drovio Server, per ragioni di sicurezza e di prestazioni.
Installare su Debian¶
Coturn è pacchettizzato per Debian, la cui versione 13 include una versione quasi aggiornata, e funziona tanto in x64 quanto in arm64, i comandi qui sotto essendo identici sui due. Passo dopo passo, su una macchina Debian 13 appena installata:
- Decommentate
TURNSERVER_ENABLED=1e salvate. - Aprite il file di configurazione, vedere Configurare coturn qui sotto:
Installare su RHEL¶
Coturn è disponibile tramite EPEL su RHEL 9 e 10. Passo dopo passo:
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install coturn
Il primo comando attiva EPEL, qui nella sua versione per RHEL 9: adattate l'URL alla vostra versione.
Aprite poi il file di configurazione, vedere Configurare coturn qui sotto:
Configurare coturn¶
Modificate turnserver.conf come segue.
Ascolto e rete:
listening-portetls-listening-portdevono valere80e443piuttosto che le porte predefinite, al fine di superare la maggior parte dei firewall.listening-ip: l'IP pubblico, oppure l'IP privato se siete dietro un NAT, per esempio su AWS EC2.relay-ip: identico alistening-ip.external-ip: l'IP pubblico, unicamente quandolistening-ipè un indirizzo privato dietro un NAT.min-port=49152emax-port=65535: l'intervallo di porte UDP che coturn alloca al traffico relayato. Aprite questo intervallo in UDP nel vostro firewall.
Autenticazione:
fingerprintdeve essere decommentato.static-auth-secret=MySeCrEt: sostituite con una lunga stringa casuale. È il segreto condiviso tra Drovio Server e coturn.realm=turn.example.com: da sostituire; questo valore non ha bisogno di risolvere verso alcunché.stale-nonce=600deve essere decommentato.
Banda passante:
max-bps: numero massimo di byte al secondo e per sessione. Commentate la riga per non limitarla, oppure fissatela almeno al bitrate massimo configurato insettings.conf, sottowebrtc.service_quality.maximum. Attenzione,max-bpssi esprime in byte al secondo mentrewebrtc.service_quality.maximumsi esprime in kbit al secondo: il valore predefinito di 10 Mbps corrisponde a 1 250 000 byte al secondo.
TLS (facoltativo, per il supporto di TURNS):
certepkeydevono designare il vostro certificato e la vostra chiave privata. Se non avete bisogno di TURNS, saltate questa parte e usate solo la porta80nel designare questo server, vedere Configurare Drovio Server.- Valorizzate
cipher-listcon"ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AESCCM". no-tlsv1eno-tlsv1_1devono essere decommentati.
Hardening:
no-multicast-peersdeve essere decommentato.allow-loopback-peersdeve restare commentato, dato che il loopback è rifiutato per impostazione predefinita da coturn 4.5.2.no-tcp-relaydeve essere decommentato: Drovio usa solo il relay UDP, e disattivare il relay TCP riduce la superficie di attacco.denied-peer-ip=0.0.0.0/8,denied-peer-ip=10.0.0.0/8,denied-peer-ip=172.16.0.0/12,denied-peer-ip=192.168.0.0/16edenied-peer-ip=127.0.0.0/8: impediscono al traffico relayato di raggiungere le reti private o di loopback.no-software-attributedeve essere decommentato, il che maschera la versione di coturn nelle risposte.no-rfc5780,no-stun-backward-compatibilityeresponse-origin-only-with-rfc5780devono essere decommentati. Disattivano funzioni STUN ereditate, qui inutili, e riducono l'esposizione.
Vorrete senza dubbio anche isolare questo server nella propria rete o VPC.
Interfaccia a riga di comando:
cli-ip=127.0.0.1,cli-port=5766ecli-password=myclipassword: cambiate la password. Questa interfaccia serve a verificare i peer connessi, lanciandotelnet localhost 5766, inserendo la password poips. Non esponete questa porta verso l'esterno.
Salvate, poi riavviate coturn:
Il vostro server relay TURN, e STUN, è ormai operativo.
Configurare Drovio Server¶
Di ritorno sulla vostra istanza Drovio Server:
Individuate webrtc, sostituite turn_servers_secret con il valore di
static-auth-secret definito più sopra e adattate la configurazione qui sotto
alle vostre esigenze, avendo cura di sostituire l'URL turn.example.com con
quello o con l'IP della vostra macchina coturn:
"webrtc": {
"turn_servers_secret": "MySeCrEt",
"turn_servers_auth_timeout": 300,
"ice_servers": [
{ "url": "stun:turn.example.com:443" },
{ "url": "turn:turn.example.com:443" },
{ "url": "turn:turn.example.com:443?transport=tcp" },
{ "url": "turns:turn.example.com:443" }
],
"service_quality": {
"minimum": 1000,
"maximum": 10000
}
}
- La prima voce è lo STUN, che risponde solo alle richieste «qual è il mio indirizzo IP».
- La seconda è il TURN classico in UDP sulla 443, senza strato TLS.
- La terza è il TURN in TCP sulla 443, senza strato TLS.
- La quarta è il TURNS in UDP sulla 443, con uno strato TLS supplementare.
Ciò dovrebbe funzionare con la maggior parte dei firewall recalcitranti. La
sezione webrtc si applica a caldo, non c'è quindi nulla da riavviare: i nuovi
relay sono presi in carico in qualche secondo.
Verificare il server relay¶
Per verificare che il server relay funzioni correttamente:
- Lanciate Firefox.
- Inserite
about:confignella barra degli indirizzi, accettate e continuate. - Nella barra di ricerca, digitate
relay. - Portate
media.peerconnection.ice.relay_onlyatrue. - Aprite l'applicazione Drovio e connettetevi.
- Usate l'icona a forma di busta e fate clic su Invite by URL.
- Incollate il link di invito in Firefox e proseguite.
- Inserite un nome visualizzato, senza scegliere di lanciare l'applicazione, e proseguite nel browser.
- Dovreste vedere il vostro stesso schermo, a specchio quando guardate lo schermo condiviso.
- Aprite una nuova scheda in Firefox, senza chiudere la precedente, e inserite
about:webrtc. - Fate clic su Show details.
- Dovreste leggere ICE State: succeeded, nominated: true, selected:
true, e vedere relay menzionato accanto al vostro indirizzo IP,
piuttosto che
host,srflxoprflx.
Rimettete l'impostazione a posto
Non dimenticate di riportare media.peerconnection.ice.relay_only a false.