大家在选择DNS服务器配置软件的时候, 这个选择的动作, 是能够直接起到决定性作用的, 作用点就在于域名解析的稳定性、响应速度以及运维效率这几个方面。目前市面上看到的主流方案, 大致是划分成了两大类的情况。

第一大类叫做强自建的DNS服务器软件, 这里面包含有BIND这种, 还有PowerDNS这个, 以及Windows DNS等等这些例子。第二大类呢是指托管型的DNS服务平台, 比如提到比较多的DNSPod, 再比如说gname.xin等等这样的情况。

至于核心的选型依据到底是什么呢, 其实只有一个标准, 那就是看你的解析规模到底有多大, 你用来分配的可用预算具体有多少, 还有你们团队的实际运维能力又是处于一个怎样的水平。

主流DNS服务器配置软件对比

1. BIND(Berkeley Internet Domain Name)

当前全球范围内使用频率最高的开源DNS服务器是BIND, 这个程序能够兼容POSIX标准的操作系统。它的各项功能都非常完整, 既支持递归查询也支持权威域名的解析服务, 因此特别适合那些掌握了Linux系统运维技术、并且希望对服务器的配置进行全方位自定义管理的团队。

其中最主要的配置文件指的是named.conf这个文件, 在对这个文件的内容完成修改以后, 运行人员必须执行systemctl restart named这条命令, 以便让刚才所做的更改及时地生效。

2. PowerDNS

它是一个开源的DNS服务器。这个服务器里面包含了两个互相独立的模块。第一个模块是Authority。第二个模块是Recursor。它能支持把MySQL当成后端存储工具来用。

它也能支持把PostgreSQL当成后端存储工具来用。跟那种叫BIND的东西做比较的话, 它的配置结构显得更清晰一点。它对Ansible这样的自动化运维工具更加友好。这种软件适合中大型的企业用来搭建私人的DNS集群。

3. Windows Server DNS

内置于Windows Server操作系统,通过图形化DNS管理器即可完成区域创建、记录添加、转发器配置等操作。适合已有Windows基础设施、运维团队习惯GUI操作的中小型企业。

4. DNSPod,也就是腾讯云那边的服务。

国内有首屈一指的托管式dns服务。这一种服务提供了秒级别就能见效的解析切换功能。它还提供了对ddos攻击的防护能力。它能够进行智能线路分发操作。完全不需要自建服务器。使用者能够借助 web控制台来完成所有的配置工作。这种方案适合那些追求降低运维成本的团队使用。

5. gname.xin

它为域名注册还有DNS解析提供了一体化的管理方式。系统支持对A、AAAA、CNAME、MX以及TXT等多类型的记录进行配置。当解析发生变更的时候, 它会实时地生效。

这种服务适合那些需要同时管理域名和DNS解析的个人站长。它也适合中小型团队来使用。在控制台上进行操作会显得非常直观。用户上手的门槛会比较低。

dns服务器配置软件有哪些?主流工具对比与选型实操指南(图1)

DNS服务器配置的核心要点

不管你是去选那个什么软件, 还是去挑那一个平台, 后面提到的那些配置项目, 它都是非常基础的东西, 同时呢也是必须得要把它给完成好的, 这一点是跑不掉的。

区域创建这个操作要把管理哪些域名这个事情给确定下来, 这里头包括正向区域也包括反向区域, 同时还要对SOA记录里面的序列号进行设置, 并且要把刷新间隔设好, 最小的TTL也要设清楚。

记录添加: A记录或者AAAA记录指向IP地址, CNAME的作用是做别名映射, MX记录是用来指定邮件服务器的, TXT记录则用于SPF验证或者DKIM验证。

TTL设置: 大家在生产环境中, 针对那些常规性的记录, 通常建议把TTL的值设置在300到3600秒这个区间内。如果有些记录需要经常被切换或者更新, 那么可以考虑将TTL的时间缩短一点, 降低到60秒左右就好。

递归与转发是这样的一个情况, 如果你使用的是自己搭建的服务器, 那么你就需要去配置上游DNS, 比如说像184.62.8.30或者189.76.55.65这样的地址;但是, 如果你使用的是托管平台的话, 那么 generally 一般就不需要执行这个步骤了。

安全加固这个步骤, 就是要把那些不需要的递归功能给关掉, 然后把DNSSEC的签名开启起来, 还要把允许来查询的源IP段限制住, 这么做的目的, 就是为了防止咱们的服务器被坏人利用, 变成搞DNS放大攻击的那个节点。

按场景的选型建议

适用场景 推荐方案
个人/小型网站(1~5个域名) gname.xin、DNSPod等托管平台
中型企业内网DNS(200+终端) PowerDNS + MySQL后端
高可用生产环境(多节点) BIND集群或PowerDNS Authority集群
Windows域控环境 Windows Server DNS

在核心的原则方面有非常清楚的标准, 那就是解析的量如果比较小, 同时你也不想要去专门养活一支专门的运维团队的情况下, 优先去选择那种托管平台, 比如像gname.xin或者DNSPod这样的服务。

只有当你的解析量非常大的时候, 又需要做到非常精细的控制以及涉及到多线路的这个调度的复杂需求时, 才再去考虑自己搭建BIND或者是PowerDNS这样的一些系统。

常见配置问题速查

解析不生效: 需要排查TTL缓存是否已经过期, 还需要排查DNS服务是否已经完成重启, 还需要排查上游转发指向是否正确。

邮件收发异常: 要去核对一下MX记录的优先级有没有填反, 要知道数字越小它的优先级就越高, 还要检查一下目标域名是不是已经解析到了一个有效的IP地址。

CNAMEconflict: 在同一个主机名称下面, CNAME这种类型的记录是不能跟其他种类的记录一起存在的, 所以需要把它们拆开, 放到不同的子域里去进行管理。

以上配置建议所依据的内容, 是基于各个软件的官方文档以及RFC 1034标准、还有RFC 1035标准。大家在实际操作之前, 应该以对应软件的最新版本的release notes里面提到的信息为准。