工具官方地址:

opsbase.cn/p/django-bind9

yum安装mysql:

scriptjc.com/article/850

创建数据库和赋予权限等操作:

use mysql
create database bind9;
CREATE USER 'root'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON bind9.* TO 'root'@'%' WITH GRANT OPTION;
flush privileges;

docker安装web端工具:

docker run --name bind9 -d --restart=always -p 8000:8000 -e DB_HOST=192.168.0.53 -e DB_PORT=3306 -e DB_USER=root -e DB_PASSWORD='123456' -e DB_NAME=bind9 lghost/bind9

编译安装bind:

安装编译工具:

yum groupinstall "Development Tools" "Server Platform Development"

下载二进制包:

wget -c http://ftp.isc.org/isc/bind9/9.11.2/bind-9.11.2.tar.gz

编译:

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

安装:

make
make install


配置:

cd /usr/local/bind/etc
wget -c ftp://ftp.internic.net/domain/named.root
/usr/local/bind/sbin/rndc-confgen -r /dev/urandom -a
mkdir -pv /usr/local/bind/var/{logs,zones}
ln -s /usr/local/bind/sbin/named /bin/

配置文件/usr/local/bind/etc/named.conf:

acl trust-lan {
        10.0.0.0/8;
        172.16.0.0/16;
        192.168.0.0/16;
        127.0.0.1;
};

statistics-channels {
    inet 127.0.0.1 port 8653 allow { 127.0.0.1; };
};

options {
    listen-on port 53 { any; };
    zone-statistics yes;
    tcp-clients 50000;
    dnssec-enable no;
    dnssec-validation no;
    datasize unlimited;
    stacksize unlimited;
    allow-query { trust-lan; };
    allow-transfer { 172.20.10.61;};
    directory "/usr/local/bind/var/";
    pid-file "named.pid";
    forwarders {
      223.5.5.5;
      114.114.114.114;
      8.8.8.8;
    };
    recursion yes;
    max-cache-size 60%;
};

zone "." IN {
       type hint;
       file "/usr/local/bind/etc/named.root";
};

logging {
    channel bind_log {
        file "/usr/local/bind/var/logs/bind.log" versions 3 size 100m;
        severity debug;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
	channel error_log {
        file "/usr/local/bind/var/logs/error.log" versions 10 size 32m;
        severity info;
        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 info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    category default { bind_log; };
    category queries { query_log; };
};


dlz "My zone" {
 database "mysql
 {host=192.168.0.53 dbname=bind9 ssl=false port=3306 user=root pass=123456}
 {select zone from dns_zones where zone='$zone$'}
 {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 dns_records LEFT JOIN dns_zones ON dns_records.zone_id = dns_zones.id WHERE dns_zones.status=1 and dns_zones.zone='$zone$' and dns_records.host='$record$'}";
};


启动服务:

/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -g

创建用户:

useradd -s /sbin/nologin named
chown -R named:named /usr/local/bind/

启动文件:

cat > /etc/systemd/system/named.service <<EOF
[Unit]
Description=Internet domain name server
After=network.target

[Service]
ExecStart=/usr/local/bind/sbin/named -f -u named -4 -n 2
ExecReload=/usr/local/bind/sbin/rndc reload
ExecStop=/usr/local/bind/sbin/rndc stop

[Install]
WantedBy=multi-user.target
Alias=bind.service
EOF


编译bind添加支持mysql插件:

问题1:

mysql_driver.c:67:19: fatal error: mysql.h: No such file or directory

解决方法:

yum install mysql-devel

问题2:用c连接mysql 编译参数:-lmysqlclient 出错

/usr/bin/ld: cannot find -lmysqlclient

原因:libmysqlclient.so不在/usr/bin目录下,而是在/usr/lib64/mysql目录下

解决方法:建一个软连接或者复制到/usr/bin目录下

ln -sv /usr/lib64/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so