我们的Windows服务器正在AAAA
向我们的Windows DNS服务器注册IPv6 记录。但是,我们没有在网络上启用IPv6路由,因此这经常会导致停顿行为。
Microsoft RDP是最严重的违规者。当连接到AAAA
在DNS 中有记录的服务器时,远程桌面客户端将首先尝试IPv6,直到连接超时才回退到IPv4。超级用户可以通过直接连接到IP地址来解决此问题。使用解析IPv4地址ping -4 hostname.foo
始终可以立即生效。
我该如何避免这种延迟?
- 在客户端上禁用IPv6?
- 不会,微软表示IPv6是Windows操作系统的必需部分。
- 太多的客户无法确保在所有地方都设置一致。
- 当我们最终实现IPv6时,将导致更多问题。
- 在服务器上禁用IPv6?
- 不会,微软表示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通信完全无法正常工作的原因。