清水理史の「イニシャルB」

IPv6で通信できてる? 自分のアドレスは? 実は固定じゃない? 自宅のIPv6環境をチェックしてみよう!

 混雑回避などの理由から、「v6プラス」や「transix」などのIPv6 IPoEインターネット接続サービスに乗り換えた人も多いことだろう。しかし、これらの環境で、IPv6がどう割り当てられており、実際にIPv6で通信できているかを確認したことがあるという人は、さほど多くないかもしれない。年末年始で時間があるときに、あらためて自宅のIPv6環境をチェックしてみてはいかがだろうか?

まずはIPv6でつながっているかを確認してみよう

 きちんとIPv6で接続できているかどうかを確認するのに、よく使われるのはインターネット上のウェブページだ。

 例えば、IIJ(https://www.iij.ad.jp)やKDDI(https://www.kddi.com)のウェブサイトにアクセスすると、画面上部に「CONNECTED via IPv6」や「IPv6対応」といったアイコンが表示される。これらの表示が確認できていれば、回線やルーターなど一連の通信経路と、PCやスマートフォンといったWi-Fi子機側の双方で、問題なくIPv6が使えていることが確認できる。

IIJのウェブサイト。右上に「CONNECTED via IPv6」と表示されていれば、IPv6で接続できている
同じくKDDIのウェブサイト。こちらは「IPv6対応 via IPv6」と表示

 通常は、ここまでで十分だが、せっかくなので、もう少し自宅のIPv6環境をチェックしてみよう。

 単なる接続だけでなく、IPアドレスなどまで確認したいときによく使われるのは、「https://www.test-ipv6.com」などのウェブサイトだ。IPv4、IPv6で接続できているかどうかのチェックが実施され、接続できている場合は、アドレスなどの情報が表示される。

https://www.test-ipv6.com」。IPv6での通信状況やアドレスを確認できる

 例えば、上の例は、筆者宅のPCからアクセスしたときの画面だが、PCに割り当てられているIPv6アドレスが「2409:10:21e0:4600:9867:2a8d:7344:456b」であることが分かる。

 本来であれば、IPv6アドレスの仕組みを詳しく説明すべきなのだろうが、堅い話は置いておいて、今回はもっと実践的な話をしよう。とりあえず、ここでは、IPv4のアドレス(192.168.1.2など)とは形式が違うこと、そして長いことが分かれば十分だ。

あれ? IPv6アドレスって固定じゃないんだっけ?

 さて、ここで、一旦、PCを再起動して、もう一度、「https://www.test-ipv6.com」にアクセスしてみてほしい。

再起動後のIPv6のアドレスに注目

 上の画面は、先のPCと同じPCから再起動後にアクセスした画面。IPv6アドレスが変わっていることが確認できるはずだ。

  • 再起動前  2409:10:21e0:4600:9867:2a8d:7344:456b
  • 再起動後  2409:10:21e0:4600:5b3:c234:3b7f:9b28

 なぜアドレスが変わったのかを説明する前に、もしかすると気になる人がいるかもしれないので、再起動後のアドレスの桁数が違う点を少しだけ説明しておこう。

 IPv6では、アドレスで連続する0を省略できるというルールがある。よく「::」のような表記が登場することがあるが、これは「:0000:」の0000を省略したパターンだ。上記の再起動後のアドレスは、「5b3」の部分が影響して桁数が違っているが、この「5b3」の部分は「:」で区切られた先頭の0が省略されたパターンで、本来の値は「05b3」になる。

 では、なぜIPv6のアドレスが変わっているか? についてに、話を戻そう。

 ここで、Windows 10の設定画面からIPv6のアドレスを確認してみよう。[設定]の[ネットワークとインターネット]から[イーサネット(有線の場合)]を開き、[ネットワーク2]などの接続先を選ぶと、プロパティの項目でIPv6のアドレスを確認できる。

 以下の画面は、上と同じPCのプロパティだ。

Windows 10の[設定]からNICに割り当てられたIPv6アドレスを確認できる

 はい。また違う値が登場しました。

  • test-ipv6.com  2409:10:21e0:4600:5b3:c234:3b7f:9b28
  • プロパティ画面  2409:10:21e0:4600:89bd:c25c:1a93:ae11

 果たして、何が正しいのか? 少々、混乱するところだが、これらはどちらも正しいIPv6アドレスで、どちらも実際、通信に使える値となっている。

 試しに、同一ネットワーク内の別のPCからPINGを実行してみる※と、どちらのアドレスでも通信できることが確認できる。

※筆者注:あらかじめ受信側のファイアウォールで「ファイルとプリンターの共有(エコー要求・ICMPv6受信)」の受信規則を有効化しておく必要がある

PINGの様子。どちらのIPv6アドレスでも応答が返ってくる
PINGを実行する時は、受信側のファイアウォールの設定が必要

 この状況を理解するには、[ネットワークと共有センター]から[イーサネット接続]のプロパティを確認するか、コマンドを使うのが手っ取り早い。

「ipconfig」のコマンドを使うと、より詳細な情報を取得できる

 Windows PowerShellやコマンドプロンプトを起動して「ipconfig.exe」を実行すると、PCに割り当てられたIPアドレスを確認できる。ここを読み取ると、先のアドレスが次のようになっていることが分かる。

  • test-ipv6.com  2409:10:21e0:4600:5b3:c234:3b7f:9b28→一時IPv6アドレス
  • プロパティ画面  2409:10:21e0:4600:89bd:c25c:1a93:ae11→IPv6アドレス

 IPv6の説明をちらっと見たことがある人は、IPv6のアドレスが、上位から降ってきたプリフィックスとMACアドレスから生成されたインターフェースIDの組み合わせで構成されるという、「EUI-64」に関する話を聞いたことがあるかもしれない。

 IPv6のアドレスといえば、基本的にグローバルで、しかも固定のアドレスではないのか? という疑問を持つ方もいるかもしれない。だが実は、Windows 10では、普段、通信するときのIPv6アドレスとして、「一時IPv6アドレス」という仕組みが利用されるようになっていて、アダプターの有効/無効を切り替えるタイミングやOS自体の再起動によって、アドレスが変更されるようになっている。

 これは、インターネット上での匿名性を確保するためだ。IPv6アドレスは、グローバルな一意のアドレスとなるため、インターフェースのMACアドレスから生成されるEUI-64のアドレスを使うと、発信元が容易に特定できてしまう。

 普段の通信に、変化する一時IPv6アドレスを使うことで、こうした特定を困難にしているわけだ。このため、インターネット接続を行う際の「test-ipv6.com」では、一時IPv6アドレスが表示されていたことになる。

 なお、上の画面には、もう1つ、リンクローカルIPv6アドレス(fe80::ではじまる値。末尾の%14は不要)もある。これは、同一リンク上でのみ有効なアドレスだ。ローカルネットワーク内であれば、このアドレスで通信することもできる。

 ちなみに、あまり使う機会はないかもしれないが、一時IPv6アドレスは、以下のコマンドで無効にすることも可能になっている(管理者権限のPowerShellから実行)。

Set-NetIPv6Protocol -UseTemporaryAddresses Disabled
一時IPv6アドレスは無効にすることもできる

EUI-64ではない一時IPv6アドレスでプライバシーを保護

 このように、Windows 10では、普段の通信に一時IPv6アドレスが使われるが、固定のIPv6アドレスも同時に使用することができる。

 最近ではあまり使う機会はないと思うが、外出先からリモートデスクトップで接続するときなどには、PCのIPv6アドレスをピンポイントで指定するときに、一時IPv6アドレスではない通常のIPv6アドレスを指定しなければならないことになる。先の例であれば、PCをグローバルに特定できるIPv6アドレスは、「2409:10:21e0:4600:89bd:c25c:1a93:ae11」となるわけだ。

 ここで、このアドレスに注目してみよう。

 IPv6のアドレスは、ルーター(ホームゲートウェイ)などの上位の機器から、アドレス自動設定の仕組みである「RA(Router Advertisement)」で降ってきたプリフィックスと、端末ごとに個別に割り当てられるインターフェースIDから構成される。

 プリフィックスを厳密に判断したいのであれば、ルーターやホームゲートウェイの設定画面を確認するべきだが、簡単に判断したいのであれば、先の一時IPv6アドレスと通常のIPv6アドレスの共通部分から判断すればいい。

きちんとプリフィックスを確認したいなら、ルーターなどで確認するのが確実。画面ではプリフィックス長が「/64(64bit)」なので、128bitの先頭から半分(64bit分)となる前半「2409:10:21e0:4600」がプリフィックス、後半「89bd:c25c:1a93:ae11」がインターフェースIDとなる

 さて、インターネット上でIPv6について検索すると、インターフェースIDについて「端末に搭載されているNICのMACアドレスをベースにしたEUI-64によって生成される」と説明されていることが多い。

 そこで、先の例を見てみよう。Windows 10上のIPv6アドレスは、ご覧の通り、EUI-64のルールとは、どうやら違う値になっているように見える。

  • インターフェースID  89bd:c25c:1a93:ae11
  • MACアドレス  00:15:5d:60:d9:02(画面は-で区切っている)

 EUI-64であれば、48ビットのMACアドレスを真ん中の24ビット目で分け、間に「ff:fe」を挿入し、先頭から7ビット目を反転させるので、次のようなインターフェースIDになるはずだ。

  • EUI-64によるインターフェースID  0215:5dff:fe60:d902

 なぜこれと違っているのかというと、Windows 10を含むVista以降のWindows OSでは、プライバシーの保護のため、インターフェースIDの生成に、ランダム値が使われるようになっていて、MACアドレスをベースにしたEUI-64は使われないためだ。

 試しに、次の画面のように、ランダム構成を無効にしてみると、EUI-64でIPv6アドレスが割り当てられることが確認できる。

「Get-NetIPv6Protocol」を実行すると、IPv6の設定情報を確認できる。「RandomizeIdentifiers」が「Enable」なので、IPv6のインターフェースIDがランダム化される
RandomizeIdetifiersを無効化すると、EUI-64によって生成されたIPv6アドレスが割り当てられる

 ただし、ランダム化と言っても、生成時にランダム値が使われるというだけで、先に触れた一時IPv6アドレスのように、再起動のたびに変更されるものではないため、ほぼ固定されたアドレスとして利用できることになる。では、なぜランダム化するのかというと、端末特定の手掛かりになる可能性があるMACアドレスが外部に漏れないようにするためだ。

ルーターからの割り当て方法は? IPv6は外から丸見え?

 以上、IPv6の基本について、単なるお勉強ではなく、実際の値を見ながら、その仕組みを簡単に説明した。

 IPv6に関しては、まだルーターから端末にどうやって割り当てられるのか? また、外出先から端末に直接アクセスできてしまうのではないか? といった疑問があることだろう。こうした点についても、今後タイミングを見て解説していきたいと思う。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できる Windows 10 活用編」ほか多数の著書がある。