かみぽわーる

kamipo's blog

debianでiptablesのip_conntrack_maxを変更する

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