本文讲述了我在Centos 7系统(其他版本的Centos未尝试)中基于PowerDNS和poweradmin自建域名解析服务器替代DnsPod的过程。通过本文所述方法,可以建立权威域名解析服务器的master server。并通过可视化的管理界面poweradmin来管理所有解析的域名。所搭建的平台可替代DnsPod的功能。

以下步骤实验环境为:我用的服务器是在kimsufi上购买的独立服务器,假设这个权威域名解析服务器的master server的IP地址为:215.1.1.1。所需要构建的权威域名解析服务器为ns1.happytang.org

第一步

参照官方网站说明文档,首先加载EPEL库,代码如下:

 # yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# subscription-manager repos --enable "rhel-*-optional-rpms" --enable "rhel-*-extras-rpms" --enable "rhel-ha-for-rhel-*-server-rpms"

第二步

安装powerdns(4.2.1版本)以及基于mysql数据库存储域名解析信息的backend,代码如下:

 # yum install pdns
# yum install pdns-backend-mysql

第三步

由于centos默认yum install mysql会指向mariadb。同时,我们的poweradmin可视化域名管理界面需要在apache、mysql(mysql版本本次选择的是5.7版本)、php环境下运行(由于poweradmin运行需要mcrypt扩展,所以php版本不能高于7.2,请采用php 7.1版本及以下。如果你已经安装了7.2版本,请参考这篇文章为你的7.2版本php安装mcrypt)。因此,此处利用oneinstack来一键安装mysql、apache和php。代码如下:

 # yum -y install wget screen
# wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
# tar xzf oneinstack-full.tar.gz
# cd oneinstack
# screen -S oneinstack
# ./install.sh

第四步

给mysql安装client工具,以便于在命令行使用mysql

 # wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
# rpm -ivh mysql57-community-release-el7-.noarch.rpm
# yum install mysql-community-client

第五步

给powerdns配置好mysql,以便powerdns与mysql进行配合,代码如下:

 # systemctl start mysql
# systemctl enable mysql
# mysql_secure_installation
# mysql -u root -p
# create database powerdns;
# grant all privileges on powerdns.* to pdns@localhost identified by 'pdnspassword2020';
# grant all privileges on powerdns.* to pdns@127.0.0.1 identified by 'pdnspassword2020';
# flush privileges;
# use powerdns;

接下来,继续在命令行下,执行下述sql代码(在此处,对于records表,相比于官方网站给的建议,我们新增了change_date INT DEFAULT NULL,以便与后面安装的poweradmin配合使用):

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 UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1'; 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 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);

继续执行下述代码:

ALTER TABLE records ADD CONSTRAINT `records_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE comments ADD CONSTRAINT `comments_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE domainmetadata ADD CONSTRAINT `domainmetadata_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE cryptokeys ADD CONSTRAINT `cryptokeys_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

第六步

更改powerdns配置文件,便于powerdns与mysql进行通信

 # yum install bind-utils
# cd /etc/pdns/
# cp pdns.conf pdns.conf.old
# vi pdns.conf

在pdns.conf中,在"launch=bind"前面加"#",注释其作用,然后在下面加入以下文本:

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=pdns
gmysql-password=pdnspassword2020
gmysql-dbname=powerdns

然后启动pdns

 # systemctl start pdns
# systemctl enable pdns

最后记得千万记得在防火墙中放行tcp 53端口和udp 53端口

第七步

安装poweradmin。执行下述代码:

 # /data/wwwroot/default/
# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
# tar xvf poweradmin-2.1..tgz
# mv poweradmin-2.1./ poweradmin/

记得在防火墙里放行80端口和443端口

第八步

访问:http://215.1.1.1/poweradmin/install,选择语言后,进入"Go to Step 2",按提示,进入"Go to Step 3",在这里填入我们之前的powerdns数据,pdns用户及相应的密码,进入"Go to Step 4",后续可以按照图中所示进行。如果出现mysql的socket问题,就重启mysql服务。

第九步

访问:http://215.1.1.1/poweradmin/,在“Add master zone”中,添加happytang.org域,并添加解析如下:

留空,NS,ns1.happytang.org
留空,NS,ns2.happytang.org
ns1,A,215.1.1.1
ns2,A,215.2.2.2

至此,在Centos系统中基于PowerDNS和Poweradmin自建域名解析服务器替代DnsPod,就全部完成了。可以随意添加自己需要解析的域名了。

下一篇文章讲述,如何配置一个master server(ns1.happytang.org)和slave server(ns2.happytang.org),实现域名解析的备份。

特别注意:本文的ns1.happytang.org和ns2.happytang.org需要在域名注册商处注册成域名解析服务器,才能实现全部功能。即英文中的glue records,或Authoritative name Server ,或personal name server。

特别注意2:poweradmin需要开放php的exec()权限。你需要修改php.ini,以便允许执行exec()函数。

