Outils pour utilisateurs

Outils du site


sysadmin:linux:systemd:troubleshooting:echec_de_chargement_ruleset_nftables

Ceci est une ancienne révision du document !


:TODO:

Systemd : Échec de chargement du ruleset nftables

Au démarrage de la machine le service nftables.service tente de charger le ruleset mais les interfaces (notamment l'interface wifi) ne sont pas encore prêtes.

La configuration utilise systemd (via les fichers .link) pour renommer l'interface wifi. Les règles de filtrage utilisent l'interface renommée mais lorsque elle sont chargées par le service, l'interface wifi0 n'est pas encore disponible et le processus échoue.

Les journaux système retracent l'évènement :

journalctl -xeu nftables.service

...

░░ L'unité (unit) nftables.service a commencé à démarrer.
juin 27 09:20:06 node-7c87 nft[631]: /etc/nftables.conf:96:17-23: Error: Interface does not exist
juin 27 09:20:06 node-7c87 nft[631]:                 iif { "lan0", "wifi0" } udp dport {137, 138 } ip daddr 192.9.200.255 counter drop comment "Elimine les paquets net>
juin 27 09:20:06 node-7c87 nft[631]:                               ^^^^^^^
juin 27 09:20:06 node-7c87 nft[631]: /etc/nftables.conf:99:17-23: Error: Interface does not exist
juin 27 09:20:06 node-7c87 nft[631]:                 iif { "lan0", "wifi0" } udp dport 5353 ip daddr 224.0.0.251 counter drop comment "Elimine les paquets mDNS"
juin 27 09:20:06 node-7c87 nft[631]:                               ^^^^^^^
juin 27 09:20:06 node-7c87 systemd[1]: nftables.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited

L'activation du service échoue au démarrage et les règles ne sont pas chargées. Par contre si l'utilisateur lance manuellement le service tout se passe bien. Entre temps, l'interface wifi a bien été renommée et activée.

systemctl is-active nftables.service 
failed
 
systemctl start nftables.service
 
systemctl is-active nftables.service 
active

Une solution consiste à surcharger le fichier unité par défaut pour le service nftables.service et temporiser en attendant que l'interface soit disponible.

systemctl edit nftables.service

La directive ci-dessous permet de patienter jusqu'a ce que l'interface wifi0 soit disponible :

ExecStartPre=timeout 60s bash -c 'until ip link show wifi0; do sleep 2; done'

Références

sysadmin/linux/systemd/troubleshooting/echec_de_chargement_ruleset_nftables.1719478408.txt.gz · Dernière modification : 2024/06/27 08:53 de yoann