2009年5月8日金曜日

iptablesで"ip_conntrack"エラーが出る場合

iptablesはパケットフィルタリングを行う便利な機能です。
設定したパケットを追跡するために
/proc/net/ip_conntrack
というファイルへパケット情報を記録、追跡します。

これがたまに大規模なシステムになると
# vim /var/log/messages
ip_conntrack: maximum limit of xxxx entries exceeded
というメッセージが表示される場合があります。

原因は、iptablesで追跡するパケットの上限数を超えてしまっているからです。
その上限数は
/proc/sys/net/ipv4/ip_conntrack_max
に書かれているのですが、システムで自動的に設定されています。

対処法は
# echo '100000' > /proc/sys/net/ipv4/ip_conntrack_max
と上限数を上げてあげるか、または
# vim /etc/sysctl.conf
net.ipv4.ip_conntrack_max = 100000
# sysctl -p
のようにしてあげるか、で大丈夫です。

/proc/sys/net/ipv4/ip_conntrack_maxの上限値は、搭載メモリーに依存するらしいので、増やしすぎには注意が必要です。

追跡中のip_conntrackの数を調べるには
# cat /proc/net/ip_conntrack | wc -l
で分かります。

大規模システムにもなると、外部システムとの連携などでptablesの監視パケットの数が膨大になるので注意が必要ですね。

0 件のコメント: