CoreDNS是一個DNS服務器,和Caddy Server具備相同的模型:它連接插件。CoreDNS是雲本土計算基金會啓動階段項目。javascript
CoreDNS是SkyDNS的繼任者。 SkyDNS是一個薄層,暴露了DNS中的etcd中的服務。 CoreDNS創建在這個想法上,是一個通用的DNS服務器,能夠與多個後端(etcd,kubernetes等)進行通訊。java
CoreDNS旨在成爲一個快速靈活的DNS服務器。 這裏的關鍵靈活指的是:使用CoreDNS,您能夠使用DNS數據進行所需的操做。 還能夠自已寫插件來實現DNS的功能。linux
CoreDNS能夠經過UDP / TCP(舊式的DNS),TLS(RFC 7858)和gRPC(不是標準)監聽DNS請求。git
CoreDNS目前支持的行爲,括號裏面的英文表示插件:github
使用yum安裝,最簡化配置,非集羣,生成環境建議部署etcd集羣。 安裝shell
yum install etcd -y
啓動vim
systemctl start etcd
設置開機啓動後端
systemctl enable etcd
mac 安裝
下載二進制版本:https://github.com/coredns/coredns/releases 解壓安裝api
% tar zxvf coredns_1.3.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記錄輪詢策略
proxy . 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 &
驗證
% dig +short @localhost www.baidu.com
www.a.shifen.com.
61.135.169.121 61.135.169.125
coredns只能使用etcd v3版本api添加的數據,etcdctl命令默認使用v2版本api,設置v3 api方法
% export ETCDCTL_API=3
或者添加如下內容到環境變量 vim ~/.bash_profile
:
% export ETCDCTL_API=3
% etcdctl put /coredns/com/leffss/www '{"host":"1.1.1.1","ttl":10}'
OK
查詢結果:
% dig @localhost +short www.leffss.com
1.1.1.1
若是想添加多條記錄,讓coredns輪詢,方法以下:
% etcdctl put /coredns/com/leffss/www/x1 '{"host":"1.1.1.2","ttl":10}'
OK
% etcdctl put /coredns/com/leffss/www/x2 '{"host":"1.1.1.3","ttl":10}'
OK
查詢結果:
% dig @localhost +short www.leffss.com
1.1.1.2
1.1.1.3
**注意:**若是想讓取消設置的輪詢值,須要刪除/coredns/com/leffss/www/x1與/coredns/com/leffss/www/x2
% etcdctl put /coredns/com/leffss/www '{"host":"1002::4:2","ttl":10}'
OK
查詢結果:
% dig -t AAAA @localhost +short www.leffss.com
1002::4:2
% etcdctl put /coredns/com/leffss/www '{"host":"www.baidu.com","ttl":10}'
OK
查詢結果:
% dig -t CNAME @localhost +short www.leffss.com
www.baidu.com.
% etcdctl put /coredns/com/leffss/www '{"host":"www.baidu.com","port":80,"ttl":10}' OK
查詢結果:
% dig -t SRV @localhost +short www.leffss.com
10 100 80 www.baidu.com.
% etcdctl put /coredns/com/leffss/www '{"text":"This is text!","ttl":10}'
OK
查詢結果:
% dig -t TXT @localhost +short www.leffss.com
"This is text!"