通信が多く、Linuxのiptablesのセッション管理テーブル(ip_conntrack)
を使い果たした場合、NATが働かず、通信できなくなったり検査できなく
なることがあります。
これは、問題発生後のdmesgコマンドで以下のエラーのメッセージが
出力されかで確認できます。(診断情報ではsystem/dmesg.txt)
ip_conntrack: table full, dropping packet.
なぜかこの状態になった。一部のIPアドレスから頻度の高いアクセスがあるなぁとは思っていたけれど、そんなにあるとは想定外。
/proc/net/ip_conntrack を調べてみると、以下のような ESTABLISHEDがある特定のIPアドレス群から大量に記録されていて、テーブルがいっぱいになってしまったらしい。困ったものだ。
-
tcp 6 431295 ESTABLISHED src=221.170.xxx.xxx dst=xxx.xxx.xxx.xxx (略)
上記、F-secureの情報を参考に /etc/sysctl.conf に 以下の行を加えた。327520は元々の10倍だが、メモリもあるのでたぶん大丈夫。
-
net.ipv4.ip_conntrack_max = 327520
確認する。
-
# cat /proc/sys/net/ipv4/ip_conntrack_max
-
327520
ESTABLISHED が保持されるのは 432000秒=(5日間)だそうなので、これを短くするという方法もあるらしい。場所は、/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established。
5日間というのは長すぎる気もするけど、何か意味はあるのだろう。D-Link DSL-G604T Wireless ADSL Router - サポートフォーラム - eXpansys Japan を見ると書き換えちゃったりしてますが、大丈夫なのかどうかは不明。
関連すると思われる記事:
- HT-03AでGoogle Latitudeに参加する(要root化)
- WordPressにはてなスターをつけました
- iG:SyntaxHiliterのデザインを少しだけ変更する
- AmazonプライムだとAmazon Short URIが機能しない→解決
- Android CyanogenMod 4.1.99を導入
タグ: iptables, ip_conntrack, Linux, router