Aller au contenu principal
~$ guillaume.putier.fr

notes/debian-13-sysctl-conf

Debian 13 ne lit plus /etc/sysctl.conf, et Ansible continue d'y écrire

Le réglage s'applique à chaud, la tâche passe, et il disparaît au reboot suivant. Sur ma forge, ça a coupé le routage.

  • debian
  • ansible
  • sysctl

Ma forge redémarre, et la supervision ne reçoit plus rien des runners. Leur SNMP sortait par un NAT sur cette machine, et net.ipv4.ip_forward est revenu à 0. La ligne net.ipv4.ip_forward=1 est pourtant toujours dans /etc/sysctl.conf, posée par Ansible.

Sur trixie, ce fichier n'est plus lu au démarrage. systemd-sysctl ne regarde que /etc/sysctl.d/, /run/sysctl.d/ et /usr/lib/sysctl.d/. Jusqu'à bookworm, un lien /etc/sysctl.d/99-sysctl.conf pointait vers /etc/sysctl.conf et faisait le pont. Relevé le 24 septembre 2026 sur les hôtes de mon rôle de pare-feu : le lien manque sur les douze en trixie, il existe sur les deux restés en bookworm.

Ansible n'a pas suivi. Le module ansible.posix.sysctl, collection 1.5.4, écrit par défaut dans /etc/sysctl.conf. Avec sysctl_set: true il applique aussi la valeur à chaud, donc la tâche passe, le service marche, et tu passes à autre chose. Le défaut attend le prochain reboot.

Un sysctl -p lancé à la main pour vérifier te ment de la même façon : il lit /etc/sysctl.conf de lui-même, applique la valeur, et te rassure sur un fichier que le démarrage ignore.

Ce qui dit la vérité sans redémarrer :

/usr/lib/systemd/systemd-sysctl --cat-config | grep ip_forward

Cette commande affiche ce que systemd chargera au boot. Si ta clé n'y est pas, elle sautera.

Le rôle de pare-feu passe maintenant sysctl_file: /etc/sysctl.d/<nn>-<objet>.conf, comme trois autres rôles le faisaient déjà. Et l'ancienne ligne se retire de /etc/sysctl.conf avec state: absent, sinon sur les machines encore en bookworm le lien 99, chargé en dernier, écrase la nouvelle valeur avec l'ancienne.

En corrigeant, j'ai compté qui routait vraiment, avec nstat -az IpForwDatagrams. Sur quinze hôtes où le rôle activait le routage, trois faisaient passer des paquets. Le défaut du rôle est passé à false, et les hôtes qui routent le déclarent dans leur inventaire. Deux autres machines en trixie avaient déjà perdu le réglage à leur dernier redémarrage.

Une machine qui porte Docker ne montre jamais le problème : dockerd remet ip_forward à 1 à chaque démarrage.

retour aux notes