Skip to content

Instantly share code, notes, and snippets.

@CLCL
Last active December 31, 2015 17:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CLCL/8017917 to your computer and use it in GitHub Desktop.
Save CLCL/8017917 to your computer and use it in GitHub Desktop.
iptablesで150kbps/sの帯域制御(トラフィックシェーピング)回線をエミュレート

サーバ側で外行きのパケットにiptablesでlimitつけてあげれば、細い回線のマネができる。 たとえばブラウザのプロキシをSquid:3128でつなげている場合、Squidがあるサーバで以下の通り。

iptables -I OUTPUT -p tcp -m tcp --sport 3128 -j REJECT
iptables -I OUTPUT -p tcp -m tcp --sport 3128 -m limit --limit 13/s --limit-burst 13 -j ACCEPT

OUTPUTチェーンに「-I」で挿入しているということはチェーンの頭に追加しているということなので、実質的には↑のコマンドで挿入されるルールは、OUTPUTチェーンのリスト内では順番が逆になっていることに注意。先にlimit付きの条件成立すればACCEPT(外に行ってよし)、成立しなければREJECTされる。

これで、13(通過できるパケット数/sec)×1500(MTU、単位はbyte)=19500(bytes/sec)=152.3kbps の回線がエミュレートできて、MVNO SIMであったり、JPEGがじわじわ表示される昔のインターネット体験ができるのだけれども、そこで「昔のインターネットはみんなこうだったんだ」とか言ってしまうとおっさん認定されるので要注意だ。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment