介绍
PowerDNS是一种高级的高性能权威域名服务器,与多个后端兼容。 PowerDNS可以使用BIND配置文件,从MariaDB,MySQL,Oracle,PostgreSQL和许多其他数据库读取信息。 后端可以轻松地以任何语言编写。 在这种情况下,我们将使用MariaDB存储我们的区域文件记录。
MariaDB是MySQL的一个分支,一个关系数据库管理系统。 作为一个领先的开源软件系统的分支,它是值得注意的是由它的原始开发商领导。 MariaDB保留了使用MySQL API和命令的全插入替换功能。
在本教程结尾处,您将有一个可用于托管任意数量域的DNS的有效PowerDNSNameservers。
先决条件
开始教程之前,请遵循以下先决条件。
Droplet要求
- 512MB或更大
- Ubuntu 14.04 64位
PowerDNS设计为高性能,低资源使用率。 512MB的Droplet应该有足够的运行带有适量的区域/记录的PowerDNS服务器。 这个Droplet将运行Ubuntu 14.04 64bit。
根访问
本教程的其余部分将假定您连接到具有root用户帐户服务器,或使用sudo权限的用户帐户。
进入从其他帐户root的shell:
sudo su
注册您的Nameservers,设置其他域的Nameservers
您可以在完成技术设置之前或之后执行此操作,但是要使新的Nameservers能够处理真实的DNS请求,您必须使用胶合记录将Nameservers域或子域注册为注册商的Nameservers。 在下面链接的教程中讨论了胶水记录,虽然您可能希望查找注册器上注册Nameservers/创建胶合记录的过程。
注意:当你建立一个DNS服务器,它有助于保持你的域名直。 你很可能选择三个子域名用于Nameservers本身。 本教程使用hostmaster.example-dns.com,ns1.example-dns.com和ns2.example-dns.com。
我们还将提供一个使用此Nameservers作为其SOA的域。 在本教程中,我们将建立一个区域文件为您的新PowerDNSNameserversexample.com。
本教程使用以下域名作为示例。
这三个子域应该有指向您的PowerDNS Droplet的IP地址的胶水记录:
- hostmaster.example-dns.com
- ns1.example-dns.com
ns2.example-dns.com
然后,你应该设置example.com的域名服务器上面所示的三个域名服务器
第1步 - 安装更新
确保您已安装最新更新是一个好主意。
安装更新:
apt-get update && apt-get upgrade -y
第2步 - 安装MariaDB
首先,我们将导入MariaDB存储库的密钥:
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
接下来,我们将添加MariaDB APT存储库:
add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu trusty main'
现在,我们可以安装MariaDB的包,并使用apt-get的依赖关系(主要是库):
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的root用户的密码。
请输入数据库root用户一个强壮的密码,然后按ENTER键。
系统将要求您确认新密码。 再次输入密码,然后按ENTER键完成设置过程。
第3步 - 安全和配置MariaDB
默认情况下,MariaDB允许匿名用户和远程客户端的root访问。 我们将运行安全安装实用程序以禁用这些功能。
运行此安全安装向导:
mysql_secure_installation
系统将提示您与您MariaDB的安装过程中创建的MariaDB的root用户口令进行身份验证。 然后,按ENTER继续。 参赛作品以红色显示。
You already have a root password set, so you can safely answer **n**.
Change the root password? [Y/n] n
在我们的示例中,我们不想更改root密码; 虽然,如果你没有在安装MariaDB时设置密码,现在是一个好时机这样做。 否则输入N,然后按ENTER键。
Remove anonymous users? [Y/n]
建议禁用匿名用户。 按ENTER接受Y的默认答案。
Disallow root login remotely? [Y/n]
建议root不用于管理远程数据库服务器。 按ENTER接受Y的默认答案。
Remove test database and access to it? [Y/n]
如果你想试验MariaDB,你可以保留测试数据库。 在我们的示例中,我们决定删除它。 按ENTER接受Y的默认答案。
Reload privilege tables now? [Y/n]
在向导中重新加载特权表将为我们节省一个步骤。 按ENTER接受Y的默认答案。
接下来,我们将把InnoDB日志文件大小增加到64MB。 这将有助于如果你必须调试问题在未来。
首先,我们需要停止MariaDB服务:
service mysql stop
删除所有现有的日志文件(如果这不是新鲜的MariaDB安装,您可能想要备份它们):
rm -f /var/lib/mysql/ib_logfile*
使用nano打开配置文件:
nano /etc/mysql/my.cnf
按CTRL + W搜索文件。 InnoDB的输入到搜索字段,然后按ENTER键继续。 你将被带到配置文件的InnoDB部分。 你将需要添加下面红色高亮显示该行。
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_log_file_size = 64M
#
# * Security Features
按CTRL + X,按Y保存文件,然后按ENTER键覆盖。
最后,再次启动MariaDB服务:
service mysql start
如果启动脚本返回状态[确定],则日志文件大小已成功更新,您可以继续执行下一部分。
第4步 - 在MariaDB中创建PowerDNS数据库和用户帐户
在本节和本教程的其余部分,我们将使用推荐的名称,如“powerdns”和“powerdns_user”。 随意替换您自己的数据库和数据库用户名,并确保您使用更新的名称。
你一定要更改密码。 一定要取代以红色突出显示文本使用自己的信息。
注:在您结束与该行MySQL的外壳不会处理命令。 你会注意到我们的表命令使用多行; 这个是正常的。
首先,随着MariaDB的根用户进行身份验证:
mysql -u root -p
输入root数据库密码,然后按ENTER键来访问数据库服务器。
创建数据库。 你可以使用任何你想要的名称,但我们将使用powerdns:
CREATE DATABASE powerdns;
创建一个名为“powerdns_user”的新用户并授予对数据库的访问权限。 你应该有一个独特的密码替换powerdns_user_password:
GRANT ALL ON powerdns.* TO 'powerdns_user'@'localhost' IDENTIFIED BY 'powerdns_user_password';
刷新权限以更新用户设置:
FLUSH PRIVILEGES;
使用新的powerdns数据库:
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);
创建supermasters表:
CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
现在我们可以退出MySQL shell了:
quit;
第5步 - 安装PowerDNS
如前所述,MariaDB是MySQL的替代品。 因此,我们将安装主要的PowerDNS模块,以及相应的MySQL后端模块。
安装PowerDNS:
apt-get install -y pdns-server pdns-backend-mysql
注意:如果系统提示您提供有关MySQL的客户端的相关性错误,下面的命令将删除冲突的包,并迫使PowerDNS软件包的安装。
apt-get -f purge -y mysql-client
将提示您配置MySQL后端。 我们将在稍后手动执行此过程,所以请使用箭头键选择<否>,然后按ENTER键完成安装。
第6步 - 配置PowerDNS
我们必须配置PowerDNS以使用我们的新数据库。
首先,删除现有的配置文件:
rm /etc/powerdns/pdns.d/*
现在我们可以创建MariaDB配置文件:
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
在文件中输入以下数据。 记住要添加自己的数据库设置为gmysql-DBNAME,gmysql用户 ,尤其是gmysql密码 。
# MySQL Configuration file
launch=gmysql
gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=powerdns_user
gmysql-password=powerdns_user_password
重新启动PowerDNS以应用更改:
service pdns restart
第7步 - 测试PowerDNS
这些步骤是一个良好的健全检查,以确保PowerDNS安装,并可以连接到数据库。 如果你不通过以下测试,那么你的数据库配置有问题。 重复第4步和6以解决问题。
检查PowerDNS是否正在侦听:
netstat -tap | grep pdns
您应该看到类似于以下内容的输出:
root@ns1:~# netstat -tap | grep pdns
tcp 0 0 *:domain *:* LISTEN 5525/pdns_server-in
检查PowerDNS是否正确响应:
dig @127.0.0.1
您应该看到类似于以下内容的输出:
root@ns1:~# dig @127.0.0.1
; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27248
;; 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: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 02 18:58:20 EST 2014
;; MSG SIZE rcvd: 29
一切都结帐了吗? 大! 让我们继续。
第8步 - 安装Poweradmin
Poweradmin是PowerDNS的基于Web的DNS管理工具。 它有所有防区类型(全面支持主 , 本地和Minion )。 它具有完全的超级主机支持,用于自动配置从区域,完全支持IPv6和多种语言。 您可以查看功能列表了解更多详情。
安装Apache和Poweradmin所需的依赖关系:
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模块:
pear install DB
pear install pear/MDB2#mysql
启用Mcrypt:
php5enmod mcrypt
重新启动Apache以应用更改:
service apache2 restart
更改到您的主目录:
cd ~
下载压缩的Poweradmin文件:
wget https://github.com/downloads/poweradmin/poweradmin/poweradmin-2.1.6.tgz
解压缩归档文件:
tar xvzf poweradmin-2.1.6.tgz
移动poweradmin
目录到Apache Web目录:
mv poweradmin-2.1.6 /var/www/html/poweradmin
创建配置文件:
touch /var/www/html/poweradmin/inc/config.inc.php
授予Apache用户对目录的所有权:
chown -R www-data:www-data /var/www/html/poweradmin/
第9步 - 配置Poweradmin
要完成Poweradmin的安装,我们将使用基于Web的配置向导。
打开Web浏览器并访问以下URL,替换您自己的IP地址或服务器主机名:
-
http:// your_server_ip /poweradmin/install/
选择首选语言,然后单击转到第2步按钮。
有脚蹬2页上的一些有价值的信息,尤其是对Poweradmin的多次安装。 此信息不直接适用于本教程。 当您完成阅读页面,点击转到第3步按钮。
在安装第3步页面,我们需要输入以下信息:
- 用户名 :您MariaDB的创建powerdns_user,或任何用户名
- 密码 :powerdns 用户密码 ,您先前创建的数据库密码
- 数据库类型 :从下拉菜单中选择MySQL的 ; 记住MariaDB行为像MySQL
- 主机名 :127.0.0.1,因为我们是从本地主机连接
- DB端口 :3306; 保留默认值
- 数据库 :powerdns,或先前创建的数据库名称
- Poweradmin管理员密码 :请设置您将使用登录到Poweradmin控制面板后面一个独特的密码; 用户名会管理
点击进入第4步按钮。
在安装的第4步页你的便利和安全的选择。 您可以重复使用相同的数据库设置,或为Poweradmin创建一个新的较少特权的数据库用户。 此示例显示相同的数据库用户设置。 您还将选择您的Nameservers域。
- 用户名 :使用新的或现有的数据库用户; 在这种情况下,我们使用
powerdns_user
- 密码 :设置新密码或使用powerdns 用户密码现有的数据库密码
- Hostmaster:设置默认hostmaster,如hostmaster.example-dns.com
- 主域名服务器 :设置主域名服务器,如ns1.example-dns.com
- 二级域名服务器 :设置二级域名服务器,如ns2.example-dns.com
点击进入第5步按钮。
验证数据库信息是否正确。 如果您选择创建新用户和密码,则应登录到MariaDB数据库,并通过复制和粘贴屏幕上显示的代码块(从GRANT开始)来添加新用户。 然后点击转到第6步按钮。
您将看到安装程序的消息能够写入文件“../inc/config.inc.php”。 。 。如果你有写配置文件的问题,这意味着你错过了在安装过程中的一个步骤。
如果这一步失败了 ,回到你的服务器并创建文件:
touch /var/www/html/poweradmin/inc/config.inc.php
然后通过刷新页面重新重新启动安装过程。
否则,单击转到第7步按钮完成安装。
你会得到用户名admin和你Poweradmin控制面板的密码。
我们完成了Poweradmin的配置。
要清理,请返回到您的服务器并删除安装目录。 Poweradmin要求我们在登录之前执行此操作:
rm -rf /var/www/html/poweradmin/install/
Poweradmin配置更改
如果在完成安装后需要更改Poweradmin设置,请编辑此文件:
nano /var/www/html/poweradmin/inc/config.inc.php
在这里您可以更新Poweradmin的数据库连接设置和其他配置设置。
第10步 - 创建您的第一个DNS记录
访问Poweradmin控制面板:
-
http:// your_server_ip /poweradmin/
使用在配置期间设置的凭据登录到Poweradmin控制面板。 用户名是admin,密码是从安装第3步 Poweradmin管理员密码 。
点击添加主区的链接。
在区域名称字段中输入域名。 此域应该是要为其托管区域文件的域。 您可以将所有其他设置保留为其默认条目。 单击Add按钮区 。
点击列表区从顶部菜单链接。
单击区域文件的编辑按钮,该区域文件在区域条目的左侧看起来像一支小铅笔。
为您的网域添加DNS记录。
- 您可以在名称字段中添加子域名,或将其留空主域。
- 选择记录在下拉菜单的类型 。
- 添加IP地址,域名,或在内容领域的其他项目。
- 如果需要,设置优先级 。
- 设置秒TTL。
点击添加记录按钮。
您可以添加额外的记录,或者回到列表页面区域和编辑按钮为您的域来查看所有该域的当前记录。
请记住,要使此记录真正发挥作用,您需要:
- 使用胶水记录注册Nameservers域
- 将此域的Nameservers设置为新的PowerDNSNameservers域
- 等待传播
但是,我们可以立即检查记录是否正确。
第1步1 - 测试您的DNS记录
注:替换example.com用自己的域名或子域名记录。
在您的服务器上,查找您的域的记录:
dig example.com A @127.0.0.1
您应该看到类似于以下内容的输出:
root@ns1:~# dig example.com A @127.0.0.1
; <<>> DiG 9.9.5-3-Ubuntu <<>> example.com A @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20517
;; 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: 2800
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 86400 IN A 104.131.174.136
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 02 19:14:48 EST 2014
;; MSG SIZE rcvd: 56
如果您添加了多个区域条目,也可以检查所有其他记录。
如果这些是正确的,这意味着这个Nameservers有正确的信息!
但是,这并不意味着域名服务器域已注册,该域正在使用您的新Nameservers作为SOA,或者该更改已在全球传播。
结论
我们设置了一个带有MariaDB后端的PowerDNS服务器。 我们设置了Poweradmin控制面板来管理后端。 我们创建了第一个DNS区域,并为该区域创建了A记录。
下一步怎么样
如果你还没有这样做,你需要注册你的域名服务器。
您还需要选择这些Nameservers作为您要为其托管DNS的任何域的SOA。
如果您需要帮助配置您的域,以下教程将帮助您开始。 您可能还需要检查注册商的说明。
- 如何使用DigitalOcean云服务器创建Nameservers或Branded Nameservers
- 如何使用DigitalOcean的DNS面板设置和测试DNS子域
- 如何以指向DigitalOcean域名服务器从通用域名注册商 (请记住,你想将这些设置为ns1.example-dns.com等,而不是DigitalOcean域名服务器)。