#安装etcd
yum install etcd -y
systemctl start --now etcd
#安装coredns
#下载二进制版本:https://github.com/coredns/coredns/releases 解压安装
tar zxvf coredns_1.7.0_linux_amd64.tgz
mv coredns /usr/bin
mkdir /etc/coredns
vi /etc/coredns/Corefile
.:53 {  # 监听tcp和udp的53端口
    etcd {   # 配置启用etcd插件,后面可以指定域名,例如 etcd test.com {
        stubzones # 启用存根区域功能。 stubzone仅在位于指定的第一个区域下方的etcd树中完成
        path /coredns # etcd里面的路径 默认为/skydns,以后所有的dns记录就是存储在该存根路径底下
        endpoint http://localhost:2379 # etcd访问地址,多个空格分开

        # upstream设置要使用的上游解析程序解决指向外部域名的在etcd(认为CNAME)中找到的外部域名。
        upstream 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf

        fallthrough # 如果区域匹配但不能生成记录,则将请求传递给下一个插件
        # tls CERT KEY CACERT # 可选参数,etcd认证证书设置
    }
    prometheus  # 监控插件
    cache 160
    loadbalance   # 负载均衡,开启DNS记录轮询策略
    forward . 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf  # 上面etcd未查询到的请求转发给设置的DNS服务器解析
    log # 打印日志
}
#启动
nohup /usr/bin/coredns -conf /etc/coredns/Corefile > /tmp/coredns.log 2>&1 &

#设置域名解析
export ETCDCTL_API=3
#A记录
etcdctl put /coredns/com/leffss/www '{"host":"1.1.1.1","ttl":10}'
#CNAME记录
etcdctl put /coredns/com/leffss/www '{"host":"www.baidu.com","ttl":10}'

#如果不用etcd直接把文件写入到hosts让coredns去获取配置如下

.:53 {
  # 绑定interface ip
  bind 127.0.0.1
  # 先走本机的hosts
  # https://coredns.io/plugins/hosts/
  hosts {
    # 自定义sms.service search.service 的解析
    # 因为解析的域名少我们这里直接用hosts插件即可完成需求
    # 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件
    10.6.6.2 dev.myki.cn
    10.6.6.3 pro.myki.cn
    # ttl
    ttl 60
    # 重载hosts配置
    reload 1m
    # 继续执行
    fallthrough
  }
  # file enables serving zone data from an RFC 1035-style master file.
  # https://coredns.io/plugins/file/
  # file service.signed service
  # 最后所有的都转发到系统配置的上游dns服务器去解析
  forward . /etc/resolv.conf
  # 缓存时间ttl
  cache 120
  # 自动加载配置文件的间隔时间
  reload 6s
  # 输出日志
  log
  # 输出错误
  errors
}