【问题标题】:IPv6 Address AssignmentsIPv6 地址分配
【发布时间】:2013-07-30 16:59:24
【问题描述】:

我刚刚开始使用 IPv6,所以在过去几天里我做了很多阅读。不幸的是,我的一些问题在我的研究中没有得到解答。

我的目标是跟踪分配了哪些地址,以及将它们分配到了哪些接口。根据我的阅读,接口可以通过几种方式获取 IPv6 地址,我在下面的小节中列出了这些方法。我已经强调了到目前为止我发现的内容,并在这些部分中提出了一些问题。如果有人可以对我所学的内容进行任何更正,或者对问题有答案,请这样做。如果有人知道我可以找到更多信息的地方,我不介意自己进行更多研究。

编辑:我发现前缀委派实际上不会导致地址分配。 DHCP 服务器使用它从另一个 DHCP 服务器获取要使用的前缀。


获取IPv6地址的方法有:

  1. 无状态地址自动配置 (SLAAC)
  2. 有状态的 DHCPv6

SLAAC

SLAAC 在小型网络中用于为接口生成 IPv6 地址。它(几乎)不需要任何配置,并且基本上按如下方式工作:

  1. 当接口上线时,客户端将使用其接口 ID 地址和链路本地前缀 (FE80::/10) 生成链路本地 IPv6 地址。
  2. 为验证此地址是否唯一,将向该地址发送邻居请求 (NS) 消息。如果有回复,则该地址正在使用中,无法使用。自动配置被中止,配置应手动进行。 问题 1a:这里真的没有退路吗?
  3. 假设在超时期限结束时没有收到回复,则该地址被认为是唯一的,并将其分配给接口的链路本地地址。

    现在该节点已连接到此链接上的所有其他节点

  4. 节点要么等待接收路由器通告 (RA),要么向所有路由器的多播组发送路由器请求 (RS) 消息。当路由器收到RS 时,它将以RA 响应。 RA 将包含一个前缀。

  5. 节点将生成一个带有前缀及其接口 ID 的全局单播地址。
  6. 类似于创建链接本地地址时,节点将向该地址发送消息以确定它是否唯一。 问题 2:这也是NS 消息吗? 如果有回复,则地址已在使用中,必须手动进行地址分配。 问题 1b:同样,是否有任何自动恢复方法?
  7. 假设在超时时间内没有回复,然后将该地址作为全局 IPv6 地址分配给接口。

问题 3:接口可以有多个地址。事实上,在上述过程结束时,单个接口将有 2 个地址 - 一个本地链路地址和一个全局单播地址。是否可以使用 SLAAC 获取此接口的其他地址?还是必须使用其他方法(例如 DHCPv6)?

有状态的 DHCPv6

节点可以使用上面的步骤 1-3 获得链路本地地址。我相信这是可选的,它可以简单地使用::/128(未指定)作为其在 DHCP 请求中的源地址,直到它被分配一个地址。

有两种获取地址的方法——正常提交和快速提交。 Normal 是 4 条消息交换(SolicitAdvertiseRequestReply),Rapid 是 2 条消息交换(SolicitReply)。当客户端在Solicit 消息中使用Rapid-Commit 选项请求它时,快速提交就完成了。它与 Normal 基本相同,因为它对我的使用没有影响,所以我现在将忽略它。

此外,消息也有可能通过中继进行代理。从中继发送到服务器的消息是RELAY_FORW 消息,从服务器发送到中继的消息是RELAY_REPL 消息。客户端和服务器之间的实际对话完全封装在OPTION_RELAY_MSG 选项中。对于以下内容,我只处理非中继消息。如果消息被转发,那么很容易获得原始消息并且以下仍然成立。

地址分配如下:

  1. 客户端向“所有 DHCP 服务器和中继”多播地址发送 Solicit 消息。此消息的目的是发现本地链路上 DHCP 服务器的身份。
  2. DHCP 服务器以Advertise 消息响应本地多播地址。
  3. 客户端直接向 DHCP 服务器发送一个Request 消息,其中包含表明它想要一个 IP 地址的选项。 问题 4:在我看到的 PCAP 文件中,看起来这条消息仍然发送到多播地址 ff02::1:2。有什么理由不直接将其发送到接收广告的 DHCP 服务器?
  4. DHCP 服务器以包含 IP 地址的 Reply 进行响应。
  5. 客户端应执行类似于 SLAAC 方法中的步骤 6 的重复地址检测。
  6. 节点将此地址分配给接口并可以开始使用它。

这是分配地址的一般方法,但更具体地说,有 3 种方法可以做到这一点:

  1. 非临时地址分配 (IA_NA)
  2. 临时地址分配 (IA_TA)
  3. 前缀委派 (PD)

