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. 3.命名规范《.NET设计规范》

    3.命名规范 3.1 大小写约定 使用合适的大小写增强名字可读性. 3.1.1 标识符的大小写规则 标识符的每个单词首写字幕大写.不要用下划线. PascalCasing camelCasing Pa ...

  2. IntelliJ Idea中创建package的问题

    在idea中创建package时,会一直往后面累加 想在com.huayang下面再新建一个service,普通的做法是选中了huayang.dao--->然后右键--->新建了一个pac ...

  3. 【PAT】1053 Path of Equal Weight(30 分)

    1053 Path of Equal Weight(30 分) Given a non-empty tree with root R, and with weight W​i​​ assigned t ...

  4. Spark中hashshuffle与sortshuffle

    在spark1.2以上的版本中,默认shuffle的方式已经变成了sortshuffle(在spark.shuffle.manager修改org.apache.spark.shuffle.sort.H ...

  5. HDU4267 树状数组

    题意描述: 给定一个数组,有两种操作: 操作一:a b k c 对于区间a~b之间的元素如果下标满足(i-a)%k=0则给元素i加上c 操作二:a          查询下标为a的元素当前值 解题思路 ...

  6. [Python]conda与 virtualenv虚拟环境配置

    参考: Anaconda使用总结 Anacodna之conda与 virtualenv对比使用教程,创建虚拟环境 conda设置Python虚拟环境 python的virtualenv环境与使用 有时 ...

  7. 电脑同时安装Python2和Python3以及virtualenvwrapper(转)

    电脑同时安装Python2和Python3以及virtualenvwrapper  https://www.jianshu.com/p/d22f19496e03   windows: 1 下载地址:P ...

  8. 【Ubuntu】Ubuntu设置和查看环境变量

    [Ubuntu]Ubuntu设置和查看环境变量    转载 https://blog.csdn.net/White_Idiot/article/details/78253004 1. 查看环境变量 查 ...

  9. iOS技术篇:sizeToFit 和 sizeThatFits 区别

    sizeToFit:会计算出最优的 size 而且会改变自己的size UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(, , , ...

  10. SQL语句之 多表管理

    SQL语句之 多表管理 一个数据库内通常会有不止一张表,有时候我们要把多张表联系起来,这就需要用到多表管理的语句. 1.外键约束 一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做 ...