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. Linux系统运维笔记(四),CentOS 6.4安装 MongoDB

    Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...

  2. kafka 查看队列信息

    https://blog.csdn.net/getyouwant/article/details/81209286?utm_source=blogxgwz8

  3. nginx log 错误502 upstream sent too big header while reading response header from upstream

    cookies的值超出了范围我是说 看看了一下日志 错误502 upstream sent too big header while reading response header from upst ...

  4. 什么是Less、typescript与webpack?

    前端常用技术概述--Less.typescript与webpack 前言:讲起前端,我们就不能不讲CSS与Javascript,在这两种技术广泛应用的今天,他们的扩展也是层出不穷,css的扩展有Les ...

  5. 主动学习(Active Learning)

    主动学习简介 在某些情况下,没有类标签的数据相当丰富而有类标签的数据相当稀少,并且人工对数据进行标记的成本又相当高昂.在这种情况下,我们可以让学习算法主动地提出要对哪些数据进行标注,之后我们要将这些数 ...

  6. P1020 导弹拦截 dp 树状数组维护最长升序列

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  7. ref:linux查看用户登录时间以及命令历史

    ref:https://blog.csdn.net/csdn924618338/article/details/73555725/ 1.查看当前登录用户信息 who命令: who缺省输出包括用户名.终 ...

  8. 023.Zabbix自定义(邮箱)脚本告警-02

    待补充 有需要,请留言!

  9. 做了一个可定制的英文记忆字典 - RDict

    RDict_1.0 下载 在我自己试用过程中, 随时发现了不少小问题, 我会随时更新下.

  10. ARM Cortex Design Considerations for Debug

    JTAG was the traditional mechanism for debug connections for ARM7/9 parts, but with the Cortex-M fam ...