MACアドレスの再利用は、みんなが思っているよりもはるかに一般的

2020/6/16-1

MACアドレスは、原則として、一意に割り当てられるものです。 ネットワークインターフェースごとに、ひとつずつユニークな値をベンダーが付けるものとされています。 ただ、これは、あくまで「原則として」であって、実際は、MACアドレスが重複することもあります。

IPv6に関連するいくつかのRFCで、MACアドレスの重複への言及があります。 この記事では、MACアドレスの重複とIPv6アドレスの自動生成という、わりと限定された視点ではありますが、MACアドレスが一意とは限らない、という話を紹介します。

なお、この記事のタイトルである「MACアドレスの再利用は、みんなが思っているよりもはるかに一般的」は、RFC 7217に書かれている一文の日本語訳です。

MACアドレスの重複とIPv6アドレス生成の仕様

MACアドレスがIPv6アドレスの自動生成で使われる場合があります。

IPv6アドレス体系のRFCである、RFC 4291では、以下のように書かれています。

For all unicast addresses, except those that start with the binary value 000, Interface IDs are required to be 64 bits long and to be constructed in Modified EUI-64 format.

(訳) IPv6アドレスの上位3ビットが000である場合を除き、すべてのユニキャストIPv6アドレスのインターフェース識別子は64ビット長とし、Modified EUI-64フォーマットであることが要求される。

このように、Modified EUI-64フォーマットが必須とされています。 そして、MACアドレスをもとにModified EUI-64のインターフェース識別子を生成することがRFC 4291で解説されています。 昔の一般的な実装は、MACアドレスをもとに作られたModified EUI-64フォーマットによる64ビットのデータを、自動生成されるIPv6アドレスの下位64ビットとしていたのです。

しかし、MACアドレスを利用してIPv6アドレスの下位64ビットを自動生成するという手法には、いくつかの問題点があり、2017年に発行されたRFC 8064によって、現在はMACアドレスをもとにインターフェース識別子を生成することは非推奨となっています。

ずっと必須とされていた仕様が、2017年に非推奨になったわけで、そうなるまでの議論の積み重ねというものがあるわけです。

いくつか論点があるのですが、MACアドレスによるインターフェース識別子生成の問題点のひとつが、MACアドレスは重複する場合があるという点です。

実際は、セキュリティやプライバシーの問題の方がRFCでの扱いが大きいのですが、MACアドレスの重複も議論における要素の ひとつとしてRFCで語られているので、今回は、あえて、その重箱の隅的な部分にフォーカスしています。

RFCでの言及や参考資料

さて、MACアドレスを利用して生成するインターフェース識別子に関して、RFC 7136とRFC 7217に言及があります。

RFC 7136では、「製造業者が複数のデバイスに対して同じMACアドレスを割り当てているという報告が頻発している」、とあります。 また、「バーチャルマシンが同じMACアドレスを使い回している」という話も書かれています。

RFC 7217では、「MACアドレスの再利用は、みんなが思っているよりもはるかに一般的であることを実世界のデータが示している」、とあります。 さらに、その根拠として、 Derbycon 2012での発表がRFC 7217で紹介されています。

Derbycon 2102の発表(The Wild West)では、UDPの137番ポートで公開状態になっているNetBIOSからの情報を世界中の機器から取得し、MACアドレスのデータを収集しています。 世界中から2100万件のデータを集めたそうです。

この発表の中で、 「で、MACアドレスは世界で一意だよね?」(MAC addresses are globally unique? right ?)と言いながら、実際にはそうではないことを示すために、次の図が提示されています。

MACアドレスが示すベンダーごとに、重複したMACアドレスが検出された数が示されています。 この図が示された瞬間に、会場から笑い声と拍手が発生しているのが印象的です。

あと、この発表が参考資料としてRFCに掲載されているのが、個人的には非常にツボでした。 多少やんちゃな感じがする内容の発表ですが、RFCの参考文献としてリストされているわけです。

そして、昔からMACアドレスが重複することがあるという話は聞いていましたが、こういう感じで、参考文献として参照先があることは、それはそれで大事だと個人的に思います。

関連しそうなRFCでの言及ですが、MACアドレスが重複するという論点ではありませんが、RFC 7707でも類似する話題が書かれています。 RFC 7707では、VirtualBox、VMware ESX Server、VMware vSphereでの、MACアドレスの動的な生成方法が紹介されています。 RFC 7707も非常に面白いので、そのうち、RFC 7707の紹介動画も作りたいと考えています。

最後に

今回紹介したように、IPv6アドレス自動生成に関する議論のなかで、MACアドレスに一意性があるとは限らないという話がRFCに書かれています。

そもそも、リンク上でイーサネットアドレスとして使われる値は、OSで設定可能である場合も多く、ハードウェアにどのようなMACアドレスが割り当てられているのかという話がある一方で、ユーザが勝手に他と重複する値を設定することもできてしまいます。

MACアドレスに関する解説などに、一意性がある識別子であるという説明などが書かれていることもあり、それを信じている人も結構いるのではないかと思いますが、実際には、重複することがある、という事実は知っておいて損はないと思います。

このブログと全く同じ内容でYouTubeの動画も作りました。 最近、YouTubeチャンネルに主にIPv6解説動画などを掲載しています。 もし、よろしければ、そちらもご覧ください!

最近のエントリ

過去記事

過去記事一覧

YouTubeで技術解説やってます!