我有来自 ISP 的路由 /64,并且正在运行 radvd。我的客户端(Linux、Windows)在插入路由器时无需任何额外配置即可正常工作。它们都通过 SLAAC 为自己分配具有 ISP /64 前缀的唯一地址,用于临时和永久(1)地址分配。
我没有运行 DHCPv6,也不打算运行。据我所知这里,除非 SLAAC 客户端有特殊配置来使用分配的 DHCP 地址,否则它对 SLAAC 客户端来说毫无用处,因为它们很可能会默认忽略它(2),这很好,而且无论如何都是首选。我绝对不想在插入网络的“库存”客户端机器上做任何工作。
那么,上面的第 (1) 点:客户端使用的 SLAAC IPv6 地址并不是真正永久的。将这些地址放入 DNS AAAA 记录的 Bind 中有效……一段时间。这是我的问题的关键。
我无法弄清楚如何让 DNS 服务器根据 SLAAC IP 填充其记录。
问题:
1) radvd 是否可以在 RA 上运行脚本,然后将其执行至步骤 2......
2) 我从上一步得知,我有一个新的 FE80 地址用于新客户端。如何获取该客户端使用其 FE80 地址为自己分配的全局 IPv6 地址?
3) 然后,我想使用在步骤2中获得的全局 IPv6 地址来更新绑定 DNS 记录。
我试图完成的上述事情似乎应该贴满整个互联网——我正在努力弄清楚我做错了什么,导致我的用例如此罕见。 是否已经有一种机制可以自动完成我所缺少的这一任务(请记住 DHCPv6 是不可能的)?
问候和感谢
(2) SLAAC Ubuntu 客户端绝对会忽略 DHCPv6 分配,即使 radvd 告诉他们。事实上,Ubuntu(可能还有其他)在这种配置中使用时甚至有一个旧错误,它实际上不会添加路由,因此如果没有一些手动干预,连接将变得毫无用处。我认为这个错误的优先级非常低,因为 DHCPv6 与 radvd 结合使用并不是真正推荐的解决方案,我对此完全没意见。
答案1
Radvd 发送包含网络信息的多播消息,但客户端不会回复他们如何处理这些信息。因此 (1) 不起作用。
链路本地地址(这些fe80:
地址)与客户端使用的全局单播地址无关。因此,步骤 (2) 也不可能实现。
对于您想要做的事情,常见的解决方案是:
- 同时使用 SLAAC 和 DHCPv6。DHCPv6 服务器将基于 DHCPv6 的地址放入 DNS 中,用于与客户端的连接,而 SLAAC 地址不会放入 DNS 中,以维护来自客户端的出站连接的隐私。
- 使用不带 SLAAC 的 DHCPv6(关闭
A
RA 中的标志)并让 DHCPv6 服务器将地址放入 DNS。但是,基于 Android 的设备无法在这样的环境中工作,所以这不是一个好主意。 - 使用 SLAAC 并让客户端将自己的地址放入 DNS。在托管环境中(我记得很久以前的 Win2k 和 Win2k3 时代),这可以自动配置。
除此之外,您还可以在设备上编写脚本,这样您就可以看到网络上使用的 MAC 地址和 IPv6 地址,例如交换机和默认网关路由器。您可以编写一个脚本来监控正在使用的 IPv6 地址,查看 MAC 地址以确定它是哪个物理设备,在数据库中查找该设备的主机名,然后根据该主机名更新 DNS。不过,我认为没有标准软件可以为您做到这一点。