目次

ip_contrack

iptablesでは、関連したパケットを追跡するために/proc/net/ip_conntrackというファイルを作り、パケットの情報を記録しておきます。
このip_conntrackに記録できる上限数を決めているのが/proc/sys/net/ipv4/ip_conntrack_max。
システムで自動的に設定されるデフォルト値は搭載されているメモリーによって異なり、1GBで30000強、2GB以上で65536ぐらいになります。

1GBのメモリーを積んでいる場合、1時間あたりのアクセス数が100,000ページビュー程度までならデフォルト値でも問題ないのですが、
ぞれ以上になってくるとip_conntrack_maxの値を超えてしまい、パケットが捨てられてしまうという事態に陥ります。
ip_conntrack_maxの値を超えると、コンソールに以下のようなメッセージが出力されます。

ip_conntrack: maximum limit of 65536 entries exceeded

/proc/net/ip_conntrackを見ると、ESTABLISHEDが大量に保存されている

# cat /proc/net/ip_conntrack
tcp      6 431999 ESTABLISHED src=192.168.100.50 dst=192.168.10.11 sport=62856 dport=22 packets=2107 bytes=129391 src=192.168.10.11 dst=192.168.100.50 sport=22 dport=62856 packets=2254 bytes=161844 [ASSURED] mark=0 secmark=0 use=1
tcp      6 431867 ESTABLISHED src=182.48.51.190 dst=192.168.10.11 sport=44108 dport=22 packets=1493774 bytes=185262756 src=192.168.10.11 dst=182.48.51.190 sport=22 dport=44108 packets=1491669 bytes=201699448 [ASSURED] mark=0 secmark=0 use=1

①現在の値確認

CentOS5

 # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
 # cat /proc/sys/net/ipv4/ip_conntrack_max
 65536

 # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
 432000

CentOS6/CentOS7

# cat /proc/net/nf_conntrack | wc -l
14471

# cat /proc/sys/net/netfilter/nf_conntrack_count
14475

# cat /proc/sys/net/netfilter/nf_conntrack_max
65536
# cat /proc/sys/net/nf_conntrack_max
65536

②変更

CentOS5

 # cp -a /etc/sysctl.conf /etc/sysctl.conf.org
 # vi /etc/sysctl.conf
 net.ipv4.netfilter.ip_conntrack_max = 1210856
 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 43200

CentOS6/CentOS7

net.netfilter.nf_conntrack_max = 1210856
net.nf_conntrack_max = 1210856

③反映

 # sysctl -p
 または
 # sysctl net.ipv4.netfilter.ip_conntrack_max=1200000
 # sysctl net.nf_conntrack_max=1200000

④変更の確認

 # cat /proc/sys/net/ipv4/ip_conntrack_max
 1210856

 # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
 259200			3日
 172800			2日
 86400			1日
 43200			半日

④確認(sysctl)

# sysctl net.netfilter.nf_conntrack_max net.nf_conntrack_max net.netfilter.nf_conntrack_generic_timeout
net.netfilter.nf_conntrack_max = 1210856
net.nf_conntrack_max = 1210856
net.netfilter.nf_conntrack_generic_timeout = 600

⑤ip_contrackのエラー

kernel: nf_conntrack: table full, dropping packet

参考

https://nazx.jp/x/CentOS_TIPS_002