用discuz做的网站,门户型网站开发难度,信息服务平台网站名称,深圳机票网站建设本文主要介绍coredns的unbound插件进行编译安装的过程及常用的配置方法。
coredns官方的unbound文档#xff1a;unbound
unbound插件的github地址#xff1a;https://github.com/coredns/unbound 注#xff1a;unbound插件虽然是coredns中的External Plugins#xff0c;但…本文主要介绍coredns的unbound插件进行编译安装的过程及常用的配置方法。
coredns官方的unbound文档unbound
unbound插件的github地址https://github.com/coredns/unbound 注unbound插件虽然是coredns中的External Plugins但是从详情页面中我们可以看到Maintained by CoreDNS: CoreDNS maintainers take care of this plugin.说明这个插件是官方维护的在稳定性可靠性以及后续更新维护上都有不错的保证应该是可以放心使用的。 1 配置环境
要使用CGO特性需要安装C/C构建工具链在macOS和Linux下是要安装GCC在windows下是需要安装MinGW工具。同时需要保证环境变量CGO_ENABLED被设置为1这表示CGO是被启用的状态。在本地构建时CGO_ENABLED默认是启用的当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序需要手工设置好C/C交叉构建的工具链同时开启CGO_ENABLED环境变量。
以CentOS8为例最好提前安装好gcc、unbound-devel和unbound-libs [/home/coredns]# cat /etc/redhat-releaseCentOS Linux release 8.2.2004 (Core)[/home/coredns]# go env | grep CGO_ENABLEDCGO_ENABLED1[/home/coredns]# rpm -qa | grep gcclibgcc-8.4.1-1.el8.x86_64gcc-8.4.1-1.el8.x86_64gcc-c-8.4.1-1.el8.x86_64gcc-gdb-plugin-8.4.1-1.el8.x86_64[/home/coredns]# rpm -qa | grep unboundunbound-devel-1.7.3-15.el8.x86_64unbound-libs-1.7.3-15.el8.x86_64
如果在使用go get命令获取unbound插件的时候遇到下面的这个问题可以参考这个issue的解决方案How to fix the issue: unbound.h: No such file or directory · Issue #3 · miekg/unbound · GitHub [/home/coredns]# go get github.com/coredns/unbound# github.com/miekg/unbound../gopath/pkg/mod/github.com/miekg/unboundv0.0.0-20210309082708-dbeefb4cdb29/unbound.go:36:10: fatal error: unbound.h: No such file or directory36 | #include unbound.h| ^~~~~~~~~~~compilation terminated.
对于红帽系的Linux可以直接安装unbound-develdebian系的解决方案类似只是软件包名可能略有不同。 yum install -y unbound-devel
随后测试发现正常 [/home/coredns]# go get github.com/coredns/unboundgo get: added github.com/coredns/unbound v0.0.7go get: added github.com/miekg/unbound v0.0.0-20210309082708-dbeefb4cdb29
2 编译安装
虽然我们go的环境变量设置启用了CGO但是coredns的Makefile文件默认是禁用的因此需要将里面的CGO_ENABLED参数从默认的0改为1从而才能启用CGO。 [/home/coredns]# grep CGO_ENABLED MakefileCGO_ENABLED:1
随后进行编译安装安装完成后查看当前目录下的coredns二进制文件是否包含unbound插件来确定是否顺利编译安装完成。 [/home/coredns]# go generate[/home/coredns]# go build[/home/coredns]# makeCGO_ENABLED1 go build -v -ldflags-s -w -X github.com/coredns/coredns/coremain.GitCommit7b43d042-dirty -o coredns[/home/coredns]# ./coredns -plugins | grep unbounddns.unbound
对比是否编译安装了unbound插件的coredns可以发现从原来的静态二进制文件变成了需要动态加载依赖库。因此如果需要提前编译然后大范围使用最好保证编译环境的系统和最终的使用环境系统一致或全兼容本文的编译环境为CentOS8.2使用环境为RockyLinux8.4。 [roottiny-rockylinux coredns]# file coredns.staticcoredns.static: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped[roottiny-rockylinux coredns]# file corednscoredns: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped[roottiny-rockylinux coredns]# file /lib64/ld-linux-x86-64.so.2/lib64/ld-linux-x86-64.so.2: symbolic link to ld-2.28.so[roottiny-rockylinux coredns]# file /lib64/ld-2.28.so/lib64/ld-2.28.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]04c0b62c6350fa6ec9158369de8b5b489e3d084b, not stripped
3 配置使用
语法配置 unbound [FROM] {except IGNORED_NAMES...option NAME VALUE}
FROM 指的是客户端请求需要解析的域名例如blog.tinychen.com和tinychen.com这两个的FROM都是tinychen.comIGNORED_NAMES 和except搭配使用指定不使用unbound的zoneoption 可以添加unbound本身支持的一些参数具体可以查看unbound.conf的man文档或者直接查看官网的文档
4 prometheus监控
unbound插件提供了两个监控指标只要对应的zone中启用了Prometheus插件那么就可以同时启用这两个指标(其他插件的监控指标也一样)它们分别是
coredns_unbound_request_duration_seconds{server} - duration per query.coredns_unbound_response_rcode_count_total{server, rcode} - count of RCODEs.
这两个监控指标的数据格式和内容与coredns原生的coredns_dns_request_duration_seconds和coredns_dns_response_rcode_count_total一致因此相关的监控图表只需要套用原有的进行简单修改后就能直接使用。 5 范例
除了tinychen.com这个域名其他的都使用unbound并开启DNS最小化查询功能DNS Query Name Minimisation . {unbound {except tinychen.comoption qname-minimisation yes}logerrorsprometheus 0.0.0.0:9253bind 0.0.0.0cache {success 10240 600 60denial 5120 60 5}}