使用bind+dlz+mysql实现动态配置DNS

DNS之bind服务器配置

CentOS7编译环境安装

yum group install "Development Tools"

yum install openssl*

yum install -y lrzsz

配置环境

系统版本:centos Mysql: 8.0 BIND: 9.16.4

一、下载安装mysql

1.mysql文件下载

官网下载:https://dev.mysql.com/downloads/file/?id=497019

2.文件下载后上传至服务器

3.将下载好的mysql解压后放置在linux的/usr/local文件夹下解压,命令如下:

tar  -xvf  mysql-8.0.21-linux-glibc2.12-x86_64.tar

4.移动解压后的文件夹到安装目录

mv mysql-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql

5.创建data目录存放数据

cd /usr/local/mysql

mkdir data

6.使用root用户创建mysql组和用户

groupadd mysql

useradd -g mysql mysql

7.改变目录权限

chown -R mysql.mysql /usr/local/mysql/

8.初始化数据库

./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

初始化成功复制末尾出现的root密码.

9.配置mysql

在mysql/support-files创建文件my-default.cnf,命令如下:

cd /usr/local/mysql/support-files/

touch my-default.cnf

复制配置文件到/etc/my.cnf,命令如下:

cp -a ./my-default.cnf /etc/my.cnf

10.编辑my.cnf,命令如下:

vi /etc/my.cnf

文件中输入以下内容

[mysqld]

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

port = 3306

socket = /tmp/mysql.sock

其他参数配置可参考MySQL 8.0如何配置my.cnf

保存并退出;

11、配置mysql服务,命令如下:

cd .. 进入/usr/local/mysql目录

cp -a ./support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/rc.d/init.d/mysqld

chkconfig --add mysqld

# 检查是否生效

chkconfig --list mysqld

12. 配置全局环境变量

编辑 / etc/profile 文件

# vi /etc/profile

在 profile 文件底部添加如下两行配置,保存后退出

export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib

export PATH

source /etc/profile

13.启动MySQL服务,命令如下:

service mysql start

14.登录MySQL,命令如下:

mysql -uroot -p密码

15.修改密码:命令如下:

SET PASSWORD FOR 'root'@localhost=PASSWORD('123456'); (旧版)

alter user 'root'@'localhost' identified by 'jhzx1995@.'; (新版)

二、mysql配置

1.创建数据库dragon,

create database dragon;

use dragon;

2.新建表t_dns_records

CREATE TABLE `t_dns_records` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `zone` varchar(255) DEFAULT NULL,
  `host` varchar(255) DEFAULT NULL,
  `type` enum('MX','CNAME','NS','SOA','A','PTR','NAPTR') DEFAULT NULL,
  `data` varchar(255) DEFAULT NULL,
  `nsa_data` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'ns对应的a记录',
  `ttl` int(11) DEFAULT NULL,
  `mx_priority` int(11) DEFAULT NULL,
  `refresh` int(11) DEFAULT NULL,
  `retry` int(11) DEFAULT NULL,
  `expire` int(11) DEFAULT NULL,
  `minimum` int(11) DEFAULT NULL,
  `serial` bigint(20) DEFAULT NULL,
  `resp_person` varchar(64) DEFAULT NULL,
  `primary_ns` varchar(64) DEFAULT NULL,
  `naptr_order` bigint(2) DEFAULT NULL,
  `naptr_preference` bigint(9) DEFAULT NULL,
  `naptr_flags` varchar(20) DEFAULT NULL,
  `naptr_service` varchar(20) DEFAULT NULL,
  `naptr_regexp` varchar(100) DEFAULT NULL,
  `org_id` bigint(20) DEFAULT NULL COMMENT '行业机构ID',
  `is_delete` int(2) DEFAULT '0' COMMENT '是否删除1:是0:否',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `zone_2` (`zone`,`host`,`naptr_service`),
  KEY `host` (`host`),
  KEY `zone` (`zone`),
  KEY `orgId` (`org_id`)
) ENGINE=InnoDB AUTO_INCREMENT=160 DEFAULT CHARSET=utf8

新建t_axfr_table表:

CREATE TABLE IF NOT EXISTS t_axfr_table (

  id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

  zone VARCHAR(255) NOT NULL,

  CLIENT VARCHAR(255) NOT NULL,

  PRIMARY KEY(id),

  KEY CLIENT (CLIENT),

  KEY zone (zone)

) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

