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

Unbound非递归DNS配置问题:无法拒绝domain.com以外的域名查询

Unbound非递归DNS配置问题:无法拒绝domain.com以外的域名查询

我来帮你解决这个Unbound配置的问题——你想要让它只响应*.domain.com的查询,其他域名直接返回REFUSED,对吧?我看了你的现有配置,问题出在refuse_non_local的规则逻辑和local-zone的设置搭配上,下面给你一步步修正:

问题根源分析

你原来用的access-control: 0.0.0.0/0 refuse_non_local规则,它的作用是拒绝那些不属于本地权威域、转发域或存根域的查询,但Unbound默认会尝试递归解析其他域名(比如gmail.com),所以这条规则并没有直接阻断所有非domain.com的请求。另外,local-zone: "domain.com" transparent的设置会让Unbound优先尝试自己解析该域,和你想要的纯转发逻辑也有冲突。

正确配置方案

我们需要用白名单模式:只允许domain.com及其子域的查询被转发处理,所有其他域名直接返回REFUSED。下面是调整后的完整配置:

server:
    interface: a.b.c.d  # 你的公网IP
    verbosity: 2
    logfile: "unbound.log"
    log-queries: yes
    hide-identity: yes
    hide-version: yes
    # 允许信任的内网/回环客户端访问
    access-control: 127.0.0.1/8 allow
    access-control: 192.168.0.0/24 allow
    # 允许公网客户端连接,但后续通过local-zone限制查询范围
    access-control: 0.0.0.0/0 allow

    # 告诉Unbound不要默认处理domain.com,交给forward-zone转发
    local-zone: "domain.com" nodefault
    # 通配规则:所有其他域名直接返回REFUSED
    local-zone: "." refuse

forward-zone:
    name: "domain.com"
    forward-addr: 192.168.0.1  # 你的本地DNS服务器

配置说明

  1. local-zone: "domain.com" nodefault:这条规则让Unbound放弃对domain.com的默认递归解析逻辑,完全交给下面的forward-zone处理查询请求。
  2. local-zone: "." refuse:这是一个全局通配规则,匹配所有未被前面规则覆盖的域名,直接返回REFUSED响应。Unbound的local-zone是按“最具体优先”的顺序匹配的,所以domain.com的查询不会被这条规则拦截。
  3. 访问控制调整:保留对信任客户端的允许规则,同时允许公网客户端连接——因为我们已经通过local-zone限制了查询范围,不用担心非授权查询。

测试验证

配置修改后重启Unbound,然后用dig命令测试:

  • 查询合法域名:dig @a.b.c.d test.domain.com,应该能返回从192.168.0.1获取的正常解析结果。
  • 查询非法域名:dig @a.b.c.d gmail.com,应该返回类似** server can't find gmail.com: REFUSED的响应。

备注:内容来源于stack exchange,提问作者AAB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:49:38