イーサネットのセカンドポートの有効な活用法Validation Case Study(1/2 ページ)

カタログスペックにだまされて2つのイーサネットポートを持つPCを購入したはいいが、結局1つしか使っていない――そんな読者のために、2つ目のイーサネットポートを活用する方法をお知らせしよう。

» 2008年05月16日 13時00分 公開
[Nathan-Willis,Open Tech Press]
SourceForge.JP Magazine

 最新のPC本体やマザーボードを購入すると、イーサネットポート2基ないしイーサネットポート/Wi-Fiポート各1基という2つのネットワークインタフェースがついてくるケースも多くなっている。こうしたセカンドポートの標準装備というのも、メーカ側にすれば製品カタログの仕様欄に記載する項目を増やす安価な方法なのかもしれないが、ユーザー側からすれば実際何に使用すればいいのか分からないというのが実状だろう。しかしあなたがLinuxユーザーであれば、具体的な使い道は幾つも存在しているのだ。

 ごく安易な発想をすると、セカンドポートに2本目のイーサネットケーブルを接続すれば回線速度を2倍にできそうなものだが、実際にはLinuxのネットワーキング用サブシステムに双方のアダプタを認識させた上で、2つのポートでトラフィックの送受信をさせる方法をOSレベルで指定しなくてはならない。後者の設定に関しては複数の方法が存在し、実のところ本稿もそのための手法を説明するために書き起こしたものである。

 この場合に取り得るオプションは複数存在するが、それらの選択肢は、ネットワークデバイス間でのトラフィックルーティングや透過的なリンクなど、ネットワークに接続されたデバイス(コンピュータ、ルータ、そのほかの機器)間でどのような形態の交信を許すかという観点で分類することができる。ただし最もシンプルな状況を確立するには複雑なセットアップが必要というケースも珍しくはないので、最終的にどのオプションを利用するかは、すべての候補を検討し終わってから選択すべきだろう。

ボンディング

 ネットワーク的な観点から最もシンプルなオプションはチャンネルボンディング(channel bonding)ないしポートトランキング(port trunking)と呼ばれる運用法で、これはコンピュータに装備された2つのインタフェースを1つのインタフェースとして振る舞わせる技術であり、実際にほかのアプリケーションからはそのように見えるようになるのである。

 2つのインタフェースを論理的に1つにまとめることは、ロードバランス(負荷分散)やフォールトトレランス(耐障害性)の能力を与えてくれる。トラフィックをどちらのインタフェースから送出するかはOSが選択できるし、一方に障害が発生した場合は他方へフェイルオーバさせることもできる。あるいはDSLと光ファイバといった複数のワイドエリアネットワーク(WAN)接続の間でトラフィックを分散させることも可能であり、こうしたロードバランスのペアとしてはダイヤルアップも使えるし、あるいは不用心な隣人の使用しているWi-Fiに便乗するといった手口もありかもしれない。

 2つのイーサネットインタフェース間でのボンディングを行わせるには、各自のカーネル用にコンパイルされたボンディング用モジュール(最新のディストリビューションであれば通常そのまま使用できるはずである)およびifenslaveパッケージ(標準ユーティリティの1つだがディストリビューションによってはRPMないしAPTリポジトリからのインストールが必要)を取得する必要がある。

 一般的に2つのポートを装備したマザーボードの場合、イーサネットアダプタはeth0およびeth1という名称にされているので、ここでの設定例でもそれに従うことにしよう。ifenslaveをインストールしたら次に「sudo ifdown eth0」および「sudo ifdown eth1」を実行して、これら2つのイーサネットアダプタをオフラインにしておく。次にmodprobeを用いて、ボンディング用モジュールをLinuxカーネルに読み込ませる。このモジュールについてはmodeおよびmiimonという2つのオプション指定が重要な意味を持っており、modeはボンドの種類を(ラウンドロビンやフェイルオーバなど)、miimonはリンクに対する障害検出の頻度(単位はミリ秒)を規定する。例えば「sudo modprobe bonding mode=0 miimon=100」という指定は、2つのイーサネットアダプタ間で交互にネットワークパケットの送信を行うラウンドロビン(round-robin)モードを設定している。またmiimon値を100とするのは標準的な指定で、必要であれば各自のネットワークに適した値に調整すればいい。

 実際のボンド作成(ここでは便宜上bond0と呼ぶ)を行うには「sudo ifconfig bond0 192.168.1.100 up」を実行してボンドへのIPアドレス割り当てを実行した後、「ifenslave bond0 eth0」および「ifenslave bond0 eth1」を実行して、物理イーサネットインタフェースに接続をさせる。

 ここで用いたラウンドロビンは、2つのアダプタ間で行うロードバランス方式としての汎用的なモードであり、この場合は一方に障害が発生しても他方を使ってリンクを維持し続けることができる。そのほかにもmodeオプションには6つのモードが用意されており、これらはそれぞれ次のような特徴を備えている。

  • モード1 アクティブバックアップ(active backup):一方のアダプタのみを使用し、そこでの障害発生時には他方に切り替える
  • モード2 バランスXOR(balance XOR):送出するパケット群をアダプタ間で分割することでトラフィックのロードバランスを試みるが、特定のあて先に関しては可能な限りどちらか一方のアダプタを使用し続けるようにする
  • モード3 ブロードキャスト(broadcast):トラフィックの送出をすべてのインタフェースで行うようにする
  • モード4 ダイナミックリンクアグレゲーション(dynamic link aggregation):複雑なアルゴリズムを用いて、速度そのほかの設定を基に複数のアダプタを1つにまとめる
  • モード5 アダプティブトランスミットロードバランシング(adaptive transmit load balancing):現在の状況を基にして、送出するトラフィックを臨機応変に分散させる
  • モード6 アダプティブロードバランシング(adaptive load balancing):これもモード5と同様の処理を行うがARPアップデートを送信することで、受信する側のトラフィックについてのロードバランスも試みる

 ホームユースの場合、こうした複雑なモードを使用する機会はほとんどないだろう。そうではなく、多量のネットワークトラフィックに対する管理を行いたいという場合は、ボンディング用ドライバについてのドキュメントを参照して頂きたい。なお一般のユーザーがボンディングを使用することで得られるものは、ロードバランスやフォールトトレランスといった能力であり、リンク速度に関するメリットはそれほど期待できない。例えば2つのWANリンク間でボンディングを施すと、ロードバランスやフォールトトレランスを行えるようにはなるが、個々の接続(Webページ用のHTTPリクエストなど)はどちらか一方のルートを使うだけなので、アップストリーム側のスループットが2倍になる訳ではないのである。

