Fork me on GitHub

实现WEB管理的PowerDNS

  PowerDNS 是一个跨平台的开源DNS服务组件,它是高性能的域名服务器,除了支持普通的BIND配置文件,PowerDNS还可从MySQL,Oracle,PostgreSQL等的数据库读取数据。PowerDNS安装了Poweradmin(基于php实现),能实现Web管理DNS记录,非常方便
  PowerDNS官网:https://www.powerdns.com/
  PowerDNS文档:https://doc.powerdns.com/
  Poweradmin官网:http://www.poweradmin.org/

一、安装所需要的包

yum install -y pdns pdns-backend-mysql

二、安装MySQL数据库(我这里把MySQL数据库分出来在其他电脑上做的)

yum install mariadb-server -y

三、在数据库服务器上创建数据库,并授权

create database powerdns;

  grant all on powerdns.* to 'powerdns'@'172.16.8.%' identified by 'centos';

#创建一个数据库叫powerdns,创建一个用户也叫powerdns。授权通过172.16.8这个网段访问数据库powerdns,密码centos

四、创建powerdns数据库中的表,参看下面文档实现

https://doc.powerdns.com/md/authoritative/backend-generic-mysql/

mysql 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);

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

vim /etc/pdns/pdns.conf 
/launch      
#内容太多,直接搜索,英文输入法输入/ 后面是要搜索的内容
launch=bind
#将这行替换成
launch=gmysql
#意思是数据库是放在MySQL里的而不是bind那个文件里的
launch=gmysql #在这行后面添加下面的信息

  gmysql-host=172.16.8.23
  gmysql-port=3306
  gmysql-dbname=powerdns
  gmysql-user=powerdns
  gmysql-password=centos

#这个就是第三步创建的用户和密码

六、启动服务,并设置为开机启动

systemctl start pdns
systemctl enable pdns

七、安装httpd和php相关包

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

八、启动httpd服务,并设置为开机启动

systemctl start httpd
systemctl enable httpd

九、下载poweradmin程序,并解压缩到相应目录

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

十、直接通过网页打开会报错的,必须先走一遍安装

http://172.16.8.135/poweradmin/install/

 

  1、选择语言,选择完之后点击Go to step 2,进入下一步

 

 

   2、这一步是提示信息之类的,大概查看之后就可以进入下一步了

 

 

   3、输入第三步上的用户名和密码,hostname是你自己的数据库的I地址,端口默认就是3306,database数据库的名称,你的数据库名是什么就是什么名字,这里的Poweradmin administrator password, 为Poweradmin设置管理员密码这个是后面用到的,自定义设置即可。 

 

  4、为Poweradmin创建一个受限用户,Username:PowerAdmin用户名,Password:上述用户的密码Hostmaster:当创建SOA记录指定默认主机管理员,Primary nameserver:主域名服务器,Secondary namesever:辅域名服务器

 

 

   5、按照下面页面说明,在数据库中创建用户并授权

按照上面的提示在数据库中执行这条命令,因为我的服务器不在同一台机器上,所有我设置了172.16.8这个网段,其实区别不大,数据库如果在同一台机器上的话就用本机的IP地址即可

1 GRANT SELECT, INSERT, UPDATE, DELETE
2 ON powerdns.*
3 TO 'poweradmin'@'172.16.8.%'
4 IDENTIFIED BY 'centos';

  6、按下面页面说明,创建config.in.php文件内容

 

 

 vim /var/www/html/poweradmin/inc/config.inc.php
<?php

$db_host		= '172.16.8.23';
$db_user		= 'poweradmin';
$db_pass		= 'centos';
$db_name		= 'powerdns';
$db_type		= 'mysql';
$db_layer		= 'PDO';

$session_key		= '@Ap{P^eCoiHGPOwF-ru8@c2F3{2nHNCIsYP3Ypz!zUp1i*';

$iface_lang		= 'en_EN';

$dns_hostmaster		= 'dnsserver';
$dns_ns1		= '172.16.8.135';
$dns_ns2		= '';

  7、到这已经安装完成了,他提示删除install 

 

 

 为什么要删除子目录呢,不删除子目录的话,别人万一在执行一次安装,所以你懂得。

rm -rf /var/www/html/poweradmin/install/

  8、至此已经安装完成了,这一步是登录 

登录http://powerdns服务器IP/poweradmin/  username:admin  password:centos 参看第step 3

这里的语言倒是可以选择中文的

 

 

 

   9、目前还没有主域,可以点击添加主域

 

 

   10、输入主域的信息,点击添加,dnssec是安全的一项,这里我就不启用了,可启用也可以不启用

 

 

   11、添加完成之后,点击绿色框里这行字,可以适当的做些修改了

 

 

 点击添加记录

 

 

会弹出如下界面,如果有多条记录就可以在添加一遍,没有的话就点击lvzhengyuan.com 

 

 

 里面的界面如下,因为我上面添加了两条记录,可以点击垃圾桶删除一条记录

 

 

   12、通过dig命令能解析IP地址则表示可以了

dig www.lvzhengyuan.com @172.16.8.135

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> www.lvzhengyuan.com @172.16.8.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62270
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.lvzhengyuan.com.        IN    A

;; ANSWER SECTION:
www.lvzhengyuan.com.    86400    IN    A    172.16.8.135

;; Query time: 6 msec
;; SERVER: 172.16.8.135#53(172.16.8.135)
;; WHEN: Thu Apr  1 18:36:02 2021
;; MSG SIZE  rcvd: 53

至此就完成了。

####有这时间,还不如去修改命令行简单多了####

 

posted @ 2021-04-02 10:44  Alex-Lzy  阅读(1000)  评论(0编辑  收藏  举报