非绑定

主页

由 CoreDNS 维护

启用方式
unbound:github.com/coredns/unbound

unbound - 使用 libunbound 执行递归查询。

说明

通过 unbound,你可以执行递归查询。Unbound 在解析时默认使用 DNSSEC,并且将这些记录(DNSKEY、RRSIG、NSEC 和 NSEC3)返回给客户端。如果客户端没有提出请求,unbound 插件将移除这些记录。Unbound 的内部 (RR) 答案缓存已禁用,因此你可能需要使用 cache 插件。

Libunbound 可以通过(部分)选项进行配置,目前已按默认设置以下选项

  • msg-cache-size,设置为 0
  • rrset-cache-size,设置为 0

此插件每块服务器块只能使用一次。

语法

unbound [FROM]
  • FROM 是要匹配的请求的基本域名,以便解析。如果未指定,将使用服务器块中的区域。

更多利用扩展语法实现的功能

unbound [FROM] {
    except IGNORED_NAMES...
    option NAME VALUE
}
  • FROM 如上。
  • IGNORED_NAMES 中的 except 是一个用空格分隔的排除在解析之外的域列表。
  • option 允许设置 一些 unbound 选项(参见 unbound.conf(5)),可以多次指定。

指标

如果启用监控(通过 prometheus 指令),则导出以下指标

  • coredns_unbound_request_duration_seconds{server} - 每个查询的持续时间。
  • coredns_unbound_response_rcode_count_total{server, rcode} - RCODE 的计数。

server 标签表示处理请求的服务器,有关详细信息,请参见指标插件。

示例

解析所有域的查询

. {
    unbound
}

解析 example.org 中的所有查询。

. {
    unbound example.org
}

example.org {
    unbound
}

解析除 example.org(或以下)之外的所有查询

. {
    unbound {
        except example.org
    }
}

通过设置选项启用 DNS 查询名称最小化

. {
    unbound {
        option qname-minimisation yes
    }
}

漏洞

unbound 插件依赖于 libunbound(3),这是一个 C 库,编译此库需要依赖 C 和 cgo。无法完全静态编译 CoreDNS。对于编译,还需要安装 libunbound 源代码(在 Debian 上为 libunbound-dev)。

尚不支持 DNSSEC 验证。也没有配置信任锚点(已记录)的方法。

另请参阅

有关 Unbound 和 unbound.conf(5) 的信息,请参阅 https://unbound.net。有关 libunbound 的(cgo)Go 封装,请参阅 https://github.com/miekg/unbound