![PowerDNS 区域转发](https://linux22.com/image/776247/PowerDNS%20%E5%8C%BA%E5%9F%9F%E8%BD%AC%E5%8F%91.png)
我继承了一个 4.0.6 powerdns 部署,用于在实验室环境中为私有区域提供服务。我正在将此环境迁移到 AWS,需要 powerdns 将 aws.internal.lan 转发到一组 Route53 入站解析器。似乎我应该能够通过在递归器中使用“forward-zones-recurse”来做到这一点,但我似乎无法让它与当前设置一起工作。
pdns.conf:
daemon=no
max-tcp-connections=1000
guardian=no
setuid=pdns
setgid=pdns
launch=gpgsql
allow-recursion=127.0.0.0/8, 10.0.0.0/8
recursor=127.0.0.1:5353
local-address=0.0.0.0
local-port=53
master=no
slave=yes
slave-cycle-interval=60
gpgsql-host=127.0.0.1
gpgsql-dbname=pdns
gpgsql-user=redacted
gpgsql-password=redacted
api-key=redacted
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
递归器.conf:
setuid=pdns-recursor
setgid=pdns-recursor
allow-from=127.0.0.0/8
local-address=127.0.0.1
local-port=5353
forward-zones-recurse=aws.internal.lan=10.162.67.202;10.162.73.199
问题是 pdns 不会将区域转发到 Route53 解析器。我可以确认,如果我执行 a,dig @127.0.0.1 -p 5353 aws.internal.lan
递归器会返回正确的记录,但我只能从本地 ns 服务器查询递归器。监听端口 53 的权威服务器不应该将该请求转发到监听端口 5353 的递归器吗?
看起来这应该可以正常工作,但也许我遗漏了一些东西。正如您从我的配置中看到的那样,我正在使用旧版本的 pdns,并且我似乎找不到有关此旧版本的任何文档。知道我在这里做错了什么吗?
答案1
您误解了事物的运作方式。
解析器不会将请求转发给递归器,或者转发到任何地方。另一方面,递归器应配置为将解析器管理的区域的请求转发给递归器。
客户端查询应始终进入递归器,然后递归器将本地区域转发到解析器并适当解析其他区域。“递归器”设置在解析器上不起作用
在递归器上,你需要进行如下设置
forward-zones=ponyville.eq.=127.0.0.1:5353
将请求转发到解析器(位于端口 5353 上,递归器位于端口 53 上)
还有一个问题,如果您有辅助服务器,解析器会尝试根据 NS 记录发送 NOTIFY 数据包。如果您的解析器在端口 5353 上,那么这些通知数据包会进入递归器,您需要一些特殊配置(太复杂了,无法在此说明)才能将这些数据包转发到解析器。我们通过在主机上设置 2 个 IP 地址并在一个 IP 地址上设置解析器,在另一个 IP 地址上设置递归器来解决这个问题,因此无需在同一个主机名上使用不同的端口。
总而言之,
- pdns 不会将请求转发到任何地方
- pdns-recusor 将根据您的设置转发您的 route53 请求
- 应配置 pdns-recursor 以将您的本地区域转发到解析器
- 所有客户端请求都应进入解析器
- 如果你想要这个,你将需要很多额外的魔法来处理 NOTIFY 数据包