[IPTables] can’t initialize iptables table `nat’: Table does not exist (do you need to insmod?)

Si vous tentez d’accéder à la table nat de netfilter il est possible que iptables vous retourne le message suivant

can't initialize iptables table `nat': Table does not exist (do you need to insmod?)

Ceci indique que votre noyaux n’a pas le support pour la table nat compilé ou activé.

Savoir si le module nat est compilé

Le module qui gère la table nat dans netfilter est CONFIG_NF_NAT_IPV4 nous allons donc chercher dans la configuration du noyau si le module est compilé.

$ zcat /proc/config.gz| grep CONFIG_NF_NAT
 # CONFIG_NF_NAT_IPV4 is not set

Chez moi le module n’est pas compilé. Nous allons donc le compiler dans le noyau. Si la configuration de votre noyau vous informait que le composant était compilé en tant que module vous auriez une ligne comme la suivante

$ zcat /proc/config.gz| grep CONFIG_NF_NAT
 CONFIG_NF_NAT_IPV4=nat

Vous devrez donc simplement charger le module avec modprobe.

# modprobe nf_nat

Comment compiler le module CONFIG_NF_NAT

Nous allons ici chercher à compiler le module CONFIG_NF_NAT dans notre noyau. Pour cela déplacer vous dans le dossier des sources du noyau Linux.

# cd /usr/src/linux

Entrez ensuite dans le menu de configuration

[/sourcecode]# make menuconfig[/sourcecode]

Le module se trouve dans Networking support > Networking options > IP: Netfilter Configuration > IP tables support > IPv4 NAT. Sélectionner ce module pour le compiler dans le noyau (une étoile à coté du nom) et passons à la recompilation du noyau.

Attention le module NF_NAT_IPV4 dépend des modules NF_CONNTRACK_IPV4, IP_NF_IPTABLES, NETFILTER, INET et NET. Veillez à ce que ces modules soit compilés comme le module NG_NAT_IPV4. Vous pouvez rechercher des informations sur un module à l’aide de la touche ‘/’.

Sortez de l’outil de configuration (Pressez plusieurs fois de suite la touche ESC) et n’oubliez pas de sauvegarder vos changements. Nous allons maintenant compiler le noyau.

# make

Cette action peut être plus ou moins longue en fonction du nombre de modules inclus dans le noyau.

Une fois terminé nous allons pouvoir installer le nouveau noyau et l’utiliser. Le nouveau noyau compilé se trouve dans le dossier arch/<mon_arch>/boot/bzImage. Nous allons déplacer ce fichier dans le dossier /boot du système. Donnez lui un nom qui vous convient mais faite attention à ne pas écraser le noyau couramment utilisé sans quoi vous risquez de ne plus pouvoir réparer d’éventuelles erreurs. Pour moi la commande a été la suivante.

# cp arch/x86_64/boot/bzImage /boot/kernel-3.8.2

Nous allons ensuite éditer le fichier de configuration de grub. Je ne donnerai ici que les instructions pour grub2 n’ayant pas de grub1 sous la main. Editez le fichier /boot/grub/grub.cfg et ajoutez une section comme la suivante.

menuentry 'GNU/Linux 3.8.2' --class gnu-linux --class gnu --class os {
 load_video
 insmod gzio
 insmod part_msdos
 insmod ext2
 set root='(hd0,msdos1)'
 search --no-floppy --fs-uuid --set=root 3e400580-79ca-4590-a3e7-dbf579ccb139
 echo 'Loading Linux 3.8.2 ...'
 linux /kernel-3.8.2 root=/dev/sda8 ro
 }

Attention sur certaine distribution un utilitaire d’autoconfiguration de grub peut écraser vos modifications. Reportez vous à la documentation de votre distribution pour plus d’informations.

La dernière action à réaliser est de déplacer les modules pour que ceux ci soit disponible par le système. (Voir l’article sur les modules pour plus d’infos). Pour cela il faut se rendre dans le dossier des source de Linux.

# cd /usr/src/linux

# make modules_install

Vous n’avez maintenant plus qu’a redémarrer sur votre nouveau noyau et le tour est joué !

Si vous avez apprécié cet article, pensé à laissé un commentaire ou vous abonner au flux RSS feed.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *