![windows dns 缓存服务器:以编程方式刷新单个区域的 dns 缓存](https://linux22.com/image/610599/windows%20dns%20%E7%BC%93%E5%AD%98%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E5%88%B7%E6%96%B0%E5%8D%95%E4%B8%AA%E5%8C%BA%E5%9F%9F%E7%9A%84%20dns%20%E7%BC%93%E5%AD%98.png)
在 bind9 中,我可以从 shell 中使用 rndc flushname zone.tld。
在 Windows DNS mmc 中,我可以选择该区域并将其删除。
使用 dnscmd 我可以刷新整个缓存,但我只需要时不时刷新一个区域的缓存。
有可能吗?怎样做?TIA
答案1
DNSCmd.exe 用于显示和更改 DNS 服务器、区域和资源记录的属性。您可以找到详细的语法这里。尽管我很想对此给出适当的参考和解释,但我通过随机谷歌搜索、反复试验找到了它:缓存查找似乎内部存储在名为 ..Cache 的区域中,并且每个缓存区域只是“..Cache”下的一个节点,因此正确的使用开关是/节点删除:
dnscmd dnsserver.local /NodeDelete ..Cache whatever.com [/Tree] [/f]
/tree Specifies to delete all of the child records.
/f Executes the command without asking for confirmation.
不过,如果有人能在 MS 官方文档中找到“..cache”,那就太酷了。
答案2
恐怕从编程角度来说,您必须求助于/clearcache
。
dnscmd
没有内置该功能,并且没有明显的API 规范这表明这种行动已经暴露
您可以从 GUI 执行此操作,但我怀疑这是否有帮助
要从 Windows DNS 服务器查看和删除缓存条目:
- 打开 DNS 管理控制台 (
dnsmgmt.msc
) - 前往看法菜单,然后选择先进的
- 在左侧窗格中展开您的 DNS 服务器条目
- 扩张缓存查找
- 要删除缓存记录或整个区域,只需右键单击并选择“删除”
对于权威服务器,您可以刷新或重新加载区域数据,具体取决于源类型。
对于从主服务器刷新区域数据的辅助名称服务器:
dnscmd dns1.domain.tld /zonerefresh my.zone.domain.tld
对于活动目录集成区域,从 AD 重新加载区域数据:
dnscmd dns1.domain.tld /zonereload my.zone.domain.tld
假设你的 dns 服务器的 fqdn 是dns1.domain.tld.
并且my.zone.domain.tld.
是区域的 fqdn