我有一个双栈 (V4+V6) 内部网络,其中 dnsmasq 提供 DNS、DHCP 和 DHCPv6 服务。我希望在大多数内部主机到主机通信中使用 ipv4,因此我不希望 dnsmasq 发布 AAAA 记录,因为许多 TCP/IP 实现通常都首选它。
目前,dnsmasq 一旦通过 DHCP 提供 IPv4 地址(这是可以的),就会从主机名生成 A 记录,并且通过 DHCPv6 提供 IPv6 地址的 AAAA 记录(我想避免这种情况)。
我的 dnsmasq 配置很长,但相关部分是:
# Add local domain and expand
local=/lan/
domain=lan
expand-hosts
# Enable RADV
enable-ra
# DHCP range for v4
dhcp-range=set:internal,172.10.1.100,172.10.1.199,255.255.255.0,24h
# DHCP range for v6
dhcp-range=::100,::999,constructor:lan1.4
# One of my fixed hosts
dhcp-host=<mac_address_redacted>,172.10.1.250,24h # triton
接口 lan1.4 在 DNS/DHCP 服务器上具有正确的 ipv4 和 ipv6 地址,并且所有内部主机都获得正确的 v4 和 v6 ips。但是,一旦我获得一个地址,例如 host triton
,我就会获得由 dnsmasq 添加的以下 DNS 记录:
triton.lan has address <redacted> <-- I want this
triton.lan has IPv6 address <redacted> <-- I don't want this
(我已用上面的内容替换了真实地址<redacted>
)。
我对 ipv6 的指令进行了各种修改dhcp-range
,但都没有成功。我没有使用ra-names
该行中的模式dhcp-range
,因此我没想到 dnsmasq 会生成 AAAA 名称。dnsmasq 手册页显示:
ra-names 启用一种模式,该模式将 DNS 名称提供给执行 IPv6 SLAAC 的双栈主机。Dnsmasq 使用主机的 IPv4 租约来派生名称、网络段和 MAC 地址,并假设主机还将在同一网络段上使用 SLAAC 算法计算出 IPv6 地址。将 ping 该地址,如果收到回复,则会将 AAAA 记录添加到此 IPv6 地址的 DNS。请注意,这仅适用于直接连接的网络(而不是通过中继执行 DHCP 的网络),并且如果主机使用隐私扩展,它将不起作用。ra-names 可以与 ra-stateless 和 slaac 结合使用。
我不明白为什么要添加 AAAA 名称以及如何防止这种情况发生。
我曾考虑过完全删除 AAAA 记录,但这也会阻止我的内部 ipv6 主机使用 Internet 上的 ipv6 主机(它们都使用相同的内部 DNS 服务器,然后将外部查询转发到 1.1.1.1)。
欢迎任何想法。