本文参考了这篇论文这篇论文

若有侵权请联系作者,所有内容仅代表个人认知观点,如有错误,欢迎校正; 邮箱:admin@happytang.org 博客地址:https://www.cnblogs.com/happytang/

在Centos系统中基于PowerDNS和Poweradmin自建域名解析服务器替代DnsPod的更多相关文章

  1. 在Centos系统中基于PowerDNS实现master和slave的域名解析服务双备份

    在上一篇文章中,阐述了如何在Centos 7系统(其他版本的Centos未尝试)中基于PowerDNS和poweradmin自建域名解析服务器替代DnsPod的过程.但是在一般的DNS服务中,我们需要 ...

  2. CentOS系统中基于Apache+php+mysql的许愿墙网站的搭建

    1.首先,我们需要两台虚拟机(CentOS7,Linux文本). 2.给两台虚拟机配置网络环境分别为桥接模式 CentOS7 ip为192.168.100.139.24,linux文本ip为192.1 ...

  3. CentOS系统中last命令的作用

    CentOS系统中last命令的作用是显示近期用户或终端的登录情况,它的使用权限是所有用户.通过last命令查看该程序的log,管理员可以获知谁曾经或企图连接系统. 格式 last [—R] [—n] ...

  4. 如何在CentOS系统中安装配置SNMP服务

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,现在有一大部分服务器在使用此操作系统:SNMP(简单网络 ...

  5. 定制Centos系统(基于6.x)

    1.条件准备:      按照需求,最小化安装Centos原生系统           在安装后的系统中找到/root/install.log与/root/anaconda-ks.cfg文件     ...

  6. Centos系统中彻底删除Mysql数据库

    步骤: 1.输入命令查询系统中已安装的mysql. rpm -qa |grep -i mysql 2.逐个卸载mysql. yum remove 系统显示已安装的mysql 比如:yum remove ...

  7. 通达OA在centos系统中快速部署文档(web和数据库)

    通达OA2008从windows环境移植到linux中(centos5.5及以上版本) 如果安装好了,还是无法访问,则需要清空浏览器缓存即可 1.安装lamp环境,这里用的是xampp集成安装包xam ...

  8. centos系统中perl进程病毒占用大量网络流量导致网络瘫痪的问题分析及解决方案

    故障现象: 1.系统在早上9点的时候非常慢,单台服务器占用流量很大,使交换机流量被占满,而连累挂在同一交换机上的其他应用也无法提供服务,或者速度非常慢     2.通过查看进程发现大量的perl程序占 ...

  9. [转]Centos系统中查看文件和文件夹大小

    本文转自:https://blog.csdn.net/zgmu/article/details/52882868 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择.df可以 ...

随机推荐

  1. CRISPR/Cas9|InParanoid|orthoMCL|PanOCT|pan genome|meta genome|Core gene|CVTree3|

    生命组学: 泛基因组学:用于描述一个物种基因组,据细菌基因组动力学,因为细菌的基因漂移使得各个细菌之间的基因组差异很大,(单个细菌之间的基因组差异是以基因为单位的gain&loss,而人类基因 ...

  2. derby常用语法

    derby常用语法 以user表为例: 1.创建表 create table user (id int primary key,account varchar(5),name varchar(5),p ...

  3. numpy的基础计算2

    import numpy as np A = np.arange(14,2,-1).reshape((3,4)) #平均值 print(np.mean(A)) print(A.mean()) prin ...

  4. Android Pay正式启用 支付宝们还好吗

    Pay正式启用 支付宝们还好吗" title="Android Pay正式启用 支付宝们还好吗"> 苹果发布会上能够真正让人眼前一亮的产品并不多,但对于" ...

  5. Apple store,奢华背后的辛酸

    store,奢华背后的辛酸" title="Apple store,奢华背后的辛酸">    2000年的时候,乔布斯提出了要建造苹果直营店,也就是Apple st ...

  6. spring入门-整合junit和web

    整合Junit 导入jar包 基本 :4+1 测试:spring-test-5.1.3.RELEASE.jar 让Junit通知spring加载配置文件 让spring容器自动进行注入 1234567 ...

  7. Maven使用和配置

    Maven使用和配置 一.maven安装和概念 maven安装 maven编译(compile) 执行测试用例(test) maven打包(package) maven依赖管理 1.maven安装 官 ...

  8. 实用的Python(3)超简单!基于Python搭建个人“云盘”

    1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码,而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类似 ...

  9. ArrayList集合不能使用foreach增加、删除、修改元素的原因

    大家先看两段代码 第一段代码: List<String> arrayList1 = new ArrayList<String>(); arrayList1.add(" ...

  10. flask之三:视图高级

    视图高级 app.route和app.add_url_rule app.add_url_rule app.add_url_rule('/list/',endpoint='myweb',view_fun ...