インターフェース ID を作る Modifierd EUI-64
- 2014/01/07
- 21:43
IPv6 Neighbor Discovery についてメモしたとき、「EUI-64」 といったキーワードがチラホラ出てきたと思います。
これは IPv6 アドレスのインターフェース ID を自動生成する際に使われるアドレス形式ですが、その EUI-64 についてようやくイメージが固まったので今回メモしていきます。また、EUI-64 を理解するために必要な MAC アドレス についても少しだけメモしています。
ちょっとずつ IPv6 ネタが増えてきたw (^ω^*)
IPv6 アドレス表記
EUI-64 をメモする前に、まずは IPv6 アドレスの表記について簡単にメモします。
ちなみに今回メモする IPv6 アドレスは一般的な 「/64」 の IPv6 アドレスを前提にします。それ以外の IPv6 アドレス、またリンクローカルユニキャストアドレス、マルチキャストアドレス、などの様々な種類の IPv6 アドレスに関しては別の機会にメモしていきます。
まず、現在の主流となる IPv4 アドレスと、これから増えていくであろう IPv6 アドレスの大きな違いは 「IP アドレスの数」 です。IPv4 は 32bit ですので、約43億個 の IPv4 アドレスを扱えますが、インターネットが普及する昨今では、その IPv4 が枯渇しつつあります。その一方 IPv6 は 128bit もあり、128bit が扱える IP アドレスを数でいうと………まぁとりあえず、いっぱいあります。枯渇する心配はありません(笑)。
さて、そんな IP アドレスの表記の仕方ですが、32bit の IPv4 アドレスは 10進数 で表記できますが、128bit と数の多い IPv6 アドレスでは 16進数 で表記する必要があります。以下に IPv4 と IPv6 のアドレスを簡単に書いてみます。
- IPv4 アドレス -
192.168.0.1/24
- IPv6 アドレス -
2001:0db8:0012:0000:0000:0000:00ab:0001/64
IPv4 アドレスは 0~255 までの 10進数 を “ . ” で区切って4回に分けて表記しまが、その一方、IPv6 では 0~ffff までの 16進数 を “ : ” で区切って8回に分けて表記します。
パッと見はウンザリするような長さに見えますが、本当にウンザリします。ただ分かる人ならわかりますが、上記の例に挙げたアドレスは 「わざと多く見せている」 ように表記しています。実は IPv6 アドレスは 「先頭の0を省略(ゼロサプレス)」 することができ、アドレス表記を短くできます。上記の IPv6 アドレスをゼロサプレスすると、以下のようになります。
- フルに書いた IPv6 アドレス -
2001:0db8:0012:0000:0000:0000:00ab:0001/64
- ゼロサプレスすると -
2001:db8:12:0:0:0:ab:1/64
だいぶスッキリしましたね。しかも面白いことに 0000 が “ : ” をまたいで連続してある場合は “ :: ” と更なる省略が可能です。前述した IPv6 アドレスを “ :: ” でゼロサプレスすると、以下のようになります。
- フルに書いた IPv6 アドレス -
2001:0db8:0012:0000:0000:0000:00ab:0001/64
- ゼロサプレスすると -
2001:db8:12:0:0:0:ab:1/64
- さらに :: でゼロサプレス -
2001:db8:12::ab:1/64
このように IPv6 アドレスは、ゼロサプレスすることで省略可能です。それでも慣れないうちは滅入るような文字列に見えますが、普段からネットワークに関わりある方でしたら、あまり心配しなくても大丈夫かもしれません。なぜなら IPv6 アドレスをルータなどのネットワーク機器に設定していくうちに IPv6 アドレスに慣れてくるからです。 それにタイピングも早くなりますので、キーボード上部の数字に打ちなれていない僕のようなお方は IPv6 アドレスはオススメです(笑)。
インターフェース ID
IPv6 アドレスの下位 64 bit のことを 「インターフェース ID」 といいます。このインターフェース ID は IPv4 アドレスでいう 「ホスト部」 だと思ってください。
また、上位 64 ビットのことを 「プレフィックス」 と呼び、IPv4 アドレスでいう 「ネットワーク部」 です。IPv4 アドレスのネットワーク部をプレフィック長 (/24 ←この数値) と呼ぶことと同じだと考えれば分かりやすいと思います。プレフィックスの詳細につきましては、また違う機会にメモする予定です。

