PVE 双域控提升失败:iStoreOS IPv6 DNS 与 AD 域解析冲突
PVE 双域控提升失败:iStoreOS IPv6 DNS 与 AD 域解析冲突
在 PVE 中部署第二台 Windows Server 域控制器时,DC2 的 IPv4 DNS 已经明确指向 DC1,AD DS 配置向导仍然提示无法联系域。显式向 DC1 查询 SRV 记录却完全正常。
最终根因是 iStoreOS/OpenWrt 通过 DHCPv6 和 RA/RDNSS 把路由器自身的 IPv6 地址通告为 DNS。Windows 优先向它查询内部 AD 域,收到有效的 NXDOMAIN 后不再尝试 DC1。
本文中的地址、域名和设备标识均已泛化。
现象与关键对比
环境是一个双栈家庭实验网络:
运营商 IPv6-PD
↓
iStoreOS / OpenWrt(DHCPv4、DHCPv6、RA/RDNSS)
↓
PVE
├─ DC1:首台域控 + AD DNS
└─ DC2:准备提升为第二台域控DC2 的 IPv4 DNS 已设为 DC1,但默认查询显示实际服务器是路由器的公网 IPv6 地址:
nslookup ad.example.internalServer: UnKnown
Address: 2001:db8:100::1
*** UnKnown can't find ad.example.internal: Non-existent domain显式指定 DC1 则正常:
nslookup ad.example.internal 192.168.100.11
Resolve-DnsName _ldap._tcp.dc._msdcs.ad.example.internal \
-Type SRV -Server 192.168.100.11这组对比证明 AD DNS 区域和 Netlogon 注册记录没有损坏,问题发生在客户端选择 DNS 服务器的环节。
找到 IPv6 DNS 的来源
先在 DC2 查看两个地址族的 DNS:
Get-DnsClientServerAddress -InterfaceAlias "Ethernet"
ipconfig /all随后在路由器上确认 br-lan:
ip -6 addr show dev br-lan
uci show dhcp.lan当 LAN 配置为 RA Server 和 DHCPv6 Server,且没有显式覆盖 DNS 通告时,odhcpd 可能把接口自身的 IPv6 地址作为 DNS 发布给客户端。路由器只知道公网 DNS,不保存内部 AD 区域,所以查询内部域得到 NXDOMAIN 是合理行为。
这里的重点是:NXDOMAIN 是一条成功到达 DNS 服务器后的否定回答,不是超时。客户端没有理由把它当成“这台 DNS 挂了”并继续尝试另一台服务器。
Server: UnKnown 只表示该 DNS 地址没有可用的 PTR 反向记录,不是根因。
为什么只改 Windows 没用
下面的命令主要设置静态 DNS,但无法消除路由器持续发送的动态 RA/RDNSS 信息:
Set-DnsClientServerAddress \
-InterfaceAlias "Ethernet" \
-ServerAddresses @("192.168.100.11")即使临时删除 IPv6 DNS,下一次 RA 或 DHCPv6 更新仍可能把它加回来。应当修正通告源,而不是在每台 Windows 客户端反复清理结果。
最小变更:停止发布路由器 IPv6 DNS
本环境的客户端都保留 IPv4,并能通过 IPv4 DNS 查询 AAAA 记录,因此选择停止 LAN 下发 IPv6 DNS,同时保留 IPv6 地址、SLAAC、DHCPv6、RA 和默认路由。
修改前先保存配置并确认没有未提交变更:
cp /etc/config/dhcp /tmp/dhcp.before-ipv6-dns-change
uci changes dhcp
/etc/init.d/odhcpd status
uci export dhcp >/dev/null || exit 10只增加两个选项:
uci set dhcp.lan.dns_service='0'
uci set dhcp.lan.ra_dns='0'
uci changes dhcp
uci export dhcp >/dev/null || exit 10
uci commit dhcp
/etc/init.d/odhcpd restart部分 iStoreOS 精简版 uci 没有 validate 子命令,使用 uci export ... >/dev/null 可以完成基本解析检查。
修改后确认关键 IPv6 能力没有被误关:
/etc/init.d/odhcpd status
ip -6 addr show dev br-lan
ip -6 route show default
nslookup -type=AAAA ipv6.google.com 127.0.0.1
logread -e odhcpd | tail -30刷新 Windows 并验证 AD
DC2 尚未承担生产角色,可以重启以清除已有的 DHCPv6 租约和 RDNSS 生命周期:
Restart-Computer重启后验证:
Get-DnsClientServerAddress -InterfaceAlias "Ethernet"
Resolve-DnsName _ldap._tcp.dc._msdcs.ad.example.internal -Type SRV
nltest /dsgetdc:ad.example.internal唯一现有域控不要为了清缓存随意重启。可以先尝试:
ipconfig /release6 "Ethernet"
ipconfig /renew6 "Ethernet"
Clear-DnsClientCache待第二台域控提升成功,并完成 AD、DNS 与 SYSVOL 复制验证后,再安排必要维护。
停止 IPv6 DNS 不等于关闭 IPv6
DNS 查询通过 IPv4 发送,同样可以请求 AAAA 记录,然后通过 IPv6 访问目标:
客户端 --IPv4--> DNS
<--AAAA--- DNS
客户端 --IPv6--> 目标网站因此这项变更不影响双栈客户端访问 IPv6 网站。只有完全没有 IPv4、也无法访问任何 IPv4 DNS 的 IPv6-only 客户端需要另行设计。
回滚
可以恢复备份,或删除新增的 UCI 项:
uci -q delete dhcp.lan.dns_service
uci -q delete dhcp.lan.ra_dns
uci commit dhcp
/etc/init.d/odhcpd restart长期更完整的方案是给 AD 网络规划稳定 ULA,为两台 DC 分配 ULA DNS 地址,并把域设备与普通家庭设备拆到不同 VLAN。域成员只应使用 AD DNS;公网解析应由 AD DNS 转发器完成,不应把公共 DNS 当作备用服务器。
总结
这次故障不是“IPv6 与 AD 不兼容”,而是双栈环境中错误 DNS 被动态通告:
路由器发布自身 IPv6 DNS
↓
Windows 查询内部 AD 域
↓
路由器返回 NXDOMAIN
↓
DC2 无法发现域控排障时不要只看静态 IPv4 DNS;必须同时检查 IPv6 DNS、RA/RDNSS 来源以及默认查询实际命中了哪台服务器。
