运维的兄弟们一般使用dnsmasq
来作为内网DNS解析服务。通过/etc/hosts
保存内网服务器IP地址与域名的映射关系。但是dnsmasq也会经常的报一些安全漏洞,让我们不胜其烦的去更新打补丁。最近在一次服务器更新换代的过程中尝试了一下CoreDNS
,用它替代dnsmasq
。感觉还行,可以跟大家分享一下替代方案。
我们采取docker容器的方式部署CoreDNS,方便版本的更新。使用coredns.sh
脚本创建容器。
#!/bin/bash
# run core dns
docker stop coredns
docker rm coredns
docker 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
。是个不错的替代方案。