「BIND9」- DLZ(Dynamically Loadable Zones) @20210225
内容简介
使用BIND最不方便的地方在于:每次添加新的解析记录,在修改配置文件后,需要执行命令重新加载。如果可以从数据库动态读取DNS记录就完美了。
本文将介绍使用DLZ的配置,实现从数据库中动态读取DNS记录。
什么是「DLZ」?
动态可加载区域(DLZ)是BIND 9的补丁,它简化了BIND管理,并减少了内存使用和启动时间。
该技术允许将DNS记录存储在数据库中,在解析时从数据库中查询DNS记录。与使用脚本不同,在数据库中的更改会立即体现在BIND对DNS查询的响应中,因此无需重新加载或重新启动BIND服务,并且不需要在内存中载入及缓存DNS记录,因此也减少内存的使用。
注意事项
这是个非常老的项目了,最后一个版本:DLZ-0.7.0,修改时间:2004-04-17。前人在公司内网DNS解析中使用了这个技术,又不能轻易替换。
如果你在寻找这方面的解决方案,请慎用(因为官方文档里还有一些坑)!!!
服务部署运行
项目地址:http://bind-dlz.sourceforge.net
安装及部署,可以参考官方的文档:「Examples」
# 通过源码编
「使用源码安装」
# 通过包管理器
#!/bin/sh # 在CentOS中的Bind是支持DLZ的,但是位于bind-sdb软件包中 yum install -y bind-sdb systemctl start bind-sdb
通过网页后台管理(BLZ WEBUI)
原始项目:https://github.com/1032231418/Bind-Web
其他项目:「php+mysql构建的web管理平台」
性能测试
-「BIND DLZ > Performance Tests」
-「BIND DLZ > Performance Tools」
附加说明
# 关于官方文档
-「Bind 9.7.0_p1 and DLZ?」
文档已经是旧的了。文档中还有错误:示例中使用了'%zone%'、'%record%' ,但是应该是'$zone$'、'$record$'。不知道哪个版本变了,但是没更新。
# 关于MySQL Bind扩展
-「MySQL BIND SDB Driver」
这是另外一个扩展,和「DLZ的MySQL驱动」是不同的东西,但提供相同的功能。
# 主机名不能以点结尾
-「[Bind-dlz-testers] IPv6 & AAAA support ?」
常见错误
#1 unsupported DLZ database driver 'mysql'
问题描述:
在CentOS 7.6中的bind软件包,编译时已经指定了--with-dlz-mysql=yes选项,按理说应该是支持DLZ的,但是ldd /usr/sbin/named文件,没有看到libmysqlclient.so库(mysqlclient)的链接。使用MySQL驱动时,也输出了标题中的错误。
问题原因:
-「Unsupported Bind9 with mariadb on CentOS 7?」
这是一个相同的问题,但是人家最后使用了LADP进行记录的存储,我们的目的是相同的,使用数据库之类易于管理的存储来维护记录,而不是使用文件。
-「BIND9 Issue」
这篇文章提到了MySQL驱动成功加载了,题主安装的是「bind-sdb」包,然后我也安装了bind-sdb包,在该包里包含了/usr/sbin/named-sdb命令。在ldd /usr/sbin/named-sdb后,我看到了libmysqlclient.so的链接。紧接着对systemctl start named进行TAB补全,发现了named-sdb.service单元文件。这就表示DLZ和SDB可能是单独编译的二进制文件。在yum info bind-sdb后,描述中提到了对SDB和DLZ的支持。
安装bind-sdb包进行测试。果不其然,原始包bind并不支持DLZ扩展,而DLZ在bind-sdb这个包中,启动则是systemctl start named-sdb.service命令
解决办法:
#!/bin/sh yum install bind-sdb systemctl start bind-sdb
#2 ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 52398
-「AAAA Filtering」
-「filter-aaaa-on-v4 does not filter AAAA if there is no existing A Record with the same FQDN - working as designed?」
-「AAAA DNS query on ipv4 interface」
问题描述:
对于某个域名,数据库只有A记录,没有AAAA记录。当进行AAAA记录解析时,查询返回SERVFAIL状态。
问题原因:
从错误日志看,由于DLZ内部的query.c中产生了错误。
解决办法:
由于我们目前并没有使用IPv6地址,但是应用程序又同时发出了IPv4的A记录和IPv6的AAAA记录(这是IPv4向IPv6过渡期间的一个常见问题)。
所以,我们在DLZ的数据库中加入了IPv6的AAAA记录,然后使用BIND的filter-aaaa-on-v4选项对AAAA查询响应进行过滤调。之所以「在DLZ的数据库中加入了IPv6的AAAA记录」,是因为filter-aaaa-on-v4不会对SERVFAIL的状态进行过滤,所以要先让它正常解析,然后再过滤调。
参考文献
BIND DLZ Home
What is DLZ?
Configure BIND with database backend and DLZ support
CentOS 7系统下bind 9.9.4如何调用MariaDB/mysql中的zone数据?
Bind-DLZ with MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架