2011年3月4日金曜日

FreeBSD on VirtualBoxで帯域制限ツールを作る。



基本的にはイベント会場で臨時に使う事を考えてます。


具体的には、会場にネットを解放しているけれどもネット中継もやりたい。


ネット中継がカクカクするのは困るので、一般側の回線は帯域をしぼりたい。


という時に使います。


で、既存ネットワークの設定をできるだけいじらずに導入する事を目的にしてます。


なので、PCにUSB等のNICを最大4つさして、ひとつをUplinkポートにして残りの3つが帯域制限が掛かっているポートになるハブを作ります。


PC自体にはIP振っても振らなくてもOKっす。


前準備


私はとりあえずVirtualBoxをMacBookにいれて、USB NICを2つ繋ぎました。


USB-NICが帯域制限つきポートになるので、変なパケットをださないように、Mac側でIPアドレスを「切」に設定してます。


windowsでいえば、ネットワークのプロパティでTCP/IPのチェックボックスをはずすような状態です。


でFreeBSDの仮想イメージはすでにもってるのでそれ使いました(8.2 RC2)


Virtualbox設定


VirtualBoxのネットワークの設定は、全てブリッジで接続です。


一つ目のインターフェイスをUPlinkのポートを設定して、それ以外を帯域制限つきポートにします。


FreeBSDの設定


/etc/rc.confファイル:



cloned_interfaces="bridge0"


#4つのNICをbridge0で繋ぎます。


#仮に3つしかなくても、同じ設定でちゃんと動きます


ifconfig_bridge0="addm em0 addm em1 addm em2 addm em3 up"


ifconfig_em0="up"


ifconfig_em1="up"


ifconfig_em2="up"


ifconfig_em3="up"


dummynet_enable="YES"


firewall_enable="YES"


firewall_type="/etc/ipfw.conf"



/etc/sysctl.confファイル:



net.link.bridge.ipfw=1



/etc/ipfw.confファイル(新規作成):



pipe 1 config bw 100Kbit/s #デフォルトの帯域制限量を書いておきます


pipe 2 config bw 100Kbit/s


pipe 3 config bw 100Kbit/s


add pipe 1 ip from any to any xmit em1 out bridged


add pipe 1 ip from any to any recv em1 out bridged


add pipe 2 ip from any to any xmit em2 out bridged


add pipe 2 ip from any to any recv em2 out bridged


add pipe 3 ip from any to any xmit em3 out bridged


add pipe 3 ip from any to any recv em3 out bridged


allow ip from any to any



以上を書いて再起動すると帯域制限つきHUBになっています。


帯域制限を変更するとき


em1=(VirtualBoxで2番目のNIC)の帯域を変更するときは以下のようにします。


同様にpipeの後の数字を変更すればem2,em3も変更できます。



ipfw pipe 1 config bw 100Kbit/s



障害発生時


VirtualBox上で運用している場合、例えばあるPCをem2からem3につなぎ替えたりすると通信できなくなってしまいます。(2011/3/4現在)


そういう障害が起きたときは以下のようにしてそれぞれのポートを初期化します。



ifconfig em1 down


ifconfig em1 up


ifconfig em2 down


ifconfig em2 up


ifconfig em3 down


ifconfig em3 up



ふつうUpLinkがわでそのようなつなぎ替えをすることはないのでem0はする必要はほぼないでしょう。





P.S.


暇見てもシェルスクリプトも整備して、仮想イメージ公開してもいいかもね・・・需要があれば





1 件のコメント:

  1. こんにちは。VM上でブリッジを作りたくていろいろ検索しているうちにここにたどり着きました。
    書いてくださっているように設定してもどうしてもブリッジが機能しません
    VartualBoxは4.3.6です
    FreeBSDは9.2です
    ホストOSはWindows7です
    ・試しに、ホストOS上でブリッジしたら機能しました
    ・試しに、ゲストOSをXPにしてみたら、やはり機能しませんでした
    ・VartualBoxではブリッジアダプタを選択しています。

    なにを見落としているのか、お気づきでしたら、アドバイスをくださいませm(")m
    力つきました・・・

    返信削除