基本的にはイベント会場で臨時に使う事を考えてます。
具体的には、会場にネットを解放しているけれどもネット中継もやりたい。
ネット中継がカクカクするのは困るので、一般側の回線は帯域をしぼりたい。
という時に使います。
で、既存ネットワークの設定をできるだけいじらずに導入する事を目的にしてます。
なので、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.
暇見てもシェルスクリプトも整備して、仮想イメージ公開してもいいかもね・・・需要があれば