iptables接続追跡の制限(副題:進撃のポテトチップ)

 

概要

今回瞬間アクセスが多くてうちの店舗のお店のページが一部見れない障害が発生した。その絡みでiptablesの接続追跡について勉強したので整理してみた

 

 

iptablesの接続追跡

 

iptables 内のモジュールは、接続追跡 (connection tracking) と呼ばれる方法を使用して、着信接続についての情報を保存している。

その情報を利用して切断、許可の判断を行うのだ

そしてその接続追跡の情報にはMAX値がある

IPTableの接続追跡

 

centosバージョン別に以下のコマンドで確認できた(iptables使ってればきっとあるはず)

centos5の場合
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max //接続追跡のMAX値が出る
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count //現在の接続追跡の値が出る

 

centos6.5の場合
cat /proc/sys/net/netfilter/nf_conntrack_count  //接続追跡のMAX値が出る
cat /proc/sys/net/netfilter/nf_conntrack_max //現在の接続追跡の値が出る

 

muninでこの値を確認してみると

image

 

問題があった3/10日conntrack_maxの閾値までconntrack_countの値が上がっていることがわかる(これ以上上がらないのはMAX値以上になるとパケットをDROPしてしまうからだ)

 

 

そもそもの問題!DNSラウンドロビンオプションが出来てない

そもそもの問題として出たのは二台構成のリゾルバーDNSのバランサーが悪いことだった

たとえば DNS設定を

nameserver A
nameserver B

にするとまずはAを見に行ってAにつながらない場合はBに問い合わせしに行くような仕組みだった。この構成だとBの方は予備として使われる感じなのでリソースが大変無駄な気がする

のでDNSラウンドロビンオプションを入れて二台サーバにバランサーよくリクエストを受けるようにしておくとconntrack_maxの閾値まで至りにくくなるはず。

ラウンドロビンの設定例は以下を参考

/etc/resolve.conf
options rotate
nameserver 192.168.1.1
nameserver 10.0.0.1

 

その他

 

conntrack_maxの閾値までいったのは「マツコの知らない世界」という番組にうちのお客様が販売している1800円のポテトチップが放送され、ものすごく売られたからだ

俺も食べてみたいが、、もう売り切りなので、、落ち着いたら注文してみよう

 http://kikusui-do.jp/

 

3c158aae6f05e493a64ed990f4fc81de

参考したページ:

http://www.rbbtoday.com/article/2015/03/11/129320.html

http://varadoga.blog136.fc2.com/blog-entry-59911.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です