- PR -

MACアドレスを共有する冗長化における、スイッチのMAC学習の影響

投稿者投稿内容
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-03-17 10:14
お初にお目にかかります。angelと申します。
基盤系/ネットワーク系の構築を主に手がけるエンジニアです。

以前、LinuxでNICを冗長化したシステム構築を行う際、

接続するスイッチでは、MACエージング時間を短くする

という設定を行いました。元ネタはHPのQ&Aです。

自分の中で、この理由としては、

異なるNICで同一のMACアドレスを共有する関係上、スイッチに残ったMACアドレスの情報が切り替わりに影響を与えるため

と納得したのですが、ここで他の疑問が浮かんできました。

HSRP(VRRPも?)・NSRPやBIG-IPの独自方式等でアクティブ-スタンバイの冗長化を行う際、MACアドレスを対象の機器間で共有する方式が取れるようなのですが、これらではスイッチのMAC学習の影響を考慮する必要はないのでしょうか?
各機器のマニュアルで、接続するスイッチの設定について触れている箇所を見つけたことが無いため、判断をつけかねている状況です。

構成としては次のような図を想定しています。
コード:

┌─┐ ┌─┐
│イ├─┤ロ│ イ・ロ:冗長化を行うルータ・F/W・L/B等
└┬┘ └┬┘     ※MACアドレスを共有する冗長化、アクティブ-スタンバイ構成
 │   │
┌┴┐ ┌┴┐
│ハ├─┤ニ│ ハ・ニ:L2スイッチ
└─┘ └─┘


なお、冒頭で申し上げた、LinuxでのNIC冗長化は次のような構成でした。
コード:

┌───────┐
│ LINUX │ イ・ロ:冗長化を行うNIC
│┌─┐ ┌─┐│     ※Linux bondingドライバの“active-backup”モード使用
└┤イ├─┤ロ├┘      miimonによりリンクを監視
 └┬┘ └┬┘
  │   │
 ┌┴┐ ┌┴┐
 │ハ├─┤ニ│ ハ・ニ:L2スイッチ
 └─┘ └─┘     ※MACエージング時間を極限まで短くしている


以上、よろしくお願い致します。

※何度か編集したのですが、図が見辛くて申し訳ないです。
[ メッセージ編集済み 編集者: angel 編集日時 2005-03-17 10:24 ]

[ メッセージ編集済み 編集者: angel 編集日時 2005-03-17 10:26 ]
くおん
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 154
投稿日時: 2005-03-17 23:07
こんばんわ。
HSRPの構成でActiveとStandbyが切り替わった時点で、gratuitous ARP が送出され、
MACアドレスの変更が通知されます。
スイッチ側でこのARPを受け取ったときにARP Tableの変更を行えるものであれば、
ARP TableのMACアドレス情報は書き換わります。
おそらく、他の二重化プロトコルも同様な動作を行うと思われます。

引用:

┌─┐ ┌─┐
│イ├─┤ロ│ イ・ロ:冗長化を行うルータ・F/W・L/B等
└┬┘ └┬┘     ※MACアドレスを共有する冗長化、アクティブ-スタンバイ構成
 │   │
┌┴┐ ┌┴┐
│ハ├─┤ニ│ ハ・ニ:L2スイッチ
└─┘ └─┘


この構成の場合、切り替え時に送信されたgratuitous ARP がそれぞれのインターフェイスが
接続しているスイッチにしか届きません。その為、切り替わりの前に動作していたスイッチ側には
前の情報が保持されたままになります。
これを避けるにはそれぞれのスイッチにたすき掛けの要領で接続するか、あるいは
スタック接続された2台のスイッチにそれぞれ接続する方がよいでしょう。
くおん
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 154
投稿日時: 2005-03-18 00:11
こんばんわ。
gratuitous ARP は、ブロードキャストなので、L2スイッチで構成されたangelさんの
ネットワークでも問題なく、変更できます。
端末と勘違いしていました。すみません。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-03-18 11:49
くおんさん、お返事ありがとうございます。

ところで、
引用:

くおんさんの書き込み (2005-03-17 23:07) より:
HSRPの構成でActiveとStandbyが切り替わった時点で、gratuitous ARP が送出され、
MACアドレスの変更が通知されます。



とあるのですが、MACアドレスを共有する場合は、各機器のARPテーブルを更新する必要がない(仮想IP・仮想MACはそのままのため)、と考えていたのですが、その場合でもgratuitous ARPが送出されるのでしょうか?

# 仮想MAC = 実MAC とする場合は、切り替わりのタイミングで仮想MACが変化するため、gratuitous ARPが送出されるという資料は見つかったのですが…

送出されるのであれば、
引用:

スイッチ側でこのARPを受け取ったときにARP Tableの変更を行えるものであれば、
ARP TableのMACアドレス情報は書き換わります。


にあるように、スイッチ上のMAC情報が書き換わって、以後の通信に問題は出なさそうに思います。
くおん
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 154
投稿日時: 2005-03-19 08:46
おはようございます。

gratuitous ARP がでないとスイッチに接続されているポートの切り替えが出来ません。
実際の動作で切り替わっても問題なく動作できているので、gratuitous ARP は送出され
ているものと思います。

記憶違いかもしれないので、RFCを見てみました。
RFC 2281のマトリックス表を見ると
コンフィグでpreempが設定(これが設定されていないと切り替わらないので設定
は必ず行います。)されている状態で、
gratuitous ARP は状態遷移中にアクティブルータから出るようになっています。

