IPv4とIPv6の優先度を切り替える方法(Windows10)


前置き

この記事は個人的に躓いたものをメモとして残しています。

筆者はIT初心者の為使用している用語が間違っていたり、わかりづらい説明となっている部分もありますがご了承ください。

※2020年12月に投稿しました。

背景

  • Windowsの設定でIPv6は無効化されている。

  • localhostを使用してDB接続を行おうと思ったが、localhostがなんとかってエラーが発生して優先度を確認したところIPv6の優先度がIPv4よりも高くなっていた為、優先度変えよってなった。

使用PC

Windows 10 Pro

対応方法

➀ cmd(コマンドプロンプト)を起動する。

➁ 自分自身(localhost)にpingを飛ばす。

ping localhost 

実行結果

::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms  

::1 というのはIPv6です。
IPv4の場合は基本的には 127.0.0.1 が返ってきます。

➂ IPアドレスの優先度を確認する

netsh interface ipv6 show prefixpolicies

実行結果

優先順位   ラベル  プレフィックス
----------  -----  --------------------------------
        50      0  ::1/128  ←IPv6
        40      1  ::/0
        35      4  ::ffff:0:0/96  ←IPv4
        30      2  2002::/16
         5      5  2001::/32
         3     13  fc00::/7
         1     11  fec0::/10
         1     12  3ffe::/16
         1      3  ::/96

こんな感じに現在のIPの優先度が表示されます。

優先度50にIPv6[::1/128]が設定されているため、ping localhostコマンドでIPv6が返ってきています。

※今回はIPv4[::ffff:0:0/96]が一番上にくるように設定していきます。

➃ cmd(コマンドプロンプト)を管理者モードで起動する

➄ IPアドレスの優先度を変更する(要管理権限)

netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 50 0
netsh interface ipv6 set prefixpolicy ::1/128 40 1
netsh interface ipv6 set prefixpolicy ::/0 30 2
netsh interface ipv6 set prefixpolicy 2002::/16 20 3
netsh interface ipv6 set prefixpolicy ::/96 10 4

IPv6[::1/128]の優先度を40に、
IPv4[::ffff:0:0/96]の優先度を50に設定しました。

※今回はIPv4以外の部分も変えていますが、IPv4[::ffff:0:0/96]の優先度を50以上にするだけでOKです。

➅ 変更されているかIPアドレスの優先度を確認する

実際に変わっているか確認しましょう
※実行するコマンドは➂と同じです。

netsh interface ipv6 show prefixpolicies

実行結果


優先順位   ラベル  プレフィックス
----------  -----  --------------------------------
        50      0  ::ffff:0:0/96  ←IPv4
        40      1  ::1/128 ←IPv6
        30      2  ::/0
        20      3  2002::/16
        10      4  ::/96
         5      5  2001::/32
         3     13  fc00::/7
         1     12  3ffe::/16
         1     11  fec0::/10

これでIPv4の方が優先度が高くなりました。

➆ 改めて自分自身(localhost)にpingを飛ばす。

ping localhost

実行結果

127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128

ちゃんとIPv4になってますね!

これでIPv6からIPv4への優先度の変更は完了です

あとがき

今回は自分が詰まったトラブルの対応としてIPv4とIPv6の優先度を切り替えるという手法を書かせていただきました。

筆者はcmdとかナニソレオイシイノ?って感じなので、
このメモが同じようなトラブルで困ってる方の手助けになれば嬉しいです。

では!