ip_conntrack の最大値を変更するには、/etc/sysctl.conf に次の内容を追記します。
# Maximum number of conntrack
net.ipv4.netfilter.ip_conntrack_max = 524288あとは、この設定を有効にするために、次のコマンドを実行します。
$ sudo sysctl -p
iptables の ip_conntrack の最大値を変更する方法 | Carpe Diem
netfilter(iptables)でファイアウォール構築してるときに、コネクションが増大すると
ip_conntrack: table full, dropping packet.
というログとともに、トラッキングできなかったパケットを捨てやがるのでネットワークのパフォーマンスが激しく劣化する。
ので、上記のip_conntrack_maxを規定値より大きい値に変更するんだけども、/etc/sysctl.confで設定する方法だと、Debian lennyでやってた限りではboot時に変更が反映されない。
というのも、procfs上のnet.ipv4.netfilter以下の値は、ip_conntrackモジュールがロードされてないと出現しない。で、僕はiptables-restoreをifup時に実行させてて、最初にifupされたときに初めてip_conntrackモジュールがロードされるので、boot時のsysctl.confが反映されるタイミングだとまだnet.ipv4.netfilter.*が存在しないので設定に失敗する。
これに気づかないで運用するとip_conntrack_maxが規定値のままなので、すぐまた件の残念なログと対面することになる。
というわけで、boot時のifup後に実行されてるっぽい/etc/rc.localに以下のように書いてます。
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. #echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle #echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 262144 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait exit 0