CoreDNS实战(六)-编译安装unbound插件

2023-12-06 08:15

本文主要是介绍CoreDNS实战(六)-编译安装unbound插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要介绍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为例,最好提前安装好gccunbound-develunbound-libs

 [/home/coredns]# cat /etc/redhat-releaseCentOS Linux release 8.2.2004 (Core)​[/home/coredns]# go env | grep "CGO_ENABLED"CGO_ENABLED="1"​[/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/unbound@v0.0.0-20210309082708-dbeefb4cdb29/unbound.go:36:10: fatal error: unbound.h: No such file or directory36 | #include <unbound.h>|          ^~~~~~~~~~~compilation terminated.

对于红帽系的Linux可以直接安装unbound-devel,debian系的解决方案类似,只是软件包名可能略有不同。

 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_ENABLED=1  go build -v -ldflags="-s -w -X github.com/coredns/coredns/coremain.GitCommit=7b43d042-dirty" -o coredns[/home/coredns]# ./coredns -plugins | grep unbounddns.unbound

对比是否编译安装了unbound插件的coredns,可以发现从原来的静态二进制文件,变成了需要动态加载依赖库。因此如果需要提前编译然后大范围使用,最好保证编译环境的系统和最终的使用环境系统一致或全兼容(本文的编译环境为CentOS8.2,使用环境为RockyLinux8.4)。

 [root@tiny-rockylinux coredns]# file coredns.staticcoredns.static: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped[root@tiny-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​[root@tiny-rockylinux coredns]# file /lib64/ld-linux-x86-64.so.2/lib64/ld-linux-x86-64.so.2: symbolic link to ld-2.28.so[root@tiny-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.comtinychen.com这两个的FROM都是tinychen.com
  • IGNORED_NAMES 和except搭配使用,指定不使用unbound的zone
  • option 可以添加unbound本身支持的一些参数,具体可以查看unbound.confman文档或者直接查看官网的文档

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_secondscoredns_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}}

这篇关于CoreDNS实战(六)-编译安装unbound插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461099

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1