操作系统 / 系统运维

PowerDNS安装部署和使用实践[更新]

浅时光博客 · 10月4日 · 2020年 · · 172320次已读

一、PowerDNS简介


PowerDNS 成立于1990年代后期,是开源DNS软件,服务和支持的主要供应商。2015成为了Open-Xchange的一部分,它可以作为权威与递归DNS。PowerDNS同时有Win32和Linux/Unix的版本。 PowerDNS在Win32下使用 Access的mdb文件记录DNS信息,而在Linux/Unix下则使用MySQL来记录DNS信息。有强大的web管理端,方便进行DNS配置解析。

二、数据库安装配置


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-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

[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

文章来源(Source):https://www.dqzboy.com
  • 注意:由于我们使用的是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;
[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;

2.5:删除安装目录

[root@localhost ~]# rm -rf /var/www/poweradmin/install

五、登入访问和使用


1、登入访问

2、添加主域

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

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/2542.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站提供的内容仅限于个人学习和研究使用;禁止将内容用于商业或非法用途。下载后请在24小时内彻底删除,否则后果由用户承担。访问和下载本站内容即表示您已同意上述条款 。

5 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. lhc233广东·珠海2021-4-15 · 14:17

    大佬这个怎样做转发呢,就是配置了powerdns做主dns后,只能解析已经添加的域名,像百度那些网站都访问不了了,请问下怎么解决

    • 浅时光博客2021-4-15 · 14:26

      搞个内外网IP喽

      • lhc233广东·珠海2021-4-15 · 14:29

        就是在云服务器上搞吗?

        • 浅时光博客2021-4-15 · 14:32

          或者外网的dns作为备用dns

          • lhc233广东·珠海2021-4-15 · 14:45

            好的大佬,我去试试,谢谢。