1) "iptables" est l'application utilisateur qui traite du module de noyau ip_tables. Il semble que vous ayez déjà /bin/iptables mais votre noyau n'a pas inclus/chargé ip_tables.ko
2) si votre noyau ne prend pas en charge ip_tables, votre distribution peut l'inclure en tant que module de noyau chargeable à :
/lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
où uname -r
est la version du noyau, c'est-à-dire 3.5.0-18-generic
si vous trouvez ip_tables.ko vous pouvez essayer
#depmod
#modprobe ip_tables
ou
#insmod /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
selon que votre distribution inclut de vraies applications depmod/modprobe/insmod ou celles implémentées par busybox, vous pourriez rencontrer des problèmes supplémentaires comme des problèmes de chemin relatif ou des modules de noyau compressés non gérés correctement selon la version de busybox.
3) si ip_tables.ko n'est pas disponible, vous devez soit reconstruire le noyau avec le support ip_table, soit en tant que module chargeable externe. Dans le dernier cas après avoir créé ip_tables.ko, retournez à 2).
TL;DR
-
Mettez à jour votre noyau :
sudo pacman -S linux
-
Mettez à jour votre chargeur de démarrage :
bootctl --path=/boot install
-
Redémarrer
Ce matin, j'ai rencontré le même problème en essayant de configurer iptables :
[[email protected] /]# iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
iptables v1.6.0: 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 la version d'iptables :
[[email protected] /]# pacman -Q iptables
iptables 1.6.0-1
Que s'est-il passé ?
Le module noyau ip_tables existe-t-il réellement ?
[[email protected] /]# /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
bash: /lib/modules/4.8.13-1-ARCH/kernel/net/ipv4/netfilter/ip_tables.ko: No such file or directory
[[email protected] /]# modprobe ip_tables
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.8.13-1-ARCH
hmmm.... On dirait qu'il a disparu ! Découvrons :1. Quel noyau mon ordinateur utilise-t-il ?2. Prend-il en charge iptables ?
[[email protected] /]# uname -r
4.8.13-1-ARCH
[[email protected] /]# cat /proc/sys/kernel/osrelease
4.8.13-1-ARCH
[[email protected] /]# zgrep IPTABLES /proc/config.gz
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP6_NF_IPTABLES=m
Ok .... C'est étrange car c'est un noyau Arch Linux standard et il prend en charge iptables.
Jetons un coup d'œil pour voir s'il y a des modules netfilter disponibles (je serais très surpris s'il n'y en avait pas car il est très peu probable que quelque chose les supprime) :
[[email protected] /]# ls /lib/modules/*/kernel/net/*/netfilter/
/lib/modules/4.9.11-1-ARCH/kernel/net/bridge/netfilter/:
ebt_802_3.ko.gz ebtables.ko.gz ebt_dnat.ko.gz ebt_log.ko.gz ebt_pkttype.ko.gz ebt_vlan.ko.gz nft_reject_bridge.ko.gz
ebtable_broute.ko.gz ebt_among.ko.gz ebt_ip6.ko.gz ebt_mark.ko.gz ebt_redirect.ko.gz nf_log_bridge.ko.gz
ebtable_filter.ko.gz ebt_arp.ko.gz ebt_ip.ko.gz ebt_mark_m.ko.gz ebt_snat.ko.gz nf_tables_bridge.ko.gz
ebtable_nat.ko.gz ebt_arpreply.ko.gz ebt_limit.ko.gz ebt_nflog.ko.gz ebt_stp.ko.gz nft_meta_bridge.ko.gz
/lib/modules/4.9.11-1-ARCH/kernel/net/ipv4/netfilter/:
arptable_filter.ko.gz ip_tables.ko.gz nf_conntrack_ipv4.ko.gz nf_nat_pptp.ko.gz nft_dup_ipv4.ko.gz
arp_tables.ko.gz ipt_ah.ko.gz nf_defrag_ipv4.ko.gz nf_nat_proto_gre.ko.gz nft_masq_ipv4.ko.gz
arpt_mangle.ko.gz ipt_CLUSTERIP.ko.gz nf_dup_ipv4.ko.gz nf_nat_snmp_basic.ko.gz nft_redir_ipv4.ko.gz
iptable_filter.ko.gz ipt_ECN.ko.gz nf_log_arp.ko.gz nf_reject_ipv4.ko.gz nft_reject_ipv4.ko.gz
iptable_mangle.ko.gz ipt_MASQUERADE.ko.gz nf_log_ipv4.ko.gz nf_tables_arp.ko.gz
iptable_nat.ko.gz ipt_REJECT.ko.gz nf_nat_h323.ko.gz nf_tables_ipv4.ko.gz
iptable_raw.ko.gz ipt_rpfilter.ko.gz nf_nat_ipv4.ko.gz nft_chain_nat_ipv4.ko.gz
iptable_security.ko.gz ipt_SYNPROXY.ko.gz nf_nat_masquerade_ipv4.ko.gz nft_chain_route_ipv4.ko.gz
/lib/modules/4.9.11-1-ARCH/kernel/net/ipv6/netfilter/:
ip6table_filter.ko.gz ip6t_ah.ko.gz ip6t_mh.ko.gz nf_conntrack_ipv6.ko.gz nf_reject_ipv6.ko.gz nft_redir_ipv6.ko.gz
ip6table_mangle.ko.gz ip6t_eui64.ko.gz ip6t_NPT.ko.gz nf_defrag_ipv6.ko.gz nf_tables_ipv6.ko.gz nft_reject_ipv6.ko.gz
ip6table_nat.ko.gz ip6t_frag.ko.gz ip6t_REJECT.ko.gz nf_dup_ipv6.ko.gz nft_chain_nat_ipv6.ko.gz
ip6table_raw.ko.gz ip6t_hbh.ko.gz ip6t_rpfilter.ko.gz nf_log_ipv6.ko.gz nft_chain_route_ipv6.ko.gz
ip6table_security.ko.gz ip6t_ipv6header.ko.gz ip6t_rt.ko.gz nf_nat_ipv6.ko.gz nft_dup_ipv6.ko.gz
ip6_tables.ko.gz ip6t_MASQUERADE.ko.gz ip6t_SYNPROXY.ko.gz nf_nat_masquerade_ipv6.ko.gz nft_masq_ipv6.ko.gz
Il y a donc un indice ici; il semble que j'ai une incompatibilité de noyau (il existe des modules de noyau pour la version du noyau :/lib/modules/4.9.11-1 qui ne correspond pas au noyau en cours d'exécution sur mon ordinateur - 4.9.13-1). Vérifions donc s'il y a des modules disponibles pour le noyau en cours d'exécution sur ma machine :
[[email protected] /]# ls /lib/modules/4.8.13-1-ARCH
ls: cannot access '/lib/modules/4.8.13-1-ARCH': No such file or directory
Non! Il s'agit donc probablement de la cause première du problème ; le noyau en cours d'exécution sur ma machine n'a pas de modules chargeables (pas bon). Essayons de le réparer en mettant à jour (dans mon cas, en rétrogradant) le noyau, car j'utilise le noyau Arch Linux standard qui est sous contrôle de version pacman, je peux simplement exécuter pacman pour le mettre à jour (si vous utilisez un noyau personnalisé qui est un problème que vous pourrez résoudre) :
[[email protected] /]# sudo pacman -S linux
...
Packages (1) linux-4.9.11-1
...
Super! pacman installera le noyau 4.9.11-1, qui est celui que je veux (j'ai des modules pour ce noyau - je n'ai aucune idée de comment j'ai fini par obtenir le noyau 4.9.13). Laissez pacman terminer l'installation.
Enfin, je dois m'assurer que ce noyau sera utilisé lors du démarrage de la machine. J'ai donc besoin de mettre à jour le gestionnaire de démarrage (j'utilise systemd-boot).- J'ai une partition de démarrage qui est montée sur /boot- Supprimez le fichier loader.conf :/boot/loader/loader.conf (il sera mis à jour lors de l'exécution de bootctl ci-dessous et bootctl ne le mettra pas à jour s'il existe déjà) - Exécutez bootctl pour mettre à jour le gestionnaire de démarrage :
[[email protected] /]$ bootctl --path=/boot install
Maintenant, redémarrez l'ordinateur.... Lorsqu'il redémarre, il doit utiliser le nouveau noyau (rétrogradé) !
Une fois qu'il a démarré et que vous êtes connecté, vérifiez la version du noyau pour vous assurer que le bon noyau est en cours d'exécution :
[[email protected] /]$ uname -r
4.9.11-1-ARCH
Essayez maintenant d'exécuter la commande d'origine (pour configurer le partage Internet iptables)
[[email protected] /]$ sudo iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
[[email protected] /]$ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[[email protected] /]$ sudo iptables -A FORWARD -i enp0s20f0u4u3 -o enp0s31f6 -j ACCEPT
Woo-hoo Problème résolu ! (notez que je me suis connecté en tant qu'utilisateur root pour résoudre ce problème - je ne recommanderais pas de le faire à moins que vous ne soyez sûr de savoir ce que vous faites !)