在如今的企业级场景与互联网场景里面, 主力的DNS服务器配置软件,一共有五款, 包括BIND 9、PowerDNS(Authoritative)、Microsoft DNS、CoreDNS, 还有Unbound。
这个选型的核心逻辑是, 对于云原生容器的场景可以选择CoreDNS, 在企业Windows域名内网环境里面选择Microsoft DNS, 如果是高并发的权威解析需求那就选择PowerDNS或者BIND9, 在安全递归解析方面呢则选用Unbound。
五款主流DNS服务器配置软件对比
各个软件的重要的要点需要说明清楚的状况。
BIND9这个软件是当前在互联网上部署数量最多的DNS服务器程序, 它全面支持协议簇, 包括TSIG、DNSSEC以及RPZ, 用户的核心配置工作是通过named.conf文件和区域数据文件来进行的, 这种架构特别适合那些既需要完全兼容各种既有协议, 又希望尝试实验性新功能的场景使用。
PowerDNS(Authoritative)采用了Lua脚本, 还使用了PostgreSQL或MySQL这些后端数据库来进行驱动。它能够支持动态的解析规则, 也支持多区域的管理。这款服务器很适合那些需要频繁变更记录的企业, 特别是在每秒查询数很高的情况下, 把它作为企业权威服务器来使用是合适的。
MicrosoftDNS和Active Directory的深度绑定关系, 使得运维工作看起来并不复杂, 因为它的运维门槛是低的, 并且它提供了MMC图形化界面, 支持条件转发、安全区域与动态更新, 这也就确立了它在Windows域环境下作为标准DNS方案的地位。
CoreDNS用的是YAML这种声明式的配置方式, 它的架构是可以插拔插件的, 它能跟Kubernetes里面的Service机制和Endpoints机制原生就集成在一起, 它还能支持开发者自己去扩展自定义的插件, 所以, 现在大家在部署容器化的集群的时候, CoreDNS就是大家首选的那个DNS方案。
Unbound这个名字主要就是把重点放在了对递归解析这个动作的专心致志上, 它里面是自带了对于DNSSEC这种验证方式的支持的, 同时也提供针对RATP这种攻击的保护能力, 并且还允许你去使用EDNS0以及IPsec这些东西, 所以如果是要拿它来作为公开的递归服务器用的话, 或者是作为ISP的那些边缘节点的话, 那这个选项是非常合适的。
按场景快速选型
K8s/Docker容器集群 → CoreDNS
在Windows Active Directory域内网的环境下, 接下来会使用Microsoft DNS。
在关于互联网域名的权威解析这一方面, 如果遇到需要支持多个区域, 以及面对高并发的使用场景时, 当前的一个比较主流的选择是采取PowerDNS, 或者是选取BIND 9这一解决方案。
公共递归/边缘解析(需DNSSEC验证)→ Unbound
需RPZ策略、协议实验与完整RFC支持 → BIND 9
DNS服务器配置核心要点
不管最后到底是使用哪一款软件, 在对其进行相应配置的时候, 必须并且得要重点关注下面说列出的这五个方面的事宜。
1. 解析记录与TTL: 我们需要去确保A记录、AAAA记录、CNAME记录、MX记录以及TXT记录和SRV记录的准确性, 关于TTL, 我们得根据业务变更的频率来进行设置, 常见的数值是从300s到86400s, 这样做是为了避免因为时间过长, 而导致变更生效出现延迟。
2. 区域文件SOA参数, 其中的REFRESH、RETRY、EXPIRE、MINIMUM这四项, 务必要与备份以及同步的周期进行匹配;同时还需要确保主服务器和从服务器之间的这些参数保持一致;这样作是为了能够防止在同步的过程中出现中断的情况。
3. 权威与递归分离: 在生产环境里, 绝对不能让同一个节点同时去运行权威功能还有递归服务。这是因为如果这么做了, 就容易导致缓存投毒的情况出现, 或者是会引起那个NODENAME放大攻击方面的问题。
4. 关于安全加固这项内容, 我们采取了启用DNSSEC签名的措施。同时, 我们还利用ACL来限制递归查询的来源IP段。在防火墙方面, 只放行了53/UDP与53/TCP这两个端口。此外, 还会定期更新软件版本至最新安全补丁。
5. 监控与告警: 我们会设置阈值来发出预警, 这个预警要针对那些区域传输失败的事件, 也要针对平均响应延迟, 目标得小于五十毫秒, 还要针对查询成功率, 目标得不低于百分之九十九点九, 最后把这些信息接进统一的监控平台里面去。
获取资源与参考
各个软件的官方文档、版本发布的状况, 还有社区支持的情况, 你都可以去它的GitHub仓库, 或者说去那个官方站点里面查看。
如果你需要国内DNS配置的实际操作案例, 包括部署所用的模板以及相关的工具包, 你可以访问叫做 gz88.cn 的这个网站来得到这些资源, 这样做是便于你能够快速地开始使用, 并且进行方案的验证工作。

