运维的兄弟们一般使用dnsmasq来作为内网DNS解析服务。通过/etc/hosts 保存内网服务器IP地址与域名的映射关系。但是dnsmasq也会经常的报一些安全漏洞,让我们不胜其烦的去更新打补丁。最近在一次服务器更新换代的过程中尝试了一下CoreDNS,用它替代dnsmasq。感觉还行,可以跟大家分享一下替代方案。
我们采取docker容器的方式部署CoreDNS,方便版本的更新。使用coredns.sh脚本创建容器。
#!/bin/bash# run core dnsdocker stop corednsdocker rm corednsdocker run --name coredns -d \ -p 53:53 -p 53:53/udp \ -v $PWD/hosts:/hosts \ -v $PWD/corefile:/corefile \ coredns/coredns:1.8.3 \ -conf /corefile通过两个文件corefile, hosts实现了dnsmasq的对应功能。corefile作为CoreDNS的配置文件配置如下
.:53 { errors health log stdout hosts /hosts { fallthrough reload 10s } forward . 114.114.114.114 reload}其中hosts指令实现了本地hosts文件的解析。fallthrough这个指令表示”如果hosts文件没有找到解析文件就会转发到下一个指令去执行”。下一个指令forward 将域名查询转发到其他dns服务器。hosts文件的作用和/etc/hosts是一样的。
另外我们可以实现一种高可用方案。搭建一台powerdns作为主dns。 多台CoreDNS作为辅助dns。通过cache指令和forward指令配合实现高可用。
CoreDNS代码小巧精悍,很容易进行代码安全检查,相关的安全漏洞也不多。性能方面也不输于dnsmasq。是个不错的替代方案。