PowerDNS

出自 ArchWiki

PowerDNS 是一个 DNS 服务器,使用 C++ 编写,并以 GPL 许可授权。PowerDNS 具有大量不同的后端,范围从简单的 BIND 风格区域文件到关系数据库和负载均衡/故障转移算法。

安装

安装 powerdns 软件包。

接下来您可以查看位于 /etc/powerdns/pdns.conf 的配置文件。

后端

要配置 PowerDNS 使用特定后端,您需要在配置文件中设置 launch 选项。此外,根据您使用的特定后端,您将必须对其进行配置。

对于 PostgreSQLMySQLSQLite,您可以在 /usr/share/doc/powerdns 找到数据库表创建 SQL 文件。

PostgreSQL 后端

首先,您需要创建一个用户和数据库,PowerDNS 可以在其中存储数据。

然后执行 "schema.pgsql.sql" 文件来创建表。

psql -U <user> -d <database name> -a -f /usr/share/doc/powerdns/schema.pgsql.sql

最后更新配置文件

launch=gpgsql
gpgsql-host=/run/postgresql # if PostgreSQL is listening to unix socket
# gpgsql-host=127.0.0.1
# gpgsql-port=5432
gpgsql-dbname=<database name>
gpgsql-user=<user to use>
gpgsql-password=

MySQL 后端

安装并运行 MySQL 服务器。创建一个新用户和一个新数据库,并将 schema 导入到数据库中

mysql -u root -p pdns < /usr/share/doc/powerdns/schema.mysql.sql

然后,配置 PowerDNS 以使用 MySQL

/etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=127.0.0.1
gmysql-socket=/run/mysqld/mysqld.sock
gmysql-user=pdns
gmysql-password=Pa$$w0rd
gmysql-dbname=pdns
# Add this for dnssec support
# gmysql-dnssec=yes

您也可以使用 localhost 而不是 127.0.0.1,但这会导致 PowerDNS 使用套接字文件。由于 PowerDNS 默认在 chroot 中运行,因此套接字文件不可用。

SQLite 后端

配置 PowerDNS 以使用 sqlite

/etc/powerdns/pdns.conf
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3

创建数据库

# mkdir /var/lib/powerdns
# sqlite3 /var/lib/powerdns/pdns.sqlite3 < /usr/share/doc/powerdns/schema.sqlite3.sql
# chown -R powerdns:powerdns /var/lib/powerdns

启动

启动/启用 pdns.service

技巧与诀窍

绑定地址和/或端口

默认的 /etc/powerdns/pdns.conf 绑定到 0.0.0.0:53 (所有 IP 地址)。这将与绑定到端口 53 的任何其他进程冲突,例如 systemd-resolved 使用 127.0.0.53:53。这将导致错误

Unable to bind UDP socket to '0.0.0.0:53': Address already in use

这可以通过多种方式解决,例如更改 local-addresslocal-port 选项中的任一个或两个

/etc/powerdns/pdns.conf
local-address=127.0.0.1:5300

参见