安装 bind-dlz

BIND DLZ 配置

mysql:   172.17.0.2
BIND主:  172.17.0.3

BIND从: 172.17.0.4

 

mysql  5.7   BIND 9.16

 

BIND 安装:

yum -y install libcap*   libuv  libuv-devel

wget https://downloads.isc.org/isc/bind9/9.16.0/bind-9.16.0.tar.xz

tar -xf bind-9.16.0.tar.xz

useradd -s /sbin/nologin -M named

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

#--enable-threads 多线程支持(官网解析是需要关闭),--enable-largefile 启用大文件支持,--disable-ipv6 关闭ipv6支持,--with-dlz-mysql意思是使用mysql存储域名解析 

make

make install

 

查看依赖

[root@slave1 etc]# ldd /usr/local/bind/sbin/named
    linux-vdso.so.1 =>  (0x00007ffcf6933000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00002b8973ab1000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00002b8973cfe000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00002b8973fe7000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002b897421a000)
    libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00002b897441e000)
    libz.so.1 => /lib64/libz.so.1 (0x00002b8974881000)
    libmysqlclient.so.20 => /usr/local/mysql/lib/libmysqlclient.so.20 (0x00002b8974a97000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b89752d9000)
    libm.so.6 => /lib64/libm.so.6 (0x00002b8975510000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00002b8975812000)
    libuv.so.1 => /lib64/libuv.so.1 (0x00002b8975a17000)
    librt.so.1 => /lib64/librt.so.1 (0x00002b8975c46000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b8975e4e000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b897606a000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00002b8976284000)
    libc.so.6 => /lib64/libc.so.6 (0x00002b8976488000)
    /lib64/ld-linux-x86-64.so.2 (0x00002b897388d000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00002b8976856000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002b8976a66000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00002b8976c6a000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00002b8976e83000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b897718a000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00002b89773a0000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00002b89775a3000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00002b89777a8000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00002b89779cf000)

如果依赖mysql

vim  /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib/
ldconfig

 

 

 

BIND 配置

cd /usr/local/bind/etc/ 
/usr/local/bind/sbin/rndc-confgen > rndc.conf 
cat rndc.conf >rndc.key 
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf

 

bind 配置文件修改

bind主 配置文件

vi named.conf
key
"rndc-key" { algorithm hmac-md5; secret "mvCUyhyDvNNGywhoVHbSaQ=="; }; controls { inet 0.0.0.0 port 953 allow { 0.0.0.0; } keys { "rndc-key"; }; }; options { listen-on port 53 {any;}; directory "/usr/local/bind/var"; pid-file "named.pid"; allow-query{any;}; allow-transfer { 172.17.0.4; }; also-notify { 172.17.0.4; }; forwarders{114.114.114.114;8.8.8.8;}; }; acl "dns-ip-list"{ 172.17.0.3; 172.17.0.4; }; logging { channel error_log { file "/usr/local/bind/var/logs/error.log" versions 10 size 32m; severity warning; print-time yes; print-severity yes; print-category yes; }; channel query_log { file "/usr/local/bind/var/logs/query.log" versions 10 size 32m; severity debug; print-time yes; print-severity yes; print-category yes; }; category default { error_log; }; category queries { query_log; }; }; dlz "Mysql zone" { database "mysql {dbname=db_ops port=3306 host=172.17.0.2 user=fengjian pass=123456 ssl=false} {select zone from t_dns_records where zone = '$zone$' and status = 1} {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum) else data end from t_dns_records where zone = '$zone$' and host = '$record$' and status = 1} {} {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 where zone = '$zone$' and status = 1} {select zone from t_dns_xfr_table where zone = '$zone$' and client = '$client$' and status = 1}"; };

