共计 10180 个字符,预计需要花费 26 分钟才能阅读完成。
1. 先装置 MySQL,间接 yum 装置
* yum -y install mysql mysql-server2. 再装置一些依赖的包
- yum -y install openssl openssl-devel libss-dev gcc gcc-c++ mysql-devel
3. 下载 bind, bind 官网(https://www.isc.org/)
- wget ftp://ftp.isc.org/isc/bind9/bind-9.10.3-P2/bind-9.10.3-P2.tar.gz
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 <config.h>
#include "mysqldb.h"
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
而后在正文代码段 /* xxdb_init(); */ 后退出 mysqldb_init();
在正文代码段 /* xxdb_clear(); */ 后退出 mysqldb_clear();
9. 批改 mysqldb.c
- 批改 mysqldb.c 中的 #include <named/mysqldb.h> 为 #include <include/mysqldb.h>
10. 装置 bind
./configure --prefix=/usr/local/bind --enable-threads # 指定装置目录和开启多线程的解决能力
make
make install
11. 配置 bind
cd /usr/local/bind-9.10/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
[root@silence etc]# ls
bind.keys named.conf named.root rndc.conf root.zone
[root@silence etc]# cat root.zone
$TTL 86400
@ IN SOA ns1.mydomain.com. w1.mydomain.com (
2018070110
1H
5M
7D
1D)
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 192.168.108.160
ns2 IN A 192.168.108.138
ns3 IN A 192.168.108.166
mx1 IN A 192.168.108.138
w1 IN A 192.168.1.2
w0 IN A 192.168.1.1
www IN A 192.168.108.160
* IN A 192.168.108.166
[root@silence etc]# cat named.conf
key "rndc-key" {
algorithm hmac-md5;
secret "ZYobWCcSDr2HDCMuojc6gg==";
};
controls {
inet 127.0.0.1 port 953
allow {127.0.0.1;} keys {"rndc-key";};
};
options {listen-on port 53 { 127.0.0.1;172.16.188.123;};
directory "/data/work/bind9.9.3";
allow-query-cache {any;};
allow-query {any;};
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
};
zone "." {
type hint;
file "/data/work/bind9.9.3/etc/root.zone";
};
zone "mydomain" {
type forward;
forwarders {114.114.114.114;8.8.8.8;};
forward first;
};
logging {
channel bind_log {
file "/data/work/bind9.9.3/logs/bind.log" versions 3 size 20m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default {bind_log;};
};
zone "test.mydomain.com.cn" IN{
type master;
notify no;
database "mysqldb mydomain test_mydomain_com_cn_outside 172.16.188.123 root 111111";
};
zone "16.172.in-addr.arpa" IN{
type master;
notify no;
database "mysqldb mydomain 10_outside 172.16.188.123 root 111111";
};
运行 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@silence ~]# nslookup cas1.test.mydomain.com.cn
Server: 172.16.188.123
Address: 172.16.188.123#53
Name: cas1.test.mydomain.com.cn
Address: 10.210.71.25
[root@silence ~]# /data/work/bind9.9.3/bin/dig -t A cas1.test.mydomain.com.cn @172.16.188.123
; <<>> DiG 9.9.3-P1 <<>> -t A cas1.test.mydomain.com.cn @172.16.188.123
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10127
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;cas1.test.mydomain.com.cn. IN A
;; ANSWER SECTION:
cas1.test.mydomain.com.cn. 3600 IN A 10.210.71.25
;; AUTHORITY SECTION:
test.mydomain.com.cn. 3600 IN NS cas1.test.mydomain.com.cn.
test.mydomain.com.cn. 3600 IN NS cas2.test.mydomain.com.cn.
test.mydomain.com.cn. 3600 IN NS cas3.test.mydomain.com.cn.
;; ADDITIONAL SECTION:
cas2.test.mydomain.com.cn. 3600 IN A 10.210.71.27
cas3.test.mydomain.com.cn. 3600 IN A 10.210.132.80
;; Query time: 3 msec
;; SERVER: 172.16.188.123#53(172.16.188.123)
;; WHEN: Wed Nov 25 16:37:23 CST 2020
;; MSG SIZE rcvd: 154
[root@silence ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.16.188.123
正文完