• 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
    

    安装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!"

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/leffss/p/10148507.html
Copyright © 2020-2023  润新知