• 转: centos7.5 下 coredns+etcd搭建DNS服务器


    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!"
  • 相关阅读:
    JavaScript词法结构
    【python】类变量、实例变量
    把pandas dataframe转为list方法
    list 删除一个元素的三种做法--python
    Web.config中rewite 节点引起的500.19错误
    extjs让按钮可用或者不可用
    VS2010启动奔溃
    迟来的年终总结
    Nginx配置多个server
    RestSharp的简单用法
  • 原文地址:https://www.cnblogs.com/mafeng/p/10291891.html
Copyright © 2020-2023  润新知