centos7.5下coredns+etcd搭建DNS服務器
阿新 • • 發佈:2018-12-20
space 實現 輪詢 才會 項目 主機 地址 inux 解決
- coredns簡介
- 安裝etcd
- 安裝coredns
- 設置域名解析
- A記錄
- AAAA記錄
- CNAME記錄
- SRV記錄
- TXT記錄
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)
安裝etcd
使用yum安裝,最簡化配置,非集群,生成環境建議部署etcd集群。 安裝
% yum install etcd -y
啟動
% systemctl start etcd
設置開機啟動
% systemctl enable etcd
安裝coredns
下載二進制版本:https://github.com/coredns/coredns/releases 解壓安裝
% 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 # 打印日誌
}
- coredns也可以使用file插件讀取zone文件,和bind9一樣兼容DNS標準文檔(見RFC1035)
啟動
% 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
A記錄
% etcdctl put /coredns/com/leffss/www ‘{"host":"1.1.1.1","ttl":10}‘
OK
- etcd的目錄結構和域名是相反的,即上面表示域名:www.leffss.com
- ttl值設置60s後,coredns每60s才會到etcd讀取這個域名的記錄一次
查詢結果:
% 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
- x1和x2可以自定義,比如a、b、c等
- 設置多個AAAA、CNAME等方法類似
- 添加/coredns/com/leffss/www/x1、x2後,請求www.leffss.com就不會再讀取/coredns/com/leffss/www,可以使用etcdctl del /coredns/com/leffss/www刪除值
查詢結果:
% dig @localhost +short www.leffss.com
1.1.1.2
1.1.1.3
**註意:**如果想讓取消設置的輪詢值,需要刪除/coredns/com/leffss/www/x1與/coredns/com/leffss/www/x2
AAAA記錄
% etcdctl put /coredns/com/leffss/www ‘{"host":"1002::4:2","ttl":10}‘
OK
查詢結果:
% dig -t AAAA @localhost +short www.leffss.com
1002::4:2
CNAME記錄
% etcdctl put /coredns/com/leffss/www ‘{"host":"www.baidu.com","ttl":10}‘
OK
查詢結果:
% dig -t CNAME @localhost +short www.leffss.com
www.baidu.com.
- 這裏cname設置成外部百度域名,按理說coredns應該也把這個cname記錄繼續解析成www.baidu.cm的IP地址,但是經過測試發現請求www.leffss.com只能解析到CNAME:www.baidu.com,無法繼續解析,原因未知,以後研究
SRV記錄
% etcdctl put /coredns/com/leffss/www ‘{"host":"www.baidu.com","port":80,"ttl":10}‘
OK
- SRV記錄和CNAME記錄類似,只是多了port,它們的添加方法其實可以通用
查詢結果:
% dig -t SRV @localhost +short www.leffss.com
10 100 80 www.baidu.com.
TXT記錄
% etcdctl put /coredns/com/leffss/www ‘{"text":"This is text!","ttl":10}‘
OK
查詢結果:
% dig -t TXT @localhost +short www.leffss.com
"This is text!"
centos7.5下coredns+etcd搭建DNS服務器