↑図1:Prefix がネットワーク部、Interface ID がホスト部 (*図 IPv4 右側を間違えました…)
インターフェース ID の設定方法も基本的には IPv4 と同じで、手動で設定することもあれば、DHCPv6 を使った動的なインターフェース ID を設定することも可能です。ただ、通常は EUI-64 形式でインターフェース ID が自動生成されることが多いようです。
IPv6 アドレス全体を生成する 「IPv6 アドレス自動生成」 に関しては別の機会にメモしますが、IPv6 アドレスを自動生成する仕組みを簡単に書くと、この EUI-64 形式のインターフェース ID に加え、ルータから受け取った RA のプレフィックス情報を上位 64bit に足し合わせるイメージですね。
MAC アドレス
EUI-64 形式は MAC アドレスが大きく絡みますので、MAC アドレスついて簡単にメモします。
MAC アドレス (Meida Access Control Address) はノード (NIC) に付与された物理的なアドレスで、論理的な IP アドレスと違って特別なことがない限り変更できない一意のアドレスです。MAC アドレスは IPv6 アドレスと同様に 16進数 で表記しますが、MAC アドレスは 48bit の長さを持つことから、16進数 (8bit) をハイフン“-”、またはコロン“:”で6回に分けて区切り、表記します。
00-21-85-c5-XX-XX または 00:21:85:c5:XX:XX といった表記方法ですね。
MAC アドレスは OSI 参照モデルでいうデータリンク層に属すアドレスで、TCP/IP の通信では上位レイヤーの IP アドレスと組み合わせて使うことが多いです。ですから MAC アドレスを扱う PDU は、Packet ではなく Frame ですね。ここのところの区別は怠ってはイケマセン。φ(^ω^ )メモメモw

↑図2:MAC アドレスは Data Link Layer
MAC アドレスは 48bit ありますが、IPv6 のインターフェース ID と似たように 「上位 24bit」 と 「下位 24bit」 にはそれぞれ違った意味があります。
まず上位 24 bit ですが、これは 「ベンダー ID」 と呼ばれる番号です。または OUI (Organizationally Unique Identifier) とも呼ばれます。そもそも MAC アドレスは世界的に一意のアドレス出なければいけませんので、ネットワーク機器の MAC アドレスの重複は許されません。そこで IEEE が MAC アドレスを管理し、ネットワーク機器を製造する企業(ベンダー)にベンダー ID を割り当てています。
ちなみに以下の URL からベンダー ID を払い出されたベンダー名が確認できます。試しに僕のマシンの NIC を調べたところ、「MICRO-STAR INT'L」 が出てきました。どこだよ、そんなメーカー聞いたこと無いぞ……と思って調べてみると、なんとあの有名な 「MSI」 のことでした。。MSI って Micro Star International の略だったんですね。。。
http://standards.ieee.org/develop/regauth/oui/public.html
また上記のサイトいわく、ベンダー ID を取得するには 2500 ~ 5390 US$ 必要のようです。やっぱりグローバル IP アドレスと同様にお金がかかるようです。

