web-dev-qa-db-ja.com

ルートのIPTablesモジュールip_tablesが見つかりません

Iptablesを有効にして出荷されていないベンダーからカスタムビルドのLinuxディストリビューションを入手しました。

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をコンパイルして統合することは可能ですか?カーネル全体をコンパイルしてみましたが、不明な要因により、一部の機能が動作していません。したがって、それらをカーネルモジュールとしてビルドし、既存のカスタムディストリビューションと統合する必要があります。

6
Gopi

1)「iptables」は、ip_tablesカーネルモジュールを処理するユーザーランドアプリケーションです。すでに/ bin/iptablesがあるようですが、カーネルにはip_tables.koが含まれていない/ロードされていません

2)カーネルがip_tablesをサポートしていない場合は、ディストリビューションにロード可能なカーネルモジュールとして含まれている可能性があります。

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

どこ uname -rはカーネルのバージョン、つまり3.5.0-18-genericです

ip_tables.koを見つけたら、試すことができます

#depmod
#modprobe ip_tables

または

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

ディストリビューションに実際のdepmod/modprobe/insmodアプリが含まれているか、busyboxによって実装されたアプリが含まれているかに応じて、busyboxのバージョンによっては相対パスの問題や圧縮カーネルモジュールなどの追加の問題が発生する可能性があります。

3)ip_tables.koが使用できない場合は、ip_tableサポートを使用して、または外部のロード可能なモジュールとしてカーネルを再構築する必要があります。最後のケースでは、ip_tables.koを作成した後、2)に戻ります。

7
Pat

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

OK ....これは標準のArch Linuxカーネルであり、iptablesをサポートしているので奇妙です。

利用可能なnetfilterモジュールがあるかどうかを見てみましょう(何かがそれらを削除する可能性が非常に低いため、ない場合は非常に驚きます)。

[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

いや!したがって、これが問題の根本的な原因である可能性が最も高いです。私のマシンで実行しているカーネルには、ロード可能なモジュールがありません(良くありません)。 pacmanのバージョン管理下にある標準のArch Linuxカーネルを使用しているため、カーネルを更新(私の場合はダウングレード)して修正しようとします。pacmanを実行して更新することができます(カスタムカーネルを使用している場合)あなたが解決できる問題):

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

すごい! pacmanはカーネル4.9.11-1をインストールします。これは私が欲しいカーネルです(このカーネル用のモジュールがあります-どうしてカーネル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ユーザーとしてログインしたことに注意してください-自分が何をしているのか確信が持てない限り、これを行うことはお勧めしません!)

4
Matt Conway