J'essaie de définir des règles iptables, et le message d'erreur suivant s'affiche lorsque j'utilise iptable:
iptables v1.4.14: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
J'utilise :
cat /etc/debian_version
7.4
uname -a
Linux myserver 2.6.32-22-pve #1 SMP Mon Jul 15 08:36:46 CEST 2013 x86_64 GNU/Linux
uname -r
2.6.32-22-pve
Ceci est un serveur virtuel hébergé par un fournisseur de services.
Que puis-je faire pour résoudre ce problème?
J'ai eu le même problème et cela a fonctionné:
Sudo modprobe ip_tables
Sudo echo 'ip_tables' >> /etc/modules
J'ai eu le même problème avec Debian 8. Je l'ai corrigé en redémarrant le système. Il semble que l'erreur puisse se produire si l'image du noyau a été mise à jour et que le système n'a pas été redémarré par la suite.
Il peut être utile d'ajouter que si vous voyez ce message d'erreur et que vous n'utilisez pas une sorte d'hébergement basé sur un conteneur restreint (par exemple, OpenVZ), alors le problème est peut-être que le noyau manque des modules nat. Pour vérifier l'exécution:
modinfo iptable_nat
Ce qui devrait imprimer l’emplacement du module, s’il affiche une erreur, alors vous savez que c’est votre problème. Il existe également des modules dépendants tels que nf_nat qui sont peut-être manquants; vous devrez donc creuser plus profondément si le module iptable_nat est présent mais échoue. S'il manque, vous aurez besoin d'un autre noyau et de modules, ou si vous lancez le vôtre, assurez-vous que la configuration du noyau contient CONFIG_IP_NF_NAT=m
(pour le NAT IPv4).
Pour plus d'informations, le module de noyau approprié se trouve généralement dans l'un des emplacements suivants:
ls /lib/modules/`uname -r`/kernel/net/netfilter/
ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
Et si vous utilisez IPv6, regardez aussi ici:
ls /lib/modules/`uname -r`/kernel/net/ipv6/netfilter/
Enfin, mon fournisseur de services a répondu:
Ceci est une limitation du système de virtualisation que nous utilisons (OpenVZ), Les règles basiques iptables sont possibles mais pas celles qui utilisent le nat table.
Si cela pose vraiment un problème, nous pouvons vous proposer de migrer vers un autre la virtualisation du système (KVM) que nous commençons à offrir à nos clients.
SO je devais migrer mon serveur vers le nouveau système ...
Version courte :
lancez iptables sur l'hôte avant de le lancer sur le serveur virtuel (je suis sûr que c'est une sorte de conteneur LXC ou OpenVZ ici).
Version longue :
Le problème est dû au fait que le module ip_table est chargé à la demande. Ainsi, après un redémarrage, sur tout ordinateur sur lequel aucune règle iptables n'est chargée au moment du démarrage, le module ip_tables n'est pas chargé (aucune demande pour les modules == le module n'est pas chargé). Par conséquent, les conteneurs LXC ou OpenVZ ne peuvent pas utiliser iptables (car ils partagent le noyau de l'hôte mais ne peuvent pas modifier les modules chargés) jusqu'à ce que l'hôte ait chargé le module ip_tables.
"La fonctionnalité IP conntrack a un impact négatif sur les performances de venet (environ 10%), il est donc préférable de les désactiver par défaut."
https://serverfault.com/questions/593263/iptables-nat-does-not-exist
Cette solution du wiki officiel:
vzctl set $CTID --netfilter full --save
https://openvz.org/VPN_via_the_TUN/TAP_device#Troubleshooting
vérifier si tun/tap enabled:
cat /dev/net/tun
si ok va voir quelque chose:
cat: /dev/net/tun: File descriptor in bad state
Les noms de table sont sensibles à la casse, vous devez donc utiliser un nat minuscule au lieu d'un maj .. ..__
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o eth0 -j MASQUERADE
Si vous exécutez puppet , il est possible que /proc/sys/kernel/modules_disabled
soit défini sur 1, ce qui empêche tout chargement supplémentaire du module . Lorsque la machine redémarre, il est remis à 0, ce qui permet des modifications, telles que le chargement des modules iptables. Après un certain temps, puppet le remettra à 1 pour protéger le système contre les kits de racine du noyau . Par conséquent, tous les modules dont nous aurons besoin devraient être chargés pendant ou peu de temps après le démarrage.
Sur OpenSUSE 15.3, le journal systemd a signalé cette erreur (la suggestion d’insmod n’était pas utile).
Feb 18 08:36:38 vagrant-openSUSE-Leap dockerd[20635]: iptables v1.6.2: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
REBOOT corrige le problème