在Ubuntu 20.04上轻松安装和设置PowerDNS
脸书
Ubuntu+20.04&url=https%3A%2F%2Fkifarunix.com%2Feasily-install-and-setup-powerdns-on-ubuntu-20-04%2F&via=kifarunix”>
推特
Pinterest WhatsApp
欢迎来到我们的教程,该教程如何在Ubuntu 20.04上轻松安装和设置PowerDNS。 PowerDNS“是开源DNS软件,服务和支持的主要供应商”。它提供了权威服务器和递归DNS产品。根据 PowerDNS文档页面;
- 的 权威服务器 会回答有关它知道的域的问题,但不会上网解决其他域的查询。当权威服务器回答问题时,它就会从数据库中发出,并且可以被认为是权威的。无法污染缓存或混淆守护程序。
- 的 递归相反,默认情况下,它本身并不了解域,但始终会咨询其他权威服务器来回答对其提出的问题。
PowerDNS;
- 提供非常高的域分辨率性能。
- 支持从简单的区域文件到关系数据库以及负载平衡/故障转移算法的大量不同后端。
- 提供更好的安全功能。
- 它的源代码相当小,这使审核变得容易。
- 它提供了大量有关其操作的统计信息,这不仅有助于确定安装的可伸缩性,而且有助于发现问题。
目录
- 在Ubuntu 20.04上轻松安装和设置PowerDNS
- 运行系统更新
- 安装PowerDNS关系数据库
- 在Ubuntu 20.04上安装MariaDB 10.5
- 在Ubuntu 20.04上轻松安装和设置PowerDNS
- 在Ubuntu 20.04上创建PowerDNS数据库
- 导入PowerDNS数据库架构
- 配置PowerDNS数据库连接详细信息
- 验证PowerDNS数据库连接
- 重新启动PowerDNS
- 创建PowerDNS转发区域记录
- 将转发区域DNS记录插入PowerDNS数据库
- 定义PowerDNS操作模式
- 创建域SOA(授权开始)记录。
- 创建名称服务器NS记录
- 插入名称服务器的记录
- 插入MX记录
- 验证PowerDNS转发解析
- 创建PowerDNS反向区域记录
- 为反向区域插入SOA记录
- 插入NS反向区域记录
- 插入NS的PTR记录
- 插入其他域PTR记录
- 验证PowerDNS反向解析
- 在UFW上打开DNS端口
- 在客户端系统上配置DNS服务器
- 验证客户端转发DNS解析
- 验证客户端反向DNS解析
- 参考
- 相关教程
在Ubuntu 20.04上轻松安装和设置PowerDNS
运行系统更新
首先,请更新系统软件包并同时升级到系统软件包。
apt update
apt upgrade
安装PowerDNS关系数据库
如上所述,权威的PowerDNS服务器支持不同的后端,范围从数据库后端(例如MySQL,PostgreSQL,Oracle和 绑定区域文件 至 协同过程 和 JSON API的。
由于我们要在Ubuntu 20.04上轻松地安装和设置PowerDNS作为本地权威名称服务器,因此我们将使用一种关系数据库,在此设置中,我们使用了MariaDB。
在Ubuntu 20.04上安装MariaDB 10.5
要安装MariaDB的最新稳定版本,您需要安装MariaDB仓库。
apt install software-properties-common
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
接下来,前往 MariaDB存储库站点 并选择您的安装镜像。在此设置中,我们使用 ukfast.co.uk镜子。
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.ukfast.co.uk/sites/mariadb/repo/10.5/ubuntu focal main'
更新系统软件包缓存,并在Ubuntu 20.04上安装MariaDB 10.5;
apt update
apt install mariadb-server
安装完成后,运行初始MySQL安全脚本以删除匿名用户并测试数据库,禁止远程root登录。
mysql_secure_installation
在Ubuntu 20.04上轻松安装和设置PowerDNS
在Ubuntu 20.04上安装PowerDNS之前,需要先禁用 systemd-resolved
服务(为本地应用程序提供网络名称解析的系统服务)。
systemctl disable --now systemd-resolved
删除默认 resolv.conf
文件,并使用自定义DNS服务器详细信息创建一个新文件,以使您能够进行安装。
rm -rf /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf
完成后,在Ubuntu 20.04上安装PowerDNS。 PowerDNS由 pdns-server
包。
apt install pdns-server
您还需要安装PowerDNS名称服务器MySQL后端;
apt install pdns-backend-mysql
在Ubuntu 20.04上创建PowerDNS数据库
现在已经安装了PowerDNS及其MySQL后端软件包,登录到MariaDB并为PowerDNS名称服务器创建数据库。
mysql -u root
确保使用首选的数据库名称和数据库用户名。此处使用的名称不是标准名称。
create database kifarunixdemopdns;
创建PowerDNS数据库用户并授予PowerDNS数据库的所有特权。相应地替换密码。
grant all on kifarunixdemopdns.* to [email protected] identified by 'PdnSPassW0rd';
重新加载特权表并退出数据库;
flush privileges; quit
导入PowerDNS数据库架构
默认的PowerDNS数据库架构可在 /usr/share/pdns-backend-mysql/schema/
目录为 schema.mysql.sql
。您需要将此模式导入到上面创建的PowerDNS数据库中。
mysql -u pdnsadmin -p kifarunixdemopdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
要验证PowerDNS数据库架构导入,请尝试列出可用表;
mysqlshow kifarunixdemopdns
Database: kifarunixdemopdns
+----------------+
| Tables |
+----------------+
| comments |
| cryptokeys |
| domainmetadata |
| domains |
| records |
| supermasters |
| tsigkeys |
+----------------+
配置PowerDNS数据库连接详细信息
创建一个配置文件,如下所示,在其中定义PowerDNS数据库连接详细信息。
vim /etc/powerdns/pdns.d/pdns.local.gmysql.conf
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=kifarunixdemopdns
gmysql-user=pdnsadmin
gmysql-password=PdnSPassW0rd
gmysql-dnssec=yes
# gmysql-socket=
相应地替换您的连接详细信息。
保存并退出文件。
调整数据库连接详细信息的权限。
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
验证PowerDNS数据库连接
如果PowerDNS已经在运行,则将其停止并在前台运行以验证其是否可以连接到数据库;
systemctl stop pdns.service
pdns_server --daemon=no --guardian=no --loglevel=9
...
Oct 09 21:31:53 Creating backend connection for TCP
Oct 09 21:31:53 [bindbackend] Parsing 0 domain(s), will report when done
Oct 09 21:31:53 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Oct 09 21:31:53 gmysql Connection successful. Connected to database 'kifarunixdemopdns' on 'localhost'.
Oct 09 21:31:53 About to create 3 backend threads for UDP
Oct 09 21:31:53 gmysql Connection successful. Connected to database 'kifarunixdemopdns' on 'localhost'.
Oct 09 21:31:54 gmysql Connection successful. Connected to database 'kifarunixdemopdns' on 'localhost'.
Oct 09 21:31:54 gmysql Connection successful. Connected to database 'kifarunixdemopdns' on 'localhost'.
Oct 09 21:31:54 Done launching threads, ready to distribute questions
如果遇到任何错误,请先解决它,然后再继续。
重新启动PowerDNS
重新启动PowerDNS以应用所做的更改。
systemctl restart pdns
确认DNS端口UDP / TCP端口53已打开
netstat -alnp4 | grep pdns
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 14608/pdns_server
udp 0 0 0.0.0.0:53 0.0.0.0:* 14608/pdns_server
创建PowerDNS转发区域记录
将转发区域DNS记录插入PowerDNS数据库
现在完成PowerDNS的基本配置。您可以继续将DNS记录添加到数据库中。
登录到PowerDNS数据库;
mysql -u pdnsadmin -p -D kifarunixdemopdns
定义PowerDNS操作模式
首先,定义PowerDNS操作模式。有各种 DNS操作模式 您可以在将记录插入PowerDNS数据库时进行定义。在本基础教程中,我们将使用默认的本机操作模式。
insert into domains (name, type) values ('kifarunix-demo.com', 'NATIVE');
创建域SOA(授权开始)记录。
SOA存储的格式为:
primary hostmaster serial refresh retry expire default_ttl
哪里:
- 主: 默认名称 配置选项
- 主持人:
[email protected]
- 序列号:0
- 刷新:10800(3小时)
- 重试:3600(1小时)
- 过期:604800(1周)
- default_ttl:3600(1小时)
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'kifarunix-demo.com','localhost admin.kifarunix-demo.com 1 10380 3600 604800 3600','SOA',86400,NULL);
创建名称服务器NS记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'kifarunix-demo.com','ns1.kifarunix-demo.com','NS',86400,NULL);
为名称服务器插入一条记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'ns1.kifarunix-demo.com','192.168.57.3','A',120,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'news.kifarunix-demo.com','192.168.58.45','A',120,NULL);
插入MX记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'kifarunix-demo.com','mail.kifarunix-demo.com','MX',120,25);
到目前为止,一切都很好,足以进行演示,这就是我们的记录的样子;
select * from records;
+----+-----------+-------------------------+------+-------------------------------------------------------------+-------+------+----------+-----------+------+
| id | domain_id | name | type | content | ttl | prio | disabled | ordername | auth |
+----+-----------+-------------------------+------+-------------------------------------------------------------+-------+------+----------+-----------+------+
| 1 | 1 | kifarunix-demo.com | SOA | localhost admin.kifarunix-demo.com 1 10380 3600 604800 3600 | 86400 | NULL | 0 | NULL | 1 |
| 2 | 1 | kifarunix-demo.com | NS | ns1.kifarunix-demo.com | 86400 | NULL | 0 | NULL | 1 |
| 3 | 1 | ns1.kifarunix-demo.com | A | 192.168.57.3 | 120 | NULL | 0 | NULL | 1 |
| 4 | 1 | news.kifarunix-demo.com | A | 192.168.58.45 | 120 | NULL | 0 | NULL | 1 |
| 5 | 1 | kifarunix-demo.com | MX | mail.kifarunix-demo.com | 120 | 25 | 0 | NULL | 1 |
+----+-----------+-------------------------+------+-------------------------------------------------------------+-------+------+----------+-----------+------+
5 rows in set (0.001 sec)
验证PowerDNS转发分辨率
一旦将记录填充到数据库中,就非常采用PowerDNS分辨率。
dig ns1.kifarunix-demo.com @127.0.0.1
; <<>> DiG 9.16.1-Ubuntu <<>> ns1.kifarunix-demo.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21371
;; 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: 1232
;; QUESTION SECTION:
;ns1.kifarunix-demo.com. IN A
;; ANSWER SECTION:
ns1.kifarunix-demo.com. 120 IN A 192.168.57.3
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Oct 09 22:54:43 UTC 2020
;; MSG SIZE rcvd: 67
dig MX kifarunix-demo.com @127.0.0.1
25 mail.kifarunix-demo.com.
创建PowerDNS反向区域记录
再次登录到PowerDNS数据库;
mysql -u pdnsadmin -p -D kifarunixdemopdns
为反向区域插入SOA记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2,'57.168.192.in-addr.arpa','localhost admin.kifarunix-demo.com 1 10380 3600 604800 3600','SOA',86400,NULL);
插入NS反向区域记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2,'57.168.192.in-addr.arpa','ns1.kifarunix-demo.com','NS',120,NULL);
插入NS的PTR记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2,'3.57.168.192.in-addr.arpa','ns1.kifarunix-demo.com','PTR',120,NULL);
插入其他域PTR记录
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2,'45.57.168.192.in-addr.arpa','news.kifarunix-demo.com','PTR',120,NULL);
现在,一般的数据库记录如下:
select * from records;
+----+-----------+----------------------------+------+-------------------------------------------------------------+-------+------+----------+-----------+------+
| id | domain_id | name | type | content | ttl | prio | disabled | ordername | auth |
+----+-----------+----------------------------+------+-------------------------------------------------------------+-------+------+----------+-----------+------+
| 1 | 1 | kifarunix-demo.com | SOA | localhost admin.kifarunix-demo.com 1 10380 3600 604800 3600 | 86400 | NULL | 0 | NULL | 1 |
| 2 | 1 | kifarunix-demo.com | NS | ns1.kifarunix-demo.com | 86400 | NULL | 0 | NULL | 1 |
| 3 | 1 | ns1.kifarunix-demo.com | A | 192.168.57.3 | 120 | NULL | 0 | NULL | 1 |
| 4 | 1 | news.kifarunix-demo.com | A | 192.168.58.45 | 120 | NULL | 0 | NULL | 1 |
| 5 | 1 | kifarunix-demo.com | MX | mail.kifarunix-demo.com | 120 | 25 | 0 | NULL | 1 |
| 6 | 2 | 57.168.192.in-addr.arpa | SOA | localhost admin.kifarunix-demo.com 1 10380 3600 604800 3600 | 86400 | NULL | 0 | NULL | 1 |
| 7 | 2 | 57.168.192.in-addr.arpa | NS | ns1.kifarunix-demo.com | 120 | NULL | 0 | NULL | 1 |
| 8 | 2 | 3.57.168.192.in-addr.arpa | PTR | ns1.kifarunix-demo.com | 120 | NULL | 0 | NULL | 1 |
| 9 | 2 | 45.57.168.192.in-addr.arpa | PTR | news.kifarunix-demo.com | 120 | NULL | 0 | NULL | 1 |
+----+-----------+----------------------------+------+-------------------------------------------------------------+-------+------+----------+-----------+------+
那么什么是domain_id,名称,类型,prio,ttl?在上阅读有关它们的信息 PowerDNS常规查询页面。
验证PowerDNS反向解析
退出数据库并运行反向DNS查询,以确认是否一切正常。
dig -x 192.168.57.45 @127.0.0.1 +short
news.kifarunix-demo.com.
dig -x 192.168.57.3 @127.0.0.1 +short
ns1.kifarunix-demo.com.
壮丽的! ! !
请注意,所有这些操作都可以很容易地从Web上完成,但这是另一天的教程。
在UFW上打开DNS端口
为了使远程主机能够使用PowerDNS进行名称解析,您需要打开DNS端口53 / UDP。
ufw allow from 192.168.0.0/16 to any port 53 proto udp
这允许从192.168.0.0/16子网进行DNS查询。
在客户端系统上配置DNS服务器
出于测试目的,覆盖您的 /etc/resolv.conf
PowerDNS名称服务器条目的文件。
echo "nameserver 192.168.57.3" > /etc/resolv.conf
验证客户端转发DNS解析
接下来,使用任何DNS实用程序执行DNS解析。
dig news.kifarunix-demo.com
; <<>> DiG 9.16.1-Ubuntu <<>> news.kifarunix-demo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56258
;; 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: 1232
;; QUESTION SECTION:
;news.kifarunix-demo.com. IN A
;; ANSWER SECTION:
news.kifarunix-demo.com. 120 IN A 192.168.58.45
;; Query time: 3 msec
;; SERVER: 192.168.57.3#53(192.168.57.3)
;; WHEN: Sat Oct 10 09:18:54 EAT 2020
;; MSG SIZE rcvd: 68
nslookup ns1.kifarunix-demo.com
Server: 192.168.57.3
Address: 192.168.57.3#53
Name: ns1.kifarunix-demo.com
Address: 192.168.57.3
host ns1.kifarunix-demo.com
ns1.kifarunix-demo.com has address 192.168.57.3
验证客户端反向DNS解析
dig -x 192.168.57.3 +short
ns1.kifarunix-demo.com.
nslookup 192.168.57.3
3.57.168.192.in-addr.arpa name = ns1.kifarunix-demo.com.
host 192.168.57.3
3.57.168.192.in-addr.arpa domain name pointer ns1.kifarunix-demo.com.
美丽。在下一个指南中,我们将学习如何使用称为PowerDNS Admin的Web工具来管理PowerDNS。现在,这就是安装和设置PowerDNS的过程如此简单
参考
。