Pousser Linux au-delà de ses limites n’a rien d’un exercice théorique pour Cloudflare. L’entreprise américaine aime beaucoup exploiter chaque recoin de la pile réseau pour optimiser le routage, la sécurité et la performance. Cette fois, c’est le mécanisme interne du soft-unicast, un système maison qui permet à plusieurs serveurs de partager des plages d’adresses IP dans différents centres de données, qui a révélé une limite inattendue du noyau Linux.
Dans un billet détaillé publié sur le site de Cloudflare, les ingénieurs expliquent comment la pile réseau traditionnelle s’est retrouvée incapable de gérer leurs besoins, et comment un service maison baptisé « fish » a permis de contourner le problème. Tout est parti d’un conflit subtil entre le sous-système des sockets TCP de Linux et conntrack, le module de suivi de connexion utilisé par Netfilter.
Lorsqu’un serveur Cloudflare émet des paquets en utilisant le soft-unicast, le noyau doit manipuler des adresses IP partagées et des tranches de ports spécifiques. En théorie, cette configuration était compatible avec les règles SNAT appliquées via nftables. En pratique, Cloudflare a découvert que conntrack réécrivait silencieusement les ports source dès qu’un socket lié utilisait une adresse faisant partie d’une plage gérée par le soft-unicast. Résultat : des ports en dehors de la plage autorisée, des collisions imprévisibles et des connexions qui échouent sans explication.
Les équipes ont testé plusieurs pistes pour reprendre la main : inspection et manipulation directe des tables conntrack via Netlink, réservation de ports à l’aide des mécanismes TCP Fast Open, ajustement des règles de routage pour contourner la gestion des adresses locales. Même la désactivation du mécanisme tcp_early_demux, une optimisation du noyau censée accélérer la réception de paquets, a été envisagée. L’impact sur les performances s’est révélé minime, ce qui soulignait le caractère tenace du problème : même en ajustant le comportement du noyau, le modèle réseau de Linux restait trop rigide pour les besoins du soft-unicast.
Fish, une solution sur mesure pour un problème systémique
Face à ces limites, Cloudflare a finalement opté pour une autre approche : plutôt que de réécrire des paquets IP, l’entreprise a choisi de terminer directement les connexions TCP sur ses propres serveurs, puis de les relayer localement via un socket configuré avec la bonne adresse soft-unicast. Cette méthode offre une visibilité accrue sur l’état des connexions, réduit les comportements imprévisibles du noyau et assure un meilleur contrôle des ports utilisés. La différence de performance, mesurée sur plusieurs centres de données, s’est avérée négligeable.

Cette décision a consolidé l’importance du service maison, baptisé SLATFATF mais rapidement surnommé “fish”, chargé initialement de gérer l’egress IP sur le soft-unicast. Fish continue aujourd’hui d’assurer le traitement des paquets ICMP, tandis que la terminaison TCP est désormais la voie privilégiée. L’objectif reste le même : garantir que chaque adresse IP et chaque plage de ports soient utilisées de manière cohérente, même lorsque les besoins de Cloudflare dépassent le modèle d’origine de la pile réseau Linux.
