====== 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
* これのMAX値が、ip_conntrack_max(デフォルト:65536)
* これのESTABLISHED が保持される時間が、ip_conntrack_tcp_timeout_established(デフォルト 432000秒=(5日間))
===== ①現在の値確認=====
==== 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]]
{{tag>iptables conntrack}}