ITよろづや

ITから生活の参考になる情報を備忘録代わりに残していきます

IPv4を優先するコマンドで1行追加後Windowsを再起動するとlocalhostの名前解決がIPv6になる

Windowsを利用している環境ではまだIPv6を使うことがなく、いまだに無効化することが多いですが、その中で、Windows Server 2019でIPv4を優先するコマンドで1行追加後Windowsを再起動するとlocalhostの名前解決がIPv6になるという事象が発生しました。

 

ネットでIPv4優先とかで検索すると色んなブログやサイトがIPv4を優先する設定について説明しています。

 

まず、この設定を行う理由ですが、デフォルトでlocalhostPingを実行すると以下のようにIPv6で応答があります。これがアプリケーションによっては問題を引き起こすことがありますので、IPv4を優先することが多いです。

-----

C:\Users\****>ping localhost
PC [::1]に ping を送信しています 32 バイトのデータ:
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms
-----
 
ここでIPv4を優先するように設定するわけですが、「netsh interface ipv6 show prefixpolicies」で確認すると以下の設定がデフォルトになっています。9行設定がありますが、ここで、IPv4IPv6 より優先させるには、::ffff:0:0/96 の IPv4 マップの優先順位を、::1/128 のループバックより上位に変更することで、localhost127.0.0.1で応答が帰ってくるようになります。
 
-----
>netsh interface ipv6 show prefixpolicies
アクティブ状態を照会しています...
 
優先順位   ラベル  プレフィックス
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        35      4  ::ffff:0:0/96
        30      2  2002::/16
         5      5  2001::/32
         3     13  fc00::/7
         1     11  fec0::/10
         1     12  3ffe::/16
         1      3  ::/96
-----
 
ただし、ネットで以下の一行だけいれるという情報がありましたが、設定時は問題なく動作するのですが、OSを再起動すると1行だけになり、さらに、応答がIPv4ではなくIPv6になるという動作が確認できましたので、設定時には注意してください。
 
NG例
> netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 50 0
 
設定するなら全行入れるのがいいのではないかと思います。
 

netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 60 4
netsh interface ipv6 set prefixpolicy ::1/128 50 0
netsh interface ipv6 set prefixpolicy ::/0 40 1
netsh interface ipv6 set prefixpolicy 2002::/16 30 2
netsh interface ipv6 set prefixpolicy 2001::/32 5 5
netsh interface ipv6 set prefixpolicy fc00::/7 3 13
netsh interface ipv6 set prefixpolicy fec0::/10 1 11
netsh interface ipv6 set prefixpolicy 3ffe::/16 1 12
netsh interface ipv6 set prefixpolicy ::/96 1 3

 

ちなみに、1行だけになってしまって復旧したい場合は、setをaddに変えると起動中に元に戻せます。「netsh interface ipv6 reset 」で初期化できますが、OSの再起動が必要なので注意してください。