两台运营着近4000个区域的 DNS Server 最近特别不正常,经常出现 DNS ID3000、ID9999的警告,并且辅助 DNS Server 上的 DNS 进程经常 Crash,确实令人感到头疼,决心对 DNS Server 进行维护,由于存在的区域实在海量,之前辅助 DNS 进行过迁移和修复,数据应该会存在错误,毕竟是通过导出的主 DNS 数据,重新导入到辅助 DNS 上并通过命令行批量修改为辅助区域,当时考虑可能欠妥,这次维护决定彻底干掉辅助 DNS 上的所有区域通过命令行直接创建辅助区域而不是通过之前的修改区域类型,此外主 DNS 上的区域也要做相应的调整,指定区域复制范围为指定的辅助DNS地址,调整SOA中的区域刷新间隔、重试间隔及过期间隔,其中最重要的就是过期间隔,因为这个值过小导致辅助DNS彻底瘫痪(超出间隔时间,辅助DNS便无法正常解析域名),手工进行区域恢复相当麻烦,这次配置过期间隔为4天(345600秒)。
OK,具体操作流程如下:
在主DNS上导出列表为csv格式,并下载到本地工作站上用 execl 进行修改,并创建名为ctdns.bat(修改区域复制范围)、edsoadns.bat(修改soa相关项)及addsdns.bat(创建辅助区域)三个批处理文件。
在主 DNS 上执行ctdns.bat,其内容大致如下:
dnscmd . /zoneresetsecondaries zonename /securelist ip_address
注意:其中“.”代表本地主机,zonename则为区域名称(域名),ip_address为辅助DNS的IP地址
接下来再执行 edsoadns.bat,其内容大致如下:
dnscmd . /recordadd zonename nodename SOA PrimSvr Master_Mail_Address 1 3600 600 345600 3600
注意:nodename 是 dns 命名空间中节点的 FQDN,可以使用对应的 zonename 或 @;PrimSvr 为指定服务器的 FQDN 名称,如:ns1.maytide.net.(建议:结尾处加上“.”);Master_Mail_Address为管理员的邮件地址;1 为区域版本信息;3600为刷新间隔;600为重试间隔;345600为过期间隔;3600为最小生存时间(TTL)。此外还应该注意的是当修改SOA中的某个资源值时,必须指定所有的SOA项值!
最后删除辅助 DNS 上所有的辅助区域,并执行 addscndns 重新添加,其大致内容如下:
dnscmd . /zoneadd zonename /secondary Master_DNS_IP_Address /file filename
注意:“/secondary”即指定添加的区域类型为辅助类型;Master_DNS_IP_Address 为主 DNS 的 IP 地址;“/File” 指定该辅助区域的文件名,为可选项,为了便于管理我在此使用了这个参数,filename的命名规则为zonename.dns使用.dns扩展名可以方便的识别和使用,否则有些区域为.com那可就会出现一些意外的小惊喜了。
到这里这次 DNS 的维护就算是结束了,辅助 DNS 上的区域完全对应主 DNS上的,近期作一下重点观察,看看还会不会出现一些警告事件!
要了解更多的相关命令参数可以参考微软官方的技术资源库: