<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>DHCP | Antoine Weill--Duflos</title>
    <link>https://antoine.weill-duflos.fr/fr/tag/dhcp/</link>
      <atom:link href="https://antoine.weill-duflos.fr/fr/tag/dhcp/index.xml" rel="self" type="application/rss+xml" />
    <description>DHCP</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-fr</language><lastBuildDate>Thu, 11 Jun 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://antoine.weill-duflos.fr/media/icon_hu_d686267daab28486.png</url>
      <title>DHCP</title>
      <link>https://antoine.weill-duflos.fr/fr/tag/dhcp/</link>
    </image>
    
    <item>
      <title>Alors comme ça, vous vous êtes improvisé DSI de votre maison</title>
      <link>https://antoine.weill-duflos.fr/fr/post/home-it-department/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/post/home-it-department/</guid>
      <description>&lt;p&gt;Personne ne m&amp;rsquo;a embauché. Il n&amp;rsquo;y a eu ni entretien, ni lettre d&amp;rsquo;offre, ni négociation salariale. Un jour j&amp;rsquo;ai installé un NAS, et quelque part entre le troisième conteneur Docker et le premier VLAN, j&amp;rsquo;étais silencieusement devenu le Directeur des Systèmes d&amp;rsquo;Information d&amp;rsquo;une organisation petite mais extrêmement exigeante : ma maison.&lt;/p&gt;
&lt;p&gt;Le poste vient avec tout ce qu&amp;rsquo;un vrai service informatique possède, sauf les parties qui le rendent vivable. Il y a un support technique (c&amp;rsquo;est moi), un centre opérationnel de sécurité (moi aussi), un comité de validation des changements (moi, en train de me parler tout seul sous la douche), et une procédure d&amp;rsquo;escalade (moi, mais plus stressé). Il y a aussi des utilisateurs avec un SLA zéro tolérance, dont tout le système de tickets tient en une phrase : « le WiFi ne marche pas ».&lt;/p&gt;
&lt;p&gt;Aujourd&amp;rsquo;hui je voudrais partager deux incidents récents de cette prestigieuse carrière. Les deux sont entièrement de ma faute. Les deux m&amp;rsquo;ont appris quelque chose. Aucun des deux n&amp;rsquo;était la faute du WiFi, mais vous devinez ce que disaient les tickets.&lt;/p&gt;
&lt;h2 id=&#34;incident-1--mon-système-de-sécurité-a-arrêté-mon-système-de-sécurité&#34;&gt;Incident 1 : mon système de sécurité a arrêté mon système de sécurité&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;utilise &lt;a href=&#34;https://frigate.video/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Frigate&lt;/a&gt; comme NVR, avec une poignée de caméras Tapo qui diffusent en RTSP sur un VLAN dédié aux caméras. J&amp;rsquo;ai &lt;a href=&#34;https://antoine.weill-duflos.fr/fr/post/frigate/&#34;&gt;déjà écrit sur cette installation&lt;/a&gt;, ça marche très bien. Toute la stack est déployée via &lt;a href=&#34;https://antoine.weill-duflos.fr/fr/post/komodo/&#34;&gt;Komodo&lt;/a&gt;, mon plan de contrôle GitOps, donc mettre à jour un service se résume à un clic : « pull et restart ».&lt;/p&gt;
&lt;p&gt;Côté pare-feu, mon OPNsense fait tourner &lt;strong&gt;CrowdSec&lt;/strong&gt;, un système de prévention d&amp;rsquo;intrusion qui surveille le trafic et bannit les IP au comportement suspect. Il fait un excellent travail pour expédier le défilé incessant de bots qui frappent à la porte côté WAN, et il sert de jolie couche de protection pour mes sites web auto-hébergés. J&amp;rsquo;en étais très fier. Retenez bien ça, c&amp;rsquo;est important pour la suite.&lt;/p&gt;
&lt;p&gt;Un soir, j&amp;rsquo;ouvre Frigate et chaque caméra affiche &lt;strong&gt;« No frames received »&lt;/strong&gt;. Toutes. En même temps.&lt;/p&gt;
&lt;p&gt;Une caméra en panne, c&amp;rsquo;est un problème de caméra. Toutes les caméras en panne, c&amp;rsquo;est un problème de &lt;em&gt;moi&lt;/em&gt;. J&amp;rsquo;ai donc commencé à creuser, dans l&amp;rsquo;ordre qu&amp;rsquo;adopterait n&amp;rsquo;importe quel professionnel aguerri de l&amp;rsquo;informatique domestique : accuser les caméras, accuser le switch, accuser le NAS, accuser Frigate, redémarrer des choses au hasard, et seulement ensuite, regarder les vraies preuves.&lt;/p&gt;
&lt;p&gt;Les preuves étaient dans les logs du pare-feu OPNsense. Elles étaient là : une règle qui jetait discrètement des centaines de tentatives de connexion de mon NAS vers les caméras sur le port 554, le port RTSP. Le nom de la règle ? &lt;strong&gt;« CrowdSec (IPv4) out »&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Voici ce qui s&amp;rsquo;était passé, dans la langue sèche du post-mortem :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Komodo a fait un pull-et-restart de routine de la stack Frigate.&lt;/li&gt;
&lt;li&gt;Au démarrage, les processus ffmpeg de Frigate ont tous tenté de se reconnecter à toutes les caméras en même temps, en réessayant agressivement quand les flux ne revenaient pas instantanément. Environ 770 tentatives de connexion vers le port 554 en une courte rafale.&lt;/li&gt;
&lt;li&gt;CrowdSec a observé ce déluge de tentatives de connexion et en a conclu, assez raisonnablement, qu&amp;rsquo;une attaque était en cours.&lt;/li&gt;
&lt;li&gt;CrowdSec a banni les caméras. Pas la machine qui martelait : les machines qui se faisaient marteler. Il a regardé une agression et a arrêté les victimes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mon système de prévention d&amp;rsquo;intrusion avait décidé que mes caméras de sécurité étaient la menace et les avait jetées en prison. Les caméras n&amp;rsquo;avaient rien fait. Elles étaient tranquillement sur leur VLAN, occupées de leurs affaires, quand mon NVR s&amp;rsquo;est mis à frapper à leur porte quelques centaines de fois par minute. Le vigile avait menotté les témoins.&lt;/p&gt;
&lt;p&gt;Le correctif a tenu en une ligne sur le pare-feu, une fois par caméra :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cscli decisions delete --ip &amp;lt;IP de la caméra&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;suivie de l&amp;rsquo;étape que j&amp;rsquo;aurais dû faire dès le premier jour : mettre en liste blanche mes propres sous-réseaux pour que CrowdSec concentre son zèle sur le vrai internet, là où sont les vrais attaquants.&lt;/p&gt;
&lt;p&gt;Dans une vraie entreprise, c&amp;rsquo;est le moment où l&amp;rsquo;équipe sécurité et l&amp;rsquo;équipe infrastructure ont une réunion tendue avec une slide intitulée « Leçons apprises ». Dans mon entreprise, les deux équipes c&amp;rsquo;est moi, donc j&amp;rsquo;ai juste soupiré sur deux tons différents.&lt;/p&gt;
&lt;h3 id=&#34;épilogue--chat-échaudé-se-trompe-deux-fois&#34;&gt;Épilogue : chat échaudé se trompe deux fois&lt;/h3&gt;
&lt;p&gt;Deux jours plus tard, une caméra disparaît à nouveau de Frigate. Fort de mon expérience durement acquise, je savais &lt;em&gt;exactement&lt;/em&gt; ce que c&amp;rsquo;était. CrowdSec. Encore. Le vigile trop zélé avait encore frappé. Je suis allé droit au pare-feu, prêt à rendre justice.&lt;/p&gt;
&lt;p&gt;Les logs du pare-feu montraient zéro paquet rejeté. La table ARP montrait que la caméra n&amp;rsquo;était même pas sur le réseau. Elle s&amp;rsquo;était simplement&amp;hellip; éteinte. Un débranchage-rebranchage de la caméra a tout réglé en trente secondes.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est l&amp;rsquo;autre piège quand on est son propre service informatique : après le premier incident dramatique, chaque nouveau symptôme ressemble à la dernière cause racine. La panne précédente ne vous coûte pas qu&amp;rsquo;une soirée, elle installe un biais dans votre tête, gratuitement, pour toujours.&lt;/p&gt;
&lt;h2 id=&#34;incident-2--le-serveur-dautomatisation-qui-a-poliment-refusé-toutes-les-adresses-ip-de-la-maison&#34;&gt;Incident 2 : le serveur d&amp;rsquo;automatisation qui a poliment refusé toutes les adresses IP de la maison&lt;/h2&gt;
&lt;p&gt;Deuxième histoire. Je fais tourner &lt;a href=&#34;https://n8n.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;n8n&lt;/a&gt;, un outil d&amp;rsquo;automatisation de workflows, dans un petit conteneur sur mon cluster Proxmox. Il trie mes e-mails, range mes notes, fait un tas de petits travaux de colle que je ferais sinon à la main. Il est, ironiquement, censé me faire &lt;em&gt;gagner&lt;/em&gt; du temps. Il tournait sans accroc depuis six jours. Vous vous souvenez des caméras ? Même ambiance.&lt;/p&gt;
&lt;p&gt;Le premier symptôme est arrivé par le canal de supervision habituel, qualité entreprise : les habitants de la maison signalant que le WiFi faisait des siennes. Les appareils déjà connectés allaient bien, mais tout ce qui était nouveau (un téléphone qui sort de veille, un portable qui rentre à la maison) refusait obstinément de se connecter. Cette ambiance générale de « l&amp;rsquo;internet est hanté » que les utilisateurs signalent par, vous l&amp;rsquo;avez deviné, « le WiFi ne marche pas ».&lt;/p&gt;
&lt;p&gt;Le WiFi était innocent. Les ondes ondulaient. Le problème était une couche au-dessus : les nouveaux appareils ne pouvaient plus obtenir d&amp;rsquo;adresse IP, parce qu&amp;rsquo;il n&amp;rsquo;y avait, techniquement parlant, plus d&amp;rsquo;adresses IP.&lt;/p&gt;
&lt;p&gt;Une recherche rapide suggérait un problème de compatibilité connu entre mon serveur DHCP (Kea, sur le pare-feu OPNsense) et WireGuard. Internet était confiant. Internet avait aussi tort, ce qui mérite d&amp;rsquo;être retenu : quand on est tout le service informatique à soi seul, son seul collègue est un moteur de recherche, et ce collègue a des opinions tranchées et zéro responsabilité.&lt;/p&gt;
&lt;p&gt;La table des baux, sur le pare-feu à 192.168.1.1, racontait la vraie histoire. Sur les 253 adresses utilisables du pool, &lt;strong&gt;224 étaient marquées DECLINED&lt;/strong&gt;. Pas utilisées. Pas expirées. Déclinées, c&amp;rsquo;est-à-dire : le serveur les avait proposées à quelqu&amp;rsquo;un, et ce quelqu&amp;rsquo;un avait répondu « non merci, celle-là est prise ». Deux cent vingt-quatre fois de suite.&lt;/p&gt;
&lt;p&gt;Voici la boucle qu&amp;rsquo;une seule et unique machine déroulait, une adresse toutes les dix secondes environ, pendant 75 minutes d&amp;rsquo;affilée :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Demander une adresse IP.&lt;/li&gt;
&lt;li&gt;Recevoir une offre.&lt;/li&gt;
&lt;li&gt;Sonder le réseau pour vérifier que l&amp;rsquo;adresse est bien libre (un comportement responsable et conforme aux standards).&lt;/li&gt;
&lt;li&gt;Entendre son propre sondage renvoyé en écho par un pont virtuel confus, et en conclure que l&amp;rsquo;adresse est prise.&lt;/li&gt;
&lt;li&gt;DÉCLINER l&amp;rsquo;adresse, que le serveur met alors en quarantaine pour 24 heures.&lt;/li&gt;
&lt;li&gt;Retour à l&amp;rsquo;étape 1, avec l&amp;rsquo;adresse suivante.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Elle a traversé tout le pool comme ça, refusant poliment chaque adresse IP de la maison et les faisant enfermer une par une pour la journée. À 12h21, le log du serveur disait tout : allocation impossible, sous-réseau vide. Les appareils détenteurs d&amp;rsquo;un bail existant n&amp;rsquo;ont rien remarqué. Les nouveaux n&amp;rsquo;obtenaient que du silence. (Ce qui ressemble à du DNS en panne. Ce qui ressemble au WiFi. Ce qui est ce que disait le ticket.)&lt;/p&gt;
&lt;p&gt;Restait à trouver &lt;em&gt;qui&lt;/em&gt;. La table des baux n&amp;rsquo;avait qu&amp;rsquo;une adresse MAC avec un préfixe constructeur Proxmox, alors je suis parti à la chasse à travers les 49 VM et conteneurs du cluster. Le coupable : le conteneur 152. La machine n8n. Mon serveur d&amp;rsquo;automatisation. La machine dont tout le métier est de faire des choses pour moi avait passé sa pause déjeuner à me faire ça.&lt;/p&gt;
&lt;p&gt;Le correctif avait deux volets : supprimer en masse les 224 baux en quarantaine sur le serveur DHCP et le redémarrer, puis redémarrer le conteneur n8n pour reconstruire sa plomberie réseau. Et c&amp;rsquo;est là que l&amp;rsquo;histoire a livré son meilleur rebondissement : n8n a refusé de démarrer. Pourquoi ? Son disque était plein. Pourquoi son disque était-il plein ? Parce qu&amp;rsquo;il avait passé 75 minutes à écrire des lignes de log sur chaque adresse IP qu&amp;rsquo;il déclinait. La machine avait documenté son propre saccage avec un tel sérieux qu&amp;rsquo;elle s&amp;rsquo;était bloquée elle-même sous la paperasse. Le pyromane est mort d&amp;rsquo;avoir respiré sa propre fumée. Un agrandissement de disque plus tard, elle a démarré, pris une adresse, l&amp;rsquo;a gardée, et est retournée trier mes e-mails comme si de rien n&amp;rsquo;était.&lt;/p&gt;
&lt;h2 id=&#34;le-mot-de-la-fin&#34;&gt;Le mot de la fin&lt;/h2&gt;
&lt;p&gt;Alors, est-ce que tout ça m&amp;rsquo;arrête ? Pas le moins du monde.&lt;/p&gt;
&lt;p&gt;Apprendre, ça fait partie du plaisir. C&amp;rsquo;est tout l&amp;rsquo;intérêt de faire tourner sa propre infrastructure : chaque incident est stressant pendant une heure et fascinant pour toujours. Une caméra cloud qui s&amp;rsquo;arrête de fonctionner est un mystère que vous ne résoudrez jamais. Mes caméras se sont arrêtées et j&amp;rsquo;ai eu droit à un roman policier avec des logs de pare-feu, des caméras accusées à tort, et des aveux. Mes adresses IP ont disparu et j&amp;rsquo;ai eu droit à un whodunit avec une adresse MAC en guise d&amp;rsquo;empreinte digitale et une séance d&amp;rsquo;identification de 49 machines virtuelles.&lt;/p&gt;
&lt;p&gt;Bien sûr, sur le moment, c&amp;rsquo;est un peu stressant. Il y a des gens qui attendent ce WiFi, et la personne qui l&amp;rsquo;a cassé, statistiquement parlant, c&amp;rsquo;est moi. Mais l&amp;rsquo;instant où la cause finit par s&amp;rsquo;emboîter, quand le symptôme bizarre, la théorie trompeuse et la ligne de log d&amp;rsquo;apparence innocente se rangent soudain en une seule histoire cohérente, cette sensation est dure à battre. On ne l&amp;rsquo;obtient pas avec des choses qui marchent tout simplement, et encore moins avec des choses qui cassent à un endroit où on n&amp;rsquo;a pas le droit de regarder.&lt;/p&gt;
&lt;p&gt;Le support technique reste ouvert. Les tickets restent « le WiFi ne marche pas ». Et le DSI reste, malgré tout, joyeusement pas viré.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