↑図3:OUI は IEEE が集中管理
続けて下位 24bit ですが、これは 「シリアル番号」 と呼ばれます。シリアル番号、という言葉からなんとなくイメージがつくかもしれませんが、製造番号とも言い換えられる完全に一意の番号です。シリアル番号はベンダーが管理しており、ベンダーごとのルールに則って自社のネットワーク製品に MAC アドレスを付与しているのでしょうね。
こうして 「ベンダー ID + シリアル番号」 の組み合わせにより MAC アドレスが生成されます。そしてこの上位 24bit と下位 24bit が組み合わさった MAC アドレスのアドレス体系のことを 「EUI-48」 といいます。
また、MAC アドレスは 48bit なのに 「アドレス空間が 46bit」 という言葉をよく聞きます。これは MAC アドレスの上位 2bit が通信用に予約されているからです。
MAC アドレスの第1オクテットの 2bit に 「I/G bit」 と 「G/L bit」 というビット領域があり、ユニキャスト or マルチキャスト通信、またローカル or グローバル通信によりこの領域のビットが変化するようです。この領域はアドレス空間に入らないことから、「MAC アドレスは 46bit の領域」 と言われるのです。このあたりはブロードキャストをメモするあたりに追っていこうと思います。
Modified EUI-64
ではそろそろ、本題の EUI-64 についてメモしてみます。
――と、その前にまずは EUI-64 の意味について整理します。EUI-48 や Modified EUI-64 といった似たような言葉を乱雑させてしまったので、自分のためにも改めて整理したいです。というか、ちょっと整理させて。。
・EUI-48 … IEEE が定めた 48bit のアドレス体系。主に MAC アドレスで使われる。
・EUI-64 … IEEE が定めた 64bit のアドレス体系。主に IPv6 アドレスで使われる。
・Modified EUI-64 … EUI-48 の 48bit アドレスから EUI-64 の 64bit アドレスを自動生成する仕組み。
……といったところですね、たぶん…間違っていたらごめんなさい。。。(´・ω・`)
もし上記の整理が正しければ、「EUI-64 は IPv6 アドレスを自動生成する仕組み」 という言い回しは少し間違っていて、厳密にいうなれば 「EUI-48 形式をベースに生成された EUI-64 形式の 64bit アドレスがインターフェース ID に使われる」 ということになりそうです。結果的には同じことなのでしょうけど、理解を深めるためには意識しなおす必要がありそうです。よって以下からは、EUI-64 と Modified EUI-64 を使い分けることにします。
前置きが長くなりましたが、以下に Modified EUI-64 によるインターフェース ID 自動生成の動作をメモします。
Windows XP や Linux 系の OS では、IPv6 機能を有効にするとデフォルトで Modified EUI-64 の仕組みによる EUI-64 形式の インターフェース ID が自動生成されます。ただ Windows Vista 以降の OS に関しては、デフォルトの動作が若干異なるため、こちらは後述します。
Modified EUI-64 の動作は MAC アドレスから計算できるので、試しに MSI の OUI 「00:21:85」 と、シリアル番号 「C5:33:9A」 を足し合わせた 「00:21:85:C5:33:9A」 の MAC アドレスを使って EUI-64 形式の インターフェース ID を計算してみます。ちなみにこのアドレス、僕の NIC の MAC アドレスなのでアタックなどしないで頂ければと思います。。(笑)
- Modified EUI-64 -
1.00:21:85:C5:33:9A の MAC アドレスを 24bit に分け、間に 「FF:FE」 を入れる。
00:21:85:C5:33:9A
↓
00:21:85:FF:FE:C5:33:9A
2.00:21:85:FF:FE:C5:33:9A の EUI-64 アドレスを 2進数 に直す。
00:21:85:FF:FE:C5:33:9A
↓
0000 0000:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
3.先頭 7bit 目 (U/L ビット) を反転させる。 ←U/L ビットは今回ハイパースルーします。
0000 0000:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
↓
0000 0010:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
4.2進数のビット列を 16進数 に戻す。
0000 0010:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
↓
0221:85FF:FE:C5:33:9A ← 完成!
この 0221:85FF:FE:C5:33:9A が Modified EUI-64 による EUI-64 形式のインターフェース ID です。このアドレスを LAN で使う場合は、FE80::0221:85FF:FE:C5:33:9A といったようにリンクローカルアドレスにとして使われることになります。グローバルユニキャストアドレスについての詳細は別のメモで書きますが、RA 方式でグローバルユニキャストアドレス生成を簡単に書くと以下のようになります。
1.Modified EUI-64 によってインターフェース ID を生成
2.ルータから払い出された RA を受信
3.RA のプレフィックスとインターフェース ID を組み合わせる
4.グローバルユニキャストアドレスが生成される
「IPv6 は DHCP が無くても IPv6 アドレスが生成できる」 と言われますが、裏ではこういう仕組みで IPv6 アドレスが作られるようです。そういう意味では、ユーザの観点 から見ると IPv6 は IPv4 以上に使いやすいモノかもしれません。…ただ 管理者泣かせ であることは……間違いなさそう? OTL
Modified EUI-64 に関しては以上ですが、もうひとつセキュリティ的に重要なことを書きます。
前述しましたが、Modified EUI-64 は Windows XP や Linux OS ではデフォルトで有効になっていますが、Windows Vista 以降では デフォルトで無効 になっています。その理由は、Modified EUI-64 で生成したインターフェース ID は、MAC アドレスを逆算できる ためにセキュリティにやや問題があるからです。
ただ、それら MAC アドレスの逆算を防ぐための策もあります。Windows Vista 以降では Modified EUI-64 ではなく、ランダムで生成した EUI-64 形式のインターフェース ID がデフォルト使われますし、IETF の RFC4941 により提案された 「一時(匿名)アドレス」 という一定時間毎にランダムに変更される寿命つきのインターフェース ID もあります。
しかし、これらの策が果たして良いものか悪いものか、今の僕には IPv6 の知識が足りないので判断しかねそうです。一時アドレスについては、もう少し理解が深まったらメモしていこうと思います。
最後に
久しぶりに 2進数 について計算しました…。
ちなみに僕は 計算が大の苦手 です。なんかですね、脳みそが計算を受け付けないのです…。じゃぁ計算が苦手な分、他のところで何かを補えるか? と言われると、それもまた疑問で……英語もできなければ、頭の回転もそこまで速いわけじゃなく、ぶっちゃけ僕は普通の凡人です。。
そんな僕がインフラまわりのプロになれるのか。たまに疑問に思うときがあります。しかし僕は奇跡的に 「仕組み」 に人一倍の好奇心がある人間なので、これが唯一インフラまわりのプロへの可能性をつなぎとめています。しかし……仕組みに対する好奇心は、ときに身を滅ぼすこともあります。
これは僕の経験談ですが、今はインフラまわりのプロを目指しておりますが、数年前にアプリケーション開発に1年ほど携わっていたことがありました。その当時はプログラミング経験が皆無に等しかったので、「変数とは何ぞや」 というレベルからの勉強をすることになったのですが……。
int i = 1;
というコードを読んで、普通の人なら 「int 型変数に 1 が入るんだな」 という理解するだけで済むでしょうが、僕は少し違って 「int 型を宣言するとメモリ(RAM)はどう変化するのだろう?」 ともっと深いところを追求し出してしまい、いつまで経ってもプログラミングが進まず、開発メンバーを困らせたことがありました。。。
ってか、今思えばこれは ただ要領の悪いだけ ですね。。ともかく僕が言いたいことは、仕組みを理解することは意外と侮れません。これはコンピュータに限ったことではなく、自分の職に関連する仕組みは少しばかり理解しておいて損はないですよ、というお話でしたw ( =^ω^= )
これは IPv6 アドレスのインターフェース ID を自動生成する際に使われるアドレス形式ですが、その EUI-64 についてようやくイメージが固まったので今回メモしていきます。また、EUI-64 を理解するために必要な MAC アドレス についても少しだけメモしています。
ちょっとずつ IPv6 ネタが増えてきたw (^ω^*)
IPv6 アドレス表記
EUI-64 をメモする前に、まずは IPv6 アドレスの表記について簡単にメモします。
ちなみに今回メモする IPv6 アドレスは一般的な 「/64」 の IPv6 アドレスを前提にします。それ以外の IPv6 アドレス、またリンクローカルユニキャストアドレス、マルチキャストアドレス、などの様々な種類の IPv6 アドレスに関しては別の機会にメモしていきます。
まず、現在の主流となる IPv4 アドレスと、これから増えていくであろう IPv6 アドレスの大きな違いは 「IP アドレスの数」 です。IPv4 は 32bit ですので、約43億個 の IPv4 アドレスを扱えますが、インターネットが普及する昨今では、その IPv4 が枯渇しつつあります。その一方 IPv6 は 128bit もあり、128bit が扱える IP アドレスを数でいうと………まぁとりあえず、いっぱいあります。枯渇する心配はありません(笑)。
さて、そんな IP アドレスの表記の仕方ですが、32bit の IPv4 アドレスは 10進数 で表記できますが、128bit と数の多い IPv6 アドレスでは 16進数 で表記する必要があります。以下に IPv4 と IPv6 のアドレスを簡単に書いてみます。
- IPv4 アドレス -
192.168.0.1/24
- IPv6 アドレス -
2001:0db8:0012:0000:0000:0000:00ab:0001/64
IPv4 アドレスは 0~255 までの 10進数 を “ . ” で区切って4回に分けて表記しまが、その一方、IPv6 では 0~ffff までの 16進数 を “ : ” で区切って8回に分けて表記します。
パッと見はウンザリするような長さに見えますが、本当にウンザリします。ただ分かる人ならわかりますが、上記の例に挙げたアドレスは 「わざと多く見せている」 ように表記しています。実は IPv6 アドレスは 「先頭の0を省略(ゼロサプレス)」 することができ、アドレス表記を短くできます。上記の IPv6 アドレスをゼロサプレスすると、以下のようになります。
- フルに書いた IPv6 アドレス -
2001:
- ゼロサプレスすると -
2001:db8:12:0:0:0:ab:1/64
だいぶスッキリしましたね。しかも面白いことに 0000 が “ : ” をまたいで連続してある場合は “ :: ” と更なる省略が可能です。前述した IPv6 アドレスを “ :: ” でゼロサプレスすると、以下のようになります。
- フルに書いた IPv6 アドレス -
2001:
- ゼロサプレスすると -
2001:db8:12:
- さらに :: でゼロサプレス -
2001:db8:12::ab:1/64
このように IPv6 アドレスは、ゼロサプレスすることで省略可能です。それでも慣れないうちは滅入るような文字列に見えますが、普段からネットワークに関わりある方でしたら、あまり心配しなくても大丈夫かもしれません。なぜなら IPv6 アドレスをルータなどのネットワーク機器に設定していくうちに IPv6 アドレスに慣れてくるからです。 それにタイピングも早くなりますので、キーボード上部の数字に打ちなれていない僕のようなお方は IPv6 アドレスはオススメです(笑)。
インターフェース ID
IPv6 アドレスの下位 64 bit のことを 「インターフェース ID」 といいます。このインターフェース ID は IPv4 アドレスでいう 「ホスト部」 だと思ってください。
また、上位 64 ビットのことを 「プレフィックス」 と呼び、IPv4 アドレスでいう 「ネットワーク部」 です。IPv4 アドレスのネットワーク部をプレフィック長 (/24 ←この数値) と呼ぶことと同じだと考えれば分かりやすいと思います。プレフィックスの詳細につきましては、また違う機会にメモする予定です。

↑図1:Prefix がネットワーク部、Interface ID がホスト部 (*図 IPv4 右側を間違えました…)
インターフェース ID の設定方法も基本的には IPv4 と同じで、手動で設定することもあれば、DHCPv6 を使った動的なインターフェース ID を設定することも可能です。ただ、通常は EUI-64 形式でインターフェース ID が自動生成されることが多いようです。
IPv6 アドレス全体を生成する 「IPv6 アドレス自動生成」 に関しては別の機会にメモしますが、IPv6 アドレスを自動生成する仕組みを簡単に書くと、この EUI-64 形式のインターフェース ID に加え、ルータから受け取った RA のプレフィックス情報を上位 64bit に足し合わせるイメージですね。
MAC アドレス
EUI-64 形式は MAC アドレスが大きく絡みますので、MAC アドレスついて簡単にメモします。
MAC アドレス (Meida Access Control Address) はノード (NIC) に付与された物理的なアドレスで、論理的な IP アドレスと違って特別なことがない限り変更できない一意のアドレスです。MAC アドレスは IPv6 アドレスと同様に 16進数 で表記しますが、MAC アドレスは 48bit の長さを持つことから、16進数 (8bit) をハイフン“-”、またはコロン“:”で6回に分けて区切り、表記します。
00-21-85-c5-XX-XX または 00:21:85:c5:XX:XX といった表記方法ですね。
MAC アドレスは OSI 参照モデルでいうデータリンク層に属すアドレスで、TCP/IP の通信では上位レイヤーの IP アドレスと組み合わせて使うことが多いです。ですから MAC アドレスを扱う PDU は、Packet ではなく Frame ですね。ここのところの区別は怠ってはイケマセン。φ(^ω^ )メモメモw

↑図2:MAC アドレスは Data Link Layer
MAC アドレスは 48bit ありますが、IPv6 のインターフェース ID と似たように 「上位 24bit」 と 「下位 24bit」 にはそれぞれ違った意味があります。
まず上位 24 bit ですが、これは 「ベンダー ID」 と呼ばれる番号です。または OUI (Organizationally Unique Identifier) とも呼ばれます。そもそも MAC アドレスは世界的に一意のアドレス出なければいけませんので、ネットワーク機器の MAC アドレスの重複は許されません。そこで IEEE が MAC アドレスを管理し、ネットワーク機器を製造する企業(ベンダー)にベンダー ID を割り当てています。
ちなみに以下の URL からベンダー ID を払い出されたベンダー名が確認できます。試しに僕のマシンの NIC を調べたところ、「MICRO-STAR INT'L」 が出てきました。どこだよ、そんなメーカー聞いたこと無いぞ……と思って調べてみると、なんとあの有名な 「MSI」 のことでした。。MSI って Micro Star International の略だったんですね。。。
http://standards.ieee.org/develop/regauth/oui/public.html
また上記のサイトいわく、ベンダー ID を取得するには 2500 ~ 5390 US$ 必要のようです。やっぱりグローバル IP アドレスと同様にお金がかかるようです。

↑図3:OUI は IEEE が集中管理
続けて下位 24bit ですが、これは 「シリアル番号」 と呼ばれます。シリアル番号、という言葉からなんとなくイメージがつくかもしれませんが、製造番号とも言い換えられる完全に一意の番号です。シリアル番号はベンダーが管理しており、ベンダーごとのルールに則って自社のネットワーク製品に MAC アドレスを付与しているのでしょうね。
こうして 「ベンダー ID + シリアル番号」 の組み合わせにより MAC アドレスが生成されます。そしてこの上位 24bit と下位 24bit が組み合わさった MAC アドレスのアドレス体系のことを 「EUI-48」 といいます。
また、MAC アドレスは 48bit なのに 「アドレス空間が 46bit」 という言葉をよく聞きます。これは MAC アドレスの上位 2bit が通信用に予約されているからです。
MAC アドレスの第1オクテットの 2bit に 「I/G bit」 と 「G/L bit」 というビット領域があり、ユニキャスト or マルチキャスト通信、またローカル or グローバル通信によりこの領域のビットが変化するようです。この領域はアドレス空間に入らないことから、「MAC アドレスは 46bit の領域」 と言われるのです。このあたりはブロードキャストをメモするあたりに追っていこうと思います。
Modified EUI-64
ではそろそろ、本題の EUI-64 についてメモしてみます。
――と、その前にまずは EUI-64 の意味について整理します。EUI-48 や Modified EUI-64 といった似たような言葉を乱雑させてしまったので、自分のためにも改めて整理したいです。というか、ちょっと整理させて。。
・EUI-48 … IEEE が定めた 48bit のアドレス体系。主に MAC アドレスで使われる。
・EUI-64 … IEEE が定めた 64bit のアドレス体系。主に IPv6 アドレスで使われる。
・Modified EUI-64 … EUI-48 の 48bit アドレスから EUI-64 の 64bit アドレスを自動生成する仕組み。
……といったところですね、たぶん…間違っていたらごめんなさい。。。(´・ω・`)
もし上記の整理が正しければ、「EUI-64 は IPv6 アドレスを自動生成する仕組み」 という言い回しは少し間違っていて、厳密にいうなれば 「EUI-48 形式をベースに生成された EUI-64 形式の 64bit アドレスがインターフェース ID に使われる」 ということになりそうです。結果的には同じことなのでしょうけど、理解を深めるためには意識しなおす必要がありそうです。よって以下からは、EUI-64 と Modified EUI-64 を使い分けることにします。
前置きが長くなりましたが、以下に Modified EUI-64 によるインターフェース ID 自動生成の動作をメモします。
Windows XP や Linux 系の OS では、IPv6 機能を有効にするとデフォルトで Modified EUI-64 の仕組みによる EUI-64 形式の インターフェース ID が自動生成されます。ただ Windows Vista 以降の OS に関しては、デフォルトの動作が若干異なるため、こちらは後述します。
Modified EUI-64 の動作は MAC アドレスから計算できるので、試しに MSI の OUI 「00:21:85」 と、シリアル番号 「C5:33:9A」 を足し合わせた 「00:21:85:C5:33:9A」 の MAC アドレスを使って EUI-64 形式の インターフェース ID を計算してみます。ちなみにこのアドレス、僕の NIC の MAC アドレスなのでアタックなどしないで頂ければと思います。。(笑)
- Modified EUI-64 -
1.00:21:85:C5:33:9A の MAC アドレスを 24bit に分け、間に 「FF:FE」 を入れる。
00:21:85:C5:33:9A
↓
00:21:85:FF:FE:C5:33:9A
2.00:21:85:FF:FE:C5:33:9A の EUI-64 アドレスを 2進数 に直す。
00:21:85:FF:FE:C5:33:9A
↓
0000 0000:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
3.先頭 7bit 目 (U/L ビット) を反転させる。 ←U/L ビットは今回ハイパースルーします。
0000 0000:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
↓
0000 0010:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
4.2進数のビット列を 16進数 に戻す。
0000 0010:0010 0001:1000 0101:1111 1111:1111 1110:1100 0101:0011 0011:1001 1010
↓
0221:85FF:FE:C5:33:9A ← 完成!
この 0221:85FF:FE:C5:33:9A が Modified EUI-64 による EUI-64 形式のインターフェース ID です。このアドレスを LAN で使う場合は、FE80::0221:85FF:FE:C5:33:9A といったようにリンクローカルアドレスにとして使われることになります。グローバルユニキャストアドレスについての詳細は別のメモで書きますが、RA 方式でグローバルユニキャストアドレス生成を簡単に書くと以下のようになります。
1.Modified EUI-64 によってインターフェース ID を生成
2.ルータから払い出された RA を受信
3.RA のプレフィックスとインターフェース ID を組み合わせる
4.グローバルユニキャストアドレスが生成される
「IPv6 は DHCP が無くても IPv6 アドレスが生成できる」 と言われますが、裏ではこういう仕組みで IPv6 アドレスが作られるようです。そういう意味では、ユーザの観点 から見ると IPv6 は IPv4 以上に使いやすいモノかもしれません。…ただ 管理者泣かせ であることは……間違いなさそう? OTL
Modified EUI-64 に関しては以上ですが、もうひとつセキュリティ的に重要なことを書きます。
前述しましたが、Modified EUI-64 は Windows XP や Linux OS ではデフォルトで有効になっていますが、Windows Vista 以降では デフォルトで無効 になっています。その理由は、Modified EUI-64 で生成したインターフェース ID は、MAC アドレスを逆算できる ためにセキュリティにやや問題があるからです。
ただ、それら MAC アドレスの逆算を防ぐための策もあります。Windows Vista 以降では Modified EUI-64 ではなく、ランダムで生成した EUI-64 形式のインターフェース ID がデフォルト使われますし、IETF の RFC4941 により提案された 「一時(匿名)アドレス」 という一定時間毎にランダムに変更される寿命つきのインターフェース ID もあります。
しかし、これらの策が果たして良いものか悪いものか、今の僕には IPv6 の知識が足りないので判断しかねそうです。一時アドレスについては、もう少し理解が深まったらメモしていこうと思います。
最後に
久しぶりに 2進数 について計算しました…。
ちなみに僕は 計算が大の苦手 です。なんかですね、脳みそが計算を受け付けないのです…。じゃぁ計算が苦手な分、他のところで何かを補えるか? と言われると、それもまた疑問で……英語もできなければ、頭の回転もそこまで速いわけじゃなく、ぶっちゃけ僕は普通の凡人です。。
そんな僕がインフラまわりのプロになれるのか。たまに疑問に思うときがあります。しかし僕は奇跡的に 「仕組み」 に人一倍の好奇心がある人間なので、これが唯一インフラまわりのプロへの可能性をつなぎとめています。しかし……仕組みに対する好奇心は、ときに身を滅ぼすこともあります。
これは僕の経験談ですが、今はインフラまわりのプロを目指しておりますが、数年前にアプリケーション開発に1年ほど携わっていたことがありました。その当時はプログラミング経験が皆無に等しかったので、「変数とは何ぞや」 というレベルからの勉強をすることになったのですが……。
int i = 1;
というコードを読んで、普通の人なら 「int 型変数に 1 が入るんだな」 という理解するだけで済むでしょうが、僕は少し違って 「int 型を宣言するとメモリ(RAM)はどう変化するのだろう?」 ともっと深いところを追求し出してしまい、いつまで経ってもプログラミングが進まず、開発メンバーを困らせたことがありました。。。
ってか、今思えばこれは ただ要領の悪いだけ ですね。。ともかく僕が言いたいことは、仕組みを理解することは意外と侮れません。これはコンピュータに限ったことではなく、自分の職に関連する仕組みは少しばかり理解しておいて損はないですよ、というお話でしたw ( =^ω^= )
スポンサーサイト