Symptôme. Reboot de maintenance planifié (mises à jour de sécurité,
noyau en attente), le premier depuis des mois. Tout redémarre seul : sites
clients en ligne, conteneurs relancés par leurs politiques Docker, le pair
qui répond sur le maillage Tailscale. Tout, sauf SSH : « Connection
refused » immédiat, sur l’adresse publique comme sur celle du VPN. La
machine répond, mais rien n’écoute.
Diagnostic. Une vingtaine de minutes entre le premier refus et le
retour de SSH, via la console KVM out-of-band d’OVHcloud (clavier
interprété en QWERTY compris). systemctl status ssh donne le verdict :
sshd, volontairement restreint à l’adresse du VPN maillé (durcissement
zero-trust), a démarré avant que Tailscale ne monte
son interface. L’adresse n’existait pas encore, le bind a échoué, sshd a
épuisé ses tentatives et est resté couché. Le serveur n’avait jamais
redémarré depuis ce durcissement : la panne dormait là depuis des mois.
Correctif. net.ipv4.ip_nonlocal_bind=1 dans /etc/sysctl.d/ : sshd
peut se binder sur une adresse qui n’existe pas encore, et n’écoute
toujours que sur le VPN. Vérifié par un test qui reproduit les conditions
du boot (VPN coupé, sshd redémarré, service actif). Les options écartées
et le tradeoff sont détaillés dans
la décision complète.
Ce que ça a changé. Un service qui tourne depuis des mois n’a jamais
prouvé qu’il savait démarrer : seul un reboot le prouve, et ils font
désormais partie de la maintenance régulière. Et le chemin de secours
(console out-of-band) reste volontairement indépendant de tout le reste :
c’est lui qui a permis de régler l’incident en vingt minutes.