bind9+mysql搭建高可用DNS解析服务

2023-11-13

bind9+mysql搭建DNS解析服务

基本的架构图如下:
在这里插入图片描述
安装步骤:

  1. 安装依赖服务
yum install wget cmake ncurses boost zlib gcc libuv libuv-devel libnghttp2 libnghttp2-devel openssl-devel libcap-devel mysql mysql-devel -y
  1. 安装mysql
    此处省略安装配置mysql主从~~
    mysql安装完成后需要添加环境变量,编译bind时会用到
export CPPFLAGS="-I/usr/lib64/mysql $CPPFLAGS"
export LDFLAGS="-L/usr/lib64/mysql $LDFLAGS"
export LD_LIBRARY_PATH="/usr/lib64/mysql"

mysql建表命令

CREATE TABLE IF NOT EXISTS `dns_records` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `zone` varchar(255) NOT NULL,
  `host` varchar(255) NOT NULL DEFAULT '@',
  `type` enum('A','MX','CNAME','NS','SOA','PTR','TXT','AAAA','SVR','URL') NOT NULL,
  `data` varchar(255) DEFAULT NULL,
  `ttl` int(11) NOT NULL DEFAULT '3600',
  `mx_priority` int(11) DEFAULT NULL,
  `view`  enum('any', 'Telecom', 'Unicom', 'CMCC', 'ours') NOT NULL  DEFAULT "any" ,
  `priority` tinyint UNSIGNED NOT NULL DEFAULT '255',
  `refresh` int(11) NOT NULL DEFAULT '28800',
  `retry` int(11) NOT NULL DEFAULT '14400',
  `expire` int(11) NOT NULL DEFAULT '86400',
  `minimum` int(11) NOT NULL DEFAULT '86400',
  `serial` bigint(20) NOT NULL DEFAULT '2022022317',
  `resp_person` varchar(64) NOT NULL DEFAULT 'localhost',
  `primary_ns` varchar(64) NOT NULL DEFAULT 'localhost.',
  PRIMARY KEY (`id`),
  KEY `type` (`type`),
  KEY `host` (`host`),
  KEY `zone` (`zone`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

后续添加DNS解析的命令

insert into dns_bind.dns_records (zone, host, type, data, ttl) VALUES ('testinfo.local', 'aaa', 'A', 'xxx.xxx.xxx.xxx', '600');

  1. 编译安装bind服务
    下载安装包
cd /usr/local/src/
wget https://www.cpan.org/src/5.0/perl-5.34.0.tar.gz
wget wget https://ftp.isc.org/isc/bind9/9.16.26/bind-9.16.26.tar.xz

编译安装perl , 这里make test的时候会报一个错误,无视他,继续make install就行

tar -zxvf perl-5.34.0.tar.gz
cd perl-5.34.0
cp configure.gnu configure
./configure -des -Dprefix=/usr/local/perl
make
make test
make install

编译安装bind服务

tar -xvf bind-9.16.26.tar.xz
cd bind-9.16.26
./configure --prefix=/data/bind/ --with-dlz-mysql=yes --enable-largefile --with-openssl=no --without-python --disable-ipv6
make
make install

注意:bind9.16是最后支持mysql的版本,9.17开始就移除了mysql模块

  1. 生成rndc.conf和named.conf
cd /data/bind/etc/
/data/bind/sbin/rndc-confgen > rndc.conf
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
../bin/dig > named.root
  1. 配置named.conf
    配置options
options {
        listen-on port 53 { any; };
        directory       "/data/bind";
        dump-file       "/data/bind/data/cache_dump.db";
        statistics-file "/data/bind/data/named_stats.txt";
        memstatistics-file "/data/bind/data/named_mem_stats.txt";
        Pid-file "/data/bind/var/run/named/named.pid";
        allow-query     { any; };
        recursion yes;
        version "0";
        serial-query-rate 1;
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;
        managed-keys-directory "/data/bind/dynamic";
        forwarders { 223.5.5.5;223.6.6.6; };
};

配置zone

dlz "mysql zone" {
database "mysql
{host=XXX.XXX.XXX.XXX dbname=dns_bind ssl=false port=3306 user=root pass=XXXXXXXX}
{select zone from dns_records where zone = '$zone$' and  view = 'any' limit 1}
{select ttl,type,if(mx_priority>0,mx_priority,NULL),case when lower(type)='txt' then concat('\"',data,'\"') when lower(type)    =  'soa'  then   concat_ws(' ',  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = '$zone$'   and host = '$record$' and view = 'any'}";
};

到这里就安装完成了。

附1:bind检测配置文件命令

/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -g

附2:bind启动脚本

#!/bin/bash
##########################################################################################
#  Info:
#  start dns server
##########################################################################################
#  Auther: Yin Jiang
#  Changelog:
#  20220223   jiangyin  initial create
##########################################################################################

##########################################################################################

if [ `id -u` -ne 0 ]
then
echo "ERROR:Must run as root."
exit 1
fi

function start() {
  /data/bind/sbin/named -c /data/bind/etc/named.conf -4
  echo . && echo 'DNS server started.'
}

function stop() {
  kill `cat /data/bind/var/run/named/named.pid`
  echo . && echo 'DNS server stopped.'
}

function reload() {
  /data/bind/sbin/rndc reload
}

function status() {
  /data/bind/sbin/rndc status
}

case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  restart)
  stop
  sleep 2
  start
  ;;
  reload)
  reload
  ;;
  status)
  status
  ;;
  *)
  echo "Please use these command (start | stop | restart | status | reload)"
  ;;