ブリッジング

 先に見たボンディングは、同一マシンの有す2つのネットワークアダプタを論理上1つのアダプタとして振る舞わせるというソリューションである。そのほかのソリューションとしては、新規ないし異なるサービスをローカルネットワークに接続する際に2つのアダプタを個別に使用するという運用法も存在する。

 例えばブリッジングは、2つのネットワークアダプタを単純なハブで接続されているかのようにリンクさせて、両者の間でイーサネットフレームを自由に流すという技術である。この場合一方のインタフェースで受信されたトラフィックはすべて他方からも流されるようになる。

 ブリッジのセットアップではコンピュータ本体をネットワークにまったく関与しない形にすることもでき、その場合このコンピュータは、機能に比して高額なイーサネットリピータとして使用されることになる。しかし、ポート間でトラフィックをブリッジさせると同時にインターネットへのアクセスも行うというのが通常の使用法であろう。いずれにせよそのための準備は特に難しいものではない。

 ブリッジングを行うために必要となるbridge-utilsパッケージは、最近のLinuxディストリビューションであれば標準コンポーネントの1つとして用意されているはずで、これにはbrctlというコマンドラインユーティリティが含まれている。

 2つのネットワークアダプタ間でブリッジ作成を行うには、まずifdownコマンドにて双方のアダプタをオフラインにしておく。ここで想定しているeth0/eth1というペアの場合は、コマンドラインから「sudo ifdown eth0」および「sudo ifdown eth1」を実行すればいい。

 次に「sudo brctl addbr bridge0」によるブリッジ作成を行う。ここで使用している addbrは“仮想的”なネットワークアダプタをbridge0という名称で新規に作成するためのコマンドである。その後addifを用いてブリッジを物理的なネットワークアダプタに接続させる必要があり、ここでの設定例では「sudo brctl addif bridge0 eth0」で1つ目のアダプタ、「sudo brctl addif bridge0 eth1」で2つ目のアダプタを接続させればいい。

 以上の準備が終了したら、物理的に存在する通常のイーサネットカードの場合と同様に、bridge0という仮想的なアダプタの有効化をしなければならない。IPアドレスの割り当てについては、「sudo ifconfig bridge0 192.168.1.100 netmask 255.255.255.0」といったコマンドで静的に割り当てることもできるが、「sudo dhclient bridge0」によってDHCPから必要な設定を取得させるようにしてもいい。

 すべてが問題なく設定されていれば、イーサネットポートを介してコンピュータ、ハブ、スイッチ、そのほかのデバイスを必要な数だけ接続させることができ、これらのデバイス同士は相互に通信できるようになっているはずである。ただしこの利用法については、多量のトラフィックを扱う環境の場合、2つのアダプタで行うイーサネットフレームのやり取りにコンピュータ処理能力の多くが費やされるというデメリットも潜んでいる。

       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