我在 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 分钟)
答案1
如果您启用了 Active Directory 的 DNS,您确定查询的 DNS 服务器与您写入更改的服务器相同吗?如果不是,请确保您留出时间进行复制。
如果它未启用 AD,您是否会在查询之前关闭 DNS 控制台?我很确定我读过一些关于更改只有在关闭它时才会提交的内容 - 听起来很疯狂,不是吗,但我从未使用过非集成 DNS,所以我从来没有能够或需要测试这一点。
编辑
是这你用的是什么?上面写着“当设置了 DNS_QUERY_STANDARD 选项时,DNS使用解析器缓存,首先使用 UDP 进行查询,然后如果响应被截断则使用 TCP 重试,并请求服务器代表客户端执行递归解析以解析查询。”
如果您在进行更改之前查找过记录,它将位于您的本地 DNS 缓存中。如果您使用此选项,该功能将检查您的缓存,并且如果在缓存中找到记录,则不会转到服务器。
ipconfig /flushdns
应该清除你的缓存。
ipconfig /displaydns
将显示所有缓存记录。
如果这不能解决问题,情况会变得更加复杂,因为 DNS 服务器也可以缓存记录,这取决于它们的配置。
如果您已做出更改并且(原始)TTL 期限已过期(届时它应该从所有缓存中消失)而您仍然没有在 DNSQuery 中看到它,我会与您的 DNS 管理员联系。