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 を設定しようとしたときに、同じ問題に遭遇しました:
[[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.
iptables バージョンを使用しています:
[[email protected] /]# pacman -Q iptables
iptables 1.6.0-1
何が起こったのですか?
ip_tables カーネル モジュールは実際に存在しますか?
[[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
うーん....それが消えたようです !調べてみましょう:1。私のコンピューターはどのカーネルを使用していますか?2. 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
わかりました....標準の Arch Linux カーネルであり、iptables をサポートしているため、これは奇妙です.
利用可能な netfilter モジュールがあるかどうかを見てみましょう (何かがそれらを削除する可能性は非常に低いため、ない場合は非常に驚くでしょう):
[[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
ここに手がかりがあります。カーネルが一致していないようです (カーネル バージョンのカーネル モジュールがあります:/lib/modules/4.9.11-1 は、私のコンピューターで実行されているカーネルと一致しません - 4.9.13-1)。それでは、私のマシンで実行されているカーネルで利用可能なモジュールがあるかどうかを確認してみましょう:
[[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
いいえ!したがって、これが問題の根本原因である可能性が最も高いです。私のマシンで実行されているカーネルには、ロード可能なモジュールがありません (良くありません)。カーネルを更新 (私の場合はダウングレード) して修正してみましょう。pacman のバージョン管理下にある標準の Arch Linux カーネルを使用しているため、単に pacman を実行して更新できます (カスタムカーネルを使用している場合)。あなたが解決できる問題):
[[email protected] /]# 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 を実行して、ブート マネージャーを更新します。
[[email protected] /]$ bootctl --path=/boot install
ここでコンピュータを再起動します....再起動すると、新しい (ダウングレードされた) カーネルが使用されます!
起動してログインしたら、カーネルのバージョンをチェックして、正しいカーネルが実行されていることを確認します。
[[email protected] /]$ uname -r
4.9.11-1-ARCH
元のコマンドを実行してみてください (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
ウーホー問題が修正されました! (この問題を解決するために root ユーザーとしてログインしたことに注意してください。自分が何をしているのかを理解しているという自信がない限り、これを行うことはお勧めしません!)