+7
−0
+2
−0
+107
−0
+9
−2
+9
−3
Loading
La composition publiait un port TURN TLS depuis toujours, aucune
configuration ne posait « tls_port », et la documentation le promettait
quand même comme « le dernier chemin quand le pare-feu bloque tout le
reste ». Le port était ouvert, personne n'écoutait derrière, et cela ne se
découvrait qu'au pire moment : depuis un réseau d'entreprise qui ne laisse
sortir que 443, ni l'UDP direct, ni le RTC en TCP, ni le TURN en UDP ne
passent — la cellule repliée à l'hôtel n'entrait dans aucun appel.
L'installateur le configure désormais, et le propose dès que l'adresse
publique n'est pas locale.
J'ai vérifié plutôt que supposé ce que fait « external_tls », en sondant
les serveurs ICE qu'un vrai client reçoit de la version 1.13.5 :
turn:127.0.0.1:3478?transport=udp
turns:turn.kastell.local:443?transport=tcp
« tls_port » n'est donc pas le port annoncé : c'est celui où LiveKit attend
en clair ce que la terminaison TLS lui transmet, et c'est 443 qu'il
annonce. Trois commentaires du dépôt disaient le contraire — « activez
tls_port: 443 », « publiez ce port sur 443 » — et envoyaient configurer
une chose impossible. Ils sont corrigés.
La moitié qui revient à l'exploitant est documentée, avec son piège. Le
TURN sur TLS n'est pas du HTTP : un bloc « server » de nginx ne sait pas le
porter, il faut le module « stream » et un aiguillage par SNI. Et comme
« stream » et « http » ne peuvent pas écouter tous deux sur 443, les vhosts
descendent d'un port — après quoi ils ne voient plus l'adresse du client
mais 127.0.0.1. Dans ce produit, cette adresse nourrit la limitation de
débit, l'ouverture des partages et le journal d'administration : un journal
append-only qui consigne la mauvaise adresse est pire qu'un journal qui
n'en consigne aucune. La documentation le dit, et donne l'alternative — une
seconde IP, quelques euros, nginx intact.
Ce que je n'ai pas fait : LiveKit terminant lui-même le TLS avec ses
propres certificats. Cela demande de monter des fichiers dans le conteneur
et je n'avais pas de quoi l'éprouver ici — un certificat valide et un
domaine résolvable. Je préfère ne pas livrer un chemin que je n'ai pas vu
fonctionner.
Une suite neuve exécute le morceau de l'installateur qui décide et qui
écrit, puis lit ce qui en sort — plutôt que d'y chercher des expressions
rationnelles, qui seraient vertes le jour où le shell change d'avis. Huit
garanties : le poste local garde le fichier livré, l'hôte joignable reçoit
le sien avec son adresse publique et ses ports, aucun « tls_port » n'est
écrit tant qu'on ne l'a pas demandé, et demandé il vient avec son
« external_tls » et le nom distinct que l'exploitant a donné.
984 garanties.
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>