IPv6 が IPv4 より優先されてしまう

お世話になります。

類似の質問も見ましたが、微妙に内容が異なるため、新規で質問いたします。

■質問内容

内向き DNS サーバーによる名前解決時に IPv6 が IPv4 より優先されてしまう。

IPv4 を優先するにはどうしたらよいでしょうか。

※インターネットへの接続は可能です。

※ネットワーク接続の設定で対象の NIC のプロパティから IPv6 を無効にすると、正常に名前解決がおこなえます。

■状況

以下のように nslookup を実行しても、名前解決ができません。

----

C:\Users\xxxx>nslookup xxx.xx(※内部ネットワークのみで使用できるドメインを指定します)
サーバー:  UnKnown
Address:  xxxx:xx:xxxx:xxx:xxx:xxxx:xxxx:xxxx(※IPv6 アドレスが表示される)

*** UnKnown が xxxx.xx を見つけられません: Non-existent domain
----

以下のサイトに、IPv6 のプレフィックスの優先順位を変更することで IPv4 を優先できるということで設定してみました。

参考サイト: http://www.vwnet.jp/Windows/w7/IPv4/IPv4PriorityUP.html

----

C:\Users\xxxx>netsh interface ipv6 show prefixpolicies
アクティブ状態を照会しています...

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

プレフィックス設定の変更が反映されていることを確認。

----

C:\Users\xxxx>ping localhost

PC [127.0.0.1]に ping を送信しています 32 バイトのデータ:
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

127.0.0.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms
----

しかし、この状態でも状況は変わらず、名前解決ができませんでした。

■環境

クライアント OS: Windows 8.1 Pro 64bit

クライアントのネットワーク設定: IPv4 のみ、内部ネットワークに構築した DNS サーバーを参照(それ以外は変更なし)

DNS サーバー: 内向き専用で、IPv6 には非対応

ルーター: NTT光電話ルーター(PR-500KI)

■判明したこと

・IPv6 を無効化することで名前解決ができることから、DNS サーバー側の問題ではない

・IPv6 が優先されてしまうため、IPv4 に設定した内向き DNS サーバーが参照されず、結果として名前解決ができない

・IPv6 のプレフィックス設定の変更は有効になっているのに、なぜか NIC の IPv4 設定が優先されない

■備考

現時点で考えられる回避策は以下のとおりです。

・ネットワーク接続の NIC のプロパティで IPv6 を無効化

・DNS サーバーを IPv6 に対応させる

ただし、上記の方法は極力避けたいと考えています。

あくまで、実現したい内容は「IPv4 と IPv6 がともに有効な状態で、IPv4 を優先して通信をおこなう」ということです。

以上、よろしくお願いいたします。

 

質問情報


最終更新日 2019年6月13日 表示 23,579 適用先:

​RyoKawase さん、こんにちは。
マイクロソフト コミュニティをご利用いただき、ありがとうございます。

IPv6 が優先されてしまうということなのですね。

この現象についてお調べしたところ、この問題を解消するための修正プログラムがあるようなので、次のサポート ページの Fix it を実施するとよいかもしれません。

世界 IPv6 が (2012 年 6 月 6 日) を起動した後はインターネット接続の問題を解決します。
※ [ダウンロード] のアイコンが 2 つありますが、上が Fix it 50410 (IPv4 を優先する) で、下が Fix it 50411 (IPv6 を優先) です。

もし、手動で行うということであれば、 「netsh interface ipv6 show prefixpolicies」 でポリシーテーブルの設定をリセットして再起動するとよいです。

リセット後に、 RyoKawase さんが参考にしていただいた 【 こちらのページ 】 で紹介されているコマンドを実行して、ポリシーテーブルの優先順位を変更するとよいと思います。

※ ページから引用
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

返信お待ちしています。

大沢 孝太郎– Microsoft Support

この回答は 4 人の役に立ちました

·

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

大沢孝太郎さん、ご返信ありがとうございます。

質問文を一部お読みいただいていないようです。

長文になってしまったためかと思いますので、再度お伝えいたします。

「netsh interface ipv6 show prefixpolicies」はすでに実施済みです。

以下がその結果で、すでに IPv4 が優先になっています。

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

初回の質問にも記載しましたが、「ping localhost」を実行した際には、IPv4 である「127.0.0.1」に ping が送信されます。

上記の結果になるにもかかわらず、DNS サーバーを参照する際に IPv6 が優先されてしまいます。

