DAD 和链接本地地址

网络工程 ipv6
2021-07-29 04:38:09

我是ipv6的新手,现在遇到一个问题,ipv6策略是自动配置时,是否需要在Link本地地址上进行DAD?

我的问题是,既然链路本地地址是从 MAC 创建的,为什么需要 DAD?还是有必要?我可以关闭链接本地地址上的 DAD 吗?

我一直在规范中寻找这个答案很长时间,但我仍然找不到答案。

有人可以具体解释一下吗

非常感谢你。

2个回答

你想通过转动 DAD 来完成什么?

RFC4862 秒,5.4

在将所有单播地址分配给接口之前,必须对所有单播地址执行重复地址检测,无论它们是通过无状态自动配置、DHCPv6 还是手动配置获得的,以下情况除外:[...]

MAC 地址应该是唯一的,但有时并非如此。想想克隆的虚拟机、供应商重复使用前缀或带有伪造地址的廉价东西。一位前同事曾经买了几个非常便宜的 4 端口 NIC。所有接口都具有相同的 MAC。

首先,这个问题基于一个错误的前提,即链路本地地址总是基于 MAC 地址。事实上,没有非过时的 RFC 说明这一点,甚至更多的 RFC 8064(不可否认是最近的)明确建议反对这种做法,至少在自动配置环境中是这样。

为什么很多实现都这样做?因为基于 MAC 的 EUI64 是早期定义的并且实际上是推荐的,所以请参阅现已过时的 RFC2373(已被 RFC 4862 降级为“可能”)。此外,对于许多非主机系统来说,它仍然是一个可行的选择。

当 [...] MAC 地址可用(在接口或节点上)时,实现应使用它们 [...] 来创建接口标识符

所以现在对于你的实际问题

为什么需要爸爸?

因为根据上述接口标识符可以基于“任何”。我实际上知道多个问题(我在大型 IP 网关上工作):

  • 我见过几个硬编码的接口标识符(例如,简单地使用 ::1)
  • 有多种便宜的设备可以在任何地方使用相同的 MAC。或者更糟的是,重复使用 MAC 范围。对于 VM,情况变得更糟。
  • 我还遇到过使用随机接口标识符的(旧)实现,但在某些时候随机生成器被窃听,导致非常差的熵(据我所知已修复)。

还是有必要?我可以关闭链接本地地址上的 DAD 吗?

这些组合在一起:是的,您可以将其关闭,RFC 4862 通过允许DupAddrDetectTransmits将其设置为0. 并非所有实现都允许这样做,通常它会被很好地隐藏起来。通常,这些东西并不适用于最终用户(甚至是高级用户),而是适用于 DAD 根本没有意义的非常特定的用例。例如,PPP IPv6CP 允许禁用 DAD,因为它是一个点对点链路,另一端在链路设置期间告诉您它的接口标识符。其他情况可能是非常低能耗的设备,即使是父亲传输的成本也可能远远超过处理实际重复项的风险。

更好的问题是“我应该关闭它吗?” 答案是“如果您必须问:否”,您就知道何时处于上述用例中。如果您禁用 DAD 并且您的网络中有重复项,您将很难调试它。如果你保持启用它,操作系统要么会给你一个明显的错误,要么任何实现 RFC 7217 的现代操作系统都会再试一次,直到它有一个不冲突的地址。