centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析
来源:SegmentFault
时间:2023-02-25 09:12:09 197浏览 收藏
小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析》,以下内容将会涉及到MySQL、python3.x、bind,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!
1.先安装MySQL,直接yum安装
* yum -y install mysql mysql-server2.再安装一些依赖的包
- yum -y install openssl openssl-devel libss-dev gcc gcc-c++ mysql-devel
- yum install gcc libffi-devel python-devel openssl-devel mysql-devel -y
3.下载bind, bind官网(https://www.isc.org/)
4.下载mysql-bind 补丁源码
- wget http://nchc.dl.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz
5.解压bind和mysql-bind源码压缩文件
tar zxvf bind-9.10.3-P2.tar.gz tar zxvf mysql-bind.tar.gz
6.将mysql-bind源码目录下的mysqldb.c 和 mysqldb.h拷贝到bind源码目录下的bin/named和bin/named/include/ 目录下
cd mysql-bind cp -f mysqldb.c mysqldb.h ../bind-9.10.3-P2/bin/named/ cp -f mysqldb.c mysqldb.h ../bind-9.10.3-P2/bin/named/include/
7.修改bind源码目录下bin/named/Makefile.in文件
cd ../bind-9.10.3-P2 vim bin/named/Makefile.in 将以下几行: DBDRIVER_OBJS = DBDRIVER_SRCS = DBDRIVER_INCLUDES = DBDRIVER_LIBS = 修改为: DBDRIVER_OBJS = mysqldb.@O@ DBDRIVER_SRCS = mysqldb.c DBDRIVER_INCLUDES = -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC -DUNIV_LINUX -DUNIV_LINUX DBDRIVER_LIBS = -rdynamic -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lssl -lcrypto DBDRIVER_INCLUDES 的值是通过 mysql_config --cflags 命令获取的 DBDRIVER_LIBS 的值是通过 mysql_config --libs 命令获取的
8.修改bind源码目录下bin/named目录下的main.c文件
vim bin/named/main.c 加入 #include "mysqldb.h" 如下: #include#include "mysqldb.h" #include #include #include 然后在注释代码段 /* xxdb_init(); */ 后加入 mysqldb_init(); 在注释代码段 /* xxdb_clear(); */后加入 mysqldb_clear();
9.修改mysqldb.c
- 修改mysqldb.c中的#include
为 #include
10.安装bind
./configure --prefix=/usr/local/bind --enable-threads # 指定安装目录和开启多线程的处理能力 make make install
11.配置bind
cd /usr/local/bind/etc /usr/local/bind/sbin/rndc-confgen -r /dev/urandom>rndc.conf cat rndc.conf|tail |head -9 |sed "s/^#//g">named.conf # 生成配置文件
12.创建一个数据库
############这版不太好用 Create database mydomain; 创建一张数据表 CREATE TABLE dnsrecord ( name varchar(255) default NULL, ttl int(11) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL )TYPE=MyISAM; 插入一些测试数据 INSERT INTO dnsrecord VALUES ('test.net', 259200, 'SOA', 'test.net. www.test.net 200505101 28800 7200 86400 28800'); INSERT INTO dnsrecord VALUES ('test.net', 259200, 'NS', 'ns1.test.net.'); INSERT INTO dnsrecord VALUES ('ns1.test.net', 259200, 'A', '192.168.2.2'); INSERT INTO dnsrecord VALUES ('www.test.net', 259200, 'A', '192.168.2.1');
##########################好使############################### DROP TABLE IF EXISTS 10_outside; CREATE TABLE 10_outside ( name varchar(255) default NULL, ttl int(11) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL ); -- -- Dumping data for table `10_outside` -- LOCK TABLES 10_outside WRITE; INSERT INTO 10_outside VALUES ('25.71.210.10.in-addr.arpa',3600,'PTR','cas1.test.mydomain.com.cn.'); INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'SOA','test.mydomain.com.cn. zhengyu.staff.mydomain.com.cn. 20070319 1800 600 604800 600'); INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'NS','cas1.test.mydomain.com.cn.'); INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'NS','cas2.test.mydomain.com.cn.'); INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'NS','cas3.test.mydomain.com.cn.'); INSERT INTO 10_outside VALUES ('27.71.210.10.in-addr.arpa',3600,'PTR','cas2.test.mydomain.com.cn.'); UNLOCK TABLES; -- -- Table structure for table `test_mydomain_com_cn_outside` -- DROP TABLE IF EXISTS test_mydomain_com_cn_outside; CREATE TABLE test_mydomain_com_cn_outside ( name varchar(255) default NULL, ttl int(11) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL ); -- -- Dumping data for table `test_mydomain_com_cn_outside` -- LOCK TABLES test_mydomain_com_cn_outside WRITE; INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'SOA','test.mydomain.com.cn. zhengyu.staff.mydomain.com.cn. 20070319 1800 600 604800 600'); INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'NS','cas1.test.mydomain.com.cn.'); INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'NS','cas2.test.mydomain.com.cn.'); INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'NS','cas3.test.mydomain.com.cn.'); INSERT INTO test_mydomain_com_cn_outside VALUES ('cas1.test.mydomain.com.cn',3600,'A','10.210.71.25'); INSERT INTO test_mydomain_com_cn_outside VALUES ('cas2.test.mydomain.com.cn',3600,'A','10.210.71.27'); INSERT INTO test_mydomain_com_cn_outside VALUES ('cas3.test.mydomain.com.cn',3600,'A','10.210.132.80'); INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.191'); INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.192'); INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.193'); INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.194'); INSERT INTO test_mydomain_com_cn_outside VALUES ('*',3600,'A','10.210.71.1'); INSERT INTO test_mydomain_com_cn_outside VALUES ('conf.test.mydomain.com.cn',3600,'CNAME','cas2.test.mydomain.com.cn.'); UNLOCK TABLES; ############################################
13.继续配置bind
vim /usr/local/bind/etc/named.conf 在后面按照以下格式加入 zone "mydomain.com" { type master; notify no; database "mysqldb dbname tablename hostname user password"; }; mydomain.com为要解析的域名 dbname 为数据库名 hostname为数据库服务器地址 user 为可操作前面数据库表的数据库用户名 password 为对应数据库用户名的密码 配置完成 在命令行下运行 /usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -g 查看没问题后 /usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf
dig命令直接生成named.root文件
[root@silence etc]# ls bind.keys named.conf named.root rndc.conf root.zone [root@silence etc]# dig > named.root [root@silence etc]# cat root.zone ; > DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.4 > ;; global options: +cmd ;; Got answer: ;; ->>HEADER
named.conf
[root@localhost etc]# cat named.root ; > DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.4 > ;; global options: +cmd ;; Got answer: ;; ->>HEADER
运行bind
写入系统服务
vim /etc/init.d/named #################################################################### #!/bin/bash # # description: named daemon 描述信息 # chkconfig: - 25 88 启动和关闭级别 # # 启动named的pid文件、其实文件路径我们都可以自己指定的 pidFile=/usr/local/bind/var/run/named.pid # 启动服务时的锁文件、判断一个服务是不是启动是靠这个锁文件的 lockFile=/var/lock/subsys/named # named的配置文件路径 confFile=/usr/local/bind/etc/named.conf # 判断/etc/rc.d/init.d/functions路径下的functios是否存在这个文件、存在就sources进来 [ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions # 定义启动方法 start() { # 判断锁文件是否存在、如果存在就说服务已经启动并退出 if [ -e $lockFile ]; then echo "named is already running..." exit 0 fi # 打印服务已经启动的信息 echo -n "Starting named:" # 调用functions中的daemon方法、并用--pidfile指定pid文件在什么地方、还指定用户和配置文件、我们本来是直接启用named的、现在利用daemon这个函数来启用这个服务、他会获得很多额外的属性、如果成功了会帮我们打印什么[ OK ]的、还可以做判断 daemon --pidfile "$pidFile" /usr/local/bind/sbin/named -c "$confFile" RETVAL=$? echo # 判断上面的命令是否执行成功、说明启动成功 if [ $RETVAL -eq 0 ]; then # 如果判断成功、就创建锁文件 touch $lockFile return $RETVAL else # 否则、就是失败了、那就删除锁文件和pid文件 rm -f $lockFile $pidFile return 1 fi } # 定义停止方法 stop() { # 如果锁文件不存在 if [ ! -e $lockFile ]; then # 说明服务还没有启动 echo "named is stopped." fi echo -n "Stopping named:" killproc named RETVAL=$? echo # 判断以上的命令是否执行停止成功、如果成功 if [ $RETVAL -eq 0 ];then # 删除锁文件和pid文件 rm -f $lockFile $pidFile return 0 else # 否则打印说没能正常停止 echo "Cannot stop named." # 调用functions中的函数、会打印失败 failure return 1 fi } # 定义重启服务 restart() { # 调用停止方法 stop # 睡眠2秒 sleep 2 # 调用启动方法 start } # 定义重新加载服务方法 reload() { echo -n "Reloading named: " # killprco HUP信号、named进程的信号 killproc named -HUP RETVAL=$? echo return $RETVAL } # 定义服务状态 status() { if pidof named &> /dev/null; then echo -n "named is running..." success echo else echo -n "named is stopped..." success echo fi } # 定义错误提示信息 usage() { echo "Usage: named {start|stop|restart|status|reload}" } case $1 in start) start ;; stop) stop ;; restart) restart ;; status) status ;; reload) reload ;; *) usage exit 4 ;; esac
测试
[root@localhost etc]# /usr/local/bind/bin/dig -t A saas-cloud-dev.hbjj.com @172.16.197.63 ; > DiG 9.9.3-P1 > -t A saas-cloud-dev.hbjj.com @172.16.197.63 ;; global options: +cmd ;; Got answer: ;; ->>HEADER
配置原理
################### zone "hbjj.com" IN{ type master; notify no; database "mysqldb mydomain test_mydomain_com_cn_outside 172.16.197.63 root xxxx"; ##################### ##################### zone "abc.com" IN { type master; file "/usr/local/named/etc/named.abc.com"; }; $TTL 600 @ IN SOA master.abc.com. woodie.abc.com.( 2017022802 3H 15M 1W 1D ) @ IN NS master.abc.com. master IN A 192.168.80.110 @ IN MX 10 www.abc.com. www IN A 192.168.80.121 bbs IN CNAME www.abc.com. ftp IN CNAME www.abc.com. linux IN CNAME www.abc.com. slave IN A 192.168.80.120 122 IN A 192.168.80.122 ##################################
- 两种模式是一个原理都必须配置 SOA, NS等 例:
好了,本文到此结束,带大家了解了《centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!
声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
最新阅读
更多>
-
208 收藏
-
174 收藏
-
317 收藏
-
371 收藏
-
244 收藏
-
288 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习