0%

LAMP架构实现PowerDNS

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

  ps:本次过程是在centos7系统上完成。

配置安装pdns

安装pdns包

1
yum install -y pdns pdns-backend-mysql

创建pdns数据库

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

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
86
87
88
89
90
91
92
93
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的相关信息设置:

1
2
3
4
5
6
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=powerdns

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

1
2
systemctl start pdns
systemctl enable pdns

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

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

1
2
3
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程序,并解压缩到相应目录

1
2
3
4
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.按照下面页面说明,在数据库中创建用户并授权

1
2
3
4
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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上展示就实现了~

------------------------------- The End -------------------------------
It's very nice of you to support me.