博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于LAMP 搭建PowerDNS
阅读量:6805 次
发布时间:2019-06-26

本文共 4818 字,大约阅读时间需要 16 分钟。

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

PowerDNS官网:

PowerDNS文档:
Poweradmin官网:

准备一台主机centOS 7.5 (192.168.21.104)

配 EPEL 源

#vim epel.repo
name=epel repo
baseurl=
gpgcheck=0
enabled=1

安装包:基于EPEL源

#yum -y install pdns pdns-backend-mysql

#rpm -q mariadb-server

#systemctl start mariadb
#systemctl enable mariadb
#mysql

利用下面两条sql语句和链接创建pdsql.sql的脚本:准备mariadb中的数据库,表和用户

create database powerdns;
grant all on powerdns.* to 'powerdns'@'localhost' identified by 'magedu';

vim pdsql.sql //创建pdsql.sql, 添加下面内容

create database powerdns;

grant all on powerdns.* to 'powerdns'@'localhost' identified by 'magedu';

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

#mysql < pdns.sql

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

#vim /etc/pdns/pdns.conf //查找到包含launch= 的行,修改并添加下面的内容
launch=bind //删除此行
launch=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=magedu

启动pdns服务前,确保53端口未被占用

#ss -ntl
#lsof -i:53 //显示所有打开53端口的进程
#kill -9 1382

#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-mhash gettext

#systemctl start httpd

#systemctl enable httpd

#cd /var/www/html

#wget
#tar xvf poweradmin-2.1.7.tgz
#mv poweradmin-2.1.7 pdns

浏览器输入下面地址,按提示进一步配置:

操作进行到第5步:

登陆mariadb,执行以下语句:

MariaDB [powerdns]> GRANT SELECT, INSERT, UPDATE, DELETE

-> ON powerdns.*
-> TO 'powerdnsadmin'@'localhost'
-> IDENTIFIED BY 'centos';
Query OK, 0 rows affected (0.00 sec)

操作进行到第6步:

#cd /var/www/html/pdns
#vim inc/config.inc.php
<?php
$db_host = 'localhost';
$db_user = 'powerdnsadmin';
$db_pass = 'centos';
$db_name = 'powerdns';
$db_type = 'mysql';
$db_layer = 'PDO';

$session_key = 'lPubca)P32J)*9b5JTX0MiqE^erq948PI[0[Zt=0%x)Oc0';

$iface_lang = 'en_EN';

$dns_hostmaster = 'powerdnsserver';

$dns_ns1 = '192.168.21.104';
$dns_ns2 = '';

操作进行到第7步,配置完成:

#rm -rf /var/www/html/pdns/install/

登陆powerdns:

添加域:b.com

给b.com这个域添加一条记录: www.b.com 8.8.8.8

在DNSserver上测试:

[root@centos7 pdns]#dig www.b.com @192.168.21.104

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.b.com @192.168.21.104

;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12657
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 1680
;; QUESTION SECTION:
;www.b.com. IN A

;; ANSWER SECTION:

www.b.com. 86400 IN A 8.8.8.8

;; Query time: 2 msec

;; SERVER: 192.168.21.104#53(192.168.21.104)
;; WHEN: Tue Mar 05 15:19:35 CST 2019
;; MSG SIZE rcvd: 54

转载于:https://blog.51cto.com/8845692/2359752

你可能感兴趣的文章
Java中Runnable和Thread的区别
查看>>
js价格递增递减,保留亿位小数
查看>>
python中try except处理程序异常的三种常用方法
查看>>
09 | 普通索引和唯一索引,应该怎么选择?
查看>>
283. 移动零
查看>>
一个HTTP请求的详细过程
查看>>
思维方式--元学习方法
查看>>
《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法
查看>>
js 事件监听
查看>>
我对时间管理,对利用工具的一些看法
查看>>
TextView属性大全
查看>>
微信实例_Fragment and viewPager
查看>>
四.Python迭代器生成器和装饰器
查看>>
Ceilometer架构简要分析
查看>>
Vue笔记(一)
查看>>
装饰器
查看>>
tab下拉显示
查看>>
传输层
查看>>
Linux fstab参数详解
查看>>
最短路--floyd算法模板
查看>>