You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerDNS作为内部解析器与封闭递归器的配置问题

排查PowerDNS递归器仅允许本地IP访问的异常问题

结合你描述的两台主从PowerDNS服务器架构(权威服务绑5300,递归器绑53),能正常解析内外域名但本地IP访问受限异常,我从几个核心配置方向给你梳理排查步骤:

1. 检查递归器(pdns-recursor)的访问控制配置

这是最可能出问题的环节,重点看recursor.conf里的两个关键参数:

  • allow-from:这个参数明确允许哪些IP/网段可以发起递归查询。如果你要限制仅本地IP访问,需要填写完整的本地网段,比如:
    allow-from=127.0.0.0/8,192.168.1.0/24  # 替换成你的服务器本地LAN网段
    
    别只写单个IP,否则同网段其他本地机器会被拒绝;也别写错网段掩码,比如把/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-check
    
    没问题的话重启递归器服务:
    systemctl restart pdns-recursor
    

2. 确认权威服务器(pdns)的相关限制

虽然你主要用递归器做解析,但如果有本地IP直接访问5300端口查询权威域名的场景,需要检查pdns.conf的配置:

  • allow-recursion:权威服务默认不允许递归查询,但如果本地IP需要直接从权威服务查内部域名,要添加允许的网段:
    allow-recursion=127.0.0.0/8,192.168.1.0/24
    
  • local-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 -f
    
    如果看到类似denied access from X.X.X.X的日志,说明allow-from配置漏了这个IP/网段,直接补上即可。

如果以上步骤还没解决问题,可以把recursor.conf、pdns.conf里的关键配置片段,以及防火墙规则贴出来,我再帮你精准定位。

内容的提问来源于stack exchange,提问作者user3125731

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:29:11