一、PowerDNS简介
PowerDNS 成立于1990年代后期,是开源DNS软件,服务和支持的主要供应商。2015成为了Open-Xchange的一部分,它可以作为权威与递归DNS。PowerDNS同时有Win32和Linux/Unix的版本。 PowerDNS在Win32下使用 Access的mdb文件记录DNS信息,而在Linux/Unix下则使用MySQL来记录DNS信息。有强大的web管理端,方便进行DNS配置解析。
- 官方网站:https://www.powerdns.com/
- PowerDNS 手册可在doc.powerdns.com上找到
二、数据库安装配置
1、安装数据库
# MySQL安装YUM源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-7.noarch.rpm
# 清除YUM缓存并重新生成YUM缓存
yum clean all
yum makecache
yum --disablerepo="*" --enablerepo= -y install mysql mysql-community-server mysql-community-devel
# 启动 MySQL
systemctl start mysqld.service
systemctl enable mysqld.service
systemctl status mysqld.service
# 获取初始密码
old_pass=`grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}' | tail -n 1`
# 重置root密码
mysql> alter user 'root'@'localhost' identified by 'Root@123456';
2、创建数据库
# 创建数据库
[root@localhost ~]# mysql -uroot -p
mysql> create database powerdns character set utf8 collate utf8_bin;
# 创建账号;MySQL8.0的账号身份验证和MySQL5.7不同
mysql> create user 'powerdns'@'localhost' identified with mysql_native_password by 'Root@123456';
# 授权
mysql> grant all privileges on powerdns.* to 'powerdns'@'localhost';
刷新权限
mysql> flush privileges;
3、创建数据表
- 创建数据表的操作完全按照官方的文档进行
mysql> use powerdns;
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(8) NOT NULL,
notified_serial INT UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
options VARCHAR(64000) DEFAULT NULL,
catalog VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
published BOOL DEFAULT 1,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
#检查是否可以通过powerdns用户查看到powerdns库
[root@localhost ~]# mysql -upowerdns -pRoot@123456 -e "show databases;"
三、安装配置PowerDNS
1、安装PowerDNS
# 安装epel源
[root@localhost ~]# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@localhost ~]# yum install epel-release yum-plugin-priorities
# 安装官方repo源
[root@localhost ~]# curl -o /etc/yum.repos.d/powerdns-rec-47.repo https://repo.powerdns.com/repo-files/el-rec-47.repo
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
# 安装PowerDNS
[root@localhost ~]# yum install -y pdns pdns-backend-mysql
![PowerDNS安装部署和使用实践[更新]第1张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666006733-de41d919a5d0526.jpg)
# 安装PowerDNS-Recursor
yum install pdns-recursor
2、修改配置文件
[root@localhost ~]# vim /etc/pdns/pdns.conf
#配置文件最后添加即可
launch=gmysql
gmysql-host=localhost # 需要连接的mysql的IP地址
gmysql-port=3306 # 需要连接的mysql的端口号,默认是3306
gmysql-dbname=powerdns # 需要连接的数据库,默认:powerdns
gmysql-user=powerdns # 连接数据库的用户名,默认:powerdns
gmysql-password=Root@123456 # 连接数据库的用户的密码
# 启动webserver
webserver=yes
webserver-address=192.168.66.10
# webserver-allow-from指定允许访问webserver和API的IP白名单,多个IP可以使用英文逗号隔开;这里指定的是一个网段
webserver-allow-from=192.168.66.0/24
# pdns监听地址
local-address=0.0.0.0
3、启动PowerDNS
[root@localhost ~]# systemctl start pdns.service
[root@localhost ~]# systemctl status pdns.service
[root@localhost ~]# systemctl enable pdns.service
四、安装PowerAdmin
1、PowerAdmin介绍
Poweradmin 是一个友好的基于 Web 的 DNS 管理工具,用于PowerDNS 服务器。该界面完全支持 PowerDNS 的大部分功能。它完全支持所有区域类型(主、本机和从属),支持超级主机自动配置从属区域,完全支持 IPv6,并提供多语言支持。
官网地址:https://www.poweradmin.org/
2、PowerAdmin安装
2.1:安装Nginx服务
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.22.0-1.el7.ngx.x86_64.rpm
yum install nginx-1.22.0-1.el7.ngx.x86_64.rpm
# 修改访问nginx配置
cat > /etc/nginx/conf.d/default.conf <<\EOF
server {
listen 80;
server_name localhost;
client_max_body_size 150m;
client_body_timeout 180;
client_body_buffer_size 16K;
client_header_buffer_size 1K;
root /var/www/poweradmin;
tcp_nodelay on;
sendfile on;
tcp_nopush on;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 444;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 32 32k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
include fastcgi_params;
}
}
EOF
# 创建网站目录
mkdir -p /var/www/poweradmin
# 启动nginx
systemctl start nginx
systemctl status nginx
systemctl enable nginx
2.2:安装PHP服务
- 安装PHP组件;PHP版本要求:
7.2.5+
#安装remi源地址
rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum --enablerepo=remi-php74 -y install php-cli php-pear bcmath php-pecl-jsond-devel php-mysqlnd php-gd php-common php-fpm php-intl php-xml php-opcache php-pecl-apcu php-pdo php-gmp php-process php-pecl-imagick php-devel php-mbstring php-zip php-ldap php-imap php-pecl-mcrypt --skip-broken
# 修改php.ini配置
sed -i 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf
sed -i 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
# 授权
chown -R nginx. /var/lib/php/
# 启动PHP服务
systemctl start php-fpm.service
systemctl status php-fpm.service
systemctl enable php-fpm.service
2.3:下载poweradmin
- 项目地址:https://github.com/poweradmin/poweradmin/releases
- 将下载下来的poweradmin压缩包解压文件拷贝到nginx的代码存储目录下即可
![PowerDNS安装部署和使用实践[更新]第2张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666007959-ca0fb905c9543bb.jpg)
[root@localhost ~]# tar -zxvf poweradmin-3.2.0.tar.gz
[root@localhost ~]# mv poweradmin-3.2.0/* /var/www/poweradmin/
[root@localhost ~]# chown -R nginx. /var/www/poweradmin/
2.4:安装Poweradmin
![PowerDNS安装部署和使用实践[更新]第3张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008047-f245d73c0d5122e.jpg)
![PowerDNS安装部署和使用实践[更新]第4张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008123-3e7df650fc5b05e.jpg)
![PowerDNS安装部署和使用实践[更新]第5张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008163-e7cc4455eb222fc.jpg)
- 注意:由于我们使用的是MySQL 8.0版本;上面的SQL无法直接执行,需要改为下面的SQL语句进行执行
mysql> create user 'poweradmin'@'localhost' identified with mysql_native_password by 'Root@123456';
# 授权
mysql> grant SELECT, INSERT, UPDATE, DELETE on powerdns.* to 'poweradmin'@'localhost';
# 刷新权限
mysql> flush privileges;
![PowerDNS安装部署和使用实践[更新]第6张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008281-151337c8aa9058e.jpg)
[root@localhost ~]# vim /var/www/poweradmin/inc/config.inc.php
<?php
$db_host = 'localhost';
$db_name = 'powerdns';
$db_user = 'poweradmin';
$db_pass = 'admin@123';
$db_type = 'mysql';
$session_key = 'NVz*9Iem6HIpe!iDoq1*d@V4IgEpbtj563M6R^5jLu3Gi2';
$iface_lang = 'en_EN';
$dns_hostmaster = '';
$dns_ns1 = '192.168.66.10';
$dns_ns2 = '192.168.66.10';
$ignore_install_dir = true;
![PowerDNS安装部署和使用实践[更新]第7张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008325-49df4f9af79a82a.jpg)
2.5:删除安装目录
[root@localhost ~]# rm -rf /var/www/poweradmin/install
五、登入访问和使用
1、登入访问
![PowerDNS安装部署和使用实践[更新]第8张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008507-847641600e0008f.jpg)
2、添加主域
![PowerDNS安装部署和使用实践[更新]第9张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008573-3b10b5a95d21328.jpg)
![PowerDNS安装部署和使用实践[更新]第10张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008625-c2d61d34edb5afd.jpg)
![PowerDNS安装部署和使用实践[更新]第11张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008662-a9e6ff7a29958ae.jpg)
3、验证测试
#安装dig命令;192.168.66.110的机器上配置dns解析地址
[root@localhost ~]# yum install bind-utils
#添加PowerDNS服务器地址
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.66.10
[root@localhost ~]# dig test.dqzboy.cn
![PowerDNS安装部署和使用实践[更新]第12张-浅时光博客](https://www.dqzboy.com/wp-content/uploads/2020/10/1666008772-3363594286b2e7e.jpg)
大佬这个怎样做转发呢,就是配置了powerdns做主dns后,只能解析已经添加的域名,像百度那些网站都访问不了了,请问下怎么解决
搞个内外网IP喽
就是在云服务器上搞吗?
或者外网的dns作为备用dns
好的大佬,我去试试,谢谢。