LoginSignup
9
9

More than 5 years have passed since last update.

nf_conntrack_max が反映できない場合の対処法

Last updated at Posted at 2015-01-23

nf_conntrack_max を変更しようとしたときにうまく変更できない場合にどうぞ。

状況

  • /etc/modprobe.d/nf_conntrack.conf (以下、設定ファイル)(nf_conntrack.confのファイル名は任意)に設定した options nf_conntrack hashsize=[設定値] が、iptables 再起動時に反映できない。
  • このとき、 iptables のほかに ip6tables を実行している。

原因

説明

  • iptables と ip6tables の両方を実行中の時にどちらかを再起動しても、設定ファイルの値が反映できない。
    • iptables と ip6tables がどちらかが実行されるとき、nf_conntrack モジュール(以下、モジュール)がロードされる。
    • 設定ファイルはモジュールのロード時に読み込まれる。
    • iptables, ip6tables 停止時、モジュールはアンロードされる。
    • しかし、iptables, ip6tables どちらかが引き続き実行中の時は、モジュールはアンロードされない。iptables, ip6tables どちらもが nf_conntrack モジュールに依存しているためである。

再現

モジュール ロード状況の確認

[root@hb-agent-test ~]# lsmod | grep conntrack
nf_conntrack_ipv4       9506  2 
nf_defrag_ipv4          1483  1 nf_conntrack_ipv4
nf_conntrack_ipv6       8337  2 
nf_defrag_ipv6         27236  1 nf_conntrack_ipv6
nf_conntrack           80390  3 nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
ipv6                  334932  31 nf_conntrack_ipv6,nf_defrag_ipv6,ip6t_REJECT
[root@test ~]# service iptables stop
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
[root@test ~]# lsmod | grep conntrack
nf_conntrack_ipv6       8337  2 
nf_defrag_ipv6         27236  1 nf_conntrack_ipv6
nf_conntrack           80390  2 nf_conntrack_ipv6,xt_state
ipv6                  334932  31 nf_conntrack_ipv6,nf_defrag_ipv6,ip6t_REJECT
[root@test ~]# service ip6tables stop
ip6tables: チェインをポリシー ACCEPT に設定中: filter      [  OK  ]
ip6tables: ファイアウォールルールを消去中:                 [  OK  ]
ip6tables: モジュールを取り外し中:                         [  OK  ]
[root@test ~]# lsmod | grep conntrack
[root@test ~]#

対策

/etc/sysctl.conf 同じ設定を記述して読み込む

設定ファイルにも記述を行いつつ、/etc/sysctl.confにも記述。これだと即反映可能。設定値を8倍する1のをお忘れなく。

# echo "net.nf_conntrack_max = [設定値 * 8]" >> /etc/sysctl.conf
# sysctl -p

全て停止して全て起動し直す

iptables, ip6tables を全て停止の上で再起動する。これだと、/etc/sysctl.confには手を入れずとも値の反映が可能。

# service ip6tables stop
# service iptables restart
# service ip6tables start

ip6tables を動かさない

IPv6 を使っていないのならあり。

マシンを再起動する

テスト機や開発機など、マシン再起動が許される環境・状況の場合はどうぞ。

備考

  • nf_conntrack_max の上限値変更は、/etc/sysctl.confよりも/etc/modprobe.d/nf_conntrack.confに記載することが望ましい2
  • RHEL/CentOS 5系だと、nf_conntrackip_conntrackと変数名が違う3ので注意。

参考資料

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9