IPv6 アドレス設定の読解
サーバ S で次のコマンドを実行した結果である(一部省略)。S の IPv6 アドレスに関する記述として,適切なものはどれか。
$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
link/ether 00:1b:21:3a:4c:5d
inet6 2001:db8:10:20::15/64 scope global
inet6 fd3a:91c2:7b04:20::15/64 scope global
inet6 fe80::21b:21ff:fe3a:4c5d/64 scope link- アfe80::21b:21ff:fe3a:4c5d は,別のサブネットにあるクライアントがルータを経由して S にアクセスする際の宛先として利用できる。
- イfe80::21b:21ff:fe3a:4c5d のインタフェース ID は,eth0 の MAC アドレス 00:1b:21:3a:4c:5d から修正 EUI-64 形式で生成されたものと考えられる。
- ウfd3a:91c2:7b04:20::15 は scope global と表示されているので,インターネット上の任意のホストから S に到達するための宛先として利用できる。
- エfe80::21b:21ff:fe3a:4c5d は,eth0 が起動するたびに DHCPv6 サーバから割り当てられたものである。
正解と解説を見る
正解 イ
この問題の基礎知識
- IPv6 アドレスは 128 ビットで,16 ビットずつ 16 進数で表記し,0 が連続するブロックは 1 か所だけ :: で省略できる。/64 は上位 64 ビットがプレフィックスであることを示す。
- IPv6 アドレスの種類は先頭のビットで判別する。fe80::/10 は同一リンク内だけで有効なリンクローカルアドレス,fc00::/7 は組織内で使うユニークローカルアドレス,2000::/3 はグローバルユニキャストアドレスである。
- 修正 EUI-64 形式では,48 ビットの MAC アドレスの中央に ff:fe を挿入し,先頭オクテットの universal/local ビットを反転して,64 ビットのインタフェース ID を作る。
- IPv6 のアドレス設定には,ノード自身がアドレスを生成する方式(SLAAC など)と,DHCPv6 サーバから割当てを受ける方式がある。リンクローカルアドレスは,インタフェースの有効化時にノード自身が生成する。
fe80::/10 はリンクローカルアドレスであり,RFC 4291 ではルータは送信元又は宛先がリンクローカルアドレスのパケットを他のリンクへ転送してはならないとされる。別のサブネットからの宛先には使えない。
修正 EUI-64 形式では,48 ビットの MAC アドレスの中央に ff:fe を挿入し,universal/local ビットを反転する。00:1b:21:3a:4c:5d の先頭オクテット 00 は 02 になり,021b:21ff:fe3a:4c5d となって表示と一致する。
fc00::/7(fd で始まるもの)はユニークローカルアドレスであり,RFC 4193 ではグローバルなインターネット上で経路制御されることは想定されていない。表示上の scope global はリンクローカルでないことを示すだけである。
リンクローカルアドレスは,インタフェースが有効になったときにノード自身がリンクローカルプレフィックスとインタフェース ID を組み合わせて生成する(RFC 4862)。DHCPv6 サーバによる割当てではない。
照合の根拠(5 件)
- ア(誤り): リンクローカルアドレス宛てのパケットはルータが他のリンクへ転送しないので,別サブネットからの宛先に使えない
Routers must not forward any packets with Link-Local source or destination addresses to other links.
RFC 4291 · Section 2.5.6(新しいタブで開きます) - イ(正解): 修正 EUI-64 は 48 ビット MAC アドレスの中央に 0xFF,0xFE を挿入して作る
This is to insert two octets, with hexadecimal values of 0xFF and 0xFE (see the Note at the end of appendix), in the middle of the 48-bit MAC (between the company_id and vendor-supplied id).
RFC 4291 · Appendix A(新しいタブで開きます) - イ(正解): EUI-64 から修正 EUI-64 への変更点は universal/local ビットの反転だけ
The only change is inverting the value of the universal/local bit.
RFC 4291 · Appendix A(新しいタブで開きます) - ウ(誤り): ユニークローカルアドレス(FC00::/7,L ビット 1 で fd で始まる)はグローバルなインターネットで経路制御されない
They are not expected to be routable on the global Internet. They are routable inside of a more limited area such as a site.
RFC 4193 · Section 1(新しいタブで開きます) - エ(誤り): リンクローカルアドレスはノード自身がプレフィックス FE80::0 とインタフェース ID を組み合わせて生成し,DHCPv6 サーバは割り当てない
A link-local address is formed by combining the well-known link-local prefix FE80::0 [RFC4291] (of appropriate length) with an interface identifier as follows:
RFC 4862 · Section 5.3(新しいタブで開きます)
検算: MAC 00:1b:21:3a:4c:5d の中央に ff:fe を挿入して 00:1b:21:ff:fe:3a:4c:5d,先頭オクテット 00 の universal/local ビット(0x02)を反転して 02 → インタフェース ID 021b:21ff:fe3a:4c5d(表示の 21b:21ff:fe3a:4c5d と一致)。fd3a:… は FC00::/7 で L=1 のユニークローカルアドレス。表示上の scope global は Linux の表示であり RFC の根拠対象外。