介绍
PowerDNS 是一种先进的、高性能的权威域名服务器,兼容多种后端。 PowerDNS 可以使用 BIND 配置文件,从 MariaDB、MySQL、Oracle、PostgreSQL 和许多其他数据库中读取信息。 后端可以很容易地用任何语言编写。 在这种情况下,我们将使用 MariaDB 来存储我们的区域文件记录。
MariaDB 是关系数据库管理系统 MySQL 的一个分支。 作为领先的开源软件系统的一个分支,它以由其原始开发人员领导而著称。 MariaDB 保留了 MySQL API 和命令的完整替换功能。
在本教程结束时,您将拥有一个有效的 PowerDNS 名称服务器,您可以使用它来为任意数量的域托管 DNS。
先决条件
在开始本教程之前,请遵循这些先决条件。
液滴要求
- 512MB Droplet 或更大
- Ubuntu 14.04 64 位
PowerDNS 旨在实现高性能和低资源使用。 一个 512MB 的 Droplet 应该足以运行具有中等数量区域/记录的 PowerDNS 服务器。 这个 Droplet 将运行 Ubuntu 14.04 64 位。
根访问权限
本教程的其余部分将假设您使用 root 用户帐户或具有 sudo 权限的用户帐户连接到您的服务器。
要从另一个帐户进入 root shell:
sudo su
注册您的域名服务器,为其他域设置域名服务器
您可以在完成技术设置之前或之后执行此操作,但是为了让您的新域名服务器能够处理真正的 DNS 请求,您必须使用粘合记录在您的注册商处将域名服务器域或子域注册为域名服务器。 粘合记录在下面链接的教程中进行了讨论,尽管您可能希望在注册商处查找注册名称服务器/创建粘合记录的过程。
注意: 设置 DNS 服务器时,有助于保持域名的正确性。 您很可能会选择三个子域用于名称服务器本身。 本教程使用 hostmaster.example-dns.com、ns1.example-dns.com 和 ns2.example-dns.com。
我们还将展示一个使用此名称服务器作为其 SOA 的域。 在本教程中,我们将在您的新 PowerDNS 名称服务器上为 example.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'
现在我们可以使用 apt-get 安装 MariaDB 包和依赖项(主要是库):
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 继续。 条目显示为 red。
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 部分。 您需要添加下面 red 中突出显示的行。
# * 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
如果启动脚本返回状态 [OK],则日志文件大小已成功更新,您已准备好继续下一部分。
第 4 步 — 在 MariaDB 中创建 PowerDNS 数据库和用户帐户
在本节和本教程的其余部分,我们将使用推荐的名称,例如“powerdns”和“powerdns_user”。 随意替换您自己的数据库和数据库用户名,并确保始终使用更新后的名称。
您绝对应该更改密码。 请务必用您自己的信息替换以 red 突出显示的文本。
注意: MySQL shell 将不会处理命令,直到您以 ; 结束该行。 您会注意到我们的表格命令使用多行; 这很正常。
首先,使用 MariaDB root 用户进行身份验证:
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 可以使用这些表来存储其区域文件条目。
创建 domains 表:
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);
创建 records 表:
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-client的依赖错误,以下命令将删除冲突包并强制安装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-user,尤其是 gmysql-password 添加您自己的数据库设置。
# 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 管理工具。 它完全支持所有区域类型(master、native 和 slave)。 它对从属区域的自动配置、对 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 的配置向导。
打开您的网络浏览器并访问下面的 URL,替换为您自己的 IP 地址或服务器主机名:
选择您的首选语言,然后单击 Go to step 2 按钮。
step 2 页面上有一些有价值的信息,尤其是对于 Poweradmin 的多次安装。 此信息不直接适用于本教程。 阅读完页面后,单击 Go to step 3 按钮。
在安装步骤3页面,我们需要输入以下信息:
- 用户名:powerdns_user,或者你为 MariaDB 创建的任何用户名
- Password:powerdns_user_password,你之前创建的数据库密码
- 数据库类型:从下拉菜单中选择MySQL; 请记住,MariaDB 的行为类似于 MySQL
- Hostname: 127.0.0.1 因为我们是从 localhost 连接的
- 数据库端口:3306; 保留默认值
- Database:powerdns,或者你之前创建的数据库名
- Poweradmin 管理员密码:请设置一个唯一密码,您稍后将使用该密码登录Poweradmin控制面板; 用户名将是 admin
单击 转到步骤 4 按钮。
在 安装步骤 4 页面上,您可以在方便性和安全性之间进行选择。 您可以重复使用相同的数据库设置,或为 Poweradmin 创建新的低权限数据库用户。 此示例显示相同的数据库用户设置。 您还将选择您的名称服务器域。
- 用户名:使用新的或现有的数据库用户; 在这种情况下,我们使用
powerdns_user
- Password:设置新密码或使用现有数据库密码powerdns_user_password
- Hostmaster:设置默认hostmaster,如hostmaster.example-dns.com
- 主域名服务器:设置主域名服务器,如ns1.example-dns.com
- 二级域名服务器:设置二级域名服务器,如ns2.example-dns.com
单击 转到步骤 5 按钮。
验证数据库信息是否正确。 如果您选择创建新用户和密码,则应登录 MariaDB 数据库并通过复制和粘贴屏幕上显示的代码块来添加新用户,从 GRANT 开始。 然后点击Go to step 6按钮。
您应该会看到一条消息,例如安装程序能够写入文件“…/inc/config.inc.php”。 . . . 如果您在写入配置文件时遇到问题,则意味着您在安装过程中错过了一个步骤。
如果此步骤失败,请返回您的服务器并创建文件:
touch /var/www/html/poweradmin/inc/config.inc.php
然后通过刷新页面再次重新启动安装过程。
否则,单击Go to step 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 控制面板:
使用您在配置期间设置的凭据登录到您的 Poweradmin 控制面板。 用户名是 admin,密码是 安装步骤 3 中的 Poweradmin 管理员密码。
单击 添加主区域 链接。
在 区域名称 字段中输入域名。 该域应该是您要为其托管区域文件的域。 您可以保留所有其他设置的默认条目。 单击添加区域按钮。
单击顶部菜单中的 List zone 链接。
单击区域文件的编辑按钮,该文件看起来像区域条目左侧的小铅笔。
为您的域添加 DNS 记录。
- 您可以在 Name 字段中添加子域,或将主域留空。
- 从下拉菜单中选择记录的类型。
- 在 Content 字段中添加 IP 地址、域名或其他条目。
- 如果需要,设置 Priority。
- 以秒为单位设置 TTL。
单击添加记录按钮。
您可以添加其他记录,或返回 List zone 页面和您的域的编辑按钮以查看该域的所有当前记录。
请记住,要使此记录真正发挥作用,您需要:
- 使用粘合记录注册名称服务器域
- 将此域的名称服务器设置为新的 PowerDNS 名称服务器域
- 等待传播
但是,我们可以立即在本地检查记录是否正确。
第 11 步 — 测试您的 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
如果您添加了多个区域条目,您也可以检查所有其他记录。
如果这些都是正确的,这意味着该名称服务器具有正确的信息!
但是,这并不意味着域名服务器域已注册,该域正在使用您的新域名服务器作为 SOA,或者更改已在全球范围内传播。
结论
我们设置了一个带有 MariaDB 后端的 PowerDNS 服务器。 我们设置了 Poweradmin 控制面板来管理后端。 我们创建了第一个 DNS 区域,并为该区域创建了 A 记录。
我们从这里去哪里
如果您还没有这样做,您需要注册您的域名服务器。
您还需要选择这些名称服务器作为您要为其托管 DNS 的任何域的 SOA。
如果您在配置域时需要帮助,以下教程将帮助您入门。 您可能还需要查看注册商的说明。
- 如何使用 DigitalOcean 云服务器创建虚荣或品牌名称服务器
- 如何使用 DigitalOcean 的 DNS 面板设置和测试 DNS 子域
- 如何从公共域注册商 指向 DigitalOcean 域名服务器(请记住,您希望将这些设置为 ns1.example-dns.com 等,而不是 DigitalOcean 域名服务器。 )