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
