一、安装bind主从 1.0 环境介绍
HostName
IP ADDR
部署服务
dns-master
192.168.99.253
Bind9-master、mysql、bindpod
dns-slave
192.168.99.254
Bind9-slave
1.1 配置dns-master服务器 设置主机名
1 2 3 4 5 $ cat > /etc/hostname <<EOF dns-master EOF $ hostnamectl set-hostname dns-master && bash
安装bind9服务
获取rndc的key
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ rndc-confgen key "rndc-key" { algorithm hmac-md5; secret "d+tLRbCXGROJbK/c9sllfg==" ; }; $ cd /var/named/ $ dnssec-keygen -a HMAC-MD5 -b 128 -n USER bindpod Kbindpod.+157+18906 $ chown named.named Kbindpod.* $ cat Kbindpod.+157+18906.key bindpod. IN KEY 0 3 157 QKBQhGexWw9O2TeCLfE+Cw==
修改named配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 $ vim /etc/named.conf // 第一次生成的key配置 key "rndc-key" { algorithm hmac-md5; secret "d+tLRbCXGROJbK/c9sllfg==" ; }; // 第二次生成的key内容 key "bindpod" { algorithm hmac-md5; secret "QKBQhGexWw9O2TeCLfE+Cw==" ; }; // 定义slave的列表和内网允许查询的列表 acl corpnets { 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16; 127.0.0.0/8; }; acl slavesList { 192.168.99.254/32; }; options { listen-on port 53 { any; }; directory "/var/named" ; dump-file "/var/named/data/cache_dump.db" ; statistics-file "/var/named/data/named_stats.txt" ; memstatistics-file "/var/named/data/named_mem_stats.txt" ; recursing-file "/var/named/data/named.recursing" ; secroots-file "/var/named/data/named.secroots" ; // 仅允许定义的网段进行dns查询 allow-query { corpnets; }; // 必须设置,不然解析外部dns很慢 allow-query-cache { any; }; // 是否递归查询 recursion yes ; // 转发查询配置 forward first; forwarders { 114.114.114.114; 8.8.8.8; }; allow-update { key bindpod; }; // slave 传输配置 allow-transfer { slavesList; }; // 解析记录更新, 要通知的slave地址 also-notify { 192.168.99.254; }; // 是否支持DNSSEC开关,默认为yes 。 开启后forward容易不生效 dnssec-enable no; // 是否进行DNSSEC确认开关,默认为no dnssec-validation no; auth-nxdomain no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key" ; managed-keys-directory "/var/named/dynamic" ; pid-file "/run/named/named.pid" ; session-keyfile "/run/named/session.key" ; }; logging { // 默认日志 channel default_debug { file "data/named.run" ; severity dynamic; }; // 查询日志 channel query_log { file "query.log" versions 3 size 1024m; severity info; print-time yes ; print-severity yes ; print-category yes ; }; category queries { query_log; }; }; zone "." IN { type hint; file "named.ca" ; }; include "/etc/named.rfc1912.zones" ; include "/etc/named.root.key" ;
添加域名区域配置
1 2 3 4 5 6 $ vim /etc/named.rfc1912.zones zone "putianhui-local.com" IN { type master; file "putianhui-local.com.zone" ; allow-update { key bindpod; }; };
添加域名区域解析配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $ cd /var/named/ $ cp named.localhost putianhui-local.com.zone $ chown named putianhui-local.com.zone $ vim putianhui-local.com.zone $TTL 1D@ IN SOA putianhui-local.com. admin.putianhui-local.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns1.putianhui-local.com. NS ns2.putianhui-local.com. ns1 A 192.168.99.253 ns2 A 192.168.99.254
区域解析文件参数介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $TTL 1D @ IN SOA nnv5.cn. admin.nnv5.cn. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.nnv5.cn. ns A 192.168.2.223 MX 10 mail.nnv5.cn. mail A 192.168.2.100 www A 192.168.2.66 bbs A 192.168.2.54
重启named服务并加入开机自启动
1 systemctl enable named && systemctl restart named
客户端dns设置自建dns服务器地址,验证解析是否生效。
1.2 配置dns-slave服务器 设置主机名
1 2 3 4 5 $ cat > /etc/hostname <<EOF dns-slave EOF $ hostnamectl set-hostname dns-slave && bash
安装bind9服务
修改named配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 $ vim /etc/named.conf // dns-master第一次生成的key配置 key "rndc-key" { algorithm hmac-md5; secret "d+tLRbCXGROJbK/c9sllfg==" ; }; // dns-master第二次生成的key内容 key "bindpod" { algorithm hmac-md5; secret "QKBQhGexWw9O2TeCLfE+Cw==" ; }; // 定义master的列表和内网允许查询的列表 acl corpnets { 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16; 127.0.0.0/8; }; acl mastersList { 192.168.99.253/32; }; options { listen-on port 53 { any; }; directory "/var/named" ; dump-file "/var/named/data/cache_dump.db" ; statistics-file "/var/named/data/named_stats.txt" ; memstatistics-file "/var/named/data/named_mem_stats.txt" ; recursing-file "/var/named/data/named.recursing" ; secroots-file "/var/named/data/named.secroots" ; // 仅允许定义的网段进行dns查询 allow-query { corpnets; }; // 必须设置,不然解析外部dns很慢 allow-query-cache { any; }; // 是否递归查询 recursion yes ; // 转发查询配置 forward first; forwarders { 114.114.114.114; 8.8.8.8; }; allow-update { key bindpod; }; // master的列表 allow-notify { mastersList; }; // 是否支持DNSSEC开关,默认为yes 。 开启后forward容易不生效 dnssec-enable no; // 是否进行DNSSEC确认开关,默认为no dnssec-validation no; auth-nxdomain no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key" ; managed-keys-directory "/var/named/dynamic" ; pid-file "/run/named/named.pid" ; session-keyfile "/run/named/session.key" ; }; logging { // 默认日志 channel default_debug { file "data/named.run" ; severity dynamic; }; // 查询日志 channel query_log { file "query.log" versions 3 size 1024m; severity info; print-time yes ; print-severity yes ; print-category yes ; }; category queries { query_log; }; }; zone "." IN { type hint; file "named.ca" ; }; include "/etc/named.rfc1912.zones" ; include "/etc/named.root.key" ;
添加域名区域配置
1 2 3 4 5 6 $ vim /etc/named.rfc1912.zones zone "putianhui-local.com" IN { type slave; masters { 192.168.99.253; }; file "slaves/putianhui-local.com.zone" ; };
重启named服务并加入开机自启动
1 systemctl enable named && systemctl restart named
客户端dns设置自建dns-slave服务器地址,验证解析是否生效。
1.3 验证主从是否同步 修改dns-master
下面的/var/named/putianhui-local.com.zone
文件中新添加一条A记录
,然后重启master-dns的named服务,客户端只指定dns-slave的地址,通过域名解析新增加的A记录,如果成功解析代表同步成功。
二、安装bindpod前后端 bindpod前端项目地址:https://github.com/xiaoxin1992/bindpod-web
bindpod后端项目地址:https://github.com/xiaoxin1992/bind-pod
我这里bindpod管理ui是安装在dns-master机器上,所以以下操作都在dns-master上操作
2.0 安装mysql 1 2 3 4 5 6 $ curl https://www.putianhui.cn/package/script/install_mysql57.sh | bash 查看密码命令:grep 'temporary password' /var/log/mysqld.log' 请使用命令登录:mysql -uroot -p alter user ' root'@' localhost' identified by ' Test123!@
修改mysql默认密码
1 2 3 4 5 6 7 8 9 10 11 12 $ grep 'temporary password' /var/log/mysqld.log 2021-11-11T07:27:34.519820Z 1 [Note] A temporary password is generated for root@localhost: eXqssz132p!z $ mysql -uroot -p Enter password: eXqssz132p!z alter user 'root' @'localhost' identified by 'XXXXXXX' ; grant all on *.* to 'root' @'%' identified by 'XXXXXXX' ; flush privileges;
创建bindpod使用的mysql数据库
1 2 3 $ mysql -uroot -p mysql> CREATE DATABASE `bindpod` CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> show databases;
2.1 部署bindpod后端 安装python3和nginx服务
1 $ yum -y install git gcc gcc-c++ python3-devel python3 python3-pip python3-setuptools python3-libs nginx
克隆源代码到服务器本地/data
目录下
1 2 $ mkdir /data && cd /data $ git clone https://github.com/xiaoxin1992/bind-pod.git && cd bind-pod
安装python依赖包
1 $ pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
配置后端数据库信息及rndc信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $ vim config/bindpod.json { "dns" : { "server" : "127.0.0.1" , "port" : 53 , "key" : "bindpod" , "secret" : "QKBQhGexWw9O2TeCLfE+Cw==" } , "database" : { "sqlite" : { "default" : { "ENGINE" : "django.db.backends.sqlite3" , "NAME" : "./db.sqlite3" } } , "mysql" : { "default" : { "ENGINE" : "django.db.backends.mysql" , "NAME" : "bindpod" , "USER" : "root" , "PASSWORD" : "XXXXXXX" , "HOST" : "127.0.0.1" , "PORT" : "3306" , "OPTIONS" : { "init_command" : "SET sql_mode='STRICT_TRANS_TABLES'" } } } , "select" : "mysql" } }
生成数据库表及基础数据
1 2 3 4 5 6 7 8 9 10 11 12 13 $ python3 manage.py makemigrations $ pip3 install pymysql $ vim BindPod/__init__.py import pymysql pymysql.install_as_MySQLdb() $ python3 manage.py migrate
创建初始的管理员账号
1 2 3 4 5 6 $ python3 manage.py createsuperuser 用户名 (leave blank to use 'root' ): admin 电子邮件地址: admin@zxkw.com.cn Password: Password (again): Superuser created successfully.
将bindpod服务注册到systemd托管
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $ cat > /usr/lib/systemd/system/bindpod.service <<EOF [Unit] Description=bindpod After=network.target [Service] User=root Group=root ExecStart=/usr/bin/python3 /data/bind-pod/manage.py runserver 0.0.0.0:8000 ExecReload=/bin/kill -SIGHUP $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID [Install] WantedBy=multi-user.target EOF $ systemctl daemon-reload && systemctl start bindpod && systemctl status bindpod
2.2 部署bindpod前端 安装基础服务软件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo $ yum install -y nginx yarn $ yarn -v && nginx -v 1.22.15 nginx version: nginx/1.20.1 $ wget https://nodejs.org/download/release/v10.18.1/node-v10.18.1-linux-x64.tar.gz && tar xzvf node-v10.18.1-linux-x64.tar.gz && mv node-v10.18.1-linux-x64 /usr/local/node-v10.18.1 && chown root:root -R /usr/local/node-v10.18.1/ $ cat >> /etc/profile <<EOF # NodeJs环境变量 export NODE_HOME=/usr/local/node-v10.18.1 export PATH=\$NODE_HOME/bin:\$PATH EOF $ node -v && npm -v v10.18.1 6.13.4
克隆源代码到服务器本地/data
目录下
1 2 $ cd /data $ git clone https://github.com/xiaoxin1992/bindpod-web.git && cd bindpod-web
安装node依赖包
1 2 3 $ yarn install $ echo $? 0
修改前端使用的后端接口地址并yarn打包
1 2 3 4 5 6 7 8 9 10 11 12 $ vim config.js const config = { api: "http://192.168.99.253:8000" , timeout : 3000 } export default config$ yarn build $ cd dist/ && ls
将nginx默认页面删除,把构建后的bindpod前端页面复制到nginx根目录下
1 2 3 4 5 6 $ rm -rf /usr/share/nginx/html/* $ cp -rf ./* /usr/share/nginx/html/ $ systemctl start nginx && systemctl enable nginx
通过浏览器访问http://192.168.99.253
登录到前端页面,账号密码为部署后端时初始化设置的账号密码。
三、添加域名到bindpod 浏览器访问http://192.168.99.253
登录到前端页面
域名管理
–>添加域名
–>输入域名及dns-master下域名对应的区域文件路径
–>立即创建
注意:添加CNAME记录时解析地址要以’.’点结尾。