1. どのように動作するか?

2つのイーサネット LAN がともにインターネットに接続していれば、 LAN 間のトラフィックを透過的にブリッジしてイーサネット LAN を結合できます。

"本物の"ブリッジングを行えるわけではなく、Linux がルーティングできる第三層のプロトコルをブリッジすることしかできませんが、 これでイーサネットのトラフィックがブリッジされているように見えます。 2つのイーサネットブリッジにより、IP や IPX のトラフィックをブリッジ できます。それ以外の第三層プロトコルに関しては、独立した LAN 間のトラフィックを透過的にブリッジすることはできません。 他のプロトコルをブリッジできるかどうか判断するには、 この文書の残りを読んでください。

1.1. 2つの LAN 間のイーサネッ トトラフィックを IP でブリッジング

以下の環境を想定します:
PC1   (192.168.0.1  /24)--|
PC3   (192.168.0.3  /24)--|
PC5   (192.168.0.5  /24)--|--[ eth0 - bridge_1 - eth1 (195.0.0.1) ]

PC253 (192.168.0.253/24)--|              
                                         | (192.168.0.2  /24) PC2
                                         | (192.168.0.4  /24) PC4
[ (192.0.0.1) eth1 - bridge_2 - eth0 ] --| (192.168.0.6  /24) PC6

                                         | (192.168.0.254/24) PC254

bridge_1 と bridge_2 が Linux ブリッジで、それらはインターネットインタフェースである eth1 で外部接続しています。よって 195.0.0.1 と 192.0.0.1 は、ISP から与えられた 有効なインターネットアドレスなら何でもかまいません。

では、以下のことを行います:

  1. カーネル 2.2 もしくは 2.4 の入った Linux マシンを2台用意してください。 カーネルをコンパイルする際に PPP と Advanced Router を有効にします。 また、iproute2 パッケージを適切にインストール する必要もあります。iproute2 に関する情報は、 カーネルの Configure.help における Advanced Router の項目のコメントにあります。 さらに以下のユーティリティも必要です:

    以上のソフトウェアは http://www.freshmeat.net でも見つけられます。

    MS Chap と MS Encryption (MPPE) を行いたければ、pppd とカーネルに特別なパッチが必要であることを憶えておいてください。 パッチの入手とインストール方法についての解説は、 PoPTop のマニュアルを参照ください。

  2. ルータをインターネットに接続するか、さもなくば IP 以外のプロトコル でなければどんなプロトコルでもいいですから、 二点間の通信を確立してください。

  3. 二点間に PPTP トンネルを張ってください。PoPToP (サーバ側)や pptp (クライアント側)のマニュアルに設定例があります。

  4. ここまでで2つのブリッジの間に IP トンネルが張れたはずです。 暗号化されていることもあるでしょう (PPP のマニュアルを参照)。ブリッジングの設定を行いましょう。

  5. ここでのブリッジは実際にはルータなので、ブリッジ上で以下のコマンドを 走らせる必要があることをお忘れなく(bridge_1 と bridge_2 を、ブリッジ間の PPTP トンネルのそれぞれの終端に割り当てられた IP アドレスだと仮定):

         bridge_1$ip route add 192.168.0.2 via bridge_2
         bridge_1$ip route add 192.168.0.4 via bridge_2
         bridge_1$ip route add 192.168.0.6 via bridge_2
                 
         bridge_1$ip route add 192.168.0.254 via bridge_2
         bridge_1$ip route add 192.168.0.255 via bridge_2
            

    もう片側では以下のコマンドを実行します:

         bridge_2$ip route add 192.168.0.1 via bridge_1
         bridge_2$ip route add 192.168.0.3 via bridge_1
         bridge_2$ip route add 192.168.0.5 via bridge_1
                  
         bridge_2$ip route add 192.168.0.253 via bridge_1
            

    こうして各ブリッジに、どの端末が相手側にいるのかを指定します。 昔ながらの route コマンドでも同じことができます。 以下のような感じです:

         bridge_1$route add -host 192.168.0.2 gw bridge_2
         bridge_1$route add -host 192.168.0.4 gw bridge_2
         bridge_1$route add -host 192.168.0.6 gw bridge_2
                  
         bridge_1$route add -host 192.168.0.254 gw bridge_2
         bridge_1$route add -host 192.168.0.255 gw bridge_2
            

    もう片側では以下のコマンドを実行します:

         bridge_2$route add -host 192.168.0.1 gw bridge_1
         bridge_2$route add -host 192.168.0.3 gw bridge_1
         bridge_2$route add -host 192.168.0.5 gw bridge_1
                   
         bridge_2$route add -host 192.168.0.253 gw bridge_1
            

    もう一度注意しておきますが、 bridge_1 と bridge_2 は ISP から付与された IP アドレスではなく、 あなたが PPTP トンネルの各終端に割り当てた IP アドレスです。

  6. これでブリッジが2つでき、いずれのブリッジも特定の IP アドレスがある 場所を把握しています。しかし、リモートネットワーク宛てのトラフィックを ローカルのブリッジに送信するようコンピュータに指定するにはどうすれば よいでしょう。その場合 tarpd が必要になります。

    tarpd は非常にシンプルなデーモンであり、 特定の IP アドレス宛ての ARP リクエストに応答します。各ブリッジ上で tarpd を走らせ、相手側の端末に割り当てられた IP アドレスのリストを指定するだけでよいです。

    例えば、上に示した二つのブリッジの場合、以下を実行します:

         bridge_1$tarpd eth0 192.168.0.2 255.255.255.255  \
                             192.168.0.4 255.255.255.255  \
                                      
                             192.168.0.254 255.255.255.255
            

    もう片側では以下のコマンドを実行します:

         bridge_2$tarpd eth0 192.168.0.1 255.255.255.255  \
                             192.168.0.3 255.255.255.255  \
                                      
                             192.168.0.253 255.255.255.255
            

    各ブリッジにリモート設定を128組行います(IPアドレスとマスクアドレス。 tarped を混乱させないように、マスクアドレスは 255.255.255.255 にすべき!)。

  7. 通信がブリッジされるのをお楽しみください!

1.2. 他のプロトコルはどうでしょう?

実のところ、他のプロトコルのルーティングについては何も言えません。 私は利用したことがないのです。しかし、他のプロトコルに精通していれば、 この文書で示したようにブリッジすることは難しくはないはずだと思います。