2003-05-15 更新

Bridge(ブリッジ)の構築


Bridge(ブリッジ)を使うことは現在は少なくなってきたかもしれません。 Bridgeは2つ(複数)の分離されたLANセグメントを接続し、単一のLANとして働かさせる機能を持ちます。 これだけではリピータHUBとの差が無いように思えますが、ブリッジの場合にはそれぞれのLANセグメントにあるMACアドレスを管理しているので、セグメントAから発生したパケットがセグメントAの他のPC宛のパケットであった場合にはセグメントBにはそのパケットを流さないので不要なトラフィックを避けることが可能です。 また、ネットワーク上にトラフィックゲート(ボトルネック)を設けて、強制的なトラフィック/アクセスコントロールを行いたい場合には便利な機能です。(通常はボトルネックは避けるような設計を行うのですが、アクセスコントロールを行ってセキュリティを高めたような場合には有効な方法です)
Linux2.4(2.3.47以降)にはブリッジのためのコードがカーネルのソースコードに含まれていますが、普通はこれを無効にして構築されているので、ブリッジ機能を有効にしてカーネルを再コンパイルします。
なお、カーネルの再構成に際してカーネルパラメータを変更する必要があります。このとき、X-Windowで変更する方が楽なので、X-windowを起動しておいてください。

(補足)
RedHat7.2の標準カーネルは、既にBridgeが有効になっているようなので、カーネルの再コンパイルは不要のようです。
1. カーネルの再コンパイル
2. ブリッジを有効にする
3. 関連情報

1.カーネルの再コンパイル

# cd /usr/src/linux
# make xconfig (X-windowを使わないなら make maneconfig)
  :: ここでブリッジの機能を有効にする、有効にするには、
  :: "Networking Options"カテゴリの中の"802.1d Ethernet Bridge"を有効にする
  :: 私の環境のサンプル(/usr/src/linux/.config)を添付しておく。
# make dep
# make clean
# make bzImage
# make modules
# make modules_install

これで、/usr/src/linux/arch/i386/boot ディレクトリに「bzImage」というカーネルが作成されるのでこれを,/bootにコピーする。コピーする際には、新しいカーネルであることが直ぐにわかる様にするために、標準のカーネルである「vmlinuz」以外の名前をつけると良いだろう。

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-brg

このカーネルでブートが可能なようにLILOの設定を変更する。

# vi /etc/lilo.conf
 (次の行を追加する。)

Image=/boot/vmlinuz-brg
label=Linux-Bridge
root=/dev/hda1
read-only

上記の行を追加したなら、

# lilo

を行い、LILOにこのカーネルを認識させる。
以上でカーネルとして、vmlinuz-brgでブートできるようになる筈である。システムをリブートして、LILOの起動画面で"Linux-Bridge"を選択してシステムを起動してみてください。

2.ブリッジを有効にする

ブリッジ機能持ったカーネルで起動したら、これを有効にする。
ブリッジを使うためには、brctlというコマンドを使う。brctlは「bridge-utils」というパッケージに含まれている。これは次の場所から入手できる。

 bridge-utils : http://bridge.sourceforge.net/

2001年11月17日現在、bridge-utils-0.9.3.tar.gzが最新であるので、これを入手したら解凍してコンパイルする。

# tar zxvf bridge-utils-0.9.3.tar.gz
# cd bridge-utils
# make
# cd brctl
# cp brctl* /usr/local/bin

以上で/usr/local/binにbrctlとbrctldというコマンドが作成される。

brctlができたなら、さっそく先ほどのカーネルでシステムを起動してブリッジを有効にしてみよう。

# brctl addbr br0            ------(1)
# brctl addif br0 eth0         ------(2)
# brctl addif br0 eth1
# ifconfig br0 192.168.1.254 up    ----- (3)
# ifconfig eth0 0.0.0.0 up
# ifconfig eth1 0.0.0.0 up

としてeth0とeth1のネットワークインターフェースをブリッジ化する。上記の設定では、ブリッジ化されたインターフェースとして、「br0」という仮想のデバイスが作成され、これに対してIPアドレスを与えている。(IPアドレスを与える必要がない無い場合には(3)の箇所を、「ifconfig br0 up」にすれば良い。この場合には、ネットワーク越しに他のマシンからブリッジ化したマシンへ接続ができなくなる。:セキュリティ的には良いが...)

一応、各コマンドを簡単に説明しておくと、
 (1) ブリッジ用の仮想のデバイスを”br0”という名前で作成
 (2) (1)の仮想のデバイスへ実際のLANインターフェースのeth0とeth1をバインド
 (3) (1)の仮想デバイスへIPアドレス(192.168.1.254)を与え、インターフェースを活性化(UP)する

上記のコマンドを実行後、数秒すればeth0とeth1のブリッジが行われて、それぞれのセグメントが透過できる筈である。
3.関連情報(Link)
Linux Bridge STP HOWTO : http://www.linuxdoc.org/HOWTO/BRIDGE-STP-HOWTO/
bridge-utils : http://bridge.sourceforge.net/

Squidの構築 : http://squid.robata.org

©robata.org.