使用dns rr将DNAME记录添加到dnsmasq配置文件

使用dns rr将DNAME记录添加到dnsmasq配置文件,dns,dnsmasq,Dns,Dnsmasq,我使用我的家庭路由器来管理一些仅本地的DNS记录,并为个人公共域名创建响应。我最近还添加了synth域设置,以使用新的DNS区域生成ip-192-168-0-1.net.home.arpa和vm-1.vm.home.arpa样式的记录(请参阅是否感兴趣) 我想尝试使用a将internal.home.arpa区域委派为现有split horizon公共域区域的别名(这意味着每次查找基本上都是我公共域上同一记录的CNAME),但dnsmasq不明确支持DNAME记录 我的问题是:如何使用创建DNAM

我使用我的家庭路由器来管理一些仅本地的DNS记录,并为个人公共域名创建响应。我最近还添加了synth域设置,以使用新的DNS区域生成ip-192-168-0-1.net.home.arpa和vm-1.vm.home.arpa样式的记录(请参阅是否感兴趣)

我想尝试使用a将internal.home.arpa区域委派为现有split horizon公共域区域的别名(这意味着每次查找基本上都是我公共域上同一记录的CNAME),但dnsmasq不明确支持DNAME记录


我的问题是:如何使用创建DNAME记录?我知道记录类型是39,但我不确定如何生成原始十六进制数据。

修改python脚本发现我能够生成原始十六进制数据:

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

name = "example.home.arpa"
rclass = dns.rdataclass.IN
rtype = dns.rdatatype.DNAME
rdata = 'example.com.'


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).decode("ascii"))
这将导致以下/etc/dnsmasq.d/home.conf设置:

local=/home.arpa/
dns-rr=example.home.arpa,39,076578616d706c6503636f6d00
然而,我认为它并没有像预期的那样工作。我可以看到DNAME响应,但dnsmasq不会使用预期的别名记录响应该区域的其他查询:

$ nslookup -type=any example.home.arpa
Server:     127.0.1.1
Address:    127.0.1.1#53

example.home.arpa   dname = example.com.


$ nslookup -type=a www.example.home.arpa
Server:     127.0.1.1
Address:    127.0.1.1#53

** server can't find www.example.home.arpa: NXDOMAIN


$ nslookup -type=a www.example.com
Server:     127.0.1.1
Address:    127.0.1.1#53

Non-authoritative answer:
Name:   www.example.com
Address: 93.184.216.34
这让我相信dnsmasq目前不支持使用DNAME托管区域。也许下一步我会尝试使用
server=/example.home.arpa/192.168.0.53/
将这些请求转发到另一个DNS服务器,如coredns或bind,看看是否有效


更新:使用服务器=从dnsmasq转发区域,然后使用服务器=似乎有效。但我能告诉你的是,dnsmasq本机不支持DNAME记录。

DNAME意味着DNS服务器的特殊处理,它不仅仅是一个记录。请参见,未使用DNAME的特殊逻辑编程的工具将不会按照RFC的规定处理DNAME,只会像其他任何工具一样传递记录,这是无用的。