14 votes

Iptables/1.8.2 Impossible d'initialiser nft : Protocole non pris en charge

Je rencontre un problème en utilisant iptables sur mon Raspberry PI.
Je viens de télécharger une toute nouvelle version de Raspbian Lite sur mon PI et tout ce que j'essaie de faire est de vérifier mes règles iptables mais ça ne fonctionne pas et j'obtiens cette erreur :
>> iptables -L
iptables/1.8.2 Impossible d'initialiser nft : Protocole non pris en charge
Je ne sais pas quoi faire ? pourrais-je revenir à une ancienne version d'iptables ou quelque chose comme ça ?
Gardez à l'esprit que je suis un vrai débutant dans le monde de l'informatique.

16voto

dashohoxha Points 261

La solution est ici : Vous devez redémarrer après une mise à jour du noyau. La manière la plus simple est bien sûr :

# en tant que root
reboot

9voto

A.B Points 3913

Raspbian a certainement suivi son amont Debian là-bas : par défaut, les nouveaux outils utilisateur iptables utilisent l'API noyau nftables au lieu de l'API noyau "héritée" iptables, comme expliqué ici:

État actuel

REMARQUE : Debian Buster utilise le framework nftables par défaut.

À partir de Debian Buster, nf_tables est le backend par défaut lors de l'utilisation d'iptables, grâce à la couche iptables-nft (c'est-à-dire en utilisant la syntaxe iptables avec le sous-système noyau nf_tables). Cela affecte également ip6tables, arptables et ebtables.

nftables vise à remplacer complètement iptables avec des fonctionnalités étendues, mais a une implémentation assez différente. Une couche de compatibilité sera quand même conservée, principalement dans les outils utilisateur, mais partiellement dans le noyau. Cela s'ajoute à la couche "héritée" habituelle d'iptables qui restera dans le noyau pendant longtemps.

La nouvelle version d'iptables utilise cette couche de compatibilité. Cela peut être vérifié facilement en exécutant (en tant que root) iptables -V. Le résultat sera très probablement :

# iptables -V
iptables v1.8.2 (nf_tables)

Alors que la version héritée est toujours disponible :

# iptables-legacy -V
iptables v1.8.2 (legacy)

En même temps, je suppose que votre noyau ne prend pas en charge nftables pour une raison quelconque.

Donc vous pouvez :

  • obtenir le support des nftables dans le noyau (et probablement aussi au moins NFT_COMPAT). Cela peut nécessiter de le recompiler ou de le mettre à jour si vous avez conservé une ancienne version. Si cette tâche nécessite trop d'efforts, vous pouvez utiliser l'autre alternative,

  • ou utiliser la version héritée d'iptables qui utilisera l'API noyau habituelle iptables. Le lien précédent explique comment le faire. En tant qu'utilisateur root, exécutez (au moins pour iptables et ip6tables, et peut-être pour ebtables et arptables s'ils sont installés) :

    Passer à la version héritée :

    # update-alternatives --set iptables /usr/sbin/iptables-legacy
    # update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
    # update-alternatives --set arptables /usr/sbin/arptables-legacy
    # update-alternatives --set ebtables /usr/sbin/ebtables-legacy

0voto

Samuel Prevost Points 141

J'essayais d'installer Docker en utilisant leur script de commodité et lorsque le moteur Docker a essayé de configurer iptables, il m'a affiché la même erreur. Cela ne s'est produit que sur mon ancien Raspberry Pi B+ Rev 1.2, pas sur le Raspi 3 B Rev 1.2. Le premier exécute 5.4.51-v7+ tandis que le second exécute 5.4.51+ et les deux devraient être totalement à jour, côté noyau.

Pour résoudre ce problème d'installation, j'ai exécuté les commandes update-alternatives de la réponse de @A.B et cela a corrigé sudo iptables -V en affichant iptables/1.8.2 Failed to initialize nft: Protocol not supported à iptables v1.8.2 (legacy).

Cependant, en essayant d'exécuter la commande iptables de Docker après cela :

$ sudo iptables --wait -t nat -L -n
iptables v1.8.2 (legacy): can't initialize iptables table `nat': 
Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Maintenant, pour corriger cela, il fallait activer cette couche "legacy" de iptable dont parlait @A.B comme ceci ici (réponse de @conrad) :

sudo su -
modprobe ip_tables
echo 'ip_tables' >> /etc/modules
exit

Après avoir redémarré pour recharger les modules du noyau, j'ai vérifié si le service systemd de Docker avait démarré en utilisant sudo systemctl status docker et il fonctionnait correctement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X