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. JAVA 反射用法

    1.获得Class对象 Class<?>  classType  =  Class.forName() 可以通过传入一个全限定类名(包含包名)返回一个该类的Class类对象引用 . Cla ...

  2. InnoDB Lock浅谈

    数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性.InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S).排他锁(X).意向共享(IS).意向排他(IX).为了提供更好的并发,Inn ...

  3. (转)jquery serialize表单序列化,当radio或checkbox 未选中时,没有序列化到对象中的原因分析和解决方案 - ghostsf

    相信很多人都用过jq的表单序列化serialize()方法,因为这能很方便地帮你把表单里所有的非禁用输入控件序列化为 key/value 对象,不需要你再去一个个地拼接参数了. 这是一个很好用的函数, ...

  4. Spark中hashshuffle与sortshuffle

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

  5. 001.KVM介绍

    KVM介绍可参考: http://liqingbiao.blog.51cto.com/3044896/1740516 http://koumm.blog.51cto.com/703525/128879 ...

  6. 谈 JavaScript 中的强制类型转换 (1. 基础篇)

    1. 从基本包装类型讲起 讨论基本包装类型的前提是了解基本数据类型(也可以称为原始类型, 简单数据类型等).然后通过基本数据类型调用方法的行为, 引出基本包装类型的概念和作用. 1.1 基本数据类型 ...

  7. 探索Java的日志世界

    探索Java的日志世界 本文的思维导图 一.主题 打开日志的大门,探索的Java日志世界 二.目标 了解常用的日志框架 掌握日志框架的选择和使用以及开发规范 了解日志框架中的一些设计思想 三.内容 1 ...

  8. Mysql Lock wait timeout exceeded; try restarting transaction的问题

    今天在后台跑任务的时候,发现了数据库报错1205 - Lock wait timeout exceeded; try restarting transaction.问题原因是因为表的事务锁,以下是解决 ...

  9. BZOJ4003 JLOI2015城池攻占

    用左偏树模拟攻占的过程,维护最小值,最多入和出m次,每次log复杂度. #include<bits/stdc++.h> using namespace std; ; typedef lon ...

  10. BZOJ2278 : [Poi2011]Garbage

    如果两个环相交,那么相交的部分相当于没走. 因此一定存在一种方案,使得里面的环都不相交. 把不需要改变状态的边都去掉,剩下的图若存在奇点则无解. 否则,每找到一个环就将环上的边都删掉,时间复杂度$O( ...