在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的过程如此简单

    参考

    PowerDNS权威名称服务器文档ñ

    Sidebar