如何向 dnsmasq 添加 CAA 记录?

如何向 dnsmasq 添加 CAA 记录?

我正在尝试CAA向使用 dnsmasq 的 DNS 服务器添加记录,但没有成功。CAA 帮助站点告诉我使用“--dns-rr=网站名称“-option,但我不知道把它们放在哪里。我尝试将它添加到/etc/dnsmasq.conf,但出现了语法错误。我也尝试在命令行中使用它,但那只是尝试启动 dnsmasq 守护进程本身。

那么,问题是,如何向 dnsmasq 添加 CAA 记录?

答案1

您需要dns-rr在配置文件中或--dns-rr命令行中使用关键字。dns-rr|--dns-rr确实是放置任意 DNS 内容的方式,除了 dnsmasq 所知道的类型之外,例如、、A等。MXPTR

请注意它在手册中的用法:

–dns-rr=<名称>,<RR 编号>,[<十六进制数据>]

返回任意 DNS 资源记录。数字是记录的类型(始终属于 C_IN 类)。记录的值由十六进制数据给出,其格式可以是 01:23:45 或 01 23 45 或 012345 或这些格式的任意混合。

当然,这name是最简单的部分,它通常是您的域名。

因此,您首先需要找到 CAA 记录的“RR 类型编号”。如果您访问DNS RRtypes 上的 IANA 注册,然后搜索 CAA 你将看到它的号码257。所以 257 进入上面的RR-number部分。

至于hex-data您需要获取要发布的内容并将其编码为十六进制数据的部分。许多工具可以帮助您完成此操作。

或者,如果你只是去https://sslmate.com/caa/,在表格中填写完您的所有详细信息后,您将在底部看到它为您完成了所有工作,并为您提供了在 dnsmasq 中需要使用的内容,例如以下示例:

--dns-rr=example.com,257,000569737375653B

答案2

补充 Patrick 的回答,主要是为了阐明如何实际生成必要的 dnsmasq 配置条目,而不依赖第三方服务为您创建它。

如果您想告诉 dnsmasq 提供它本身不支持的某些记录类型,您需要为其提供应放在线路上的准确记录数据。
请注意,DNS 是一种二进制协议,因此 dnsmasq 需要与您所需的记录数据相对应的准确字节序列,而不是您习惯处理的友好文本表示,但 dnsmasq 不知道如何将其解释为线路上发送的实际二进制 DNS 格式。

--dns-rr配置选项需要以下值:

--dns-rr=<name>,<RR-number>,[<hex data>]
返回任意 DNS 资源记录。数字是记录的类型(始终属于 C_IN 类)。记录的值由十六进制数据给出,其格式可以是 01:23:45 或 01 23 45 或 012345 或这些格式的任意混合。

即,你知道姓名(您的域名),并可以简单地查找RR 编号(这记录类型的数字表示再次,dnsmasq 不知道什么CAA是)值,但需要以某种方式生成线路数据格式,并将其编码为十六进制,以便得到一些适合的东西十六进制数据

例子:

example.com. IN CAA 0 issue "letsencrypt.org"

姓名=example.com
RR 编号= 257(这是对应于 CAA
十六进制数据=CAA 规范中描述的二进制格式,然后编码为十六进制字符串

显然,您可以手动完成这项工作(基于规范),但是为了更方便地生成有线格式的数据,如上所述,这里有一个示例 Python 脚本(需要dnspython包,通常使用 进行安装pip):

#!/usr/bin/env python
import dns.rdata
import io
import binascii

name = "example.com"
rclass = dns.rdataclass.IN
rtype = dns.rdatatype.CAA
rdata = '0 issue "letsencrypt.org"'


rd = dns.rdata.from_text(rclass, rtype, rdata)
f = io.BytesIO()
rd.to_wire(f)
wire_data = f.getvalue()
print "dnsmasq option: --dns-rr=" + name + "," + str(rtype) + "," + binascii.hexlify(wire_data)

它输出:

dnsmasq option: --dns-rr=example.com,257,000569737375656c657473656e63727970742e6f7267

答案3

DNSMASQcaa-record在版本中添加了一个选项2.80,于 2018 年 10 月发布(在最初接受的答案之后)。我添加这个答案是因为这仍然是我在 Google 上搜索“dnsmasq caa”的最佳结果。请注意,之前的答案仍然有效,并且对旧版本的 DNSMASQ 很有用!

手动输入caa-record

--caa-record=<name>,<flags>,<tag>,<value>
    Return a CAA DNS record, as specified in RFC6844.

配置文件示例

caa-record=example.com,0,issue,digicert.com

参考

相关内容