esac

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bind9+mysql搭建高可用DNS解析服务 的相关文章

  • Android:java.net.DatagramSocket.bind:无效参数异常

    背景 我正在编写一个简单的 UDP 应用程序来 ping 一个测试版服务器 我每分钟左右管理一次 告诉我它仍在运行 对于那些想知道的人 我无法在服务器上启用 ping 我计划在手机上运行此命令 以便在服务器不再响应时向我发出警告 我正在尝试
  • 在 AngularJS 的 Promise 中使用它

    是否有能够在承诺范围内使用的最佳实践解决方案 在 jQuery 中 我可以绑定我的对象以在我的承诺 回调中使用它 但在 AngularJS 中 是否有最佳实践解决方案 方式 var service this 我不喜欢 app service
  • 有没有办法在使用 ES6 简写方法表示法的方法中使用词法 `this` ?

    关于SO的第一个问题 我希望我没有重复任何内容 我看过other 问题并认为我的不同足以值得询问 基本上 有没有办法让this它位于使用速记符号编写的方法的方法主体中 或者是词法的 或者是绑定到特定值的 这样做的动机来自于我在实现时想要使用
  • 动态添加侦听器到 ajax 在 jQuery 中创建的内容

    我正在尝试获取单击的链接的 html 值 这些链接是使用 Ajax 动态创建的 所以我认为 bind 不会 工作 但我没有最新版本的 live div message click function var valueSelected thi
  • 如何绑定函数参数

    如何将参数部分绑定 应用到 R 中的函数 这就是我走了多远 然后我意识到这种方法行不通 bind lt function fun argNames lt names formals fun bindedArgs lt list binded
  • “调用/应用”和“绑定”之间有什么区别[重复]

    这个问题在这里已经有答案了 var obj x 81 getX function console log this x var getX obj getX bind obj use obj as this getX 81 var getX
  • 如何绑定未绑定的方法而不调用它?

    在Python中 有没有一种方法可以绑定未绑定的方法而不调用它 我正在编写一个 wxPython 程序 对于某个类 我决定将所有按钮的数据分组在一起作为类级元组列表 如下所示 class MyWidget wx Window buttons
  • 将目录绑定到 docker 容器

    我正在构建一个测试项目 需要项目目录之外的模块 项目文件夹位于 docker 中 我想将该模块目录绑定到我的项目的 docker 容器 有可能做到吗 或者我问错了问题 顺便说一句 我对 docker 还很陌生 所以我只是尝试一下 我的理解是
  • jQuery 函数绑定“输入属性更改”未按预期触发

    我有 jQuery 代码调用这样的函数 text area bind input propertychange function 绑定到该函数的元素是文本区域 当我键入并删除文本时 该函数会被调用 但是当我通过热键或拖动鼠标选择所有文本 然
  • std::绑定到std::函数?

    我使用这个得到一个编译错误 std vector
  • 如何将 AngularJS 变量传递给 Javascript?

    我正在构建一个带有模态窗口的 AngularJS Web 应用程序 在模态窗口中 我可以显示 JQuery Flot 实时图表 类似于 http people iola dk olau flot examples realtime html
  • Kivy - 另一个屏幕上的滑块类值更改

    我有一个滑块 其值会更改标签 这很容易理解 现在的问题是我想使用这个值在另一个屏幕上显示 最终 我希望滑块根据在滑块上选择的值在另一个屏幕上显示 1 16 个图像 下面是我现在所拥有的 它适用于该屏幕 但如何让这个值显示在另一个屏幕上 我知
  • 使用“instanceof function() {}”背后的原因?

    在 Mozilla 开发者中心 有一个关于Function prototype bind https developer mozilla org en JavaScript Reference Global Objects Function
  • $.proxy() 和 bind() 有什么区别?

    2009 年 ECMAScript 5 添加了一个内置的bind 函数接受一个对象作为参数并返回一个相同的函数 其中this将始终引用您传递给它的对象 我找不到任何看起来像规范文档链接的内容 这与jQuery 的 proxy 功能 http
  • 无法组合 X <字符> 和 X <双精度>

    我正在尝试使用以下命令将各种 csv 文件合并到一个数据框中 df lt list files path C Users pattern csv full names TRUE gt lapply read csv gt bind rows
  • 无法重新绑定滚动事件?

    我想在ajax调用中重新绑定窗口滚动事件 window scroll function column height first column height screenTop window scrollTop window height w
  • jQuery:将 ajaxForm 绑定到通过 .load() 加载的页面上的表单

    我正在使用 jQuery 的 ajaxForm 插件在我的 web 应用程序上提交表单 然而 在应用程序的一部分中 我通过 jQuery 的 load 加载一些带有表单的内容 问题在于我无法让 ajaxForm 绑定到通过 ajax 加载的
  • 保持 LDAP 会话

    在 PHP 中 假设我在第 1 页有一个 LDAP 连接 ldapconn ldap connect ldapserver if ldapconn binding to ldap server ldapbind ldap bind ldap
  • 如果Service在另一个进程中,如何绑定它?

    显现
  • 在 jQuery 中绑定元素及其子元素

    我想将事件绑定到元素及其子元素 做这个的最好方式是什么 element bind click function event doSomething element bind click function event doSomething

