FreeBSD でブリッジを構築2009年02月24日 14時01分31秒

FreeBSD で複数のネットワークインターフェースをまとめてブリッジを作ることが出来る。あるインターフェースに届いたパケットをそのまま他のインターフェースに受け流す事が出来る。

いつだか詳しくは分からなかったのだが、この方法が変わっているようだ。検索してみたところ、sysctl を使った方法が幾つか紹介されていたが、7.1-RELEASE では既に過去の物になって、動作しなかった。

こういうアプリケーション寄りではなく、システム寄りの設定の場合は、ハンドブックが一番の情報元なることが多い。 31.5 Bridging にそのまま載っていた。そちらの記事の内容が良いので、ほぼそのまま翻訳した構成にした。7.1-RELEASE 現在では、ifconfig を使ってブリッジを作成できる。31.5.4 Enabling the Bridge に当たる部分になる。検索したところ、sysctl を使った設定方法が幾つか出てきたが、既に過去のものになったみたいだ。

ifconfig でインターフェースを複製し、ブリッジを作る事が出来る。bridge カーネルモジュールは自動的に読み込まれる。


# ifconfig bridge create
bridge0
# ifconfig bridge0
bridge0: flags=8802 metric 0 mtu 1500
        ether 96:3d:4b:f1:79:7a
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
        root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0

bridge インターフェースが作られ、Ethernet アドレスは自動的に割り当てられる。maxaddr はブリッジが転送先として保持する MAC アドレスの最大数を表し、timeout は最後に観測された時から何秒後まで情報を保持するかを表す。他の値は、Spanning Tree に使われる。

bridge インターフェースに、ネットワークインターフェースを追加する。この時、インターフェースは有効にされている必要がある。


# ifconfig fxp0 up
# ifconfig fxp1 up
# ifconfig bridge0 addm fxp0 addm fxp1 up

原文だと、ifconfig upifconfig bridge0 よりも後になっていたが、この順だと正しく動作しない場合があった。どうせ有効にするのだから、ブリッジに追加する前にやっておいた方が良いみたいだ。

これで、fxp0 と fxp1 間の Ethernet フレームが相互に転送される。/etc/rc.conf で同様の事をやるには以下のように記述する。


cloned_interfaces="bridge0"
ifconfig_bridge0="addm fxp0 addm fxp1 up"
ifconfig_fxp0="up"
ifconfig_fxp1="up"

もしブリッジを作成している機械で、brigde インターフェースに IP アドレスを割り当てる事も出来る。dhcp を使ったり、静的に割り当てる事が可能だ。


# ifconfig bridge0 inet 192.168.0.1/24

IPv6 も割り当てる事が出来る。

七、八年前にやったときは随分と手間が掛かった記憶が残っている。NAT などの設定も含めてだったからかも知れないが。しかし、随分と簡単にブリッジが出来る様になったものだ。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/02/24/4137825/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。