咱们在选择那个管理DNS服务器配置的计算机软件的时候, 得好好看清楚三个主要方面。第一要看的是它提供的操作界面是不是足够简单、足够清晰, 让使用者不会感到困惑。第二要看它是否具备对大量设备进行统一配置的能力, 以及是否能够执行自动化的日常处理任务, 从而节省人力。

第三点是要检查这些软件能不能和目前现有的网络结构很好地结合在一起,避免出现技术上的冲突。

就目前市面上比较流行的解决方案而言dns服务器配置软件, 大家常用的有BIND 9、PowerDNS、dnsmasq, 还有Windows DNS Server这类来自微软的产品, 以及Cloudflare DNS Manager这种依托于大型平台的工具, 每一种方案都有其特定的适用环境, 有的更适合小型局域网, 有的能应对巨型数据中心的不同业务需求。

针对中小企业以及那些独立的开发者个人, 建议大家去考虑选用 dnsmasq 或者 PowerDNS 这两个方案;如果是面对大型企业环境, 以及需要处理高并发数据流量的业务场景, 那么最佳的首选对象毫无疑问是 BIND 9 这个系统;假如你自己根本没有条件去搭建和维护 DNS 服务器, 这时候就应该直接利用那些已经提供好的托管式的 DNS 服务来解决问题。

咱们就主流的DNS服务器配置软件来做一个对比看看怎么样吧。

BIND9这个工具, 它是完全覆盖了整个DNS协议栈的。用户它可以通过named.conf以及区域文件来进行配置操作的。它还支持像dnssec、gss-tsig这样的很多高级特性。它的稳定性已经在生产环境中经过了数十年的验证。

所以它比较适合用在大型企业里面, 也适合用在做根服务器或者是顶级域服务器的场景。但是它的学习曲线是比较陡的, 难度比较大。所以我们建议一定要配合rndc、dnssec这些工具链一起来使用会比较稳妥。

PowerDNS采用模块化的架构方式, 并且支持MySQL、PostgreSQL之类的SQL后端系统, 还附带了Web管理面板, 也就是PowerDNS Admin。在多域名批量配置的环节里, 它的效率要比纯文本方案高得更加显著, 这样的工具适合被中型企业使用。

dnsmasq是一个轻量级的工具, 它把DNS功能和DHCP功能集在了一起, 只需要一个名为/etc/dnsmasq.conf的配置文件就能完成部署, 它占用的系统资源极少, 因此被广泛用在Linux系统的边缘节点上面, 或者是那些需要进行容器化的运行环境里面。

WindowsDNSServer会和Active Directory做到深度的集成, 它会提供一个图形化的配置界面, 这个界面的执行文件名是dnsmgr.exe, 在域环境里面去使用它的话, 不需要额外的部署成本, 所以对于那些全Windows技术栈的企业来说, 它是很合适的。

CloudflareDNSManager: 它是一个完全的SaaS方案, 通过API或者Web控制台进行管理, 不需要自己建立服务器, 这种方案适合那些只需要域名解析、没有本地权威需求的企业。

这是一般都适用的配置操作步骤, 不管你是用上面提到的哪一个软件, 基本上都可以按照这个流程来进行设置和安排。

1. 首先需要定义好权威区域, 接着创建一个区域文件, 在这个文件里去写入核心的记录, 这些记录包括SOA、NS、A或者AAAA、CNAME、MX以及TXT等等,同时还要注意去设置一个比较合理的TTL值dns服务器配置软件, 这个TTL值的时长一般在300秒到3600秒这个范围里。

2. 设置上游转发这个操作, 意思就是要你去配置那个名称为Forwarder的东西, 让它去指向比如114.114.114.114或者8.8.8.8这样公开的递归型DNS服务器, 这样的话, 遇到不属于本域的解析请求时, 就能进行处理了。

3. 对访问控制以及安全防护这一项内容进行了强化, 具体的做法是使用ACL来明确限定哪些源IP地址段是被允许进行查询的, 同时把面向外部网络的递归查询功能给关闭掉, 这样做的主要原因在于防范DNS放大攻击这种安全威胁。

DNS服务器配置软件怎么选?主流工具对比与配置步骤(图1)

4. 日志与监控这部分内容, 要把查询功能都给打开。然后要去对接那个Prometheus或者Zabbix这些系统。最后, 需要去设置一下解析延迟的告警阈值, 并且还要把错误的比率告警阈值也给设置了。

5. 验证测试, 这里要用到命令, 也就是 dig @127.0.0.1 example.com A +short, 来对解析结果进行逐一核实, 其目的就是要确认那项记录确实已经生力, 且TTL的数值也是没问题的。

选型速查:

针对个人用户或者是规模比较小的团队, 如果只有大概一到五台服务器这么少量的话, 是完全可以采用比如说像 dnsmasq 或者是 Windows DNS Server 这样的软件方案的, 并且整个部署的过程基本上是在十分钟之内就可以完成的。

邢台市重点项目建设促进中心

对于用户数在5到50人之间的中小企业来讲, 可以选择由PowerDNS搭配MySQL这样的组合方案, 该方案能够支持多种后端数据源并且具备主库与从库之间的同步能力, 因此在系统扩展方面会表现得比较好。

对于大型企业场景, 或者在面对高并发需求, 比如每秒处理十万次以上查询操作的情况之下, 可以选择使用BIND 9结合Unbound递归解析的配置方案。这种配置方式能够实现最高性能的上限表现。

如果没有自己建立的需求, 那么就直接去使用Cloudflare或者国内的DNSPod这类托管DNS的服务。

高频疑难与排查:

修改配置后不生效: 你要执行服务重载命令, 可以是 systemctl reload named 或者 rndc reload 这种写法。

同时你还要确认防火墙里面的 53 端口已经放行了, 这个端口支持 UDP 和 TCP。另外你需要检查区域文件的语法, 可以使用 named-checkzone 这个工具来完成这一步操作。

出现这个错误, 叫做DNSSEC验证失败。大家需要仔细检查DNSKEY记录还有DS记录, 看看它们是不是都齐备了。同时, 也要去确认一下证书链有没有中途断掉的风险。

针对这种情况的运维同事呢, 可以去用那个由gname.xin这个平台所提供的在线DNS诊断工具来帮助一下忙。这样就能比较快地去验证一遍域名下面这个DNSSEC签名的链条它是否是完整的, 也可以顺便看一眼那些各级别的记录它们到底生效没有。

多节点数据出现不一致的情况, 这里可以选择应用BGP Anycast方案或者IP Anycast方案, 同时把Paxos共识协议或者是Raft共识协议搭配着用, 以此来达成多个主节点在实时层面的同步效果, 这样做能够避免出现因为单点发生故障而引发的记录内容发生漂移的问题。