私はiptableルールを設定しようとしていますが、iptableを使用すると次のエラーメッセージが表示されます:
iptables v1.4.14: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
私は使用しています:
cat /etc/debian_version
7.4
uname -a
Linux myserver 2.6.32-22-pve #1 SMP Mon Jul 15 08:36:46 CEST 2013 x86_64 GNU/Linux
uname -r
2.6.32-22-pve
これは、サービスプロバイダーがホストする仮想サーバーです。
これを解決するにはどうすればよいですか?
私は同じ問題を抱えていましたが、これはうまくいきました:
Sudo modprobe ip_tables
Sudo echo 'ip_tables' >> /etc/modules
Debian 8でも同じ問題が発生しました。システムを再起動して修正しました。カーネルイメージが更新され、その後システムが再起動されなかった場合、エラーが発生する可能性があるようです。
このエラーメッセージが表示され、ある種の制限付きコンテナベースのホスティング(OpenVZなど)を使用していない場合は、カーネルにnatモジュールが不足している可能性があることを追加すると便利です。実行を確認するには:
modinfo iptable_nat
モジュールの場所を出力する必要がありますが、エラーが出力された場合は、それが問題であることを知っています。また、nf_natなどの依存モジュールが欠落している可能性があるため、iptable_natモジュールが存在するが失敗した場合は、さらに深く掘り下げる必要があります。欠落している場合は、別のカーネルとモジュールを取得する必要があります。または、独自にロールする場合は、カーネル構成にCONFIG_IP_NF_NAT=m
(IPv4 NATの場合)が含まれていることを確認してください。
情報については、関連するカーネルモジュールは通常、次のいずれかの場所にあります。
ls /lib/modules/`uname -r`/kernel/net/netfilter/
ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
また、IPv6を実行している場合は、こちらもご覧ください。
ls /lib/modules/`uname -r`/kernel/net/ipv6/netfilter/
最後に、私のサービスプロバイダーは答えました:
これは、使用する仮想化システム(OpenVZ)の制限であり、基本的なiptablesルールは可能ですが、natテーブルを使用するものはできません。
これが本当に問題である場合は、お客様への提供を開始するときに、他のシステム仮想化(KVM)への移行を提供できます。
サーバーを新しいシステムに移行する必要がありました...
短縮版 :
仮想サーバーで実行する前に、ホストでiptablesを実行します(ここでは、これが何らかのLXCまたはOpenVZコンテナーであると確信しています)。
ロングバージョン:
この問題は、ip_tableモジュールがオンデマンドでロードされるという事実によるものです。したがって、再起動後、ブート時にiptablesルールがロードされていないマシンでは、ip_tablesモジュールはロードされません(モジュールの要求なし==モジュールはロードされません)。その結果、ホストが何らかの方法でip_tablesモジュールをロードするまで、LXCまたはOpenVZコンテナーは(ホストカーネルを共有するが、ロードされるモジュールを変更できないため)iptablesを使用できません。
公式ウィキからのそのソリューション:
vzctl set $CTID --netfilter full --save
https://openvz.org/VPN_via_the_TUN/TAP_device#Troubleshooting
「IP conntrack機能は、venetのパフォーマンスにマイナスの影響を与える(約10%)ため、デフォルトで無効にしたほうがよいでしょう。」 natが必要です
https://serverfault.com/questions/593263/iptables-nat-does-not-exist
OpenSUSE 15.3では、systemdログがこのエラーを報告しました(insmodの提案は役に立ちませんでした)。
Feb 18 08:36:38 vagrant-openSUSE-Leap dockerd[20635]: iptables v1.6.2: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
REBOOTは問題を修正しました
テーブル名では大文字と小文字が区別されるため、大文字のNATではなく小文字のnatを使用する必要があります。例えば;
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o eth0 -j MASQUERADE
puppetを実行している場合、/proc/sys/kernel/modules_disabled
を1に、それ以上のモジュールのロードを禁止します。マシンを再起動すると、0に戻り、iptablesモジュールのロードなどの変更が可能になります。一定時間後puppetは、カーネルルートキットからシステムを保護するために1に戻します。したがって、必要なモジュールは、ブート中またはブート直後にロードする必要があります。