bind 从配置文件修改 vim named.conf(slave)
key
"rndc-key" { algorithm hmac-md5; secret "mvCUyhyDvNNGywhoVHbSaQ=="; }; controls { inet 0.0.0.0 port 953 allow { 0.0.0.0; } keys { "rndc-key"; }; }; options { listen-on port 53 {any;}; //开启侦听53端口,any表示接受任意ip连接 directory "/usr/local/bind/var"; pid-file "named.pid"; //文件内容就是named进程的id allow-query{any;}; //允许任意ip查询 allow-transfer { 172.17.0.4; }; also-notify { 172.17.0.4; }; forwarders{114.114.114.114;8.8.8.8;}; //设置转发的公网ip }; acl "dns-ip-list"{ 172.17.0.3; 172.17.0.4; }; logging { channel error_log { file "/usr/local/bind/var/logs/error.log" versions 10 size 32m; severity warning; print-time yes; print-severity yes; print-category yes; }; channel query_log { file "/usr/local/bind/var/logs/query.log" versions 10 size 32m; severity debug; print-time yes; print-severity yes; print-category yes; }; category default { error_log; }; category queries { query_log; }; }; zone "fengjian.com." IN { type slave; file "slaves/fengjian.com.zone"; masterfile-format text; masters{ 172.17.0.3; }; };
masterfile-format 必须要手动设置, 要不然同步过来的是二进制文件, 无法阅览

 

mysql 插入数据

create database db_ops;
grant all on *.* to 'fengjian'@'172.17.0.%' identified by '123456';

INSERT INTO t_dns_records (zone, host, type, data, ttl) VALUES ('fengjian.com', 'www', 'A', '1.1.1.1', '60'); INSERT INTO t_dns_records (zone, host, type, data, ttl) VALUES ('fengjian.com', 'cloud', 'A', '2.2.2.2', '60'); INSERT INTO t_dns_records (zone, host, type, data, ttl) VALUES ('fengjian.com', 'ns', 'A', '172.17.0.3', '60'); INSERT INTO t_dns_records (zone, host, type, data, ttl) VALUES ('fengjian.com', 'blog', 'CNAME', 'cloud.fengjian.com.', '60'); INSERT INTO t_dns_records (zone, host, type, data, ttl) VALUES ('fengjian.com', '@', 'NS', 'ns.fengjian.com.', '60'); INSERT INTO t_dns_records (zone, host, type, ttl, data,refresh, retry, expire, minimum, serial, resp_person) VALUES ('fengjian.com', '@', 'SOA', '60', 'ns', '28800', '14400', '86400', '86400', '2012020809', 'admin'); insert into t_dns_records (zone,host,type,data,ttl,mx_priority,refresh,retry,expire,minimum,serial,resp_person,primary_ns) values ('1.168.192in-addr.arpa','@','SOA','node02.example.com',86400,NULL,3600,15,86400,3600,2008082700,'node02.example.com','node02.example.com'); insert into t_dns_records (zone,host,type,data)values('1.168.192.in-addr.arpa','@','NS','node02.example.com.'); insert into t_dns_records(zone,host,type,data)values('1.168.192.in-addr.arpa','250','PTR','node02.example.com.'),('1.168.192.in-addr.arpa','111','PTR','x.example.com.'); insert into t_dns_xfr_table (zone, client) values("fengjian.com", "172.17.0.3") insert into t_dns_xfr_table (zone, client) values("fengjian.com", "172.17.0.4")

 

8. debug 模式下运行 bind服务

 /usr/local/bind/sbin/named -g -d 1

 

9. 测试 

 

 

FAQ:

1. salve 为什么无法同步master的数据

1.1 检查 t_dns_xfr_table  是否配置相应的zone 及  client, client是slave的ip, 只有配置,slave才能被授权同步
1.2 检查 SOA 序列号(serial),每次更改配置都会在原来的基础上加1, 保证master比slave大
1.3 检查 refresh 字段, 一般设置300s, 5分钟同步一次


摘自:

https://www.cnblogs.com/weiguoyu/p/6601176.html

 

posted @ 2020-03-12 17:56  fengjian1585  阅读(787)  评论(0编辑  收藏  举报