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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络运维与网络安全 学习笔记2023.12.5

网络运维与网络安全 学习笔记 第三十五天 今日目标 su用户切换、sudo命令提权、部署动态Web应用 数据库安全加固、Web安全加固 网络监控基础、配置zabbix主控机、配置zabbix被控机 管理监控项、监控结果分析 su用户切换 su机制介绍及用法 Linux安全基线 指的是使Linux各项…

【Linux】24、文件系统、磁盘 IO

文章目录 一、文件系统1.1 索引节点和目录项1.2 虚拟文件系统 VFS1.3 文件系统 I/O1.5 性能观测1.5.1 容量1.5.2 缓存1.5.3 find 命令的缓存 二、磁盘 I/O2.1 通用块层2.2 I/O 栈2.3 磁盘性能指标2.3.1 磁盘 I/O 观测2.3.2 进程 I/O 观测 2.4 案例&#xff1a;找到打大量日志的…

【开源】基于Vue.js的贫困地区人口信息管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 073 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S073。} 文末获取源码&#xff0c;项目编号&#xff1a;S073。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模…

修改el-table表头样式

<style lang"scss" scoped> ::v-deep .el-table {.el-table__header-wrapper, .el-table__fixed-header-wrapper {th {word-break: break-word;background-color: #f8f8f9;color: #515a6e;height: 40px;font-size: 13px;}} } </style>

el-table全部选择和全部取消

el-table实现全部选择和全部取消 其实非常简单&#xff0c;el-table自带的都有方法toggleAllSelection()和clearSelection() 具体代码如下&#xff1a; <el-button typesuccess clickcheckAll sizesmall>全选</el-button> <el-button typesuccess clickcancel…

基于ROPNet项目训练modelnet40数据集进行3d点云的配置

项目地址&#xff1a; https://github.com/zhulf0804/ROPNet 在 MVP Registration Challenge (ICCV Workshop 2021)&#xff08;ICCV Workshop 2021&#xff09;中获得了第二名。项目可以在win10环境下运行。 论文地址&#xff1a; https://arxiv.org/abs/2107.02583 网络简介…

【PID学习笔记 6 】控制系统的性能指标之二

写在前面 上文介绍了控制系统的稳态与动态、过渡过程、阶跃响应以及阶跃信号作用下过渡过程的四种形式。本文紧接上文&#xff0c;首先总结过渡过程的分类&#xff0c;然后介绍控制系统的性能评价&#xff0c;最后重点介绍控制系统性能指标中的单项指标。 一、过渡过程的分类…

java版微信小程序商城免费搭建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

解密IIS服务器API跨域问题的终极解决方案

在当今数字化时代&#xff0c;API已成为现代应用程序的核心组件。然而&#xff0c;当你使用IIS&#xff08;Internet Information Services&#xff09;服务器提供API时&#xff0c;你可能会遇到一个常见的挑战&#xff1a;API跨域问题。这个问题经常困扰着开发人员&#xff0c…

【Python3】【力扣题】383. 赎金信

【力扣题】题目描述&#xff1a; 题解&#xff1a; 两个字符串ransomNote和magazine&#xff0c;ransomNote中每个字母都在magazine中一一对应&#xff08;顺序可以不同&#xff09;。 即分别统计两个字符串中每个字母出现的次数&#xff0c;ransomNote中每个字母的个数小于等…

聚观早报 |国行PS5轻薄版开售;岚图汽车11月交付7006辆

【聚观365】12月2日消息 国行PS5轻薄版开售 岚图汽车11月交付7006辆 比亚迪推出12月限时优惠 特斯拉正式交付首批Cybertruck 昆仑万维发布「天工 SkyAgents」平台 国行PS5轻薄版开售 索尼最新的PlayStation5主机&#xff08;CFI-2000型号组-轻薄版&#xff09;国行版本正…

springboot详解Mybatis-Plus中分页插件PaginationInterceptor标红

1.问题描述 在springboot项目中&#xff0c;类中引用PaginationInterceptor&#xff0c;标红&#xff0c;如下图所示&#xff1a; 2.问题分析 可能是因为pom.xml中的配置原因&#xff0c;导致不支持PaginationInterceptor 3.解决问题 更换版本后 更换后&#xff0c;记得Rel…

挂耳式蓝牙耳机哪个好、性价比高的挂耳蓝牙耳机

近年来&#xff0c;开放式耳机呈现出火热的势头&#xff0c;相较传统的入耳式耳机&#xff0c;长久佩戴也不会有异物般的不适感&#xff0c;通常采用的耳挂式佩戴设计&#xff0c;不需要把耳机放进耳道里也能听见声音&#xff0c;全新的佩戴方式也更为舒适&#xff0c;能维护耳…

01.项目简介

开源数字货币交易所&#xff0c;基于Java开发的货币交易所 | BTC交易所 | ETH交易所 | 数字货币交易所 | 交易平台 | 撮合交易引擎。本项目基于SpringCloudAlibaba微服务开发&#xff0c;可用来搭建和二次开发数字货币交易所。 项目特色&#xff1a; 基于内存撮合引擎&#xf…

Navicat在分辨率不同的屏幕窗口显示大小不一致问题解决

1.主屏幕为2560*1600分辨率&#xff0c;能够显示较多数据连接 2.在第二屏幕分辨率低&#xff0c;字体变大&#xff0c;显示内容变少 解决办法&#xff1a; 1.右击navicat图标-属性 2.选择【兼容性】-在兼容性页面中选择**“更改高DPI设置”** 3…勾选“高DPI缩放替代”&a…

minio配置监听(对象操作日志)

minio配置监听对象操作 本文档适用于minio2021.3.17版本 有时我们需要查看minio中对象操作的日志&#xff0c;比如像监听minio某一个桶中的删除事件&#xff0c;就需要配置监听。minio支持将监听的结果输出到es、pg、amq等等&#xff0c;下面介绍一下将minio对象操作监听结果输…

【人体解剖学与组织胚胎学】练习一高度相联知识点整理及对应习题

文章目录 [toc]骨性鼻旁窦填空题问答题 关节填空题简答题 胸廓填空题简答题![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/827e7d1db3af42858d8734bb81911fea.jpeg)补充 骨性鼻旁窦 填空题 问答题 关节 填空题 简答题 胸廓 填空题 简答题 补充 第二肋对应胸骨…

Leetcode.2477 到达首都的最少油耗

题目链接 Leetcode.2477 到达首都的最少油耗 rating : 2012 题目描述 给你一棵 n n n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 0 0 到 n − 1 n - 1 n−1 &#xff0c;且恰好有 n − 1 n - 1 n−…

什么是呼叫中心的语音通道?呼叫中心语音线路有几种?

什么是呼叫中心的语音通道&#xff1f; 呼叫中心的语音通道是指在呼叫中心中使用的语音信号传输通道&#xff0c;它是呼叫中心中至关重要的一部分&#xff0c;负责将客户的语音信息传递给客服代表&#xff0c;以及将客服代表的语音信息传递给客户。在呼叫中心的运营中&#xf…

JAVA-JVM 之Class字节码文件的组成 【下篇】

字节码 类元数据接口元数据字段元数据方法元数据属性元数据 主页传送门&#xff1a;&#x1f4c0; 传送 类元数据 此部分元数据主要包含类索引&#xff08;This_Class&#xff09;和父类索引&#xff08;Super_Class&#xff09;。 类索引&#xff1a;指向Class字节码常量池表…