和訳を間違えていなければ・・・。
いっそう
会議室デビュー日: 2005/03/19
投稿数: 9
投稿日時: 2005-03-19 15:27
はじめまして

引用:

gratuitous ARP がでないとスイッチに接続されているポートの切り替えが出来ません。
実際の動作で切り替わっても問題なく動作できているので、gratuitous ARP は送出されているものと思います。


私も実際、gratuitous ARPは送出されていると思います。
ただ、HSRPのアクティブルータ切り替え時に重要なのはgratuitous ARPが送出されるかではなく仮想MACをソースアドレスとするパケットを送出することになのではないでしょうか?

gratuitous ARPの本来の目的であるセグメント内の端末へのMACアドレス変更の通知は、仮想MACを共有しているのであれば必要はないのですが、くおんサンのおっしゃるとおりセグメント内のスイッチで仮想MACを送出するポートの切り替えができません。

このためにARPに使用するEthernetフレームの送信MACアドレスに仮想MACを使用することで
スイッチのMAC Address Tableを切り替えるのではないでしょうか。


angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-03-22 10:18
おはようございます。

やはりRFCにあたるのが確実そうですね…。訳があっているかどうか自信が無いのですが、読んでみました。
引用:

くおんさんの書き込み (2005-03-19 08:46) より:
RFC 2281のマトリックス表を見ると
コンフィグでpreempが設定(これが設定されていないと切り替わらないので設定
は必ず行います。)されている状態で、
gratuitous ARP は状態遷移中にアクティブルータから出るようになっています。



RFC2281 5.7章「状態遷移」の表を見ると、
・状態 5(スタンバイ)の時に
・イベントc,h,i、それぞれ、
  設定時間以上のアクティブルータからの音信不通
  アクティブルータから自分より低い優先度を通知された
  アクティブルータからresignを通知された
 が起こると、
・アクション I、すなわち、仮想MACをソースとした gratuitous ARP を送出する。(他のアクションは省略しています)
とあるようですね。
※各数字やアルファベットは、5.3章「状態」、5.5章「イベント」、5.6章「アクション」に則して書いています。
引用:

いっそうさんの書き込み (2005-03-19 15:27) より:
私も実際、gratuitous ARPは送出されていると思います。
ただ、HSRPのアクティブルータ切り替え時に重要なのはgratuitous ARPが送出されるかではなく仮想MACをソースアドレスとするパケットを送出することになのではないでしょうか?


RFC2281 6章「MACアドレスに関する考察」の 6.1「全般」、最終段落を見ますと、
引用:

In such circumstances, a router MAY use its normal MAC addresses as the virtual MAC address.
(そのような状況では、実MACアドレスを仮想MACとして使用しても良い)


と言っているようですね…。実MAC=仮想MAC というのは、実はかなり特殊なのでしょうか?
そうすると、gratuitous ARPは、ARPテーブルの書き換えが主目的では無いと思えてきます。
また、その2つ前の段落で、
引用:

… the bridges must be able to quickly update themselves as the virtual MAC address "moves". Although learning bridges typically are able to do this, …
(… ブリッジは、仮想MACアドレスの移行に即して、すぐにその情報を更新できなければならない。典型的なラーニングブリッジであれば可能だが、…)


このthemselvesの中身は、さらに2つ前の段落にあった“which LAN segment the virtual MAC address currently belongs to”で良いのでしょうか…。

以上を総合すると、
・gratuitous ARPは、ARPテーブルではなく、ブリッジのMAC情報更新が主目的
・gratuitous ARPは、実MAC=仮想MAC かどうかに関わらず送出される
・普通のスイッチ(ブリッジ)なら、MAC情報の更新に関して気に病む必要はない

ということでしょうか?
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-03-22 11:02
あ…、先程自分が誤読していたことに気付いてしまいました。
RFC2281 6.1章第4段落で、
引用:

If and only if the router is in the Active state, the router MUST use the group's virtual MAC address as the source MAC address for its Hello messages. This is necessary in order to allow learning bridges to be able to determine which LAN segment the virtual MAC address currently belongs to.
(ルータがアクティブである時は、またその時に限り、Helloメッセージの送信に、仮想MACアドレスをソースアドレスとして使用しなければならない。仮想MACアドレスがどのLANセグメントに属しているか、ラーニングブリッジが判断できるようにするため、これは必要である。)


とあって、5.7章の状態遷移の表を改めて見直すと、状態 5 (スタンバイ) であるルータは、
・イベント c (アクティブルータからのHelloが途絶えた) の場合
 アクション C, D, F, I を行って状態 6 (アクティブ) へ遷移
・イベント h (アクティブルータから自分より低い優先度を通知された) の場合
 アクション B, G, F, I を行って状態 6 (アクティブ) へ遷移
  ※ただし、preemptを設定している場合
・イベント i (アクティブルータからresignを通知された) の場合
 アクション C, F, I を行って状態 6 (アクティブ) へ遷移

という挙動を行うようなのですが、この中のアクション F が、「Helloメッセージの送信」となっています。

ということは、
・切り替わりの時に、Helloメッセージが送信される
・Helloメッセージにより、スイッチはMAC情報を学習する
・よって、普通のスイッチであれば、切り替わり時のMAC情報の変更を気に病む必要はない

でしょうか?

スキルアップ/キャリアアップ(JOB@IT)