また、ご紹介いただいた以下のサポートページもすでに見ていたのですが、これは「netsh interface ipv6 show prefixpolicies」を手動でおこなうのと何か違うのでしょうか?

さらに、このページの内容は Windows 8.1 を対象にしていないようなのですが、実施しても問題ないものなのでしょうか?

■世界 IPv6 が (2012 年 6 月 6 日) を起動した後はインターネット接続の問題を解決します。

以上、よろしくお願いいたします。

この回答は 1 人の役に立ちました

·

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

RyoKawase さん

Windows8.1を持っていないので、画面説明できませんが、「ネットワーク接続」-「詳細設定」タブに「アダプターとバインド」という画面があります。

そこで、優先順位を選べませんか?

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

LonelyRaccoon さん、ご返信ありがとうございます。

確認したところ、はじめから IPv4 が優先になっているようです。

ちなみに、私の環境は NIC が 2 ポート(オンボード)あります。

ただし、どちらも同一セグメント上にあり、片方の NIC を無効にしても問題は解消しません。(一応再起動して確認しました。)

※オンボード上に Wi-Fi アダプタがついているマザーボードのため、接続の種類に「Wi-Fi」が出てきていますが、接続はしておらず使用しておりません。

以上、ほかに何か手がかりになることがありましたら教えていただけると幸いです。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

LonelyRaccoon さんからのアドバイスに従い、「アダプターとバインド」の設定も確認しましたが、IPv4 が優先されているようです。

もうこれは、DNS 参照用途に関しては、無条件に Windows 8.1 が IPv6 を優先するように固定されている(仕様)ということなのでしょうか?

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

RyoKawase さん、こんにちは。
返信いただき、ありがとうございます。

大沢 が紹介した Fix it と手動で行うコマンドとはおそらく同じ内容かと思うのですが、Fix it で自動的に実施される内容の詳細についてはっきりした情報がありませんでした。

もしかすると、今回の問題に対して効果がある可能性があり、Windows 8.1 でも実行できますので、よろしければ実施してみていただければと思います。

なお、今回の内容でしたら、IT 管理者が多く利用する TechNet フォーラムへ質問を投稿してみると情報が集まりやすくなるかもしれません。

TechNet フォーラム

また、この件で何か情報をお持ちの方がいらっしゃれば、書き込みお待ちしています。

藤田 香 – Microsoft Support
問題が未解決の場合は、その旨お知らせください。引き続き、解決に向けて手助けをさせていただきます。
問題の解決に役立った場合は、その返信を回答としてマークしてください。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

IPv6のソースルーティングの話と、名前解決の優先度の話を取り違えています。

以下のようになっていませんか?

IPv4側のDNS設定:内向きのDNS

IPv6側のDNS設定:自動取得

NTT光電話ルーター(PR-500KI)をお使いということですが、この場合、IPv6が有効でIPv6側のDNS設定が自動設定になっている場合には、そのPCが使うデフォルトのDNSはDHCPv6でPR-500KIから配布されたIPv6アドレスのDNSが最優先で使用されます。内向きのDNSにはタイムアウトや負荷分散等でアクセスするだけになっているはずです。

気休めですが、念のため、nslookupコマンドを使用する際に、DNSサーバ名をオプション指定してみることをお勧めします。

nslookup  ホスト名 DNSサーバのIPアドレス

たぶん、内向きのDNSではなく、PR-500KIのDNS Proxyに問い合わせに行っているはずです。

あと、Windows 8/8.1のネットワークの仕様は次のようになっています。

1.Windowsは、30日おきまたは特定のトリガで、Microsoft によりホストされた IPv6のIPアドレスのみを持つ特定のサーバーに対する名前解決と簡単な HTTP GETによるネットワーク接続テストを実行する。

2.テストにおいて、ホスト名からIPv6のIPアドレスを取得でき、IPv6で実際に接続できるときにはIPv6を優先的に使用する。

3.テストにおいて、ホスト名からIPv6のIPアドレスを取得できなかったり、IPv6でサーバに接続できなかったりした場合には、IPv4を優先する。

よって、IPv6のIPアドレスで名前解決ができ、そのアドレスと通信できる場合には、IPv6が優先されるのが仕様になっています。

確か、MSDN のBlog記事に該当する仕様についての記事があったのですが、記事が削除されたのか、こちらで控えていたURLが無効になっていましたので、ソースは書かないでおきます。

