本文讲述了我在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. python3爬虫:利用urllib与有道翻译获得翻译结果

    在实现这一功能时遇到了一些困难,由于按照<零基础入门python>中的代码无法实现翻译,会爆出“您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”: http://ai ...

  2. PO设计模式-实现移动端自动化测试

    开发环境:python 3.6.5 + selenium 2.48.0 + pytest框架 + Android 5.1 工具:pycharm + Appium + Genymotion 测试机型:S ...

  3. CSAPC08台湾邀请赛_T1_skyline

    题目链接:CSAPC08台湾邀请赛_T1_skyline 题目描述 一座山的山稜线由许多片段的45度斜坡构成,每一个片段不是上坡就是下坡. / /​ * / ​/ * /  // ​/ // / 在我 ...

  4. 疯狂补贴的4G+  会是又一个资费陷阱吗?

     会是又一个资费陷阱吗?" title="疯狂补贴的4G+  会是又一个资费陷阱吗?"> 常言说得好,防火防盗防运营商--具有垄断性质的中国移动.联通.电信三大基础 ...

  5. 重大改革!Python将被加入高考科目!

    未来大学生将分为两种:一种是编程好的人,另一种是编程超好的人. Python 将被纳入高考科目 近期,浙江省信息技术课程改革方案出台,Python 确定进入浙江省信息技术高考,从2018年起浙江省信息 ...

  6. linux Init分析(原创)

    1.uboot的目标就是启动内核kernel: 2.kernel的目的就是启动应用程序,而第一个应用程序即是Init,构建根文件系统. 从uboot初始化配置后,引导内核的启动,启动函数为:start ...

  7. Python sys.path详解

    如何将路径“永久"添加到sys.path? sys.path是python的搜索模块的路径集,是一个list ['', 'C:\\WINDOWS\\system32\\python26.zi ...

  8. Python计算给定日期的周内的某一天

    先理一下思路:1.weekday会根据某个日期返回0到6的一个数字来表示星期几对吧,0==星期一我们来列一个表: [0,1,2,3,4,5,6] 2.知道了星期几之后,你可以计算出那一周相对于这个0到 ...

  9. ubuntu 18.04 添加快快捷方式

    1. 创建启动软件的快捷方式的文件 # cd ~/桌面 # vim pycharm18.1.desktop # 注意文件的后缀是 .desktop [Desktop Entry] Version=1. ...

  10. Docker Compose 项目打包部署

    Docker Compose 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一 ...