2008年02月20日
shaperで帯域制御(簡易編)
いずれ別の場所でちゃんと書く予定だけど、Debianに入っている帯域制限ツールパッケージのshaperがすばらしいことが判明。
背景としては、そもそもDebian JPの保有するサーバの1つplat.debian.or.jpが、NOCの帯域があまり太くないところに最近アクセスがずーっと続いていて(とはいえ意図的なDoSとかでもなくて)、同じネットワーク内のほかのマシンにもつながりにくいという困った状況になっていた。んで、4〜5Mbpsくらいに帯域制限できるといいね、でも今のスイッチではそういう細かいのはできないしなぁ、iprouteを使った手法はLDPなどにもあるけどなんかわかりにくいなーとNOC系のIRCチャネルでしばし議論。
で、apt-cache search traffic shapeで出てきた「shaper - Traffic shaper init script (cbq.init) for Linux」を使ってみた。カーネルのNET_SCH*周辺の機能を使うが、Debianの標準カーネルではこれらの機能はモジュールとして用意されているので、特に再コンパイルの必要はない。
- shaperパッケージをインストール。
- /etc/shaper/に設定ファイルを作成する。名前ルールは後で調べるけど、とりあえずcbq-128.platのようにしておいた。「cbq-」が設定のプレフィクス、128がクラスID、platがクラス名。つまり、cbq-以外は適当に付けていい。
- たとえばeth0を使う入出力をあらゆる128Kbitにする設定。
DEVICE=eth0,100Mbit,10Mbit ←インターフェイスeth0、物理帯域幅100Mbit、チューニングパラメータ(~帯域/10) RATE=128Kbit ← このクラスに与える帯域幅 WEIGHT=10Kbit ← チューニングパラメータ(~帯域/10) PRIO=5 ← クラスの優先度。5が推奨 RULE=0.0.0.0/0 ← 適用するネットワーク範囲。:の後にポートを指定することもできたり
- あとは、/etc/init.d/shaper restart で設定を反映するだけ。
これが本当におもしろいように効く。さすがに128Kbitはあまりにもなので現在は5Mbit制限にしているけど、帯域グラフで見ると本当に5Mで綺麗にシェイピングされている。ほかのマシンへのアクセスもすいすいになったし、すばらしすぎる。
中身としては、LDPにも書いてあるようなiprouteのtcコマンドを使った設定が内部的に処理されている。/etc/init.d/shaper compileとするとその内容を表示できるが、これを手で書くのはかなり難しいだろう…。
![[hatena]](http://d.hatena.ne.jp/images/b_entry_de.gif)
![[RSS]](/d/rss10.png)