PowerDNS
PowerDNS 是一个 DNS 服务器,使用 C++ 编写,并以 GPL 许可授权。PowerDNS 具有大量不同的后端,范围从简单的 BIND 风格区域文件到关系数据库和负载均衡/故障转移算法。
安装
接下来您可以查看位于 /etc/powerdns/pdns.conf
的配置文件。
后端
要配置 PowerDNS 使用特定后端,您需要在配置文件中设置 launch
选项。此外,根据您使用的特定后端,您将必须对其进行配置。
对于 PostgreSQL、MySQL 和 SQLite,您可以在 /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-address
或 local-port
选项中的任一个或两个
/etc/powerdns/pdns.conf
local-address=127.0.0.1:5300