我在dns管理中修改了A类型的特定主机记录的TTL值--右键单击该记录-->属性-->更改了TTL值。但是当我调用 DNSQuery() 函数来检索该记录的修改后的 TTL 值时,我得到了相同的默认 TTL 值。
但是当我在 dns 管理中查看该记录的 TTL 值时,它只显示修改后的值..
更改特定 dns 记录的 TTL 后,我需要重新启动 DNS 服务吗?
如果我在更改 TTL 时遗漏了任何步骤,请纠正我......
感谢你的关心。我遵循的步骤:
将 RR 的 ttl 从 20 分钟更改为 24 分钟,超过 20 分钟后,我调用了以下查询
ulRet = DnsQuery(
hName.c_str(),
DNS_TYPE_A,
DNS_QUERY_BYPASS_CACHE,
pSrvList,
&pHost,
NULL
);
dnsTTL=pHost->dwTtl;
cout<<"Current DNS TTL value"<<dnsTTL<<"\n";
但我仍然将输出作为当前 DNS TTL 值 1200(意味着 20 分钟以秒为单位)而不是 1440 秒(意味着 24 分钟)
如果您启用了 Active Directory 的 DNS,您确定要查询与写入更改相同的 DNS 服务器吗?如果没有,请确保您有时间进行复制。
如果它没有启用 AD,您是否在查询前关闭了 DNS 控制台?我很确定我读到了一些关于在您关闭它之前不会提交更改的内容 - 听起来很疯狂,不是吗,但我从来没有使用过非集成 DNS,所以我从来没有能力或需要对此进行测试。
编辑
这是你用的吗?它说“当设置了 DNS_QUERY_STANDARD 选项时,DNS使用解析器缓存,首先使用 UDP 查询,然后在响应被截断时使用 TCP 重试,并请求服务器代表客户端执行递归解析以解析查询。”
如果您在进行更改之前查看了记录,它将在您的本地 DNS 缓存中。如果您使用此选项,该功能将检查您的缓存,如果在其中找到记录,则不会转到服务器。
应该清除您的缓存。
将显示所有缓存的记录。
如果这不能解决问题,它会变得更加复杂,因为 DNS 服务器也可以缓存记录,具体取决于它们的配置。
如果您进行了更改并且(原始)TTL 期限已过期(到那时它应该在所有缓存之外)并且您仍然没有在 DNSQuery 中看到它,我会与您的 DNS 管理员交谈。