所有三种方法都是通过在Request 中包含一个选项来完成的,然后由服务器填充并在Reply 中返回。对于前两个,返回一个完整的 IPv6 地址,然后可以将其分配为接口的 IP 地址。对于第三个,返回一个前缀,类似于 SLAAC 方法中的RA。然后将此前缀与接口标识符一起使用以创建完整的全球 IPv6 地址。

问题 5:在我的 pcap 捕获中,我看到 SolicitAdvertise 通常也包含这些选项。这在非快速情况下似乎是多余的,因为Request 和随后的Reply 也必须包含该选项。在Solicit 中包含此选项的目的是什么?在Request 之前,DHCP 服务器在Advertise 中创建IP 地址(或前缀)的目的是什么?

问题 6:RFC 表明可以包含多个 IA_NA(或 IA_TA)选项实例。我假设这意味着该接口将具有多个地址。客户端是否简单地在Request 中包含选项的多个实例以获取多个地址?如果 DHCP 服务器可以提供部分地址,但不能提供全部地址,会发生什么情况?整个Reply 是否表示失败?还是给出一些地址?


发布地址

对于 DHCPv6,可以使用Release 消息释放正在使用的地址。服务器在Reply 中分配的地址可以被客户端使用Decline 消息拒绝而不是被使用。

如果客户端发送ReleaseDecline失败,服务器将继续为客户端保留地址,直到过期。

问题 7:如果客户端无法发送 Release(或 Decline)并重新启动,它将发起新的 DHCP 请求。 DHCP 服务器会返回旧地址吗?或者它会假设这是一个额外 IP 地址的请求并分配一个新地址?

我不确定 SLAAC 或 DHCP PD 创建的地址是如何发布的(如果有的话)。也许这些地址的释放只是在内部完成,外部设备不需要知道该事件。


正如我在开头所说的,我的目标是跟踪所有当前有效的地址分配。我的计划是:

  • 创建一个按地址索引的地图,该地图存储分配给它的客户端 (DUID)。
  • 在收到 DHCPv6 ReplyRequestConfirmRenewRebindSolicitRapid-Commit 时,请执行以下操作:
    • 提取Client-DUID 选项
    • 对于每个IA_NAIA_TA
      • 对于每个IA,设置map[address]=Client-DUID
      • 存储地址的过期时间
  • 在收到DeclineReplyRelease 时,执行以下操作
    • 对于每个IA_NAIA_TA
      • 对于每个IA,设置删除map[address]
  • 地址过期后,将从地图中删除

问题 8:如何检测 SLAAC 生成的地址或 DHCP PD 地址?消息中是否有一些字段可用于重新生成完整的 IP 地址?我已经有了前缀,但接口 ID 未知。

这足以维护分配给客户端的 IP 地址列表吗?

【问题讨论】:

标签: ipv6 dhcp


【解决方案1】:

好的 - 所以我做了更多的研究,现在我有了大部分答案。

首先,更正一下。使用 DHCP 无法通过 PD 获取地址。这就是 DHCP 服务器获取网络前缀以供其托管的 DHCP 客户端使用的方式。还有另一个 DHCP 服务器负责分发这些前缀。因此,PD 作为获取 IP 地址的方法可以忽略。


问题 1a/b:这里真的没有退路吗?

回答:没有自动回退机制。可以实现一个,但它是自定义的。

问题 2:这也是 NS 消息吗?

回答:是的

问题3:接口可以有多个地址。事实上,在上述过程结束时,单个接口将有 2 个地址 - 一个链路本地地址和一个全局单播地址。是否可以使用 SLAAC 获取此接口的其他地址?还是必须使用其他方法(例如 DHCPv6)?

答案:使用 SLAAC 可以生成多个地址。客户端可以使用来自多个路由器的路由器通告,并且每个路由器可以通告多个前缀。主机可以使用每个前缀来创建一个全局单播地址。

问题 8(已修改):如何检测 SLAAC 生成的地址?我可以使用消息中的某些字段来重新生成完整的 IP 地址吗?我已经有了前缀,但是接口ID未知。

答案:检测它们的唯一方法是监听NS 消息。由于这些消息是可选的,因此无法保证检测 SLAAC 生成的地址。


我仍然没有问题 4-7 的答案,但我目前并不太关心它们。

谢谢!!

【讨论】:

    【解决方案2】:

    还有第三种获取IPv6地址的方法,手动配置。

    【讨论】:

    • 是的 - 我在我的帖子中将其称为自动配置失败时的备份方法。我不关心这种情况,因为我的目标是跟踪 IP 地址分配。如果它们是静态进行的,那么分配也可以静态记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2017-06-22
    • 2013-02-22
    • 2018-09-23
    • 2016-10-25
    • 2020-08-24
    相关资源
    最近更新 更多