なお、確かWindows10も同じ仕様だったはずです。

IPv6で接続できる環境なのに、DNSの応答でIPv4を優先したいのであれば、ルータのDNSキャッシュサーバ機能等でAAAA応答をフィルタするなどの対応が必要になります。ISPによっては、AAAA応答をフィルタしたDNSキャッシュサーバを提供している場合があります。

IPv6で正常に接続できない環境であるのにDNSのAAAA応答が来ることで問題になるのであれば、IPv6を無効にするしか方法がありません。

この回答は 2 人の役に立ちました

·

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

藤田 香 さん、アドバイスありがとうございます。

Fix it を試してみましたが、やはりだめでした。

Fix it を試す前から出ている現象として、LAN 内のウェブサーバーで公開しているサイトを閲覧する際、まったく接続できないのではなく、時間が経過すると接続できるようになります。

しかしそれも不安定で、ブラウザをリロードすると接続できなくなったりします。

つまり、

接続できない => (時間経過)=> 接続される => (時間経過)=> 再び接続できなくなる

といった調子です。

教えていただいた TechNet フォーラムの利用も検討しようと思います。

ありがとうございました。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

Takashi NISHIIE さん、ご返信ありがとうございます。

確かに、パケット経路と名前解決に関して混同してしまっていたようです。
今まで試してきた方法はすべてソースルーティングに関する設定だったのですね。腑に落ちました。

ただ、いくつかまだ疑問点があります。

・現在、わたしの環境は IPv6 が利用できない状態にあること

・クライアントマシンの DNS サーバーとして、自分で構築した内向き DNS サーバーの IP アドレスのみを指定していること

PR-500KI の設定を見ると、IPv6 設定は「待機中」と表示されます。

この「待機中」の意味は、PR-500KI の設定画面内に以下のように書かれています。

----

ご契約のプロバイダが、本商品を利用したインターネット(IPv6 PPPoE)を提供していない場合は、"待機中"と表示されます。

----

プロバイダは @nifty で、「IPv6接続サービス」には契約中ですし、PR-500KI も IPv6 に対応しています。

そのため、本来 IPv6 が利用できる状態のはずなのですが、PR-500KI の設定画面には利用できない状態を示すステータスが表示されているということになります。

自分で構築した DNS サーバーは IPv6 対応しておらず、DNS サーバー内部の forwarders 設定で PR-500KI に飛ぶようにしています。

その PR-500KI が IPv6 対応していないとなると、DNS の応答は IPv4 になると思うのですが、いかがでしょうか。

また、現在 PR-500KI で IPv6 が利用できない件については、プロバイダに問い合わせ中です。

場合によっては NTT にも問い合わせる必要が出てくるため、状況の整理にもう少し時間がかかりそうです。

進捗がありましたらまたこちらで報告いたします。

この回答は 1 人の役に立ちました

·

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

「待機中」と表示されているPR-500KIの設定画面は、IPv6 PPPoEの接続設定画面です。
NTTのフレッツ光系サービスで@Niftyと契約をしていてPR-500KIを使用しており、@niftyの「IPv6接続サービス」でIPv6接続しているのであれば、IPv6 PPPoEではなく、IPv6 IPoEによるIPv6サービスになりますので、IPv6 PPPoEの設定をしてはいけません。この場合、正しく手続きされていれば、IPv4 PPoEの認証設定とPR-500KIの光回線認証だけIPv6でインターネットが使えます。

よくあるのが、新規にIPv6契約したのであれば、NTTの回線認証でID/アクセスキーが間違っていたことによる不通です。NTT関連の手続きが正常に行われていないと、なかなか開通しないということはあるようです。

うちは、PR-500KIで@Niftyという同じような環境で通信できていますので、IPv6で通信できないのは手続きや設定の問題でしょう。

「接続できない => (時間経過)=> 接続される => (時間経過)=> 再び接続できなくなる」の件については、おそらく、IPv6側のDNSの結果がPCのDNS Clientサービスにキャッシュされているか、内向き用のIPv4側のDNSの結果がPCのDNS Clientサービスにキャッシュされているかという2つの状態が交互に繰り返されていることによるものでしょう。

場合によっては、内向きのDNSを利用するのではなく、\Windows\System32\Drivers\etc\hostsにローカルのホスト名とIPアドレスを登録したほうが、安定するでしょう。

この回答は 6 人の役に立ちました

·

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。