Posted by & filed under 開発.


最近の社内の新卒第1期生ブームを受けて、第ゼロ期生が本気を出し始めました。

もともと才能は一級品と言われてきた逸材です。そんな第ゼロ期生のレポートを本人了承を得た上で掲載します。トラフィック制限の話です。

iptablesのhashlimitでトラフィック制限

参考サイト

  • http://c-heart.sakura.ne.jp/mt/archives/2009/10/iptables.html
  • http://kfujio.blog78.fc2.com/blog-entry-72.html

設定

  • 特定のIPアドレスとの通信のhashlimitを1666パケット/secに設定
    (mtu = 1500の場合
    1666 (packets/sec) * 1500 (byte/packets) /1024/1024 = 2.38MByte/sec
    となる事を意図)
  • それ以外の通信については all pass

とします。

以下の例で通信相手のIPアドレスをAAA.BBB.CCC.DDDと表記します。

1. iptablesの起動/終了スクリプトを作成

参考サイト

2. 起動時にこの設定を読ませる(debian系)

とした後で/etc/network/interfacesに

を追加

3. 実験

とりあえずscpで実験してみたのですが、

  • 受信は大体意図通りに通信量を制限出来る
  • 送信は特に制限されているようには見えない

という感じになりました。

shaperdでトラフィック制限

もう少しちゃんと通信量を制御出来、なおかつ簡単そうなものは無いかと検索してみた所、shaperd というもので簡単に制御出来ると出てきました。

参考サイト

  • http://semind.github.com/blog/2012/02/24/shaperwoshi-tutepotodan-wei-dezhuan-song-liang-wozhi-xian-suru/
  • http://bto.la-terre.co.jp/support/shaperd.html

設定

  • 特定のIPアドレス … 送受信共にtcpについて 2000 KByte/secに制限
  • その他 … 全ての通信について、6000 KByte/secに制限

とします。

1. iptablesの設定を元に戻す

前回のhashlimit用のiptablesのチェーンを削除します。

2. ip_queueモジュールのロード

3. shaperdのインストール

4. 設定ファイルの編集

/usr/share/doc/shaperd 以下にある例を見て、/etc/shaperd/shaperd.confを作成。

最初、class restricted_in と class restricted_out の部分のみ書いて、class all 部分を書かなかった所、unmatched packet となってAAA.BBB.CCC.DDD以外からアクセス出来なくなってしまいました。queue limits の値は何が適当なのか不明です。

5. iptablesの設定スクリプトをコピー

debianのパッケージの場合
/etc/shaperd/up.d にiptablesのチェーンの登録スクリプト、
/etc/shaperd/down.d にiptablesのチェーンの削除スクリプト、
を置くとshaperdの起動/終了時に読み込んでくれるようです。

/usr/share/doc/shaperd/examples/ にスクリプトがあるのでこれをコピーして実行権限を付与

6. shapedの起動

  • /etc/init.d/shaperd start で起動
  • /etc/init.d/shaperd stop で終了

自動起動の場合は sysv-rc-conf か update-rc.dあたりで設定

7. 実験

scpで実験すると送受信共に大体設定通りに動いているようです。

起動時に

の警告が出るのが気になる所です。


関連文書:

  • 関連文書は見つからんがな

Comments are closed.