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

mac 安装

安装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服务器的更多相关文章

  1. centos7.5下coredns+etcd搭建DNS服务器

    coredns简介 安装etcd 安装coredns 设置域名解析 A记录 AAAA记录 CNAME记录 SRV记录 TXT记录 coredns简介 CoreDNS是一个DNS服务器,和Caddy S ...

  2. CentOS 7下简答搭建DNS服务器

    一.DNS相关介绍 DNS(Domain Name System)域名系统协议,作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用挨个记住IP地址.通过主机名,最终得到 ...

  3. Centos7 搭建DNS服务器与原理配置详解

    在搭建我们自己DNS服务器之前,先必须了解下DNS服务器的作用和原理. DNS是在互联网上进行域名解析到对应IP地址的服务器,保存互联网上所有的IP与域名的对应信息,然后将我们对网址的访问,解析成IP ...

  4. centos7系统下 docker 环境搭建

    运行环境: VMware Workstation Pro 在虚拟机中安装centos7系统, 选择最小安装, 网络连接方式选择的桥接(与宿主机在同一IP段)centos7一定要安装64位, docke ...

  5. [转]DNS服务器原理详解与Centos6.x下搭建DNS服务器

    转自:http://blog.it985.com/8958.html DNS 数据库的记录:正解,反解, Zone 的意义 通过DNS解析过程详解这篇文章,我们知道了要想访问www.zmit.cn,最 ...

  6. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  7. Windows Server 2008 R2 搭建DNS服务器(转)

    Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...

  8. 第一次搭建dns服务器

    CentOS 7 搭建DNS服务器 主要参考的是小左先森的一篇博客:https://blog.51cto.com/13525470/2054121. 1.搭建过程中遇到的几个问题说一下: a.在重启服 ...

  9. Windows下使用GitStack搭建Git服务器

    Win10下使用GitStack搭建Git服务器 Git是目前世界上最先进的分布式版本控制系统(没有之一). ​ 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别. ...

随机推荐

  1. LOJ 10138 -「一本通 4.5 例 1」树的统计

    树链剖分模板题,详见这篇博客.

  2. Linux系统运维笔记(二),Linux文件编辑命令

    Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...

  3. Spring Cloud微服务视频教程-百度云

    Spring Cloud微服务视频教程-百度云 链接:https://pan.baidu.com/s/1mp8SkxNw7EfoTDtDKQMpIA 提取码: 关注公众号[GitHubCN]回复521 ...

  4. 【LOJ】#2511. 「BJOI2018」双人猜数游戏

    题解 设\(f[p][a][b]\)表示询问了\(p\)次,答案是\(a,b\)是否会被猜出来 然后判断如果\(p = 1\) 第一个问的\(Alice\),那么\([s,\sqrt{nm}]\)约数 ...

  5. SpringBoot与SpringCloud学习指南

    推荐一个Spring Boot的导航网站:Spring Boot 中文导航 Spring boot使用的各种示例,以最简单.最实用为标准 spring-boot-helloWorld:spring-b ...

  6. Java反射初探 ——“当类也学会照镜子”

    反射的作用 开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强大的 ...

  7. 归并排序 递归and非递归

    什么是归并排序 归并排序其实就做两件事:  “分解”——将序列每次折半划分. “合并”——将划分后的序列段两两合并后排序.   首先我们来看一下分解是怎样实现的呢?   // 递归退出条件,及left ...

  8. 高能天气——团队Scrum冲刺阶段-Day 1-领航

    高能天气--团队Scrum冲刺阶段-Day 1-领航 各个成员在 Alpha 阶段认领的任务 经过重新的团队讨论,我们最新确定的α版本所需实现内容如下: 查找城市:切换城市按钮.滑动界面视图 天气预报 ...

  9. 高能天气——团队Scrum冲刺阶段-Day 5

    高能天气--团队Scrum冲刺阶段-Day 5 今日完成任务 于欣月:基本实现计步器功能:现阶段实现了每天进行步数统计并显示,计划实现历史步数统计和设置锻炼计划功能,并实现可视化图形界面 余坤澎:实现 ...

  10. [lisp] scheme学习2

    1.在scheme中,为了效率,对序对的操作 cons car 和cdr是内部实现的,这里是scheme实现, 其中cons用到了闭包 (define (cons a b) (define (disp ...