ネットワークボンディング(Linux)

概要

  • 複数のネットワークインターフェイスを1つに結合すること
    • 1つのMasterデバイスと複数のSlaveデバイスからなる
  • 基本的には、データ送信をいくつかのポートに割り振って行うことで、負荷分散する
  • driverがデバイスをコンフィギュレーションする(モード等を設定して使えるようにする)ことで可能になる
  • データ受信の時の挙動、スイッチとの関係性については追加調査予定

Bonding設定を行う手順のイメージ(詳細は省略)

  • LinuxでBondingを形成する場合、ボンディング カーネル モジュールをインストールし、modprobeコマンドでボンディング ドライバがロードされているかどうかをテストする必要がある
  • 次にip link addコマンドやip link setコマンドでNICの追加・設定を行う
    • ただし、このip linkコマンドを用いた方法は再起動すると初期化される。設定を永続化するためには、インターフェイスのコンフィギュレーションファイル(/etc/network/interfaces)を手動で書き換える必要がある(その後、ネットワーキングサービスを再起動して設定を適用する)

モード別の動作

Mode 0: balance-rr (Balance Round-Robin)

  • Slaveに設定されているデバイスが順番にパケットを送信する
  • 全てのSlaveにMasterと同じMACアドレスが割り振られる
  • デフォルトのモード
  • Round-robinは、「持ち回り」のような意味

Mode 1: active-backup

  • 1つのSlaveデバイスのみactiveとなり、そのデバイスにのみ送信する
    • そのデバイスにリンク障害が検出された場合別の1つのSlaveデバイスがactiveとなる
  • fail_over_macオプションに応じてMACアドレスが割り当てられる

fail_over_macオプション

  • none(0)
    • fail_over_macが無効となり、すべてのSlaveアドレスをMasterと同じMACアドレスとする。(デフォルト)
  • active(1)
    • MasterのMACアドレスをactiveなSlaveデバイスのMACアドレスに設定する。(activeなSlaveデバイスが変更になった場合、MasterのMACアドレスも変わる)
    • MACアドレスを変更できないSlaveデバイスを使用する場合、ARPモニターに干渉するような自分のMACアドレスのブロードキャストを拒否するSlaveデバイスを使用する場合に有用なオプション。
    • activeなSlaveデバイスが切り替わった場合、GARPでMACアドレスを更新する必要がある(更新されるまで通信が中断される)。
  • follow(2)
    • MasterのMACアドレスは、bondingに最初に追加されたSlaveデバイスのMACアドレスになる。activeなSlaveデバイスが切り替わった場合、SlaveデバイスのMACアドレスはそのMACアドレス(bondingに最初に追加されたSlaveデバイスのMACアドレス)になる。
    • 複数のポートが同じMAC アドレスでプログラムされた場合に、パフォーマンスが低下するマルチポートデバイスで有用なオプション。

Mode 2: balance-xor

  • ハッシュポリシーxmit_hash_policyオプションで選択する)に基づいたハッシュ値によってアクセスを分散させる
  • 全てのSlaveにMasterと同じMACアドレスが割り振られる

Mode 3: broadcast

  • 全てのSlaveデバイスに送信する
  • 複数の完全に独立したネットワークに属するSlaveデバイスに対して、一方向の通信が必要な場合など、非常に限定的な用途向けのモード
  • 全てのSlaveにMasterと同じMACアドレスが割り振られる

Mode 4: 802.3ad (Dynamic link aggregation)

  • IEEE 802.3adのDynamic link aggregationポリシーに従う
    • Static link aggregationをLink Aggregation Group (LAG) 、Dynamic link aggretationをLink Aggregation Control Protocol (LACP)と呼んだりもする
    • LACPは、LAG を自動的に設定するための制御プロトコル
  • Speed・Duplexの設定を統一した複数のAggregation groupを作成し、activeであるGoupのslaveをすべてactiveに設定する
  • IEEE 802.3ad対応のスイッチが必要になる
  • 全てのSlaveにMasterと同じMACアドレスが割り振られる
  • Actor (ホスト) と Partner (スイッチ) は LACPDU (LACP Data Unit) を交換する
    • これらの LACPDU は、ローカルの MACアドレスをリンクするため、スニッフィングはできないが、同じL2スイッチに接続されている他のすべてのホストにMACアドレスを知られていることもあり、値の推測が簡単でLACPDUパケットをスプーフィングされる可能性がある。
      • スニッフィング:ネットワークを流れるデータを捕らえ、内容を解析して盗み見ること
      • スプーフィングは、誰かがコンピュータ、デバイス、またはネットワークを使用して、正規のエンティティになりすまして他のコンピュータネットワークをだまそうとする特定の種類のサイバー攻撃
    • ただし、いくつかのボンディング パラメータを設定するだけで、この可能性を回避できる

Mode 5: balance-tlb

  • tlbは (Adaptive) transmit load balancingの略
  • 送信トラフィックの分散をtlb_dynamic_lbの値に基づいて行う(受信時はトラフィックの分散は行わず、送信で用いたSlaveで行うが、もし障害が発生したら他のSlaveがMACアドレスを引き継ぐ)
    • tlb_dynamic_lb=1(デフォルト):各Slaveの現在の負荷に基づいて分散する
    • tlb_dynamic_lb=0ハッシュポリシーに基づいて分散する

Mode 6: balance-alb

  • albはAdaptive load balancingの略
  • balance-tlbのモードにIPv4の受信トラフィックの分散(recieve load balancing: rlb)も行うモード
  • 受信トラフィックの分散は、ARPネゴシエーションにより達成される。詳細は要調査。
    (参考:MAC・Routing・ARPテーブルの概要を理解する
    • Bonding driverはローカルシステムからARP応答を受信し、MACアドレスを上書きすることで受信トラフィックを分散させる
    • ローカルシステムがARPリクエストを送ったら、Bonding driverはARPパケットからpeerのIP情報をコピーして保存する
    • peerからARPリプライが届いたら、そのMACアドレスを取得しBonding driverからpeerに対してBondのどれか一つのSlaveデバイスのMACアドレスをアサインしてARPリプライを開始する

参考