開篇說明mysql
關於智能DNS和CDN的東西能夠看我以前的一篇博文sql
BIND實現智能DNShttp://lustlost.blog.51cto.com/2600869/924229數據庫
上次的博文簡單使用了BIND的視圖功能實現了簡單的智能dns,此篇博文結合了mysql實現真正意義上的智能DNS系統centos
須要準備東西
ide
首先yum安裝mysql。。。oop
yum install mysql mysql-server mysql-develspa 下載bind主程序源碼:.net ftp://ftp.isc.org/isc/bind9/9.8.5-P1/bind-9.8.5-P1.tar.gzserver 下載bind-sdb驅動:blog http://nchc.dl.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz 解壓: tar xfbind-9.8.5-P1.tar.gz tar xfmysql-bind.tar.gz |
編譯安裝bind
將mysql-sdb的補丁文件拷貝到bind安裝源文件目錄下
cp mysql-bind/mysqldb.c bind-9.8.5-P1/bin/named/ cp mysql-bind/mysqldb.h bind-9.8.5-P1/bin/named/ |
修改bind源碼目錄下的bin/named/Makefile.in修改如下幾行,其中DBDRIVER_LIBS後的參數能夠使用/usr/bin/mysql_config --libs獲取
DBDRIVER_OBJS= mysqldb.@O@ DBDRIVER_SRCS= mysqldb.c DBDRIVER_INCLUDES= -I'/usr/include/mysql' DBDRIVER_LIBS= -rdynamic -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lssl-lcrypto |
修改bind源碼目錄下的bin/named/main.c,添加如下幾行
/*#include "xxdb.h" */ 後面添加 #include "mysqldb.h" /*xxdb_init();*/ |
修改bin/named/mysqldb.c
將 #include <named/mysqldb.h> 修改成 #include <bin/named/mysqldb.h> |
編譯安裝
./configure--prefix=/usr --sysconfdir=/etc make&& make install |
下載電信和聯通的地址列表ACL,存放在/etc/named目錄下
http://www.centos.bz/wp-content/uploads/2012/02/CHINANET.acl http://www.centos.bz/wp-content/uploads/2012/02/CNC.acl |
在/etc/named.conf添加2條,從而將電信和聯通的ACL地址列表包含進來
include"/etc/named/CHINANET.acl" include"/etc/named/CNC.acl" |
而後在主配置文件中定義2個視圖:
CNC是聯通的視圖 ,CHINANET是電信的視圖
view CNC{ match-clients { CNC; }; recursion no; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "named.localhost"; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; }; zone "lustlost.com" IN { type master; notify no; database "mysqldb smartdns CNClocalhost root 123456"; #這裏定義的數據庫相關的配置,字段分別爲:SQLtype DataBase Table Host User Password }; }; view CHINANET { match-clients { CHINANET; }; recursion no; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "named.localhost"; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; }; zone "lustlost.com" IN { type master; notify no; database "mysqldb smartdnsCHINANET localhost root 123456"; }; }; |
而後建立數據庫:
create database smartdns; use smartdns; |
建立聯通表
CREATE TABLE CNC(name varchar(255) default NULL,ttl int(11) default NULL,rdtypevarchar(255) default NULL,rdata varchar(255) default NULL) TYPE=MyISAM; 插入SOA其實受權信息 INSERTINTO CNC VALUES('lustlost.com',259200,'SOA','lustlost.com.www.lustlost.com.20130617 28800 720086400 28800'); 插入NS記錄(實驗環境,地址皆爲內網IP) INSERT INTO CNC VALUES ('lustlost.com', 259200, 'NS','ns1.lustlost.com.'),('lustlost.com', 259200, 'NS', 'ns2.lustlost.com.'),('lustlost.com', 259200, 'MX', '10 mail.lustlost.com.'),('ns1.lustlost.com',259200, 'A', '192.168.1.1'),('ns2.lustlost.com', 259200, 'A','192.168.1.2'),('mail.lustlost.com', 259200, 'A','192.168.1.3'),('www.lustlost.com', 259200, 'A', '192.168.1.4'); |
建立電信表
CREATE TABLE CHINANET (name varchar(255) default NULL,ttl int(11) default NULL,rdtypevarchar(255) default NULL,rdata varchar(255) default NULL) TYPE=MyISAM; 插入SOA其實受權信息 INSERT INTO CHINANET VALUES ('lustlost.com',259200,'SOA','lustlost.com.www.lustlost.com.2013061728800 7200 86400 28800'); 插入NS記錄(實驗環境,地址皆爲內網IP) INSERT INTO CHINANET VALUES ('lustlost.com', 259200, 'NS','ns1.lustlost.com.'),('lustlost.com', 259200, 'NS', 'ns2.lustlost.com.'),('lustlost.com', 259200, 'MX', '10 mail.lustlost.com.'),('ns1.lustlost.com',259200, 'A', '192.168.2.1'),('ns2.lustlost.com', 259200, 'A', '192.168.2.2'),('mail.lustlost.com',259200, 'A', '192.168.2.3'),('www.lustlost.com', 259200, 'A', '192.168.2.4'); |
完畢....