coredns是一个用go语言编写的开源的DNS服务,它的官网可以点击这里,github页面可以点击这里。需要额外注意的是,coredns是首批加入CNCF组织的云原生开源项目,并且作为已经在CNCF毕业的项目,coredns还是目前kubernetes中默认的dns服务。同时,由于coredns可以集成插件,它还能够实现服务发现的功能。 coredns和其他的诸如bind、knot、powerdns、unbound等DNS服务不同的是:coredns非常的灵活,并且几乎把所有的核心功能实现都外包给了插件。比如说如果你想要在coredns中加入Prometheus的监控支持,那么只需要安装对应的prometheus插件并且启用即可,因此官方也说coredns是由插件驱动的。
1. 安装
使用 docker 安装,或直接下载执行文件,下载页面
docker pull coredns
docker start -p 53:53 -v /Corefile:/Corefile -v /zones:/zones -d --name coredns coredns |
2. 配置
coredns 会去默认读取同目录下的 Corefile 配置文件,你也可以使用 -conf 参数指定配置文件路径。样例如下:
# 启动一个服务,监听53端口
.:53 {
# 使用auto 插件配置vhdns.cn域名,只会对vhdns.cn 这个域的请求应答
auto vhdns.cn {
# 说明 vhdns.cn 的 zone 文件位置,自动回读取 zones/ 目录下的所有文件(虽然可以读其他的域文件,但只会对 auto 指令后的域应答,即 vhdns.cn
directory ./zones
# 当reload时,发送通知消息到其他服务器
transfer to 192.168.31.1
# 每5m重载zones中的文件内容
reload 5m
}
hosts {
# hosts 插件可以如使用 /etc/hosts 文件一样配置服务名称
# 如果不写大括号及其中的内容,直接hosts指令,默认使用 /etc/hosts 中的服务名称
# inline 形式
127.0.0.1 www.vhdns.cn
fallthrough
}
# 对于没有配置的域名,转发到114
forward . 114.114.114.114
cache 120
reload 6s
log
errors
} |
zone 文件格式,注意文件名的格式,以 db+domain 的格式,如 db.vhdns.cn,意为此文件为 vhdns.cn 域名的定义文件
$TTL 3600 ; 记录超时时间
$ORIGIN vhdns.cn. ; 指定 origin,下面的@符号可以作为他的别名,注意后面的.
; SOA 格式 [domain_name] IN SOA [域主服务器或主DNS服务器名] [管理员email] (时间信息)
@ IN SOA ns1.vhdns.cn. admin.vhdns.cn. (
2019071601 ; Serial
4H ; Refresh
1H ; Retry
7D ; Expire
4H ) ; Negative Cache TTL
; 配置 DNS 记录,指向 ns1.vhdns.cn
@ IN NS ns1
; 配置 ns1.vhdns.cn 的 A 记录, 指向coredns所在的机器
ns1 IN A 192.168.31.116
; 配置 vhdns.cn 的 A 记录,指向网站或其他用途的机器
@ IN A 192.168.31.51
; 配置泛域名,没有准确的三级子域名的域名全部指向此IPV4地址
*.vhdns.cn. IN A 192.168.31.51 |
这里使用了两个插件 hosts 和 auto
host 插件可以简单的指明单条记录,但由于不能支持泛域名,我们这里使用auto 插件
auto 或 file 插件需要配置 zone [RFC 1035-style ] 文件,可以明确的指明一个域的所有信息
3. 验证
使用 dig 命令
#dig @localhost vhdns.cn
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @localhost vhdns.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37013
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 13b0ce8798a9af30 (echoed)
;; QUESTION SECTION:
;vhdns.cn. IN A
;; ANSWER SECTION:
vhdns.cn. 5 IN A 192.168.31.51
;; AUTHORITY SECTION:
vhdns.cn. 5 IN NS ns1.vhdns.cn.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Mar 28 10:46:24 CST 2020
;; MSG SIZE rcvd: 115
#================================================
yu@yu-thinkpad:~$ dig @localhost ns1.vhdns.cn
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @localhost ns1.vhdns.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31124
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 4c486f2075653625 (echoed)
;; QUESTION SECTION:
;ns1.vhdns.cn. IN A
;; ANSWER SECTION:
ns1.vhdns.cn. 5 IN A 192.168.31.116
;; AUTHORITY SECTION:
vhdns.cn. 5 IN NS ns1.vhdns.cn.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Mar 28 10:49:09 CST 2020
;; MSG SIZE rcvd: 123 |
|