3.插入zone信息

INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`,`mx_priority`,

`refresh`, `retry`, `expire`, `minimum`, `serial`, `resp_person`, `primary_ns`

) VALUES ('yangbo.net', '@', 'SOA', 'ns.yangbo.net.', 600, NULL, 600, 3600, 86400,

10, 2011061200, 'sys.yangbo.net.', 'ns.yangbo.net.');

INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`) VALUES

('yangbo.net.', '@', 'NS', 'ns.yangbo.net.', 600),

INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`) VALUES

('yangbo.net', 'ns', 'A', '192.168.1.1'),

INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`) VALUES

('yangbo.net', 'www', 'A', '192.168.1.55', 600);

三、下载安装bind

1.官网下载bind-9.16.4.tar.xz;

2.解压并进入目录

tar -xvf bind-9.16.4.tar.xz;

cd bind-9.16.4

3.执行编译命令

./configure --prefix=/usr/local/bind --enable-epoll --enable-largefile --enable-threads=no --with-dlz-mysql=/usr/local/mysql --disable-openssl-version-check

4.编译中报错解决

①报错:configure: error: Python >= 2.7 or >= 3.2 and the PLY package are required for dnssec-keymgr and other Python-based tools.

执行pip install ply

②报错:checking for libuv... checking for libuv >= 1.0.0... no configure: error: libuv not found

执行以下命令安装libuv

yum install -y epel-release

yum install libuv

yum install libuv-devel

③如果在编译过程中出现sys/capability.h usability... no

执行以下命令安装libcap*

yum -y install libcap*/yum install libcap-devel

5.安装bind

make

make install

6.配置bind

配置bind 环境变量

# echo "export PATH=${PATH}:/usr/local/bind/sbin/:/usr/local/bind/bin/" >> /etc/profile

# source /etc/profile

7. 配置rndc

# cd /usr/local/bind/etc/

# rndc-confgen >rndc.conf

cat rndc.conf >rndc.key生成key.conf

tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf 生成named.conf

8.配置named.conf

# named.conf添加其他配置

#  options {

        directory "/var/named/";

        recursion yes;

        listen-on port 53    { any; };

        dump-file "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        allow-query { any; };

        blackhole { none; };

 };

9.创建named文件夹

# mkdir /var/named/

# wget -O /var/named/named.ca  http://www.internic.net/domain/named.root

10. 启动named,查看根递归解析域名是否成功

/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -g (debug启动)

/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf (正常启动)

11.如果启动的时候报错

named: error while loading shared libraries: libmysqlclient.so.21: cannot open shared object file: No such file or directory

问题解决:

vi /etc/ld.so.conf 添加下一行内容

/usr/local/mysql/lib 此为mysql安装的绝对路径下的lib文件夹下

ldconfig 执行以生效

再启动

#dig www.baidu.com @127.0.0.1

如果这一步成功的话,一个基本的dns就搭建成功了。

四、配置dlz数据库查询

配置Mysql zone, 在named.conf中加入

dlz "Mysql zone" {

    database        "mysql

    {host=rm-2zej0pm00st46xa7cvo.mysql.rds.aliyuncs.com  dbname=dragon-test ssl=false port=3306 user=dragon_test pass=OID!@$qwer0730}

     {select zone from t_dns_records_1 where zone='$zone$'}

     {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') when lower(type) = 'naptr' then concat(' ', naptr_order, ' ', naptr_preference, ' \"', naptr_flags, '\"', ' \"', naptr_service, '\"', ' \"', naptr_regexp,'\" ', data, '.') else data end from t_dns_records_1 where zone = '$zone$' and host = '$record$' and is_delete = '0' and not (type = 'SOA')}

     {select ttl, type, mx_priority, data, resp_person, serial, refresh, retry, expire, minimum from t_dns_records_1 where zone = '$zone$' and is_delete = '0' and (type = 'SOA')}

     {select ttl, type, host, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') else data end, resp_person, serial, refresh, retry, expire,minimum from t_dns_records_1 where zone = '$zone$'}

     {select zone from t_axfr_table where zone = '$zone$' and client = '$client$'}

     {update data_count set count = count + 1 where zone ='$zone$'}";

     search yes;

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值