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をコンパイルして統合することは可能ですか?カーネル全体をコンパイルしてみましたが、不明な要因により、一部の機能が動作していません。したがって、それらをカーネルモジュールとしてビルドし、既存のカスタムディストリビューションと統合する必要があります。
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)に戻ります。
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ユーザーとしてログインしたことに注意してください-自分が何をしているのか確信が持てない限り、これを行うことはお勧めしません!)