云服务器

DNS的进阶版之智能DNS

2020-04-26 10:22:47 53

前言

上一期讲了通过BIND搭建的DNS服务器,是一个主域名服务器,负责维护这个区域的所有域名信息,是特定的所有信息的权威信息源。看过的人应该都知道,存储该区域的正本数据,是依靠zone文件,维护zone文件是比较繁琐的,每次都需要进入操作系统修改文件并需要重启bind服务,今天我们就来说说bind+mysql的结合,搭建一个专属的智能DNS服务器,减少您的维护量和避免服务重启风险。

 

一、安装bind和mysql

1、Mysql安装,您喜欢编译或者yum都可以;
yum -y install mysql mysql-server mysql-devel

2、安装bind和mysql-bind ##这里我用编译安装,注意以下修改可使得bind支持mysql

解压
tar xzf bind-9.11.1.tar.gz
tar xzf mysql-bind.tar.gz

分别复制mysql-bind的mysqldb.c和mysqldb.h到bind-9.11.1/bin/named和bind-9.11.1/bin/named/include

cd mysql-bind
cp mysqldb.c mysqldb.h /root/bind-9.11.1/bin/named
cp mysqldb.c mysqldb.h /root/bind-9.11.1/bin/named/include

修改bind源码中的bin/named/Makefile.in文件:

DBDRIVER_OBJS = mysqldb.@O@ #注意两个@中间那个是大写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 -m32 -fasynchronous-unwind-tables -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv
DBDRIVER_LIBS = -rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto

注:

DBDRIVER_INCLUDES的值由命令/usr/bin/mysql_config —cflags获得。

DBDRIVER_LIBS的值由命令/usr/bin/mysql_config —libs获得。

编辑bind源文件bin/named/main.c

在函数setup(void)里面ns_server_create()的前面添加mysqldb_init();,如

/*

         * Add calls to register sdb drivers here.
         */
        /* xxdb_init(); */
        mysqldb_init();
        ns_server_create(ns_g_mctx, &ns_g_server);

 

在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear(),如

ns_server_destroy(&ns_g_server);
mysqldb_clear();
/*

         * Add calls to unregister sdb drivers here.
         */
        /* xxdb_clear(); */

 

编辑bind源文件中的bin/named/mysqldb.c文件:

更改#include 为#include

开始安装bind

yum -y install gcc openssl-devel
cd /tmp/bind-9.11.1
./configure —prefix=/opt/bind9/ —enable-threads —disable-openssl-version-check

make && make install

 

二、named.conf文件配置

options {
//域名文件存放的绝对路径
directory “/usr/local/named/var”;
//如果bind启动,自动会在/usr/local/named/var目录生成一个named.pid文件,打开文件就是named进程的ID
pid-file “named.pid”;
};

//下面部分是智能DNS的精髓,下面的定义为当访问用户的归属是ct的IP地址,则会返回eflycloud数据库下ct数据表表的解析结果,如此类推,实现智能解析服务
//ct
include “/opt/bind9/etc/dnsview/ct.txt”;
//cnc
include “/opt/bind9/etc/dnsview/cnc.txt”;
//mobile
include “/opt/bind9/etc/dnsview/mobile.txt”;

//ct
view “ct” { match-clients{ ct; }; zone “rjkj.com” IN { type master; database “mysqldb eflycloud ct 127.0.0.1 root 123456”; }; };
//cnc
view “cnc” { match-clients{ cnc; }; zone “rjkj.com” IN { type master; database “mysqldb eflycloud cnc 127.0.0.1 root 123456”; }; };
//mobile
view “mobile” { match-clients{ mobile; }; zone “rjkj.com” IN { type master; database “mysqldb eflycloud mobile 127.0.0.1 root 123456”; }; };

启动bind服务
/opt/bind9/sbin/named -c /opt/bind9/etc/named.conf

 

三、mysql配置

service mysqld start
mysql -u root -p //设置mysql的密码
mysql> create database example; //建立example数据库
use example;
CREATE TABLE rjkj_com ( //建表
id int(10) unsigned NOT NULL AUTO_INCREMENT,
host varchar(255) NOT NULL DEFAULT ‘@’,
type enum(‘MX’,’CNAME’,’NS’,’SOA’,’A’,’PTR’) NOT NULL,
data varchar(255) DEFAULT NULL,
ttl int(11) NOT NULL DEFAULT ‘800’,
PRIMARY KEY (id)
);

insert INTO rjkj_com (zone,host,type,data,ttl) values (‘www.rjkj.com ‘,’A’,’10.255.1.27’,86400); //添加几条域名解析记录
insert INTO rjkj_com (zone,host,type,data,ttl) values (‘abc.rjkj.com ‘,’A’,’10.255.1.29’,86400);

上面就是一个数据库和数据表的过程,也可以通过phpmyadmin处理

 

从今天以后,您只需要通过数据库就可以实时对域名信息进行修改,如果再加上mysql的管理工具,例如phpmyadmin,直接在浏览器打开,对数据进行修改即可,不需要登录系统操作,不需要重启服务,享受既高性能又方便的智能DNS。

睿江云官网链接:www.eflycloud.com

上一篇: 无

微信关注

获取更多技术咨询