我正在尝试CAA
向使用 dnsmasq 的 DNS 服务器添加记录,但没有成功。CAA 帮助站点告诉我使用“--dns-rr=网站名称“-option,但我不知道把它们放在哪里。我尝试将它添加到/etc/dnsmasq.con
f,但出现了语法错误。我也尝试在命令行中使用它,但那只是尝试启动 dnsmasq 守护进程本身。
那么,问题是,如何向 dnsmasq 添加 CAA 记录?
答案1
您需要dns-rr
在配置文件中或--dns-rr
命令行中使用关键字。dns-rr|--dns-rr
确实是放置任意 DNS 内容的方式,除了 dnsmasq 所知道的类型之外,例如、、A
等。MX
PTR
请注意它在手册中的用法:
–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
参考