自建PowerDNS免费DNS服务器-PowerDNS和MariaDB安装配置教程

DNS CDN   2023年10月09日 12:35  

自建PowerDNS免费DNS服务器-PowerDNS和MariaDB安装配置教程

很长时间以来DNS服务器一直不被人重视,但是直到DNSPODCloudXNS这样的第三方DNS服务器出现后,大家才开始发现原来DNS服务也是非常重要,一个好的DNS服务器不仅可以加快域名解析速度,还可以在网站宕机后智能切换到备用服务器上。

一般来说,我们常用的免费DNS服务提供的A、CNAME、MX、TXT等解析功能足够我们使用了,但是如果你想使用IPv6、PTR、RP、RRSIG、SOA、SPF等解析记录,并随时控制自己的域名DNS解析,又或者你自己搭建一个DNS服务器提供给其它用户使用,这时你就需要一台自建DNS服务器了。

自建DNS服务器也不是很复杂,成本并不需要太高,只要一个VPS主机、PowerDNS软件、外加一个域名即可。PowerDNS是一种高性能的免费DNS域名服务器程序,可与多个后端兼容。PowerDNS可以使用BIND配置文件,与MariaDB,MySQL,Oracle,PostgreSQL和许多其他数据库整合。

如果想用网页来实现对PowerDNS的管理,还可以安装MariaDB数据库和Poweradmin,直接在浏览器修改域名DNS解析记录,方便又快捷。其它自建DNS服务器和免费DNS服务,可以看看:

自建PowerDNS免费DNS服务器-PowerDNS和MariaDB安装配置教程

一、安装前准备:MariaDB数据库安装与配置

1、PowerDNS官网:

  • 1、官方网站:https://www..com/

2、PowerDNS可以与MariaDB,MySQL,Oracle,PostgreSQL等整合,这里我们选择轻量级的数据库MariaDB来安装。VPS主机要求最少是512MB内存,本文以Ubuntu 14.04 64bit作为操作演示。

3、安装MariaDB,执行以下命令:

1
2
3
4
5
6
7
apt-get update && apt-get upgrade -y
 
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db #导入MariaDB存储库的密钥
 
add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu trusty main'  #添加MariaDB APT存储库
 
apt-get -y install libaio1 libdbd-mysql-perl libdbi-perl libmariadbclient18 libmysqlclient18 libnet-daemon-perl libplrpc-perl mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mysql-common mariadb-server mariadb-server-5.5 mariadb-server-core-5.5  #安装MariaDB软件包和依赖关系

4、在安装过程中,系统将提示您为MariaDB root用户设置密码。

为MariaDB root用户设置密码

5、回车后,再次确认你的密码。

为MariaDB root确认密码

6、安装好了MariaDB,执行以下命令对MariaDB进行相关的配置:

1
mysql_secure_installation

7、系统将提示您使用MariaDB安装期间创建的MariaDB root用户密码进行身份验证,然后会提示你是否修改Root密码,直接选择否。

PowerDNS是否修改密码

8、接下来建议禁用匿名用户;建议root不用于管理远程数据库服务器;如果你想试验MariaDB,你可以保留测试数据库。否则直接删除它。全部按ENTER回车。

PowerDNS全部默认选择是

9、操作命令如下:

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
root@freehao123:~# mysql_secure_installation
 
/usr/bin/mysql_secure_installation: 379: /usr/bin/mysql_secure_installation: find_mysql_client: not found
 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MariaDB to secure it, we'll need the current
 
password for the root user.  If you've just installed MariaDB, and
 
you haven't set the root password yet, the password will be blank,
 
so you should just press enter here.
 
Enter current password for root (enter for none):
 
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MariaDB
 
root user without the proper authorisation.
 
You already have a root password set, so you can safely answer 'n'.
 
Change the root password? [Y/n] n
 
 ... skipping.
 
By default, a MariaDB installation has an anonymous user, allowing anyone
 
to log into MariaDB without having to have a user account created for
 
them.  This is intended only for testing, and to make the installation
 
go a bit smoother.  You should remove them before moving into a
 
production environment.
 
Remove anonymous users? [Y/n]
 
 ... Success!
 
Normally, root should only be allowed to connect from 'localhost'.  This
 
ensures that someone cannot guess at the root password from the network.
 
Disallow root login remotely? [Y/n]
 
 ... Success!
 
