PowerDNS作为内部解析器与封闭递归器的配置问题
排查PowerDNS递归器仅允许本地IP访问的异常问题
结合你描述的两台主从PowerDNS服务器架构(权威服务绑5300,递归器绑53),能正常解析内外域名但本地IP访问受限异常,我从几个核心配置方向给你梳理排查步骤:
1. 检查递归器(pdns-recursor)的访问控制配置
这是最可能出问题的环节,重点看recursor.conf里的两个关键参数:
allow-from:这个参数明确允许哪些IP/网段可以发起递归查询。如果你要限制仅本地IP访问,需要填写完整的本地网段,比如:
别只写单个IP,否则同网段其他本地机器会被拒绝;也别写错网段掩码,比如把allow-from=127.0.0.0/8,192.168.1.0/24 # 替换成你的服务器本地LAN网段/24写成/32就会导致只有单个IP能访问。local-address:确保递归器监听的地址包含你要开放的本地IP。如果设成127.0.0.1,那只有服务器本机的回环IP能访问,其他本地LAN IP会连不上。建议设成服务器的所有本地IP,或者直接0.0.0.0,然后通过allow-from做访问限制:local-address=0.0.0.0- 配置修改后,先检查语法正确性:
没问题的话重启递归器服务:pdns_recursor --config-checksystemctl restart pdns-recursor
2. 确认权威服务器(pdns)的相关限制
虽然你主要用递归器做解析,但如果有本地IP直接访问5300端口查询权威域名的场景,需要检查pdns.conf的配置:
allow-recursion:权威服务默认不允许递归查询,但如果本地IP需要直接从权威服务查内部域名,要添加允许的网段:allow-recursion=127.0.0.0/8,192.168.1.0/24local-address:确保权威服务绑定的IP能被本地IP访问,比如设成服务器的LAN IP或者0.0.0.0。
3. 排查防火墙/网络规则
很多时候配置没问题,但防火墙把本地IP的请求拦截了:
- 如果用
iptables,要确保允许本地网段访问53端口(UDP和TCP都要,因为DNS会用TCP做长查询):# 允许回环IP访问 iptables -A INPUT -p udp --dport 53 -s 127.0.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -s 127.0.0.0/8 -j ACCEPT # 允许本地LAN网段访问 iptables -A INPUT -p udp --dport 53 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -s 192.168.1.0/24 -j ACCEPT # 拒绝其他所有IP的DNS请求 iptables -A INPUT -p udp --dport 53 -j DROP iptables -A INPUT -p tcp --dport 53 -j DROP - 如果用
firewalld,可以添加富规则:firewall-cmd --add-rich-rule='rule family="ipv4" source address="127.0.0.0/8" port port="53" protocol="udp" accept' --permanent firewall-cmd --add-rich-rule='rule family="ipv4" source address="127.0.0.0/8" port port="53" protocol="tcp" accept' --permanent firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="53" protocol="udp" accept' --permanent firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="53" protocol="tcp" accept' --permanent firewall-cmd --reload
4. 测试与日志排查
- 用
dig工具从本地IP测试解析:# 服务器本机测试 dig @127.0.0.1 google.com # 同网段本地机器测试(替换成你的服务器IP) dig @1.2.3.4 你的内部域名 - 实时查看递归器日志,找拒绝访问的线索:
如果看到类似journalctl -u pdns-recursor -fdenied access from X.X.X.X的日志,说明allow-from配置漏了这个IP/网段,直接补上即可。
如果以上步骤还没解决问题,可以把recursor.conf、pdns.conf里的关键配置片段,以及防火墙规则贴出来,我再帮你精准定位。
内容的提问来源于stack exchange,提问作者user3125731
相关产品推荐
相关产品推荐

