[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 noyau 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 à côté 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 sources de Linux.
# cd /usr/src/linux
# make modules_install
Vous n’avez maintenant plus qu’a redémarré sur votre nouveau noyau et le tour est joué !