• 03/12/2022
  • Homesmartjp
  • 897 Views

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 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アドレスは無効にすることもできる