1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

あらためてIPv6基本のキ

ASCII.jp / 2024年11月3日 10時0分

IPoEの普及によって、日本の家庭のインターネット回線は 確実にIPv6化が進行している

 家庭用のインターネット常時接続サービスでIPoE(IP over Ethernet)が簡単に利用できるようになった。IPoEでは、簡単に言えば、自宅が1つのサブネットワークになる。そもそもIP over Ethernetとはイーサネットを流れているIPと同じということである。

 実際、ルーターにはIPv6グローバルネットワークアドレスが割り当てられ、そこから自動割り当てられたWindowsマシンのIPv6アドレスもインターネットでそのまま通用するグローバルアドレスである。

 そういうわけで、あらためてIPv6とまともに付き合う必要が出てきた。今回は、IPv6の基本の「キ」としてざっくりとした解説をする。

まずは基本となるIPv6アドレスについて

 まずはIPv6アドレスについてだ。IPv6アドレスは128bitある。このうち、上位64bitがネットワークをあらわす「プレフィックス」、下位64bitはホストを示す「インターフェースID」である。プレフィックスはプロバイダが割り当て、インターフェースIDはローカルで割り当てる。

 ただし、IPv6には自動でアドレスを割り当てる機能があり、DHCPサーバーなどを特に用意する必要はない。インターネット接続に使うルーターなどには、DHCPv6としてDHCPサーバーがあるような表記があるが、実際には「ステートレス」で自動割り当てされる。具体的には、計算とIPv6が持つ重複アドレス検出機能を組み合わせてアドレスを自動で割り当てる。

 なお、Windowsは独自のアルゴリズムを使ってインターフェースIDを割り当てる。このため、ルーター側のDHCPv6機能を使った場合とそうでない場合に割り当て方法が異なることがある。

 なお、DHCPには、IPアドレスの割り当て以外にDNSサーバーなどのLAN内のパラメーター通知機能もあるため、IPv6アドレスの割り当てをしなくても、家庭向けブロードバンドルーターには必要な機能である。

 さて、実際に割り当てられたIPアドレスを見てみよう。IPoEサービスであるなら、3つのIPv6アドレスが見えるはずだ。GUIから見るなら、「設定」→「ネットワークとインターネット」→「ネットワークの詳細設定」→「ネットワークアダプター」からインターネット接続に利用しているネットワークアダプタ(ネットワークインターフェース)にある下向き矢印をクリックして項目を開き、「追加のプロパティを表示」を選択する。

 あるいは、コマンドラインからipcondig.exeを実行する。こちらもネットワークアダプタごとにIPアドレスを表示する。

IPv6
ipconfig.exeコマンドを使うと、ネットワークアダプタごとにアドレスを表示できる。この写真で「IPv6 アドレス」と表示されているが、本文でいう「通常アドレス」である。「一時 IPv6 アドレス」は「匿名アドレス」になる

 インターネット接続がPPPoE経由でなければ、どれを見てもIPv6アドレスが表示されているのではないだろうか? しかしよく見るとIPv6アドレスが複数ある。

 IPoEで接続しているなら、プロバイダ側からプリフィックスをもらい、インターフェースIDは、OSまたは、ルーターのDHCPv6で決定する。現在では3つのIPv6アドレスを割り当てるのが通常だ(これ以上割り当てがある可能性もある)。

・リンクローカルアドレス ・一時または匿名アドレス ・通常アドレス(プライマリアドレス)

IPv6

 リンクローカルアドレスは、ネットワーク内でしか利用できない特殊なアドレスだが、MACアドレスをもとに決定されるため、他のインターフェースIDと衝突することなく、確実に割り当てられるアドレスである。

 このときのインターフェースID決定方法は、RFC 4291(IP Version 6 Addressing Architecture https://datatracker.ietf.org/doc/html/rfc4291)で定義されおり、「Modified EUI-64」と呼ばれている。これは簡単に言えば、MACアドレス48bitを並べ替えたもの。EUI-64は、IEEEで定めた48bitのMACアドレスを64bitにする方法だ。この文書では、EUI-64をアレンジして64bitのインターフェースIDを作る方法を定義している。

 もともとIPv6では、「Modified EUI-64」を使ってインターフェースIDを決定することを想定していたが、これでは、インターフェースが持つMACアドレスが特定されてしまい、プライバシー的な問題が残る。

 インターネット商用化以前は、インターネットの技術は“性善説”でよかったが、現在では“性悪説”に立たなければならない。このため、インターフェースを特定されない方法が考えられた。

 一時または匿名アドレスは、IPv6ノードがインターネットアクセスに利用する「使い捨て」のIPv6アドレスだ。通常24時間程度で破棄され、新しい匿名アドレスを割り当てる。これは、MACアドレスのほかに乱数を利用して決定される。

 IPv6には、DAD(Duplicate Address Detection)と呼ばれる機能があり、これから利用するIPv6アドレスがLAN内で先に使われていないかを調べることが可能だ。

 匿名アドレスは、乱数を利用してアドレスを求めたあと、DADを使って、重複がないかを調べる。もし重複があれば作り直すという処理を繰り返す。この方法は、RFC 8981で定義されている。

●Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6  https://datatracker.ietf.org/doc/html/rfc8981

で定義されている。

 リンクローカルアドレスでも匿名アドレスでもないものが「通常アドレス」である。この場合のインターフェースIDは、SLAAC(Stateless Address Autoconfiguration)と呼ばれる方法で決定され、RFC 7217で定義されている。

●RFC 7217 - A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC)  https://datatracker.ietf.org/doc/html/rfc7217

IPv6アドレスの表記

 IPv6アドレスは、128bitあるので、16bitごとに16進数(小文字a~fを使う)にして「:」で区切る。また、ゼロが32bit以上並ぶなら「::」を使って省略できる。

 プリフィックスは、末尾にスラッシュとビット数をつけて表記する。たとえば、「fe80::/64」は、64bitのうち先頭16bitがfe80で後続する48bitがすべて0であることを意味する。

 また、リンクローカルアドレスは特定のネットワークインターフェース、Windowsではネットワークアダプターと結びついている。計算すれば、どのインターフェースなのかは判断できるが、毎回計算するのも面倒であるため、「%」で区切ってインターフェースを特定する「ゾーンインデックス」をつける。

 Windowsでは、数値でネットワークアダプタのインターフェースインデックス(IfIndex)をつける。これは、PowerShellのGet-NetAdapterコマンドで調べることができる(https://ascii.jp/elem/000/004/230/4230865/)。

 しかし、Windowsでは、コロンはドライブ文字の区切りである。またURLなどでは、IPv4アドレスに対してポート番号を指定するときに使われていたため、誤解釈の可能性がある。このため、IPv6アドレスを「[」と「]」でくくることができる。

 なお、IPv6アドレスは先頭部分を見るだけで判別が可能だ、先頭が「2001」になっているものはグローバルユニキャストアドレスといい、IPv4でインターネット内で使用できるグローバルアドレスと呼ばれていたもの。ここのマシンには、このグローバルユニキャストアドレスが割り当てられる。

 すでに各キャリアによるスマートフォンではIPv6アドレスが使われている。一般家庭向けの常時インターネット接続サービスでは、IPoEがベースとなり、さらにIPv6化が進むだろう。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください