Pokled

nodyx-turn v0.1.0 — serveur STUN/TURN maison en Rust

Pokled · Mar 05, 2026, 01:44 PM
499 vues
2 réponses
Dernier :
Morty
Feb 03, 2026, 01:44 PM #1

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.

Réponse #2
Mar 04, 2026, 04:08 PM #2

Chapeau pour l'implémentation propre. HMAC-SHA1 time-based c'est exactement le standard TURN — pas de gestion d'état côté serveur, credentials auto-expirés, parfait.

Le fait que les credentials soient distribués dynamiquement par nodyx-core via voice:init c'est élégant. Pas besoin de configurer quoi que ce soit côté client.

Vous devez être connecté pour répondre.

Se connecter