LAMP架构实现PowerDNS

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/MicePro/article/details/102542706

本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/LAMP架构实现PowerDNS/

  PowerDNS 是一个跨平台的开源DNS服务组件,它是高性能的域名服务器,除了支持普通的BIND配置文件,PowerDNS还可以从MySQL,Oracle,PostgreSQL等的数据库读取数据。PowerDNS安装了Poweradmin(基于php实现),能实现Web管理DNS记录,非常方便。
  ps:本次过程是在centos7系统上完成。

配置安装pdns

安装pdns包

yum install -y pdns pdns-backend-mysql

创建pdns数据库

  搭建好mariadb数据库了,启动数据库服务,参考官方文档创建powerdns数据库及其中的表,参看下面文档 https://doc.powerdns.com/md/authoritative/backend-generic-mysql/
vim powerdns.sql

CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'powerdns'@'127.0.0.1' IDENTIFIED BY 'powerdns';
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(6) NOT NULL,
  notified_serial       INT DEFAULT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);


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,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);


CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;


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) NOT NULL,
  comment               VARCHAR(64000) NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
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;

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,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB;

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;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

  以上参数设置为官方文档默认值,如果参数数值大小不对,可自行修改调整。数据库名、主机名、用户名及密码自行修改。
  导入SQL语句mysql -uroot -ppassword < power.sql,此时powerdns数据库就创建好了。

配置PowerDNS使用mariadb作为后台数据存储

可参见官方文档的设置参数:

gmysql-host
Host (ip address) to connect to. Mutually exclusive with gmysql-socket.
WARNING: When specified as a hostname a chicken/egg situation might arise where the database is needed to resolve the IP address of the database. It is best to supply an IP address of the database here.
gmysql-port
The port to connect to on gmysql-host. Default: 3306
gmysql-socket
Connect to the UNIX socket at this path. Mutually exclusive with gmysql-host.
gmysql-dbname
Name of the database to connect to. Default: “pdns”.
gmysql-user
User to connect as. Default: “powerdns”.
gmysql-group
Group to connect as. Default: “client”.
gmysql-password
The password to for gmysql-user.
gmysql-dnssec
Enable DNSSEC processing for this backend. Default=no.
gmysql-innodb-read-committed
Use the InnoDB READ-COMMITTED transaction isolation level.
Default=yes.
gmysql-timeout
The timeout in seconds for each attempt to read from, or write to the server. A value of 0 will disable the timeout. Default: 10

  官方文档第一条写的很清楚,gmysql-localhost那一项最好填ip,或者你的hostname为localhost也可以解析成127.0.0.1,所以虽然我是本机数据库,也选择直接使用127.0.0.1(我试了localhost,提示无法连接数据库,应该是因为我改了hostname导致没法解析成127.0.0.1了,干脆直接用ip就成功连接了)

vim /etc/pdns/pdns.conf
  用/搜索到"launch="将值修改为gmysql,并在下面添加mysql的相关信息设置:

launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=powerdns

  好了pdns服务就配置好了,启动服务.

systemctl start pdns
systemctl enable pdns

搭建LAP架构用web界面实现pdns服务

安装httpd和php相关包并启动httpd服务

yum -y install httpd php php-devel php-gd php-mcrypt php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext
systemctl start httpd
systemctl enable httpd

下载PowerAdmin程序,并解压缩到相应目录

wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
tar xvf poweradmin-2.1.7.tgz -C /var/www/html
cd /var/www/html
mv poweradmin-2.1.7 poweradmin

登陆web界面安装PowerAdmin

  浏览器输入http://powerdns服务器IP/poweradmin/install/进入安装向导界面。
在这里插入图片描述  1.选择语言

在这里插入图片描述
  2. 确认powerdns服务已连接好数据库,如果之前已经有相关记录,本次安装将会清除之前的数据,时候确定安装。
在这里插入图片描述  3.填写数据库相关信息

在这里插入图片描述  4.为Poweradmin创建一个受限用户
  说明:
     Username:PowerAdmin用户名
     Password:上述用户的密码
     Hostmaster:当创建SOA记录指定默认主机管理员
     Primary nameserver:主域名服务器
     Secondary namesever:辅域名服务器

在这里插入图片描述  5.按照下面页面说明,在数据库中创建用户并授权

GRANT SELECT, INSERT, UPDATE, DELETE
ON powerdns.*
TO 'powerdns'@'127.0.0.1'
IDENTIFIED BY 'powerdns';

在这里插入图片描述  6.按下面页面说明,创建config.in.php文件内容
  vim /var/www/html/poweradmin/inc/config.inc.php

<?php

$db_host                = '127.0.0.1';
$db_user                = 'powerdns';
$db_pass                = 'powerdns';
$db_name                = 'powerdns';
$db_type                = 'mysql';
$db_layer               = 'PDO';

$session_key            = 'Kae}LCI!&^Ew6(5eyd6B~!SVHRHhu+t(svkGqb1S{C0}TP';

$iface_lang             = 'en_EN';

$dns_hostmaster         = 'powerdns';
$dns_ns1                = '192.168.32.7';
$dns_ns2                = '192.168.32.7';`

在这里插入图片描述  7.设置完成,删除install目录
  \rm -rf install
在这里插入图片描述  如果不进行第6、7步就会报错,如上图所示。
在这里插入图片描述  8.输入用户名密码登陆
在这里插入图片描述  9.进入主页面。至此PowerDNS在web上展示就实现了~

猜你喜欢

转载自blog.csdn.net/MicePro/article/details/102542706