FreeBSDのdummynetでネットワーク遅延環境を構築する(bridge編)

FreeBSD 4系とか5系とかだとカーネル再構築が必要なようですが、8.2Rでは必要ありません。
ネット上には古い情報が多かったので、FreeBSD 8.2Rでのdummynet設定メモです。

実現したいこと

    • 高遅延な環境を構築する
    • インライン(ブリッジ)で接続する

構成

    • OS: FreeBSD 8.2R(x86_64)*1
    • H/W: NICを2枚挿していて、FreeBSDで認識していること
    • 構成図: 以下の感じ

  [Client PC(192.168.0.10)] <-----> [(bge0) FreeBSD (bge1)] <-----> [Client PC(192.168.0.20)]

設定内容

以下では、FreeBSD上のNICを"bge0"と"bge1"として記載しています。
(/etc/rc.conf)

cloned_interfaces="bridge0"
ifconfig_bridge0="addm bge0 addm bge1 up"
ifconfig_bge0="up"
ifconfig_bge1="up"
firewall_enable="YES"
firewall_type="/etc/ipfw.conf"
dummynet_enable="YES"

(/etc/ipfw.conf)

add 10 pipe 1 ip from any to any
pipe 1 config delay 100ms   # 100ms遅延させる
add 65534 allow all from any to any

(/etc/sysctl.conf)

net.link.bridge.ipfw=1


OS再起動後、bridgeインタフェースが作成されていること、ipfw設定が適用されていることを確認します。

# ifconfig -a
# ipfw show
# ipfw pipe show

Client PCから対向側Client PCへ"ping"を実行し、遅延することを確認します。
上記設定の場合、インタフェースのINとOUTのそれぞれで遅延が発生するので、200ms程度の遅延が発生します。

*1:インストールしたDistributionは、"Developer"です