By default, MariaDB comes with a database named 'test' that anyone can
 
access.  This is also intended only for testing, and should be removed
 
before moving into a production environment.
 
Remove test database and access to it? [Y/n]
 
 - Dropping test database...
 
 ... Success!
 
 - Removing privileges on test database...
 
 ... Success!
 
Reloading the privilege tables will ensure that all changes made so far
 
will take effect immediately.
 
Reload privilege tables now? [Y/n]
 
 ... Success!
 
Cleaning up...
 
All done!  If you've completed all of the above steps, your MariaDB
 
installation should now be secure.
 
Thanks for using MariaDB!

10、把InnoDB日志文件大小增加到64MB,有助调试数据库问题。(可选)命令如下:

1
2
3
4
5
service mysql stop  #停止MariaDB服务
 
rm -f /var/lib/mysql/ib_logfile*  #删除任何现有的日志文件
 
nano /etc/mysql/my.cnf #打开配置文件

11、然后按CTRL + W搜索文件。在搜索字段中输入InnoDB,按ENTER键跳转到InnoDB部分。输入:innodb_log_file_size = 64M。

PowerDNS删除日志文件

12、按CTRL + X,按Y保存文件,然后按ENTER确认,最后再次启动MariaDB服务。命令如下:

1
2
3
innodb_log_file_size = 64M
 
service mysql start

二、在MariaDB中创建PowerDNS数据库

1、本文直接使用MySQL shell来创建管理MariaDB,如果你觉得麻烦的话,你也可以直接安装一个PHPMyAdmin,然后就可以在浏览器中创建数据库了。

2、MySQL shell将创建数据库名为powerdns,用户名为powerdns_user,你需要根据你自己的需要来替换,执行以下命令:

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
mysql -u root -p #使用MariaDB root用户进行身份验证
 
CREATE DATABASE powerdns; #创建数据库
 
GRANT ALL ON powerdns.* TO 'powerdns_user'@'localhost' IDENTIFIED BY 'freehao123pass'; #创建一个名为“powerdns_user”的新用户并授予对数据库的访问权限,注意替换freehao123pass为你自己的密码
 
FLUSH PRIVILEGES; #刷新权限以更新用户设置
 
USE powerdns; #进入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)
 
); #添加域表
 
CREATE UNIQUE INDEX name_index ON domains(name); #设置唯一索引
 
CREATE TABLE records (
 
id INT auto_increment,
 
domain_id INT DEFAULT NULL,
 
name VARCHAR(255) DEFAULT NULL,
 
type VARCHAR(6) DEFAULT NULL,
 
content VARCHAR(255) DEFAULT NULL,
 
ttl INT DEFAULT NULL,
 
prio INT DEFAULT NULL,
 
change_date INT DEFAULT NULL,
 
primary key(id)
 
); #创建记录表
 
CREATE INDEX rec_name_index ON records(name);
 
CREATE INDEX nametype_index ON records(name,type);
 
CREATE INDEX domain_id ON records(domain_id); #设置索引
 
CREATE TABLE supermasters (
 
ip VARCHAR(25) NOT NULL,
 
nameserver VARCHAR(255) NOT NULL,
 
account VARCHAR(40) DEFAULT NULL
 
); #创建supermasters表
 
quit; #退出

三、PowerDNS安装与配置方法

1、安装PowerDNS,执行以下命令:

1
2
3
apt-get install -y pdns-server pdns-backend-mysql
 
#apt-get -f purge -y mysql-client

2、执行命令后,会询问是否自动配置MysqL,选择:否,稍后我们会手动配置MysqL。

PowerDNS是否手动配置

