清水理史の「イニシャルB」
IPv6で通信できてる? 自分のアドレスは? 実は固定じゃない? 自宅のIPv6環境をチェックしてみよう!
2018年12月25日 06:00
混雑回避などの理由から、「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が使えていることが確認できる。
通常は、ここまでで十分だが、せっかくなので、もう少し自宅のIPv6環境をチェックしてみよう。
単なる接続だけでなく、IPアドレスなどまで確認したいときによく使われるのは、「https://www.test-ipv6.com」などのウェブサイトだ。IPv4、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」にアクセスしてみてほしい。
上の画面は、先の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のプロパティだ。
はい。また違う値が登場しました。
- test-ipv6.com 2409:10:21e0:4600:5b3:c234:3b7f:9b28
- プロパティ画面 2409:10:21e0:4600:89bd:c25c:1a93:ae11
果たして、何が正しいのか? 少々、混乱するところだが、これらはどちらも正しいIPv6アドレスで、どちらも実際、通信に使える値となっている。
試しに、同一ネットワーク内の別のPCからPINGを実行してみる※と、どちらのアドレスでも通信できることが確認できる。
※筆者注:あらかじめ受信側のファイアウォールで「ファイルとプリンターの共有(エコー要求・ICMPv6受信)」の受信規則を有効化しておく必要がある
この状況を理解するには、[ネットワークと共有センター]から[イーサネット接続]のプロパティを確認するか、コマンドを使うのが手っ取り早い。
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
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アドレスの共通部分から判断すればいい。
さて、インターネット上で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アドレスが割り当てられることが確認できる。
ただし、ランダム化と言っても、生成時にランダム値が使われるというだけで、先に触れた一時IPv6アドレスのように、再起動のたびに変更されるものではないため、ほぼ固定されたアドレスとして利用できることになる。では、なぜランダム化するのかというと、端末特定の手掛かりになる可能性があるMACアドレスが外部に漏れないようにするためだ。
ルーターからの割り当て方法は? IPv6は外から丸見え?
以上、IPv6の基本について、単なるお勉強ではなく、実際の値を見ながら、その仕組みを簡単に説明した。
IPv6に関しては、まだルーターから端末にどうやって割り当てられるのか? また、外出先から端末に直接アクセスできてしまうのではないか? といった疑問があることだろう。こうした点についても、今後タイミングを見て解説していきたいと思う。