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