如果多个非路由器设备在同一个网络中发送具有相同前缀的 IPv6 RA,可以吗?

网络工程 路由器 IPv6 icmpv6
2022-02-28 03:14:53

我们设计嵌入式系统(电子和软件),使用 LWIP(网络堆栈)运行我们自己的操作系统。设备配置为仅 IPv6(意味着:没有可用的 IPv4)。这些嵌入式系统运行一个网络服务器。浏览器必须能够打开它们提供的网页。不幸的是,Chrome、Firefox 和其他不支持将本地 IPv6 地址链接为 URL(参见例如MozillaW3C)。

我们的嵌入式系统将连接到现有的网络基础设施(以太网)。今天,我们的大多数客户网络都没有正确的 IPv6 设置。也就是说,没有可用的 IPv6 路由器,因此,我们的嵌入式系统和客户计算机(Windows、Linux 等)将只有一个“链接本地地址”(LLA)。如上所述,大多数浏览器都无法使用 LLA。

为了解决这个问题,我们能想到的最佳解决方案是“宣传”一个前缀,让所有计算机和我们的嵌入式系统生成“唯一本地地址”(ULA)。问题是,对于一些(大多数?)客户来说,说服他们的 IT 为 IPv6 重新配置他们的网络并设置他们的路由器在不久的将来宣传这样的前缀并不容易。因此,我们提出了以下想法:让我们的嵌入式系统发送路由器通告 (RA),传播前缀如 FDxx:xxxx:xxxx::xxxx/64。使用该解决方案,同一网络中的所有主机将自动创建 ULA,因此每台计算机的浏览器都将能够连接到我们的嵌入式系统。(注意:这个想法是我们所有的嵌入式系统都传播完全相同的前缀)

你觉得这个主意怎么样?具体来说:

  • 我们的几个嵌入式系统将被添加到同一个网络中,这是一个常见的用例。因此,多个系统会发出具有相同前缀的 RA。到目前为止,谷歌搜索和阅读 RFC,我找不到任何声明是否允许多个“路由器”发送具有相同前缀的 RA。是否允许?这样做是否被认为是“好的”?
  • 我们的嵌入式系统并不是真正的“路由器设备”。事实上,这些是控制电机、执行器和传感器的“自动化设备”。非路由器设备发送 RA 是否“可以”?
  • 另外:我们仅发送 RA 以使网络中的所有主机生成 ULA。我们实际上不希望任何主机将我们的嵌入式系统用作路由器/网关。那样可以么?
3个回答

我认为这是一个非常糟糕的主意。只有路由器应该发送 RA。宣布前缀而不路由它们会破坏事情。

这绝对不是实现目标的方法。只有真正的路由器应该发出 RA,并且交换机应该设置为阻止来自其他来源的 RA。

终端设备应该通过真正的路由器获取它们的全局地址信息或进行静态配置,尽管它们将使用 ND 生成它们自己的链路本地地址,并且,如果它们不被允许使用路由器,那可能就是它们的全部需要,因为它将允许本地链接上的 IPv6 网络。

非路由器不应生成 RA,因为其他设备尝试将它们用作路由器。发送 RA 的非路由器被认为是 DoS 的一种形式。

非路由器不应该发送 RA,但他们可以。如果您说零设备的生命周期不会将其用作默认网关。问题是所有网络上的所有设备都发布一个前缀。不要假设用户只有一个子网,并且用户不想跨不同子网连接到您的设备。

最好的解决方案是使用多播名称解析,例如 mDNS 和 LLMNR。看看https://serverfault.com/questions/352632/name-resolution-in-an-ipv6-network-without-a-dns-server

另一种选择是为您的客户提供一个简单的 IPv6“虚拟路由器”,它会发布一个前缀,每个路由器都会发布一个印在外部的不同 ULA 前缀。它可以通告默认网关生存期为 0,因此它不会成为默认网关。拥有 IPv6 的客户已经可以使用他们自己的前缀,而没有 IPv6 的客户可以使用/购买/等您的虚拟路由器并使用其唯一的 ULA 前缀。