使用PowerDNS Recursor自建支持EDNS的递归解析器
以Debian12系统安装最新版本为例,首先创建”/etc/apt/sources.list.d/pdns.list”文件,文件内容如下:
deb [signed-by=/etc/apt/keyrings/rec-52-pub.asc] http://repo.powerdns.com/debian bookworm-rec-52 main
再创建”/etc/apt/preferences.d/rec-52″文件,填写如下内容:
Package: rec*
Pin: origin repo.powerdns.com
Pin-Priority: 600
执行下面的命令来安装PowerDNS Recursor
install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc | tee /etc/apt/keyrings/rec-52-pub.asc
apt update && apt install pdns-recursor
编辑配置文件”/etc/powerdns/recursor.conf”,配置文件使用YAML语法
dnssec:
validation: process
ecs:
cache_limit_ttl: 60
ipv4_bits: 24
ipv4_cache_bits: 24
ipv4_never_cache: false
ipv6_bits: 56
ipv6_cache_bits: 56
ipv6_never_cache: false
minimum_ttl_override: 90
incoming:
listen:
- 0.0.0.0
udp_truncation_threshold: 1232
use_incoming_edns_subnet: true
edns_padding_mode: always
logging:
loglevel: 3
quiet: true
outgoing:
edns_bufsize: 1232
edns_subnet_allow_list:
- 0.0.0.0/0
- ::/0
network_timeout: 300
source_address:
- 0.0.0.0
recordcache:
max_entries: 1000000
max_negative_ttl: 3600
max_ttl: 86400
refresh_on_ttl_perc: 50
serve_stale_extensions: 5
recursor:
config_dir: /etc/powerdns
hint_file: /usr/share/dns/root.hints
include_dir: /etc/powerdns/recursor.d
public_suffix_list_file: /usr/share/publicsuffix/public_suffix_list.dat
配置文件保存以后重启PowerDNS Recursor使配置生效
systemctl restart pdns-recursor.service
到这里基本可以正常使用了,如果重启服务失败了,先检查一下53端口是否被其它程序占用,还有因为IPv6的问题可能会导致无法访问部分权威服务器,查询超时会回退IPv4,造成查询时间过长,不管是否有能够访问公网的IPv6地址,都可能遇见这种情况,即使本机器网卡只显示拥有fe80::开头的本地链路地址,也会导致PowerDNS Recursor尝试使用IPv6查询,建议禁用IPv6。
编辑”/etc/sysctl.conf”文件,修改或添加以下内容:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
然后执行sysctl -p使修改生效,到这里就可以使用了,不过需要注意一点,有些权威服务器会根据递归解析器本身的IP来响应请求,会忽略请求中携带的ECS信息。