今日ホストシステム上の私のiptables natが機能しなくなり、何が起こったのかわかりません! (それは非常に悪いです、私は知っています)
すべてのコマンドはrootユーザーとして実行されます。
$ iptables -t nat -L
次のエラーメッセージが表示されます。
$ iptables -t nat -L
iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
これ以上利用可能なアップデートはありません。また、いくつかの古いカーネルでサーバーを再起動しましたが、常に同じエラーメッセージが表示されます。
私のサーバーは、最新バージョンの公式OpenVZカーネルを備えたCentOSで実行されています。
$ uname -r
2.6.32-042stab088.4
カーネルバージョンもテスト済み:2.6.32-042stab85.20および2.6.32-042stab084.26
Grub.confの最初のカーネル:
title OpenVZ (2.6.32-042stab088.4)
root (hd0,1)
kernel /vmlinuz-2.6.32-042stab088.4 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-Sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-042stab088.4.img
次の更新がインストールされました:
$ rpm -qa --last
vzctl-4.7.2-1.x86_64 Mon 05 May 2014 03:25:16 AM CEST
vzctl-core-4.7.2-1.x86_64 Mon 05 May 2014 03:25:14 AM CEST
util-linux-ng-2.17.2-12.14.el6_5.x86_64 Wed 30 Apr 2014 11:37:19 PM CEST
libuuid-2.17.2-12.14.el6_5.x86_64 Wed 30 Apr 2014 11:37:18 PM CEST
libblkid-2.17.2-12.14.el6_5.x86_64 Wed 30 Apr 2014 11:37:18 PM CEST
vzkernel-2.6.32-042stab088.4.x86_64 Mon 26 Apr 2014 09:01:00 AM CEST
nss-softokn-freebl-3.14.3-10.el6_5.x86_64 Sat 26 Apr 2014 09:01:00 AM CEST
nss-softokn-3.14.3-10.el6_5.x86_64 Sat 26 Apr 2014 09:01:00 AM CEST
bridge-utils-1.2-10.el6.x86_64 Tue 15 Apr 2014 02:22:41 PM CEST
openssl-1.0.1e-16.el6_5.7.x86_64 Wed 09 Apr 2014 10:14:03 AM CEST
...
lsmod
を使用すると、次のようになります。
$ lsmod | grep ip
iptable_nat 6302 0
nf_nat 23213 2 iptable_nat,vzrst
nf_conntrack_ipv4 9946 3 iptable_nat,nf_nat
nf_defrag_ipv4 1531 1 nf_conntrack_ipv4
nf_conntrack 80281 5 iptable_nat,vzrst,nf_nat,nf_conntrack_ipv4,vzcpt
ip6t_REJECT 4711 0
ip6table_mangle 3669 0
ip6table_filter 3033 0
ip6_tables 18988 2 ip6table_mangle,ip6table_filter
iptable_mangle 3493 0
iptable_filter 2937 0
xt_multiport 2716 0
ipt_REJECT 2399 0
ip_tables 18119 3 iptable_nat,iptable_mangle,iptable_filter
ipv6 322519 35 vzrst,ip6t_REJECT,ip6table_mangle
Modprobeを実行すると、次のエラーが発生します。
$ modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko
FATAL: Module /lib/modules/2.6.32_042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko not found.
しかし、ファイルは存在します:
$ ll /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko
-rwxr--r-- 1 root root 16K Apr 3 16:20 /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.ko*
何か案は?
Vzctlが4.6から4.7に更新されたため、nf_conntrackの設定がデフォルトで無効になるように変更されました。 ( https://openvz.org/Download/vzctl/4.7/changes )
対応するコミットメッセージ:
...
デフォルトでVE0のconntrackを無効にする
IP conntrack機能はvenetのパフォーマンスにマイナスの影響を与えるため(uoから約10%)、デフォルトで無効にする方が良いでしょう。
...
(ソース: http://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee )
ソリューション:
配布に依存して、それは/ etcディレクトリのどこかにあります。それを見つける:
$ Sudo grep -R "options nf_conntrack ip_conntrack_disable_ve0 = 1" /etc/modprobe.d/
「1」を「0」に置き換えます。
オプションnf_conntrack ip_conntrack_disable_ve0 = 0
システムを再起動します
再起動する代わりに:
rmmod iptable_nat
rmmod nf_nat
rmmod nf_conntrack_ipv4
rmmod nf_conntrack
そして、NATは今働いています
すべてのソース:
Vzctl 4.7の変更ログ: https://openvz.org/Download/vzctl/4.7/changes
コメントに解決策があるバグレポート: https://bugzilla.openvz.org/show_bug.cgi?id=294
ソリューションの説明を短くしたバグレポート: https://bugzilla.openvz.org/show_bug.cgi?id=2755#c4
対応するGITコミット: http://git.openvz.org/?p=vzctl;a=commit;h=a191a462579ee
関連するWiki記事: https://openvz.org/NAT#IP_conntracks
iptables
を実行するには、スーパーユーザーである必要があります。したがって、root
として実行します。
$ iptables -t nat -L
iptables v1.4.19.1: can't initialize iptables table `nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
[...]
実際にファイルに問題があるようですか? modprobe /lib/modules/2.6.32-042stab088.4/kernel/net/ipv4/netfilter/iptable_nat.koをstraceしようとするとどうなりますか?システムは本当にENOENTを返しますか(そのようなファイルやディレクトリはありません)?私はこれがそれだとは想像できませんが、おそらくSELinuxがファイルをめちゃくちゃにしていますか?そして最後に、おそらくファイル/ファイルシステムが破損しています。 md5sumは、既知の適切なバージョンです。または、それを削除して新しいものをすべてコピーします。うまくいけば、それはファイルシステムではありません。
これを試してください: https://stackoverflow.com/questions/3140478/fatal-module-not-found-error-using-modprobe
この問題の別の解決策を見つけました!削除できなかったノード
rmmod iptable_nat
rmmod nf_nat
rmmod nf_conntrack_ipv4
rmmod nf_conntrack
公式ガイドで、私は見つけました:
vzctl set VZID --netfilter full --save --setmode restart