3、接下来就是创建MariaDB配置文件,写入刚刚我们创建好的MysqL数据库、用户名和密码了。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rm /etc/powerdns/pdns.d/*
 
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
 
#注意替换上面你创建的数据库、用户名和密码
 
# MySQL Configuration file
 
launch=gmysql
 
gmysql-host=localhost
 
gmysql-dbname=powerdns
 
gmysql-user=powerdns_user
 
gmysql-password=freehao123pass

4、操作如下图:

PowerDNS设置数据库连接

5、执行命令:service pdns restart,重启PowerDNS。

PowerDNS重启DNS服务器

6、执行:netstat -tap | grep pdns,看看PowerDNS是否成功运行,dig @127.0.0.1 看看有没有输出。

PowerDNS测试是否正常

7、如果有如下内容输出的话,就表示一切正常了。

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
root@freehao123:~# dig @127.0.0.1
; <<>> DiG 9.9.5-3ubuntu0.13-Ubuntu <<>> @127.0.0.1
 
; (1 server found)
 
;; global options: +cmd
 
;; Got answer:
 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46482
 
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
 
;; WARNING: recursion requested but not available
 
;; OPT PSEUDOSECTION:
 
; EDNS: version: 0, flags:; udp: 2800
 
;; QUESTION SECTION:
 
;.				IN	NS
 
;; Query time: 12 msec
 
;; SERVER: 127.0.0.1#53(127.0.0.1)
 
;; WHEN: Sun Mar 05 13:18:22 UTC 2017
 
;; MSG SIZE  rcvd: 29
 
root@freehao123:~#

四、安装PowerDNS管理工具:

1、Poweradmin是PowerDNS的基于Web的DNS管理工具,它完全支持所有DNS域名解析类型,功能非常强大。先要安装好Apache和PHP及相应的模块,命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apt-get install -y apache2 gettext libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php-pear php5-imap  php5-ming php5-mysql php5-xmlrpc php5-mhash php5-mcrypt
 
pear install DB #安装所需的PEAR模块
 
#如果pear提示版本太低,可以按以下安装
 
#curl -o go-pear.php http://pear.php.net/go-pear
 
#curl -o go-pear.php http://pear.php.net/go-pear.phar
 
#php go-pear.php
 
pear install pear/MDB2#mysql
 
php5enmod mcrypt #启用Mcrypt
 
service apache2 restart #启动Apache

2、接下来就是下载安装Poweradmin。

1
2
3
4
5
6
7
8
9
10
11
cd ~
 
wget https://github.com/downloads/poweradmin/poweradmin/poweradmin-2.1.6.tgz #下载压缩的Poweradmin文件
 
tar xvzf poweradmin-2.1.6.tgz
 
mv poweradmin-2.1.6 /var/www/html/poweradmin #将poweradmin目录移动到Apache Web目录
 
touch /var/www/html/poweradmin/inc/config.inc.php #创建配置文件
 
chown -R www-data:www-data /var/www/html/poweradmin/ #授予Apache用户对该目录的所有权

3、配置Poweradmin。用浏览器打开:http://your_server_ip/poweradmin/install/,打开配置页面,选择英文。

Poweradmin使用英文

4、直接点击到下一步。

Poweradmin直接下一步

5、这一步是填写你刚刚创建好的MysqL数据库,包括数据库名、用户名、密码等。

Poweradmin填写MysqL信息

6、再下一步就是填写你的Poweradmin信息了,用户名与密码保持与你的MysqL一致,填写参考下图:

Poweradmin设置账号密码

7、验证数据库是否正确。

Poweradmin验证成功

8、最后一步就是看到程序写入配置文件的提示了,就表示已经安装Poweradmin成功了。

Poweradmin成功安装

9、如果安装失败,请执行:touch /var/www/html/poweradmin/inc/config.inc.php,然后重装打开安装界面再一次安装。

Poweradmin完成安装

五、Poweradmin使用方法

1、首先按照上面的方法安装好了Poweradmin后,你需要先删除安装目录才能进入到Poweradmin后台。

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

2、安装完成后,如果想到编辑配置文件,请执行以下命令:

1
nano /var/www/html/poweradmin/inc/config.inc.php

3、访问:http://your_server_ip/poweradmin/,使用你刚刚创建好的Poweradmin用户名和密码登录。

Poweradmin登录

4、这里你就可以看到Poweradmin的管理界面了,点击 Add Master Zone,添加一个域名用于DNS解析。

Poweradmin添加域名解析

5、这里你就可以直接输入域名添加绑定到Poweradmin了。

Poweradmin绑定域名

6、完了点击上方的List Zones。

Poweradmin列出域名

7、这时你就可以看到你刚刚添加的域名了,点击域名前面的编辑按钮。

Poweradmin重新编辑

8、这一步就是域名DNS记录管理页面了,和我们平时使用的DNS服务差不多,添加域名前缀,然后设定A、CNAME、AAAA等记录。(点击放大)

Poweradmin修改DNS解析记录

六、设置glue 记录正式启用DNS服务器

1、按照上面的方法我们已经成功配置好了一台免费DNS服务器,绑定在Poweradmin的域名是:freehao123.org,我们需要先域名注册商那里设置好域名的glue 记录。以NameCheap为例,进入到域名列表。

设置glue 记录进入域名列表

2、选择域名下面的“高级DNS”。

设置glue 记录选择高级DNS

3、然后把页面往下拉,找到注册个人NS服务器选项,点击添加Name Server,添加NS1.freehao123.org和NS2.freehao123.org这样的记录,设置好Poweradmin服务器的IP地址。

设置glue 记录添加NS

4、NS服务器前缀你可以自己设置,前提是你需要保持与上文中配置Poweradmin一致。(点击放大)

设置glue 记录所有记录

5、添加好了glue 记录后,你就可以进入到域名的NS域名管理部分,将NS服务器设置为NS1.freehao123.org和NS2.freehao123.org了。

设置glue 记录设置新的NS服务器

6、测试DNS服务器是否正常。先在DNS服务器上使用Dig命令,看看有没有数据输出:dig dns.freehao123.org A @127.0.0.1。

设置glue 记录解析生效

7、有的话表示正常,待DNS解析生效后,你就可以在本地测试你的PowerDNS是否正常运行了

PowerDNS是否正常运行

七、PowerDNS安装配置小结

1、PowerDNS总得安装配置思路就是先安装好Apache、MysqL、PHP等,然后利用MysqL与PowerDNS来安装Poweradmin管理工具,从而实现网页管理PowerDNS的DNS记录。

2、PowerDNS使用的NS服务器域名需要作glue 记录,一般像国外的GodaddyName.com、Namecheap等域名注册商都是可以支持的,其它的如果你发现没有这个功能可能就是要联系客服了。

文章出自:免费资源部落 部分内容参考自digitalocean 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

在这个部落村庄里,已经有45 位神马家族成员冒出泡来在农场开始干活了
  • 好麻烦啊,我直接用自己的域名link cloudxns的dns服务器,省时省力省心还省钱,最重要的是——查whois同样能装X

    qi 回复:

    @Q先生, 如何Link?

    Q先生 回复:

    @qi, 点我头像,第一篇文章就是,嘿嘿,骗个链接。

    qi 回复:

    @Q先生, 原来是利用了CNAMEX,也不错!

    女王推拿 回复:

    @Q先生, 你博客用了畅言,不想留言

    qi 回复:

    @女王推拿, 我这边直接就显示不出来畅言了。

    Q先生 回复:

    @qi, 求一个更好的第三方评论推荐

    qi 回复:

    @Q先生, 我感觉还是不要用第三方的评论好一些,评论放在自己的博客要安全一些。

    Q先生 回复:

    @女王推拿, 本身博客没有评论系统,咋整?将就着用吧。

    笔记伊 回复:

    @Q先生, hi ! 博主你好! 这个博客好简约,但是干看了下项目 小白有点不懂。。。 请问该如何安装呢?
    求解答 谢谢!

    qi 回复:

    @笔记伊, 哪些地方不明白呢?

    笔记伊 回复:

    @Q先生, 十分喜欢博主的博客程序,请问我该如何安装这种博客…
    并不太会golang 而且也没接触过。。。
    希望博主有时间能够出个简单教程。十分感谢!

    Q先生 回复:

    @笔记伊, 我也不会golang,但是我找到了利器。我现在用的是inkpaper这个静态博客程序,不需要电脑有什么安装的,可视化操作,很人性化。改天我给Qi投个稿好啦

    南边陀螺 回复:

    @Q先生, 域名DNS服务器 是向根注册和查询的(需要付费),文章中的cnamex是不正确的做法。

    qi 回复:

    @南边陀螺, 国外的好像是免费的。

    这是农场的第 1 块农田,部落批准 [Q先生] 在[2017-3-10 23:18]开垦完成.
  • 配置DNS需要加强防御,
    一般DNS解析服务商在抗攻击的部分会来的好

    qi 回复:

    @李毅哲, 是的,个人的DNS被攻击就完了。

    这是农场的第 2 块农田,部落批准 [李毅哲] 在[2017-3-11 08:46]开垦完成.
  • 这个就太麻烦了 还是简单点好

    qi 回复:

    @BanYuner, 是有点麻烦,主要是配置那一块。

    这是农场的第 3 块农田,部落批准 [BanYuner] 在[2017-3-11 11:30]开垦完成.
  • DNS这东西用可靠的服务就行了,自己搭建费时费力,稳定性和速度都没法保障

    qi 回复:

    @初行博客, 自己搭建的DNs可以享受自建的乐趣 ,哈哈。。

    这是农场的第 4 块农田,部落批准 [初行博客] 在[2017-3-11 12:02]开垦完成.
  • RR233CY 18

    dns 防攻击是个大工程,还是使用现在DNS服务器提供的服务更安心

    qi 回复:

    @RR233CY, 一般来说使用第三方的DNS就足够了,不过,自己想要使用自己的DNS也是有好处的,就是解析记录不受限制。

    这是农场的第 5 块农田,部落批准 [RR233CY] 在[2017-3-11 13:26]开垦完成.
  • CloudXNS智能DNS 这个微信经常转qi的文章呀~

    qi 回复:

    @小龙lo, 是吗?我也不知道。

    这是农场的第 6 块农田,部落批准 [小龙lo] 在[2017-3-11 13:26]开垦完成.
  • 自建DNS肯定不行 DNS服务器不是一台服务器也不是一个地方的机房可以搞定的

    这是农场的第 7 块农田,部落批准 [速度网络] 在[2017-3-11 21:56]开垦完成.
  • Aimer 4

    自己构建的DNS不知道稳定性怎么样,不过管理起来比较方便,手里还有几台VPS可以试一试。
    PS:前排好难抢

    这是农场的第 8 块农田,部落批准 [Aimer] 在[2017-3-11 23:42]开垦完成.
  • ivmm 9

    自建的话,基本上是禁不起打的,随便攻击一下,就挂了。

    DNS 挂了,网站自然打不开。 所以弱 DNS 就成了最好的攻击对象,而且弄挂的难度也不大

    qi 回复:

    @ivmm, 是的,不过是不是可以隐藏NS?这样别人也就发现不了了。

    ivmm 回复:

    @qi, 隐藏 ns 的难度略高啊

    这是农场的第 9 块农田,部落批准 [ivmm] 在[2017-3-12 00:49]开垦完成.
  • 用的一定是vultr的服务器,因为ip段是vultr的

    qi 回复:

    @qiuyming, 哈哈,vultr现在很便宜了,所以拿来作各种测试了。

    qiuyming 回复:

    @qi, vultr也有免费VPS了

    qiuyming 回复:

    @qiuyming, 说错了,是免费DNS

    qi 回复:

    @qiuyming, 哦,还有免费DNS?新增加的吗?以前我在控制面板好像没有看到。

    qiuyming 回复:

    @qi, 我也是才看见的

    这是农场的第 10 块农田,部落批准 [qiuyming] 在[2017-3-12 08:17]开垦完成.
  • skyju.cc/ciing,我一朋友搞得一个项目,其中有两个子项目一个提供免费二级域名,一个提供免费的静态空间

    qi 回复:

    @qiuyming, 不错,可是CSS是不是没有做好?网页不是很好看。

    qiuyming 回复:

    @qi, 我这朋友对CSS不是很在行,实在碰到不会做的时候他才用一下UI框架

    这是农场的第 11 块农田,部落批准 [qiuyming] 在[2017-3-12 11:58]开垦完成.
  • 阿里的云解析只要买阿里云的域名就送,还有免费的whois保护

    qi 回复:

    @qiuyming, 那这个很不错。

    这是农场的第 12 块农田,部落批准 [qiuyming] 在[2017-3-12 11:59]开垦完成.
  • 不错,适合折腾*。

    这是农场的第 13 块农田,部落批准 [小z博客] 在[2017-3-13 08:59]开垦完成.
  • 微而 5

    好复杂,这一串串鸡肠(命令行)看得头晕了。。。

    这是农场的第 14 块农田,部落批准 [微而] 在[2017-3-13 10:47]开垦完成.
  • 懒得折腾,一直都在用DNSPOD 中间换过CloudXNS 后来又改成dnspod了,好管理

    qi 回复:

    @免费软件之家, 我现在也改用dnspod付费的了。

    这是农场的第 15 块农田,部落批准 [免费软件之家] 在[2017-3-15 13:34]开垦完成.
看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部