Salut,
Je viens ici pour résumer un problème que je peux observer depuis mon passage sur offre Bbox ADSL (par intérêt technique, pour les autres utilisateurs concernés et éventuellement en voie de résolution de celui-ci

).
Ce qui suit a été déduit par conversation étayée avec le support du CDN concerné et par observation.
Le dysfonctionnementL'établissement d'une connexion TCP avec n'importe quel serveur cache du réseau Fastly, depuis ma connexion Bouygues, échoue de manière aléatoire, environ la moitié du temps.
Fastly est un réseau CDN qui par lequel passe par exemple le trafic de :
- Imgur (le plus gros hébergeur d'images de la planète)
- Le serveur de téléchargement Github (pas le frontal web)
- Wikia
- Plusieurs journaux anglophones importants...
Le problème est donc significatif et entrave par exemple la récupération de logiciels depuis le dépôt de ma distribution (AUR) ou une navigation fluide (sans avoir à rafraîchir x fois une page) sur les sites concernés.
L'analyse réseauUne capture réseau aux deux fins permet de comprendre clairement le problème : le paquet SYN est transmis correctement, le SYN-ACK bien reçu, mais de manière aléatoire, le ACK se perd
en étant routé vers le mauvais cache (un cache différent), ce qui se caractérise d'un renvoi d'un RST de sa part et la réception de retransmissions du bon cache.
La raison est la suivante : le routeur de Telia qui prend en charge ce trafic utilise un hash pour identifier une connexion TCP unique, et l'utiliser pour faire correspondre de manière constante une connexion à un cache en sortie, de manière à répartir de manière égale le trafic en fonction.
Le terme spécialisé associé étant ECMP (Equal-cost multi-path routing).
La base du problème est que le routeur de Telia ne se limite pas à une tuple "
(IP src, IP dst, port src, port dst, protocol)" pour générer ce hash : il intègre aussi d'autres éléments de l'en-tête TCP/IP,
dont le champ IP DSCP, servant à la priorisation du trafic.
Or, le dysfonctionnement est causé par le fait que
le champ DSCP n'est pas stable entre le paquet SYN et les paquets qui suivent :
il est modifié par le terminal Bbox ou les équipements Bouygues (je ne sais pas tout à fait encore), où il est mis respectivement à 0 et à 2 (soit 8 si on parle plutôt en termes de champ ToS).
Impact globalIl semblerait que le problème impacte environ 6 % du trafic total sur la plage 176.128.0.0/12 (qui est large et inclut sûrement également du trafic mobile).
Plusieurs hypothèses pourraient expliquer cette localisation partielle du problème : soit le passage par un point particulier du réseau, soit l'affectation de la QoS à par exemple certaines plages par des équipements intermédiaires, soit un comportement particulier des différents modèles de box (partie logicielle ou matérielle). Je suis sur un modèle F@st 5330b avec firmware à jour (10.2.4).
Je n'ai pas actuellement une vue suffisante sur le réseau ou le parc abonnés Bouygues pour faire des déductions supplèmentaires.
J'ai pu noter la présence de quelques références au champ DSCP dans le firmware de la box (en supposant dans un premier qu'elles soient davantage relatives aux services telles que la téléphonie), sans que celles visibles ne paraissent être très utiles sans nécessiter une interprétation de certains pilotes ou binaires opaques. Voici la sortie d'un grep :
$ grep -rFi dscp
Fichier binaire bin/tr069 correspondant
Fichier binaire bin/diag_bin correspondant
Fichier binaire bin/ethswctl correspondant
Fichier binaire bin/tcpdump correspondant
Fichier binaire bin/vlanctl correspondant
Fichier binaire bin/ip_ping_diag_bin correspondant
Fichier binaire bin/ip correspondant
Fichier binaire bin/traceroute_diag_bin correspondant
Fichier binaire lib/libphone.so correspondant
Fichier binaire lib/modules/2.6.30/extra/bcmvlan.ko correspondant
Fichier binaire lib/modules/2.6.30/extra/bcm_enet.ko correspondant
Fichier binaire lib/iptables/libxt_dscp.so correspondant
Fichier binaire lib/iptables/libxt_DSCP.so correspondant
Fichier binaire lib/libmodel.so correspondant
Fichier binaire lib/private/libethswctl.so correspondant
Fichier binaire lib/private/libbmdpkgsrc.so correspondant
Fichier binaire lib/private/libmdm.so correspondant
Fichier binaire lib/private/libbmdshell.so correspondant
Fichier binaire lib/private/libvlanctl.so correspondant
Fichier binaire lib/private/libcms_core.so correspondant
Fichier binaire lib/private/libbmdapi.so correspondant
Fichier binaire lib/private/libcms_dal.so correspondant
Fichier binaire lib/private/libcms_core.id0 correspondant
Fichier binaire lib/tr069plugins.so correspondant
Fichier binaire usr/bin/nuttcp correspondant
Fichier binaire usr/bin/phoneapp correspondant
etc/bewan/config.default/tr069.xml: <DSCPCoupled type="boolean" writable="no" noActNotify="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCPMark type="unsignedInt" writable="yes" implemented="yes" prefixName="VoiceProfileSIP" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCPMark type="unsignedInt" writable="yes" implemented="yes" prefixName="VoiceProfileMGCP" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCPMark type="unsignedInt" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCP type="unsignedInt" writable="yes" action="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCP type="unsignedInt" writable="yes" action="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCP type="unsignedInt" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCP type="unsignedInt" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCP type="unsignedInt" array="no" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCPExclude type="boolean" array="no" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCPCheck type="int" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/tr069.xml: <DSCPMark type="int" writable="yes" implemented="yes" libraryName="tr069plugins.so"/>
etc/bewan/config.default/router.xml: <DSCPMark type="int" writable="1" values="0:63" onchange="/etc/bewan/init.d/tr069" merged_from="tr069/BEWAN/router.xml">0</DSCPMark>
etc/bewan/config.default/router.xml: <DefaultDSCPMark type="int" writable="1" onchange="/etc/bewan/init.d/qos" withparam="1" merged_from="base_qos/BEWAN/router.xml">0</DefaultDSCPMark>
etc/bewan/config.default/router.xml: <DSCPCheck type="int" writable="1" onchange="gen-qos-classify" withparam="0" merged_from="bytel_bboxd/BEWAN/router.xml"/>
etc/bewan/config.default/router.xml: <DSCPMark type="int" writable="1" onchange="gen-qos-classify" withparam="0" merged_from="bytel_bboxd/BEWAN/router.xml"/>
etc/bewan/config.default/router.xml: <DSCPMark type="int" writable="1" values="0:63" onchange="/etc/bbox/scripts/voip_sighup" merged_from="bytel_phoneapp/BEWAN/router.xml">0</DSCPMark>
etc/bewan/config.default/router.xml: <DSCPMark type="int" writable="1" values="0:63" onchange="/etc/bbox/scripts/voip_sighup" merged_from="bytel_phoneapp/BEWAN/router.xml">0</DSCPMark>
Il serait peut-être de mentionner que la plage IP dans laquelle je me trouve mentionne toujours "origin: AS12844" (bien que je sois routé complètement par les équipements du réseau fixe (AS5410) et qu'il ne devrait pas y avoir de différence d'interconnexion).
Dans l'hypothèse où des équipements de bordure appliqueraient des mécanismes en fonction de l'appartenance historique de cette plage.
Cependant, il semblerait que du trafic DSL soit présent dans les deux cas de figure observés.
Les possibilités de résolutionFastly est revenu vers Telia pour aborder le problème, mais il est peu probable que l'investissement visant à modifier logiciellement/matériellement les routeurs pour que la politique de hashage des en-têtes diffère soit pris, en sachant que ce comportement ne paraît pas explicitement normativé ou prohibé quelque part.
=> L'issue la plus potentielle serait donc que le mécanisme de QoS chez Bouygues soit modifié pour corriger ce comportement inconstant, une fois sa localisation claire repérée.
(Alternativement, peut-être que l'emprunt délibéré d'un autre transitaire pourrait y changer quelque chose ?)
Voilà, si quelqu'un veut plus de précisions j'ai des traces et tout... Si vous êtes aussi chez Bouygues en DSL je veux bien connaître si ça vous affecte ou non + votre plage IP + votre modèle+firmware de box.