Ip_tables модуля IPTables не найден для root

20258
Gopi

Мы получили пользовательский дистрибутив Linux от производителя, который не поставляется с включенным iptables.

root@xxxx:~# iptables -L modprobe: FATAL: Module ip_tables not found. iptables v1.4.21: can't initialize iptables table `filter': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded. 

Я также попытался использовать modprobe, но не нашел, и команда find также ничего не нашла.

# modprobe ip_tables modprobe: FATAL: Module ip_tables not found. # find / -name "ip_tables*" #  

Можно ли скомпилировать netfilter и iptables и интегрировать его? Я попытался собрать все ядро, но из-за неизвестного фактора некоторые функции не работают. Поэтому мне нужно собрать их как модуль ядра и интегрировать его с нашим существующим дистрибутивом.

5
Вы пытались скомпилировать исходники с http://www.netfilter.org/downloads.html Anthony 9 лет назад 0
Вы пробовали `modprobe ip_tables`? Jan 9 лет назад 1
Я перекомпилировал свое ядро, чтобы включить эту функцию. Спасибо Gopi 9 лет назад 0

2 ответа на вопрос

6
Pat

1) "iptables" is the userland application that deals with the ip_tables kernel module. It seems you already have /bin/iptables but your kernel has not included/loaded ip_tables.ko

2) if your kernel does not support ip_tables your distro might have it included as a loadable kernel module at:

/lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko 

where uname -r is the kernel version i.e. 3.5.0-18-generic

if you find ip_tables.ko you can try

#depmod #modprobe ip_tables 

or

#insmod /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko 

depending if your distro includes real depmod/modprobe/insmod apps or the ones implemented by busybox you might run into some additional issues like relative path problems or compressed kernel modules not handled correctly depending on the busybox version.

3) if the ip_tables.ko is not available you either have to rebuild the kernel with ip_table support or as an external loadable module. In the last case after creating ip_tables.ko go back to 2).

3
Matt Conway

TL; DR

  • Обновите ваше ядро: sudo pacman -S linux

  • Обновите свой загрузчик: bootctl --path=/boot install

  • перезагружать

Сегодня утром я столкнулся с той же проблемой при попытке настроить iptables:

[root@office-pc /]# 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. 

Я использую версию iptables:

[root@office-pc /]# pacman -Q iptables iptables 1.6.0-1 

Что произошло?

Модуль ядра ip_tables действительно существует?

[root@office-pc /]# /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  [root@office-pc /]# modprobe ip_tables modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.8.13-1-ARCH 

хммм .... кажется это исчезло! Давайте выясним: 1. Какое ядро ​​использует мой компьютер? 2. Поддерживает ли он iptables?

[root@office-pc /]# uname -r 4.8.13-1-ARCH  [root@office-pc /]# cat /proc/sys/kernel/osrelease 4.8.13-1-ARCH  [root@office-pc /]# zgrep IPTABLES /proc/config.gz CONFIG_IP_NF_IPTABLES=m CONFIG_IP6_NF_IPTABLES=m 

Хорошо .... Это странно, потому что это стандартное ядро ​​Arch Linux, и оно поддерживает iptables.

Давайте посмотрим, есть ли какие-нибудь доступные модули сетевого фильтра (я был бы очень удивлен, если бы их не было, потому что очень маловероятно, что что-то их удалит):

[root@office-pc /]# 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 

Так что здесь есть ключ; похоже, у меня несоответствие ядра (для версии ядра существуют модули ядра: /lib/modules/4.9.11-1, которые не соответствуют ядру, запущенному на моем компьютере - 4.9.13-1). Итак, давайте проверим, есть ли какие-нибудь модули, доступные для ядра, работающего на моей машине:

[root@office-pc /]# ls /lib/modules/4.8.13-1-ARCH ls: cannot access '/lib/modules/4.8.13-1-ARCH': No such file or directory 

Нету! Так что это, скорее всего, является основной причиной проблемы; ядро, работающее на моей машине, не имеет загружаемых модулей (не очень хорошо). Давайте попробуем исправить это, обновив (в моем случае, понизив) ядро, потому что я использую стандартное ядро ​​Arch Linux, которое находится под контролем версии pacman, я могу просто запустить pacman, чтобы обновить его (если вы используете собственное ядро, которое проблему, которую вы сможете решить)

[root@office-pc /]# sudo pacman -S linux ... Packages (1) linux-4.9.11-1 ... 

Большой! pacman установит ядро ​​4.9.11-1, которое мне нужно (у меня есть модули для этого ядра - я понятия не имею, как я получил Kernel 4.9.13). Пусть pacman завершит установку.

Наконец, мне нужно убедиться, что это ядро ​​будет использоваться при загрузке машины. Поэтому мне нужно обновить менеджер загрузки (я использую systemd-boot). - У меня есть загрузочный раздел, который монтируется в / boot - Удалите файл loader.conf: /boot/loader/loader.conf (он будет обновляться при запуске bootctl ниже, и bootctl не будет обновлять его, если он уже существует) - Выполнить bootctl для обновления менеджера загрузки:

[root@office-pc /]$ bootctl --path=/boot install 

Теперь перезагрузите компьютер .... При перезагрузке он должен использовать новое (пониженное) ядро!

После его загрузки и входа в систему проверьте версию ядра, чтобы убедиться, что работает правильное ядро:

[matt@office-pc /]$ uname -r 4.9.11-1-ARCH 

Теперь попробуйте запустить оригинальную команду (для настройки общего доступа к iptables)

[matt@office-pc /]$ sudo iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE [matt@office-pc /]$ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT [matt@office-pc /]$ sudo iptables -A FORWARD -i enp0s20f0u4u3 -o enp0s31f6 -j ACCEPT 

Woo-hoo Проблема исправлена! (обратите внимание, что я вошел в систему как пользователь root, чтобы решить эту проблему - я не рекомендовал бы делать это, если вы не уверены, что знаете, что делаете!)

Похожие вопросы