本文介绍: 本文主要用于介绍CoreDNS实现递归服务器几种方式以及在生产环境遇到的一些问题解决方案。在开始之前我们需要知道一些关于CoreDNS的基本知识:CoreDNS本身是没有能力作为一个递归查询的DNS服务器(Recursive DNS),但是它有着众多的插件可以通过插件实现域名递归查询缓存功能从而加速客户端的DNS查询性能这里主要实现插件有或。

本文主要用于介绍CoreDNS实现递归服务器几种方式以及在生产环境遇到的一些问题解决方案

在开始之前我们需要知道一些关于CoreDNS的基本知识:CoreDNS本身是没有能力作为一个递归查询的DNS服务器(Recursive DNS),但是它有着众多的插件可以通过插件来实现对域名递归查询缓存功能从而加速客户端的DNS查询性能这里主要实现的插件内部插件(Plugins)forward外部插件(External Plugins)unbound

CoreDNS官方对External Plugins描述为:

Out of tree plugins for CoreDNS. A plugin listed here is 
not automatically endorsed by the CoreDNS team. Issues should be reported to owner(s) of the plugin.

我们可以将CoreDNS的External Plugins简单理解第三方插件,但是其中少部分会有官方维护支持或者直接默认内置官方编译好的版本中。

1 unbound

我们先来了解一下不依靠外部程序实现递归查询功能unbound插件unbound是一个非常优秀的DNS软件,专注于递归查询和缓存,但对于权威DNS服务器这方面的功能稍显不足,因此理论上将unbound和CoreDNS结合可以很好的弥补两者的不足。

1.1 编译安装

unbound插件编译安装稍显麻烦,unbound 中有详细介绍操作步骤注意事项需要特别注意的是编译安装unbound插件的CoreDNS会从原来的静态二进制文件,变成了需要动态加载依赖库。因此如果需要提前编译然后范围使用最好保证编译环境系统和最终的使用环境系统一致或全兼容

1.2 一些问题

unbound插件已经很长一段时间没有更新维护了,尽管它有Maintained by CoreDNS标注,因此如果使用较新版本go编译之后,在启动时候会有报警

Jan 18 02:29:16 coredns1 coredns: [WARNING] An external plugin (/home/gopath/pkg/mod/github.com/coredns/unbound@v0.0.7/setup.go line 63) is using the deprecated function Normalize. This will be removed in a future versions of CoreDNS. The plugin should be updated to use OriginsFromArgsOrServerBlock or NormalizeExact instead.

另外就是运行过程中会出现panic异常,一开始怀疑是和负载有关,后面测试发现请求量极低(个位数qps)的时候也会出现此类异常

[tinychen /home/coredns]# ./coredns -dns.port=53 -conf /home/coredns/corefile
.:53 on 0.0.0.0
CoreDNS-1.8.3
linux/amd64, go1.16.4, 7b43d042-dirty
[INFO] 127.0.0.1:46007 - 37929 "A IN baidu.com. udp 50 false 4096" NOERROR qr,rd,ra 484 0.614542s
[INFO] 127.0.0.1:32946 - 43201 "A IN baidu.com. udp 50 false 4096" NOERROR qr,aa,rd,ra 484 0.0000971s
[INFO] 127.0.0.1:38201 - 44652 "A IN baidu.com. udp 50 false 4096" NOERROR qr,aa,rd,ra 484 0.0001522s
[INFO] 127.0.0.1:50863 - 63692 "A IN tinychen.com. udp 53 false 4096" NOERROR qr,rd,ra 58 0.3613896s
[ERROR] Recovered from panic in server: "dns://0.0.0.0:53"
[ERROR] Recovered from panic in server: "dns://0.0.0.0:53"
[ERROR] Recovered from panic in server: "dns://0.0.0.0:53"

经过多次测试之后,我们发现针对unbound插件出现panic的情况和请求的频率无关,而是和请求的内容有关简单来说就是当请求的域名本身就不存在解析时候,就会触发panic异常;当然还可以再进一步:当CoreDNS服务端本身无法和根域名服务器建立连接转发查询的时候,也会出现panic异常。

forward

2.1 配置使用

forward插件主要的作用就是把DNS请求转发给上游的upstream服务器forward插件本身并不支持任何的DNS解析功能,但是可以将相应的请求转发到递归服务器上,再结合cache插件做缓存,从而实现递归查询解析缓存功能

.:53 {
    forward . 114.114.114.114 114.114.115.115 {
        health_check 5s
    }
    log
    errors
    ready 
    prometheus 
    cache {
        success 10240 600 60
        denial 5120 60 5
    }
}

forward对应upstream机器可以根据自己需求选择现有公共DNS,如国内常见的114、谷歌的8888等免费DNS,或者选择自己使用unbound、bind9之类的DNS服务器单独搭建一个专门用来做递归查询的DNS服务

2.2 一些问题

Jan 18 05:29:16 coredns1 coredns: [ERROR] plugin/errors: 2 nonexist.test.tinychen.com. A: read udp 127.0.0.1:7522->114.114.114.114:53: i/o timeout

当查询的域名解析记录存在时候可能会触发upstream超时时间限制,导致报错i/o timeout,可以考虑使用error插件的consolidate指令对这类报警进行统一处理修改报警等级

    errors {
        consolidate 5m ".* i/o timeout$" warning
    }

原文地址:https://blog.csdn.net/ygq13572549874/article/details/134819112

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48426.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注