MACアドレス重複の問題・影響
普段意識しないMACアドレス重複。ふと気になってARPテーブルやMACアドレステーブルを見たりして『あれ?これMACアドレス重複してない?』と思ったとき、どう考えればいいかをまとめてみました。
まず、MACアドレスが重複していて問題・影響が有るパターンと無いパターンがあります。
問題・影響が有るパターン
MACアドレスが重複していて問題が出るのは、『同一ブロードキャストドメイン内で、異なるIP機器が、同じMACアドレスを持つ場合』です。
このときの影響は、重複している機器の両方で、通信速度が遅くなったり、頻繁に繋がったり繋がらなかったりするようになります。
原因は、MACアドレステーブルのフラッピングです。MACアドレステーブルは、同一VLAN内でMACアドレスのエントリを2つ以上持つことができません。
MACアドレステーブルのフラッピングとは、同じMACアドレスが、ポート1で学習されたりポート2で学習されたり、というのを高速に頻繁に繰り返した状態を言います。
Cisco の Catalyst 系では以下のようなエラーが出ます。
MACアドレステーブルはVLANは意識しますが、IPアドレスは意識しませんので、NWセグメント(NWアドレス)が違っていても、同一VLANでMACアドレスが重複していると問題があります。
つまり、同一ブロードキャストドメインの中でMACアドレスが重複していると問題があるのです。
具体的なケース
VMware等の仮想MACアドレス重複
VMware等の仮想マシン上の仮想NICの仮想MACアドレスが競合するケースがあります。
VMware社は、OUI=[00:50:56]をIEEEから与えられています。それゆえ、仮想マシン上の仮想NICの仮想MACアドレスを、以下のように生成します。
[XX] には "vCenter Server instance ID"(Ox00〜3fの中からvCenterインストール時にランダムに付与) に Ox80を足したものが入ります。
[YY]:[ZZ]は仮想マシンの仮想NIC生成時にランダムに生成されます。
つまり、複数の vCenter を使い、instance ID が重複し、仮想マシンを同一VLAN内でたくさん作ると、重複する可能性が上がるのです。
これはVMwareでのケースですが、HVPER-VやKVM等でもVM管理が分かれていれば同様のケースが起こり得ます。
機器ソフトウェア不具合
ドライバ等機器のソフトウェア不具合によりMACが同じものになる、という事象も観測されているようです。
影響が無いパターン
MACアドレスが重複していて問題が出ないのは『①IP機器が同じインタフェースで複数IPアドレスを持ち、それらのIPに紐付くMACアドレスが同じ場合』や『②異なるブロードキャストドメイン(VLAN)間で、MACアドレスが重複する場合』等です。
具体的なケース
1つのインタフェースに複数のIPを付与した場合
同じインタフェースに同一セグメントのセカンダリIPを付与した場合は、対向機器のARPテーブルに、異なるIPで同じMACアドレスのエントリが複数表示されます。
ですがこれは問題ありません。何故ならARPテーブルの使い方は『IPアドレスからMACアドレスを調べる』という一方通行だからです。
複数のMACアドレスが1つのIPと紐づくいわゆる『IPアドレス重複』だと問題ですが、その逆は問題無いのです。
そしてMACアドレステーブルについても、スイッチとしては1つのポートに1つのMACがあるだけなので、accessポートであろうがtrunkポートであろうが、フラッピングは起きないし、その他の問題も発生しません。
Linux等で論理インタフェースを生成した場合
Linux で BondインタフェースやVLANインタフェース等の論理インタフェースを作った場合、デフォルトでそのインタフェースが所属する上位インタフェースのMACアドレスを継承します。例えばBondインタフェースであれば、最初のスレーブ物理インタフェースのMACアドレスが使われます。
別ブロードキャストドメインでの重複
例えば先程の『問題・影響のあるパターン』の具体的なケースで紹介したVMwareの仮想MACアドレスですが、たまたま同一VLANで重複すれば問題が発生しますが、別VLANに繋がれば、問題は起きません。
極端なケースで、VM#1とVM#2がvNIC#1(VLAN10所属)とvNIC#2(VLAN20所属)を持ち、たまたまVM#1 の vNIC#1 と VM#2 の vNIC#2 のMACアドレスが重複し、VM#1 の vNIC#2 と VM#2 の vNIC#1 のMACアドレスが重複していたとします。
このケースでも問題は発生しません。ポイントは『ルーティングテーブルにより出力インタフェースが決まる』ことと、『ARPテーブルはインタフェース毎に持つ』ことです。
VM#1 (10.1.1.1/24) が VM#2 (10.1.1.2/24) と通信するとき、まず最初に『宛先IPをルーティングテーブルで照会し、出力インタフェースを調べる』ということを実施します。補足ですが、もし宛先IPが自分とは異なるセグメントであればNextHopも調べます。
今回は同セグメントですので、出力インタフェースから10.1.1.2のARP解決要求をブロードキャスト送信し、VM#2からは10.1.1.2に対するMACアドレスがARP応答として戻ってきます。
そしてそのMACアドレス宛にIPパケットをそのインタフェースから送信します。このとき、IPとは違い、異なるインタフェースのMACアドレスは一切気にしません。
IPv6のリンクローカルアドレスの重複も同様
IPv6のリンクローカルアドレス『fe80::〜』もMACアドレスと同様、ブロードキャストドメインが異なれば重複しても影響はありません。
このケースでもポイントはやはり同じで『ルーティングテーブルにより出力インタフェースが決まる』ことと『ARPテーブルはインタフェース毎に持つ』ことです。
MACアドレスの重複の調査方法
IP重複の場合はOSがGARPで重複検知し、警告を表示させる機能がありますが、MAC重複に関してはそのような機能はありません。
なので重複していないかどうかの確認はデフォルトゲートウェイとして使っている全てのNW機器の全VLANのARPテーブルを確認し、重複したMACがある場合はそれが前述の『問題・影響のあるパターン』かどうかを見極める必要があります。
また、重複していることが判明した場合、どの端末が重複しているかの調査方法は、スイッチのMACアドレステーブルを確認し、そのMACアドレスがどのポートに繋がっているかを追っていくしかありません。フラッピングにより頻繁に変わるので惑わされず根気強く調査する必要があります。
コメント