介绍
PowerDNS 是一个先进的、高性能的权威名称服务器,兼容多种后端。PowerDNS 可以使用 BIND 配置文件,读取来自 MariaDB、MySQL、Oracle、PostgreSQL 和许多其他数据库的信息。后端可以轻松写成任何语言。在这种情况下,我们将使用 MariaDB 来存储我们的区域文件记录。
MariaDB 是 MySQL 的一种关系式数据库管理系统,是领先的开源软件系统的一种,值得注意的是由其原始开发人员领导。
在本教程结束时,您将有一个工作PowerDNS名称服务器,您可以使用它来托管任何数量的域名的DNS。
前提条件
在开始教程之前,请遵循这些前提条件。
滴滴要求
- 512MB Droplet 或更大的
- Ubuntu 14.04 64 位
PowerDNS 旨在性能高,资源使用率低. 一个 512MB Droplet 应该是足够的运行一个 PowerDNS 服务器与适度数量的区域 / 记录。
根接入
本教程的其余部分将假定您使用 root 用户帐户或具有 sudo 特权的用户帐户连接到您的服务器。
要从另一个帐户输入 root 壳:
sudo su
注册您的名称服务器,为其他域名设置名称服务器
您可以在完成技术设置之前或之后完成此操作,但为了使您的新名称服务器能够处理真实的DNS请求,您必须在注册表中注册名称服务器域或子域(s)作为名称服务器,使用粘贴记录。
注意:当你设置一个DNS服务器时,它有助于保持域名直线。你很可能会选择三个子域用于名称服务器本身。本教程使用了 hostmaster.example-dns.com , ns1.example-dns.com ,和 ns2.example-dns.com 。
我们还将介绍使用这个名称服务器作为其SOA的域名。
本教程将以下域名作为示例。
这三个子域应该有粘贴记录,指向您的PowerDNS Droplet的IP地址:
- hostmaster.example-dns.com
- ns1.example-dns.com
- ns2.example-dns.com
- 然后,您应该将 example.com 的名称服务器设置为上面的三个名称服务器
步骤 1 - 安装更新
它总是是一个好主意,以确保你有最新的更新安装。
安装更新:
1apt-get update && apt-get upgrade -y
第2步:安装MariaDB
首先,我们将导入 MariaDB 存储库的密钥:
1apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
接下来我们将添加 MariaDB APT 存储库:
1add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu trusty main'
现在我们可以使用 apt-get 安装 MariaDB 包和依赖(主要是库):
1apt-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 访问,我们将运行安全安装工具来禁用这些功能。
运行此安全安装向导:
1mysql_secure_installation
您将被要求使用 MariaDB 设置期间创建的 MariaDB 用户密码进行身份验证。
1You already have a root password set, so you can safely answer **n**.
2
3Change the root password? [Y/n] n
在我们的例子中,我们不希望更改根密码;虽然,如果你在安装MariaDB时没有设置密码,现在将是一个很好的时机。
1Remove anonymous users? [Y/n]
建议匿名用户被禁用. 按 ENTER 以接受默认答案 Y。
1Disallow root login remotely? [Y/n]
建议不要使用 root 来管理远程数据库服务器. 按 Enter 来接受 Y 的默认答案。
1Remove test database and access to it? [Y/n]
您可以保留测试数据库,如果您想尝试 MariaDB. 在我们的示例中,我们决定删除它。
1Reload privilege tables now? [Y/n]
在向导中重新加载权限表将节省一个步骤. 按 Enter 来接受默认答案 Y。
接下来,我们将将InnoDB日志文件大小增加到64MB,这将有助于您在未来需要纠正问题。
首先,我们需要停止 MariaDB 服务:
1service mysql stop
删除任何现有日志文件(如果这不是新的MariaDB安装,您可能想备份它们):
1rm -f /var/lib/mysql/ib_logfile*
使用 nano 打开 config 文件:
1nano /etc/mysql/my.cnf
按 CTRL+W 来搜索文件. 输入 InnoDB 到搜索字段,然后按 ENTER 继续。 您将被带到 config 文件的 InnoDB 部分。
1# * InnoDB
2#
3# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
4# Read the manual for more InnoDB related options. There are many!
5
6innodb_log_file_size = 64M
7
8#
9# * Security Features
按 CTRL + X,按 Y 保存文件,然后按 Enter 重写。
最后,重新启动 MariaDB 服务:
1service mysql start
如果启动脚本返回状态 [OK],日志文件大小已成功更新,您可以继续进入下一节。
步骤 4 — 在 MariaDB 中创建 PowerDNS 数据库和用户帐户
在本节和本教程的其余部分,我们将使用推荐的名称,如powerdns
和powerdns_user
。
您一定要更改密码,请确保用您自己的信息更换红色突出的文本。
注意: MySQL 壳不会处理命令,直到您用 ** 结束行;** .您会注意到我们的表命令使用多个行;这是正常的。
首先,使用 MariaDB root 用户进行身份验证:
1mysql -u root -p
输入 root 数据库密码,然后按 Enter 来访问数据库服务器。
创建数据库. 你可以使用任何你想要的名称,但我们会使用powerdns:
1CREATE DATABASE powerdns;
创建一个名为powerdns_user
的新用户并授予数据库访问权限. 您应该用唯一的密码代替 powerdns_user_password:
1GRANT ALL ON powerdns.* TO 'powerdns_user'@'localhost' IDENTIFIED BY 'powerdns_user_password';
扫描权限以更新用户设置:
1FLUSH PRIVILEGES;
使用新的 powerdns 数据库:
1USE powerdns;
接下来,我们将向数据库添加一些表格,PowerDNS 可以用来存储其区域文件条目。
创建域
表:
1CREATE TABLE domains (
2id INT auto_increment,
3name VARCHAR(255) NOT NULL,
4master VARCHAR(128) DEFAULT NULL,
5last_check INT DEFAULT NULL,
6type VARCHAR(6) NOT NULL,
7notified_serial INT DEFAULT NULL,
8account VARCHAR(40) DEFAULT NULL,
9primary key (id)
10);
设置独特的索引:
1CREATE UNIQUE INDEX name_index ON domains(name);
创建 ** 记录** 表:
1CREATE TABLE records (
2id INT auto_increment,
3domain_id INT DEFAULT NULL,
4name VARCHAR(255) DEFAULT NULL,
5type VARCHAR(6) DEFAULT NULL,
6content VARCHAR(255) DEFAULT NULL,
7ttl INT DEFAULT NULL,
8prio INT DEFAULT NULL,
9change_date INT DEFAULT NULL,
10primary key(id)
11);
设置指数:
1CREATE INDEX rec_name_index ON records(name);
2CREATE INDEX nametype_index ON records(name,type);
3CREATE INDEX domain_id ON records(domain_id);
创建超级大师
表:
1CREATE TABLE supermasters (
2ip VARCHAR(25) NOT NULL,
3nameserver VARCHAR(255) NOT NULL,
4account VARCHAR(40) DEFAULT NULL
5);
现在我们可以退出MySQL壳:
1quit;
第5步:安装PowerDNS
如前所述,MariaDB是MySQL的插入替代品,因此,我们将安装主PowerDNS模块以及相应的MySQL后端模块。
安装PowerDNS:
1apt-get install -y pdns-server pdns-backend-mysql
注意: 如果您被提示对 mysql-client 的依赖性错误,下列命令将删除冲突的包,并强制安装 PowerDNS 包。
我们会在一瞬间手动执行此过程,所以使用箭头键选择
步骤 6 – 配置 PowerDNS
我们必须配置PowerDNS来使用我们的新数据库。
首先,删除现有配置文件:
rm /etc/powerdns/pdns.d/*
现在我们可以创建 MariaDB 配置文件:
1nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
请记住为 gmysql-dbname, gmysql-user,特别是 gmysql-password添加自己的数据库设置。
1# MySQL Configuration file
2
3launch=gmysql
4
5gmysql-host=localhost
6gmysql-dbname=powerdns
7gmysql-user=powerdns_user
8gmysql-password=powerdns_user_password
重新启动 PowerDNS 以应用更改:
1service pdns restart
第7步:测试PowerDNS
这些步骤是要确保 PowerDNS 已安装并可以连接到数据库的良好健康检查。如果您未通过以下测试,则数据库配置有问题。
查看PowerDNS是否正在收听:
1netstat -tap | grep pdns
你应该看到一个类似的输出:
1root@ns1:~# netstat -tap | grep pdns
2tcp 0 0 *:domain *:* LISTEN 5525/pdns_server-in
检查PowerDNS是否正确响应:
1dig @127.0.0.1
你应该看到一个类似的输出:
1root@ns1:~# dig @127.0.0.1
2
3; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1
4; (1 server found)
5;; global options: +cmd
6;; Got answer:
7;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27248
8;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
9;; WARNING: recursion requested but not available
10
11;; OPT PSEUDOSECTION:
12; EDNS: version: 0, flags:; udp: 2800
13;; QUESTION SECTION:
14;. IN NS
15
16;; Query time: 1 msec
17;; SERVER: 127.0.0.1#53(127.0.0.1)
18;; WHEN: Sun Nov 02 18:58:20 EST 2014
19;; MSG SIZE rcvd: 29
一切都看得出来了吗?好吧,继续前进吧。
步骤 8 – 安装 Poweradmin
Poweradmin是PowerDNS的基于Web的DNS管理工具,它对所有区域类型(Master,Native和Slave都有全面的支持,支持自动提供奴隶区域,全面支持IPv6和多种语言,您可以查看功能列表以获取更多细节。
安装 Apache 和 Poweradmin 所需的依赖:
1apt-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 模块:
1pear install DB
1pear install pear/MDB2#mysql
允许Mcrypt:
1php5enmod mcrypt
重启 Apache 以应用更改:
1service apache2 restart
更改您的家庭目录:
1cd ~
下载压缩的 Poweradmin 文件:
1wget https://github.com/downloads/poweradmin/poweradmin/poweradmin-2.1.6.tgz
提取档案:
1tar xvzf poweradmin-2.1.6.tgz
将poweradmin
目录移动到Apache Web目录:
1mv poweradmin-2.1.6 /var/www/html/poweradmin
创建配置文件:
触摸 /var/www/html/poweradmin/inc/config.inc.php
赋予 Apache 用户对目录的所有权:
1chown -R www-data:www-data /var/www/html/poweradmin/
步骤 9 – 配置 Poweradmin
要完成Poweradmin的安装,我们将使用基于Web的配置向导。
打开您的 Web 浏览器并访问下面的 URL,取代您的 IP 地址或服务器主机名称:
http://your_server_ip/poweradmin/install/
选择您喜爱的语言,然后点击 Go to step 2 按钮。
页面上有一些有价值的信息 步骤 2 ,特别是对于Poweradmin的多个安装. 此信息不直接适用于本教程. 当你完成阅读页面时,点击 步骤 3 按钮。
在安装步骤3
页面上,我们需要输入以下信息:
- 用户名 : powerdns_user,或您为 MariaDB 创建的任何用户名
- 密码 : powerdns_user_password,您之前创建的数据库密码
- 数据库类型 :从下载菜单中选择 MySQL ;请记住,MariaDB 就像 MySQL
- Hostname : 127.0.0.1 因为我们正在连接从 localhost
- DB 端口 : 3306;留下默认
- 数据库 : powerdns,或您之前创建的数据库名 *_ Poweradmin 管理员密码 :请设置一个独特的密码,您将在后面登录
点击步骤 4
按钮。
在 ** 安装步骤 4** 页面上,您可以选择方便性和安全性之间。您可以重复使用相同的数据库设置,或为 Poweradmin 创建一个新的不受特权的数据库用户。
- 用户名 :使用新的或现有的数据库用户;在这种情况下,我们使用了
powerdns_user
- 密码 :设置新的密码或使用现有的数据库密码 powerdns_user_password
- Hostmaster :设置默认主机,如 hostmaster.example-dns.com
- Primary nameserver :设置主要名称服务器,如 ns1.example-dns.com
- Secondary nameserver :设置辅助名称服务器,如 **ns2.example-dns.com。
点击向步骤5
按钮。
如果您选择创建一个新的用户和密码,那么您应该登录到您的MariaDB数据库并通过复制和粘贴显示在屏幕上的代码块来添加新的用户,从GRANT开始。
您应该看到一个消息,如 安装程序能够写入文件../inc/config.inc.php
... . 如果您有问题写入配置文件,这意味着您在安装过程中错过了一步。
** 如果此步骤失败了** ,请返回您的服务器并创建文件:
1touch /var/www/html/poweradmin/inc/config.inc.php
然后再重新启动安装过程,更新页面。
否则,请单击 Go to step 7 按钮来完成安装。
您将收到用户名 admin 和您的Poweradmin控制面板密码。
我们已经完成了Poweradmin的配置。
要清理,回到您的服务器并删除安装目录. Poweradmin 要求我们在我们可以登录之前这样做:
1rm -rf /var/www/html/poweradmin/install/
Poweradmin 配置更改
如果您需要在完成安装后更改 Poweradmin 设置,请编辑此文件:
1nano /var/www/html/poweradmin/inc/config.inc.php
在这里,您可以更新 Poweradmin 的数据库连接设置和其他配置设置。
第10步:创建你的第一个DNS记录
访问 Poweradmin 控制面板:
http://your_server_ip/poweradmin/
登录您的 Poweradmin 控制面板,使用您在配置过程中设置的凭据。用户名是 admin ,密码是 Poweradmin 管理员密码 从 安装步骤 3 。
点击添加主区
链接。
输入域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名域名
从顶部菜单中点击列表区域
链接。
点击您的区域文件的编辑按钮,它看起来像一个小铅笔在区域输入的左侧。
为您的域名添加一个DNS记录。
- 您可以将子域添加到 Name 字段中,或将其空置于主域中。
- 从下滑菜单中选择记录的 Type 。
- 在 Content 字段中添加 IP 地址、域名或其他条目。
- 如果需要,设置 Priority 。
点击添加记录
按钮。
您可以添加额外的记录,或返回 列表区域 页面和您的域编辑按钮,以查看该域的所有当前记录。
请记住,为了这个记录实际上工作,你需要:
- 使用粘贴记录注册名称服务器域
- 将此域的名称服务器设置为新的 PowerDNS 名称服务器域
- 等待扩散
但是,我们可以立即检查记录在本地是否正确。
第11步:测试您的DNS记录
注意: 用您自己的域或子域记录替换 example.com。
在您的服务器上,查看您的域名记录:
1dig example.com A @127.0.0.1
你应该看到一个类似的输出:
1root@ns1:~# dig example.com A @127.0.0.1
2
3; <<>> DiG 9.9.5-3-Ubuntu <<>> example.com A @127.0.0.1
4;; global options: +cmd
5;; Got answer:
6;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20517
7;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
8;; WARNING: recursion requested but not available
9
10;; OPT PSEUDOSECTION:
11; EDNS: version: 0, flags:; udp: 2800
12;; QUESTION SECTION:
13;example.com. IN A
14
15;; ANSWER SECTION:
16example.com. 86400 IN A 104.131.174.136
17
18;; Query time: 4 msec
19;; SERVER: 127.0.0.1#53(127.0.0.1)
20;; WHEN: Sun Nov 02 19:14:48 EST 2014
21;; MSG SIZE rcvd: 56
您也可以检查所有其他记录,如果您添加了多个区域条目。
如果这些是正确的,这意味着这个名称服务器有正确的信息!
然而,这并不意味着名称服务器域名已注册,该域名正在使用您的新名称服务器作为SOA,或该更改尚未在全球范围内传播。
结论
我们设置了一个PowerDNS服务器与MariaDB后端. 我们设置了Poweradmin控制面板来管理后端. 我们创建了我们的第一个DNS区域,并为该区域创建了一个A记录。
我们从这里到哪里去
如果你还没有这样做,你需要注册你的名称服务器。
您还需要选择这些名称服务器作为您想要托管 DNS 的任何域的 SOA。
如果您需要帮助配置您的域(s),下面的教程将帮助您开始。
- 如何使用DigitalOcean云服务器创建虚荣或品牌名称服务器
- 如何使用DigitalOcean的DNS面板设置和测试DNS子域
- 如何从常用域名注册器中指向DigitalOcean名称服务器 (请记住,您希望将这些设置为 ns1.example-dns.com 等,而不是DigitalOcean名称服务器)。