WindowsサーバーはAAAA
、Windows DNSサーバーにIPv6 レコードを登録しています。ただし、ネットワークでIPv6ルーティングが有効になっていないため、これによりストールが頻繁に発生します。
Microsoft RDPは最悪の犯罪者です。AAAA
DNSにレコードがあるサーバーに接続する場合、リモートデスクトップクライアントは最初にIPv6を試行し、接続がタイムアウトするまでIPv4にフォールバックしません。パワーユーザーは、IPアドレスに直接接続することでこの問題を回避できます。でIPv4アドレスを解決すると、ping -4 hostname.foo
常に即座に機能します。
この遅延を回避するにはどうすればよいですか?
- クライアントでIPv6を無効にしますか?
- いいえ、MicrosoftはIPv6がWindowsオペレーティングシステムの必須部分であると言います。
- これが一貫してどこにでも設定されるようにするためのクライアントが多すぎます。
- 後でIPv6を実装すると、さらに多くの問題が発生します。
- サーバーでIPv6を無効にしますか?
- いいえ、MicrosoftはIPv6がWindowsオペレーティングシステムの必須部分であると言います。
- IPv6スタック全体を無効にするには、不便なレジストリハックが必要です。
- これをすべてのサーバーで正しく設定するのは不便です。
- 後でIPv6を実装すると、さらに多くの問題が発生します。
- ユーザー向けDNS再帰のIPv6レコードをマスクしますか?
- いいえ、NLNet Unboundを使用していますが、それをサポートしていません。
- Microsoft DNSサーバーへのIPv6 AAAAレコードの登録を禁止しますか?
- それが可能だとは思わない。
この時点で、DNSゾーンからすべてのAAAAレコードを削除するスクリプトの作成を検討しています。より良い方法を見つけてください。
更新: DNS解決は問題ではありません。@joeqwertyが答えで指摘しているように、DNSレコードは即座に返されます。どちらA
とAAAA
レコードがすぐに利用できます。問題は、一部のクライアント(mstsc.exe
)が優先的にIPv6経由で接続を試行し、IPv4にフォールバックするまでに時間がかかることです。
これはルーティングの問題のようです。ping
宛先アドレスがルーティング不可能であるため、コマンドは、「一般的な失敗」のエラーメッセージを生成します。
C:\Windows\system32>ping myhost.mydomain
Pinging myhost.mydomain [2002:1234:1234::1234:1234] with 32 bytes of data:
General failure.
General failure.
General failure.
General failure.
Ping statistics for 2002:1234:1234::1234:1234:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
この動作のパケットキャプチャを取得できません。この(失敗した)pingコマンドを実行しても、Microsoftネットワークモニターでパケットは生成されません。同様に、レコードmstsc.exe
を持つホストへの接続を試行しAAAA
ても、IPv4にフォールバックするまでトラフィックは生成されません。
更新:ホストはすべて、パブリックルーティング可能なIPv4アドレスを使用しています。この問題は、6to4構成が壊れている可能性があると思います。6to4は、パブリックIPアドレスとRFC1918アドレスを持つホストでは異なる動作をします。
更新:私のネットワークには、間違いなく6to4で怪しいものがあります。Windowsクライアントで6to4を無効にすると、接続はすぐに解決します。
netsh int ipv6 6to4 set state disabled
しかし、@ joeqwertyが言うように、これは問題を隠すだけです。私たちのネットワークでのIPv6通信が完全に機能しない理由を今でも探っています。