example.com
我维护一个包含子域名的域名a.example.com
。公共 DNS 服务器a.example.com
配置了一条CNAME foo.example.com
记录,该记录又指向 AWS。在我的 LAN 之外,这一切都按预期运行。
对于双栈 LAN,我尝试设置 dnsmasq,以便在 LAN 内a.example.com
解析为本地 IPv4 地址,而不是来自公共 DNS 的 CNAME 记录。我的 dnsmasq 配置为:
dhcp-range=10.10.10.1,10.10.10.254,24h
dhcp-option=option:router,10.10.0.1
dhcp-option=option:dns-server,10.10.0.1
dhcp-option=option:netmask,255.255.0.0
local=/lan/
domain=lan
no-resolv
server=8.8.8.8
server=4.4.4.4
dhcp-hostsfile=/opt/services/dnsmasq/lan/etc/dhcp-hosts.txt
我在运行 dnsmasq 的机器上的 /etc/hosts 中添加了以下几行:
10.10.100.100 a.example.com
2603:******** a.example.com
然而,局域网上的客户端在查询AAAA
记录时a.example.com
仍然会获得将它们带出局域网的 CNAME 记录。
> nslookup -debug a.example.com 10.10.0.1
Server: 10.10.0.1
Address: 10.10.0.1#53
------------
QUESTIONS:
a.example.com, type = A, class = IN
ANSWERS:
-> a.example.com
internet address = 10.10.100.100
ttl = 0
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------
Name: a.example.com
Address: 10.10.100.100
------------
QUESTIONS:
a.example.com, type = AAAA, class = IN
ANSWERS:
-> foo.example.com
canonical name = foo.example.com.
ttl = 300
-> foo.example.com
canonical name = ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com.
ttl = 300
AUTHORITY RECORDS:
-> us-west-2.compute.amazonaws.com
origin = dns-external-master.amazon.com
mail addr = root.amazon.com
serial = 119290
refresh = 600
retry = 120
expire = 604800
minimum = 900
ttl = 900
ADDITIONAL RECORDS:
------------
a.example.com canonical name = foo.example.com.
foo.example.com canonical name = ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com.
dnsmasq 似乎并不关心/etc/hosts
文件中的 IPv6 记录,仍然将请求转发到上游,获取 CNAME 答案并将其返回给客户端。
有没有办法解决这个问题并完全抑制来自上游服务器的响应a.example.com
?
答案1
事实证明这是我犯的一个愚蠢的错误。
我认为在配置更改后重新启动 dnsmasq 的脚本实际上并没有重新启动它,所以我将 IPv6 条目添加到 /etc/hosts 没有任何效果。
dnsmasq 重新启动后,/etc/hosts 中的 AAAA 记录将按预期返回。
案件结案。