Serveur relais (TURN)¶
Les connexions purement pair à pair ne peuvent parfois pas s'établir, à cause de pare-feux ou de NAT chez l'un des utilisateurs ou chez tous. Pour y remédier et franchir les pare-feux les plus récalcitrants, un ou plusieurs serveurs TURN (Traversal Using Relay NAT) peuvent être mis en place.
Nous utilisons coturn (github.com/coturn/coturn) pour nos serveurs TURN, comme la plupart des éditeurs, dont Slack et Zoom. Coturn fait également office de serveur STUN, chargé de répondre à la question « quelle est mon adresse IP publique ».
Machine dédiée
Nous déconseillons de déployer un serveur TURN sur la machine qui héberge déjà Drovio Server, pour des raisons de sécurité et de performance.
Installer sous Debian¶
Coturn est packagé pour Debian, la version 13 embarquant une version quasiment à jour, et fonctionne aussi bien en x64 qu'en arm64, les commandes ci-dessous étant identiques sur les deux. Étape par étape, sur une machine Debian 13 fraîchement installée :
- Décommentez
TURNSERVER_ENABLED=1et enregistrez. - Ouvrez le fichier de configuration, voir Configurer coturn ci-dessous :
Installer sous RHEL¶
Coturn est disponible par EPEL sous RHEL 9 et 10. Étape par étape :
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install coturn
La première commande active EPEL, ici dans sa version pour RHEL 9 : adaptez l'URL à votre version.
Ouvrez ensuite le fichier de configuration, voir Configurer coturn ci-dessous :
Configurer coturn¶
Modifiez turnserver.conf comme suit.
Écoute et réseau :
listening-portettls-listening-portdoivent valoir80et443plutôt que les ports par défaut, afin de franchir la plupart des pare-feux.listening-ip: l'IP publique, ou l'IP privée si vous êtes derrière un NAT, par exemple sur AWS EC2.relay-ip: identique àlistening-ip.external-ip: l'IP publique, uniquement lorsquelistening-ipest une adresse privée derrière un NAT.min-port=49152etmax-port=65535: la plage de ports UDP que coturn alloue au trafic relayé. Ouvrez cette plage en UDP dans votre pare-feu.
Authentification :
fingerprintdoit être décommenté.static-auth-secret=MySeCrEt: remplacez par une longue chaîne aléatoire. C'est le secret partagé entre Drovio Server et coturn.realm=turn.example.com: à remplacer ; cette valeur n'a pas besoin de résoudre vers quoi que ce soit.stale-nonce=600doit être décommenté.
Bande passante :
max-bps: nombre maximal d'octets par seconde et par session. Commentez la ligne pour ne pas la limiter, ou fixez-la au moins au débit maximal configuré danssettings.conf, souswebrtc.service_quality.maximum. Attention,max-bpss'exprime en octets par seconde tandis quewebrtc.service_quality.maximums'exprime en kbits par seconde : la valeur par défaut de 10 Mbps correspond à 1 250 000 octets par seconde.
TLS (facultatif, pour la prise en charge de TURNS) :
certetpkeydoivent désigner votre certificat et votre clé privée. Si vous n'avez pas besoin de TURNS, sautez cette partie et n'utilisez que le port80en désignant ce serveur, voir Configurer Drovio Server.- Renseignez
cipher-listavec"ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AESCCM". no-tlsv1etno-tlsv1_1doivent être décommentés.
Durcissement :
no-multicast-peersdoit être décommenté.allow-loopback-peersdoit rester commenté, le bouclage étant refusé par défaut depuis coturn 4.5.2.no-tcp-relaydoit être décommenté : Drovio n'utilise que le relais UDP, et désactiver le relais TCP réduit la surface d'attaque.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/16etdenied-peer-ip=127.0.0.0/8: empêchent le trafic relayé d'atteindre les réseaux privés ou de bouclage.no-software-attributedoit être décommenté, ce qui masque la version de coturn dans les réponses.no-rfc5780,no-stun-backward-compatibilityetresponse-origin-only-with-rfc5780doivent être décommentés. Ils désactivent des fonctions STUN héritées, inutiles ici, et réduisent l'exposition.
Vous voudrez sans doute aussi isoler ce serveur dans son propre réseau ou VPC.
Interface en ligne de commande :
cli-ip=127.0.0.1,cli-port=5766etcli-password=myclipassword: changez le mot de passe. Cette interface sert à vérifier les pairs connectés, en lançanttelnet localhost 5766, en saisissant le mot de passe puisps. N'exposez pas ce port vers l'extérieur.
Enregistrez, puis redémarrez coturn :
Votre serveur relais TURN, et STUN, est désormais opérationnel.
Configurer Drovio Server¶
De retour sur votre instance Drovio Server :
Repérez webrtc, remplacez turn_servers_secret par la valeur de
static-auth-secret définie plus haut et adaptez la configuration ci-dessous à
vos besoins, en veillant à remplacer l'URL turn.example.com par celle ou l'IP de
votre machine 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 première entrée est le STUN, qui ne répond qu'aux demandes « quelle est mon adresse IP ».
- La deuxième est le TURN classique en UDP sur 443, sans couche TLS.
- La troisième est le TURN en TCP sur 443, sans couche TLS.
- La quatrième est le TURNS en UDP sur 443, avec une couche TLS supplémentaire.
Cela devrait fonctionner avec la plupart des pare-feux récalcitrants. La section
webrtc s'applique à chaud, il n'y a donc rien à redémarrer : les nouveaux relais
sont pris en compte en quelques secondes.
Vérifier le serveur relais¶
Pour vérifier que le serveur relais fonctionne correctement :
- Lancez Firefox.
- Saisissez
about:configdans la barre d'adresse, acceptez et continuez. - Dans la barre de recherche, tapez
relay. - Passez
media.peerconnection.ice.relay_onlyàtrue. - Ouvrez l'application Drovio et connectez-vous.
- Utilisez l'icône en forme d'enveloppe et cliquez sur Invite by URL.
- Collez le lien d'invitation dans Firefox et poursuivez.
- Saisissez un nom d'affichage, sans choisir de lancer l'application, et poursuivez dans le navigateur.
- Vous devriez voir votre propre écran, en miroir lorsque vous regardez l'écran partagé.
- Ouvrez un nouvel onglet dans Firefox, sans fermer le précédent, et saisissez
about:webrtc. - Cliquez sur Show details.
- Vous devriez lire ICE State: succeeded, nominated: true, selected:
true, et voir relay mentionné à côté de votre adresse IP, plutôt que
host,srflxouprflx.
Remettez le réglage en place
N'oubliez pas de repasser media.peerconnection.ice.relay_only à false.