coredns简介
coredns简介
CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件。CoreDNS是云本土计算基金会启动阶段项目。
CoreDNS是SkyDNS的继任者。 SkyDNS是一个薄层,暴露了DNS中的etcd中的服务。 CoreDNS建立在这个想法上,是一个通用的DNS服务器,可以与多个后端(etcd,kubernetes等)进行通信。
CoreDNS旨在成为一个快速灵活的DNS服务器。 这里的关键灵活指的是:使用CoreDNS,您可以使用DNS数据进行所需的操作。 还可以自已写插件来实现DNS的功能。
CoreDNS可以通过UDP / TCP(旧式的DNS),TLS(RFC 7858)和gRPC(不是标准)监听DNS请求。
CoreDNS目前支持的行为,括号里面的英文表示插件:
- 从文件提供区域数据; 支持DNSSEC(仅限NSEC)和DNS(file)。
- 从主机检索区域数据,即充当辅助服务器(仅限AXFR)(secondary)。
- 快速签署区域数据(dnssec)
- 响应负载均衡(loadbalance)
- 允许区域传输,即充当主服务器(file)
- 从磁盘自动加载区域文件(auto)
- 缓存(cache)
- 对endpoint的健康检查(health)
- 使用ETCD作为后端,即SkyDNS(ETCD)的101.5%替换(etcd)
- 使用k8s(kubernetes)作为后端(kubernetes)
- 作为一个代理转发查询到一些其他(递归)域名服务器(proxy)
- 提供指标(使用Prometheus)(metrics)
- 提供查询(log)和错误(errors)日志记录
- 支持CH类:version.bind和friends(chaos)
- 分析支持(pprof)
- 重写查询(qtype,qclass和qname)(rewrite)
- 回传所使用的IP地址,传输和端口号(whoami)
安装
查找coredns的release版本,当前测试版本为:1.7.0
https://github.com/coredns/coredns/releases
下载
wget https://github.com/coredns/coredns/releases/download/v1.7.0/coredns_1.7.0_linux_amd64.tgz tar xf coredns_1.7.0_linux_amd64.tgz mv coredns /usr/sbin
查看coredns版本
# coredns -version CoreDNS-1.7.0 linux/amd64, go1.14.4, f59c03d
配置systemctl启动方式
vim /usr/lib/systemd/system/coredns.service [Unit] Description=CoreDNS DNS server Documentation=https://coredns.io After=network.target [Service] PermissionsStartOnly=true LimitNOFILE=1048576 LimitNPROC=512 CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true User=root ExecStart=/usr/sbin/coredns -conf=/etc/coredns/corefile ExecReload=/bin/kill -SIGUSR1 $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target
配置
1. 创建目录
mkdir /etc/coredns mkdir /etc/coredns/zones
2. 添加配置文件
vim /etc/coredns/corefile .:53 { # 配置轮询 loadbalance # 最后所有的都转发到系统配置的上游dns服务器去解析 forward . 8.8.8.8 8.8.4.4 # 缓存时间 cache 10 # 自动加载配置文件的间隔时间 reload 10s # 输出日志 log # 输出错误 errors # 使用auto插件配置 test.com ,只会对 test.com 这个域的请求应答。 auto test.com { # test.com 的zones位置,会自动读取 zones下的文件,文件命名方式为 db.test.com ,虽然会读取其他的文件,但只会对auto指令后的域名做应答。 directory /etc/coredns/zones # 每10s 重新加载 zones 的文件内容。 reload 10s } # hosts插件,不支持泛域名解析。 hosts { 172.19.8.115 t1.qq.com 172.19.8.114 t2.qq.com # ttl ttl 60 # 重载hosts配置 reload 10s # 继续执行 fallthrough } }
```test.com```采用zone文件格式,注意文件名的格式,```db+domain```的格式。如```db.test.com```,此文件为```test.com```的域名定义文件。
cat /etc/coredns/zones/db.test.com
$TTL 3600 ; 记录超时时间 $ORIGIN test.com. ; 指定origin,下面的@符号可以作为他的别名,注意后面的. ; SOA 后面的记录及通讯地址 比如 ns.test.com. admin.test.com. 并没有什么卵用, 测试随便写什么好像都不影响 @ IN SOA ns.test.com. admin.test.com. ( 2020082626 ; Serial 4H ;Refresh 1H ; Retry 7D ; Expire 4H ) ;Negative Cache TTL test.com. IN NS ns1 ; ns.example.com is a nameserver for example.com test.com. IN NS ns2 ; ns.somewhere.example is a backup nameserver for example.com ns1 IN A 172.19.8.113 ns2 IN A 172.19.8.114 qq IN A 172.19.8.11 qq IN A 172.19.8.12 *.test.com. IN A 172.19.8.13
> 1. 每次修改需要修改 SOA serial。
> 2. *.test.com. 为泛域名解析。hosts插件不支持泛域名解析。
修改完后显示
[INFO] plugin/file: Successfully reloaded zone "test.com." in "/etc/coredns/zones/db.test.com" with 2020082628 SOA serial [INFO] plugin/file: Sent notifies for zone "test.com." to []
服务器 /etc/resolv.conf 配置
nameserver 172.19.8.113 # 指向dns本机即可
另外一种配置hosts方式
# .:53 { # 配置轮询 loadbalance # 最后所有的都转发到系统配置的上游dns服务器去解析 forward . 8.8.8.8 8.8.4.4 # 缓存时间 cache 10 # 自动加载配置文件的间隔时间 reload 10s # 输出日志 log # 输出错误 errors # 使用auto插件配置 test.com ,只会对 test.com 这个域的请求应答。 auto test.com { # test.com 的zones位置,会自动读取 zones下的文件,文件命名方式为 db.test.com ,虽然会读取其他的文件,但只会对auto指令后的域名做应答。 directory /etc/coredns/zones # 每10s 重新加载 zones 的文件内容。 reload 10s } # hosts插件,不支持泛域名解析。 hosts /etc/coredns/hosts/hostsfile { # ttl ttl 60 # 重载hosts配置 reload 10s # 继续执行 fallthrough } }
> hosts 指定文件,但是只能配一个hosts块。
cat /etc/coredns/hosts/hostsfile
172.19.8.113 t1.qq.com 172.19.8.114 t1.qq.com 172.19.8.114 t2.qq.com 172.19.8.115 t3.qq.com