Nodyx dispose maintenant de son propre serveur STUN/TURN
Rust 2.9MB RFC 5766
On a remplacé coturn (complexe à configurer, 50+ fichiers de config) par nodyx-turn — un binaire Rust de 2,9 MB qui fait exactement ce qu'il faut.
Pourquoi c'était nécessaire
WebRTC fonctionne en P2P direct dans ~80% des cas. Mais pour les 20% restants (NAT symétrique, réseau d'entreprise, 4G/5G avec CGNAT), il faut un relais TURN. Sans ça, ces utilisateurs ne peuvent tout simplement pas rejoindre les salons vocaux.
Architecture des credentials (RFC 5766)
// Générés par nodyx-core à chaque voice:init
const expires = Math.floor(Date.now() / 1000) + TTL
const username = `${expires}:${userId}`
const password = base64(HMAC_SHA1(TURN_SECRET, username))
// Fournis au client via Socket.IO
socket.emit('voice:init', { iceServers: [
{ urls: `turn:${TURN_PUBLIC_IP}:${TURN_PORT}`, username, credential: password }
] })
Configuration
# /etc/nodyx-turn.env
TURN_PUBLIC_IP=46.225.20.193
TURN_REALM=nodyx.org
TURN_SECRET=your_secret_here
TURN_PORT=3478
TURN_TTL=86400
Validation
Testé avec des Binding Requests STUN manuelles → réponse 0x0101 Success Response. Connexions vocales avec un utilisateur derrière CG-NAT → ✅ opérationnel.