  Bridging mini-Howto
  Christopher Cole  cole@coledd.com
  v1.11, 7 September 1998
  柴田(ひ)＠福岡 shibata@opost1.netspace.or.jp と 早川 仁
  cz8cb01@linux.or.jp
  v1.11j, 1999年 6月26日

  このドキュメントでは ethernet ブリッジをどのようにセットアップするかに
  ついて説明しています。ethernet ブリッジとはサブネットのトラフィック量
  を減少させるためにデータパケットをコントロールするデバイス（機器）のこ
  とです。通常ブリッジは、多くの通信がグループ内だけで行われ多少の通信を
  他のグループと行う、２つのグループの間に置かれます。（訳注：このグルー
  プは一般的にセグメントと表現されます）
  ______________________________________________________________________

  目次

  1. はじめに
  2. セットアップ
  3. よくある質問と答え
  4. 翻訳について

  ______________________________________________________________________

  1.  はじめに

  たとえば、同一のネットワーク上にある Macintosh マシンのグループと Unix
  マシンのグループを考えてみましょう。それぞれのグループ内での通信は非常
  に多く、一方のグループがネットワーク上に流すトラフィックが、他方のグル
  ープ内で通信しようとしているマシンにコリジョンを引き起こしてしまいま
  す。これら 2 つのコンピュータグループの境目に、ブリッジを置くことがで
  きます。ブリッジは、一つ一つのデータパケットの宛先を調べ、そのパケット
  をもう一方の Ethernet セグメントに送るかどうかを決定する働きをします。
  結果としてコリジョンが減少し、ネットワークの使用率は低下して速度が向上
  することになります。

  （訳注：ethernet の世界では、セグメント上の全マシン（実際には NIC）が
  全パケットを受信し、自分か全員宛（ブロードキャストメッセージ）以外のパ
  ケットを破棄するようになっています。ですから、仮にＭＡＣとＵＮＩＸが１
  つのセグメント上にあったとすると、ＭＡＣ→ＭＡＣといった通信であっても
  ＵＮＩＸもこのパケットを受信してしまいます。２台のマシンから同時にパ
  ケットを送信した場合コリジョンとなり、両者のパケットは破棄されてしまい
  ます。ブリッジを立てることによって、セグメント内ではコリジョンは発生し
  ますが、セグメント間のトラフィック量は減少することになります）

  2.  セットアップ

  1. ``Bridge Config''の入手

       http://mirror.nucba.ac.jp/mirror/stam-
       pede/pre-0.90/source/net/BRCFG/source/

  2. 使用するマシンで複数の ethernet を扱えるように /etc/lilo.conf に次
     の行を追加し、lilo を再実行します。

  append = "ether=0,0,eth1"

  3枚のNICでブリッジを構成するのであれば、かわりとして下記の設定を使いま
  す。

       append = "ether=0,0,eth1 ether=0,0,eth2"

  4 枚以上の NIC を使うのであれば、さらに ether の指定を追加すればいいで
  しょう。標準の Linux Kernel の動作としては、1 枚の NIC が検出された時
  点でそれ以上の検出は行いません。上記の設定は 1 枚目の NIC が検出された
  後も引き続き NIC の検出を行わせるための指定です。

  その他にもブート時のパラメータ設定で(NIC が 2 枚の時は)下記のようにも
  出来ます。

       linux ether=0,0,eth1

  また NIC が 3 枚の場合は、次のようになります。

       linux ether=0,0,eth1 ether=0,0,eth2

  3. BRIDGING を有効にして、kernel の再構築を行います。

  4. 通常ブリッジは IP アドレスを持たないものです。持たせることも出来ま
     すが、普通は IP アドレスを必要としません。(RedHat の場合)ブリッジか
     ら IP アドレスを取り除くには /etc/sysconfig/network-scripts/ ディレ
     クトリの ifcfg-lo0 を、ifcfg-eth0 と ifcfg-eth1 としてコピーしま
     す。

     この 2 つのファイルの中で ``DEVICE=lo''と書かれている行を探して、そ
     れぞれ ``DEVICE=eth0'' と ``DEVICE=eth1''に変更します。その他のディ
     ストリビューションでこれとはちょっと違うでしょうから、（そのディス
     トリビューションでの）適切な方法で行ってください。

     （訳注： Slackware では、/etc/rc.d/rc.inet1 を編集することになると
     思います）

     3 枚以上の NIC でブリッジを構成するのであれば、同様に適切な設定を
     行ってください。

  5. リブートします。新しい kernel はブリッジ機能をサポートしています。
     また NIC に IP アドレスが割り振られていないことに注意してください。

  6. システムが再起動したら、NIC を「無差別透過：promiscuous」モードにし
     ます。このモードではすべてのパケットをそれぞれの NIC で透過させま
     す。

       ifconfig eth0 promisc ; ifconfig eth1 promisc

  これにより、ブリッジを構成するためにネットワークセグメントに接続されて
  いる全ての NIC は、無差別透過モードとなります。

  7. brcfg プログラムでブリッジングを ON にします。

       brcfg -ena

  8. 各 NIC でのトラフィックが異なっていることを確認します。

       tcpdump -i eth0    (こっちのウインドウで見る)
       tcpdump -i eth1    (別のウインドウで見る)

  9. sniffer(スニッファー)や tcpdump を他のマシンで動かし、構築したブ
     リッジで正しくセグメントが分離されている事を確認します。

  3.  よくある質問と答え

  1.

     Question

          ioctl(SIOCGIFBR) failed: Package not installed

     と言うメッセージが出ます。これはどういう意味ですか?

     Answer
        kernel のブリッジ機能を有効にしていません。バージョン 2.0 以降の
        新しい kernel を入手して、BRIDGING を有効にしてカーネルを再構築
        しましょう。

  2.

     Question
        ブリッジの一方のセグメントのマシンから、他方のセグメントのマシン
        に ping できません。

     Answer

     o  ``brcfg -ena''として、ブリッジ機能を有効にしましたか?  (brcfg
        は``bridging is ENABLED'' と表示するはずです)

     o  NIC を「無差別透過モード」にしましたか?  (``ifconfig''で確認して
        見てください。``PROMISC''フラグがそれぞれの NIC に表示されるはず
        です)

     o  複数のメディア(10Base-5/2/T)を持つ NIC の場合は、正しいものが有
        効になっていますか? NIC と一緒に付いてきた設定プログラムを使用す
        る必要があるかもしれません。

  3.

     Question
        ブリッジから telnet / ftp ができません。なぜでしょうか?

     Answer
        ブリッジの NIC には IP アドレスが割り振られていないからです。ブ
        リッジはネットワーク上の透過的なものですから。

  4.

     Question
        routing(経路制御)にあたって何をすればいいでしょうか?

     Answer
        何もいりません！ kernel 内のブリッジに関するコードですべての経路
        制御学習機能が実現されています。ブリッジによって学習された
        Eternet アドレスを見るには brcfg プログラムをデバッグモードで動
        かしてください。

          brcfg -deb

  5.

     Question
        ブリッジは動いているようですが、なぜブリッジが ``traceroute'' で
        パスの一部分として見えないのでしょうか?

     Answer
        元来のブリッジの意味合いから、``traceroute'' ではブリッジをパス
        の一部分として見せるべきではありません。ブリッジはネットワーク上
        の透過的な部品（ケーブルなど）と同様ですから。

  6.

     Question
        kernel 再構築時に IP_FORWARD を有効にする必要がありますか?

     Answer
        いいえ。ブリッジ機能を実現する kernel 内のコードはパケットを通し
        ているだけです。IP_FORWARD はそれぞれの NIC に IP アドレスを割り
        振ったゲートウエイとして動作させるためのものです。
  7.

     Question
        なぜ brcfg によって返されるポート 1 とポート 2 のイーサネッ
        ト(MAC)アドレスは同じなのですか?  異なるはずではないのですか?

     Answer
        いいえ。ブリッジとして動作させているすべてのポートはブリッジプロ
        グラムによって同じイーサネットアドレスが割り振られます。

  8.

     Question
        BRIDING はカーネルコンフィグの際に出てこないようですが、どのよう
        に有効にすればよいのでしょうか?

     Answer
        ``Prompt for development and/or incomplete code/drivers
        (CONFIG_EXPERIMENTAL) [Y/n/?]'' に対して 'Y' を設定することによ
        り表示されます。

  9.

     Question
        （4 個以上の）多くのハブがカスケード接続されている場合、ethernet
        上でタイミングの問題を引き起こしますが、ハブがそのように積み重
        なっているサブネット中にブリッジが存在する場合、どのような影響が
        ありますか?  （訳注：物理的な（電気信号的な）仕様により、ハブは
        4 個以上カスケード接続できないことになっています。4 個までではな
        く、4 個以上です）

     Answer
        ブリッジはそのような 3/4/5 個のハブのルールを解決できます。ブ
        リッジはハブと同じ方法でパケットを扱うわけではありませんので、
        ネットワーク上でのタイミングの問題は引き起こしません。（訳注：ハ
        ブはレイヤ１（物理層）、ブリッジはレイヤ２（データリンク層）でパ
        ケットを扱います）

  10.

     Question
        ブリッジは 10Mb と 100Mb の ethernet セグメントとの間で使用でき
        るのでしょうか?  そのような使い方をした場合、早い方（100Mb）の速
        度は低下してしまわないでしょうか?  （訳注：b = bit です。ですか
        ら 10Mb = 10M bit となります）

     Answer
        始めの質問の答えは Yes です。ブリッジは 10Mb と 100Mb のセグメン
        トとを結ぶことができます。（ブリッジの）早い方のネットワークの
        NIC が 100Mb で動作するものである限り、問題ありません。100Mb
        ネットワークのホストから 10Mb ネットワークのホストへ送られたパ
        ケットは 10Mb/s の速度しか出ませんが、100Mb ネットワークの他のト
        ラフィックは 100Mb のまま動作しつづけます。

        （訳注：つまり、100Mb から 10Mb へ投げられたパケットは、ブリッジ
        で 10Mb へ送られる際に 10Mb で動作することになります。よって
        100Mb のホスト→ブリッジの速度、及び 100Mb のホスト→ 100Mb のホ
        ストは 100Mb で動作するということです）

  4.  翻訳について

  当文書は柴田(ひ)＠福岡氏の翻訳した 1996/08/23 版を、早川が最新版
  （1998/09/07）の LDP で更新したものです。

  日本語訳：柴田(ひ)＠福岡 <shibata@opost1.netspace.or.jp> (1997/01/05)
  日本語訳：早川 仁  <cz8cb01@linux.or.jp> (1999/06/26)