随机推荐

  • LongLLaMA:LLaMA的升级版,处理超长上下文的利器!

    原文来源 芝士AI吃鱼 有效整合新知识 大模型面临的挑战 大家使用过大型模型产品的时候可能会遇到一个共同的问题 在进行多轮对话时 模型可能会忘记之前的对话内容 导致回答不连贯 这实际上是由于大型模型在处理大量新内容时有时会力不从心 给人一种
  • 10 网络丢包模拟工具_抓包工具charles弱网场景模拟

    charles 使用场景 在app和pc的测试过程中 case中总会有关于弱网的异常场景 弱网场景可能会出现请求超时报错等问题 那么charles是一个非常实用的工具 解决了弱网的模拟需求 下面讲解一下具体使用方法 1 点击下方图片的选项
  • 图像分割套件PaddleSeg全面解析(七)评估代码解读

    当保存完模型后 我们可以通过PaddleSeg提供的脚本对模型进行评估 python val py config configs quick start bisenet optic disc 512x512 1k yml model pat
  • centos 安装trace_Centos7--traceroute

    通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径 当然每次数据包由某一同样的出发点 source 到达某一同样的目的地 destination 走的路径可能会不一样 但基本上来说大部分时候所走的路由是相
  • PAT乙级1087 有多少不同的值 (20 分)

    1087 有多少不同的值 20 分 问题描述 当自然数 n 依次取 1 2 3 N 时 算式 n 2 n 3 n 5 有多少个不同的值 注 x 为取整函数 表示不超过 x 的最大自然数 即 x 的整数部分 输入格式 输入给出一个正整数 N
  • HTTP-Tinyhttpd解析

    大家好 我是阿桃 一个想成为被点赞关注的程序员 工控行业 物联网行业 机器人行业软件开发可联系我 Tinyhttpd是一个微型的web服务器 浏览器与Web服务器之间的通信采用的是Http 所以一开始的切入点是HTTP协议 这里说一点如果有
  • 平滑处理

    平滑处理 smoothing 也称模糊处理 bluring 作用就是减少图像上的噪声或者失真 图像滤波 即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 是图像预处理中不可缺少的操作 其处理效果的好坏将直接影响到后续图像处理和分析的
  • Metasploit(一)

    Metasploit木马 MSF模块介绍 auxiliary exploits payloads encoders nops post 木马管理 开启监听 连接多个木马 木马持久化 木马进程迁移 生成木马 生成木马 木马捆绑 木马混淆 劫持
  • C# 使用解构元组方式不用第三个变量交换值

    C 使用解构元组方式不用第三个变量交换值 C 7 0 新增了泛型ValueTuple 值元组类型 支持对元组的解构 通过解构可以将元组的字段依次赋值给每个变量 因此我们可以通过这种方式来实现不用第三个变量 交换两个变量的值 如下 strin
  • 解析MOS管的作用是什么-细说MOS管特性、性能参数、作用等

    MOS管概述 mos管是金属 metal 氧化物 oxide 半导体 semiconductor 场效应晶体管 或者称是金属 绝缘体 insulator 半导体 MOS管的source和drain是可以对调的 他们都是在P型backgate
  • 100天精通Python(数据分析篇)——第62天:pandas常用统计方法大全(含案例)

    文章目录 一 常用统计方法与案例 1 求和 sum 2 求平均值 mean 3 求最小值 min 4 求最大值 max 5 求中位数 median 6 求众数 mode 7 求方差 var 8 求标准差 std 9 求分布情况 descri
  • ROS机器人里程计模型

    1常用坐标系系统模型 在移动机器人技术研究中 最为常用的坐标系统是笛卡尔坐标系统 而在SLAM算法研究中 有如下几个比较常见的笛卡尔坐标系统 它们分别为机器人坐标系XR YR OR 传感器坐标系XS YS OS 世界坐标系XW YW OW
  • 【数据结构】双向链表

    博客主页 小王又困了 系列专栏 数据结构 人之为学 不日近则日退 感谢大家点赞 收藏 评论 目录 一 双向链表 1 1带头双向循环链表的结构 二 链表的实现 2 1初始化 2 2尾插 2 3尾删 2 4头插 2 5头删 2 6在pos位置之
  • UBOOT命令总结(转)

    UBOOT命令总结 转 很好的UBOOT命令总结 我在起步时就是看的这篇东西 熟悉了以后就用 看自带帮助就行 Printenv 打印环境变量 Uboot gt printenvbaudrate 115200ipaddr 192 168 1
  • Xshell连接不上虚拟机的解决办法汇总

    一 关于ping的问题 1 虚拟机ping百度 2 windows下ping linux的ip地址 3 linux下ping windows 二 防火墙的问题 三 ssh服务 四 VM中的还原默认设置 还原后的更改设置 五 相关服务是否打开
  • C语言-蓝桥杯- 基础练习 高精度加法

    问题描述 输入两个整数a和b 输出这两个整数的和 a和b都不超过100位 算法描述 由于a和b都比较大 所以不能直接使用语言中的标准数据类型来存储 对于这种问题 一般使用数组来处理 定义一个数组A A 0 用于存储a的个位 A 1 用于存储
  • Android应用间跳转

    ClassName MainActivity Description 从一个应用跳转到另一个应用 author guoyizhe email gyzboy 126 com date 2015 6 9 下午3 49 07 public cla
  • 搭建pppoe server

    搭建PPPOE SERVER 搭建pppoe 成功了的话 就觉得TM超级简单 在centos更是5步左右就能搞定 1 yum install rp pppoe 安装pppoe 安装完成后 会有pppoe server命令 2 安装完成后 会
  • 华为的成功依靠的不是IPD

    几次聊天中 有人提到他们的公司在学习华为 贯彻IPD 这些企业都发展的比较大了 希望能用一套行之有效的管理方法来进行规范化管理 对于IPD我总是保持谨慎的态度 如果公司已经发展到一定阶段 内部形成了明确的部门分工 同时也出现了严重的部门墙
  • bind9+mysql搭建高可用DNS解析服务

    bind9 mysql搭建DNS解析服务 基本的架构图如下 安装步骤 安装依赖服务 yum install wget cmake ncurses boost zlib gcc libuv libuv devel libnghttp2 lib