IPv6地址分配

时间:2013-07-30 16:59:25

标签: ipv6 dhcp

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

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

编辑:我发现前缀委派实际上并未导致地址分配。 DHCP服务器使用它来获取要从其他DHCP服务器使用的前缀。


获取IPv6地址的方法是:

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

    SLAAC用于小型网络,为接口生成IPv6地址。它需要(几乎)没有配置,基本上如下工作:

    1. 当接口联机时,客户端将使用其接口ID地址和链接本地前缀(FE80::/10)生成链路本地IPv6地址。
    2. 要验证此地址是唯一的,会向该地址发送Neighbor Solicitation(NS)消息。如果有回复,则该地址正在使用中且无法使用。自动配置中止,配置应手动进行。 问题1a:这里真的没有倒退吗?
    3. 假设在超时时间结束时没有收到回复,则假定该地址是唯一的,并将其指定为接口的链路本地地址。

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

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

    5. 该节点将生成带有前缀及其接口ID的全球单播地址。
    6. 类似于创建链接本地地址时,节点将向该地址发送消息以确定它是否是唯一的。 问题2:这也是NS消息吗? 如果有回复,则地址已在使用中,地址分配必须手动进行。 问题1b:同样,是否有任何自动恢复方式?
    7. 假设超时内没有回复,则该地址将被指定为接口的全局IPv6地址。
    8. 问题3:接口可以有多个地址。实际上,在上述过程结束时,单个接口将具有2个地址 - 链路本地地址和全球单播地址。是否可以使用SLAAC获取此接口的其他地址?或者必须使用其他方法(例如DHCPv6)?

      有状态DHCPv6

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

      有两种获取地址的方法 - 正常和快速提交。普通是4消息交换(SolicitAdvertiseRequestReply),而快速是2消息交换(Solicit,{{1} })。当客户端在Reply消息中使用Rapid-Commit选项请求快速提交时,即可完成快速提交。它基本上与普通相同,因为它对我的使用没有任何影响,我现在暂时忽略它。

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

      地址分配如下:

      1. 客户端向"所有DHCP服务器和中继发送​​OPTION_RELAY_MSG消息"多播地址。此消息的目的是发现本地链路上DHCP服务器的身份。
      2. DHCP服务器以Solicit消息响应本地多播地址。
      3. 客户端直接向DHCP服务器发送Advertise消息,其中包含指示其希望拥有IP地址的选项。 问题4:在我看过的PCAP文件中,看起来此消息仍然发送到多播地址Request。是不是因为没有直接发送到收到广告的DHCP服务器?
      4. DHCP服务器以包含IP地址的ff02::1:2进行响应。
      5. 客户端应执行类似于SLAAC方法中步骤6的重复地址检测。
      6. 节点将此地址分配给接口,并可以开始使用它。
      7. 这是分配地址的一般方法,但更具体地说,有3种方法可以做到这一点:

        1. 非临时地址分配(Reply
        2. 临时地址分配(IA_NA
        3. 前缀授权(IA_TA
        4. 所有这三种方法都是通过在PD中包含一个选项来完成的,该选项随后由服务器填充并在Request中返回。对于前两个,返回完整的IPv6地址,然后可以将其分配为接口的IP地址。对于第三个,返回类似于SLAAC方法中的Reply的前缀。然后,此前缀与接口标识符一起使用,以创建完整的全局IPv6地址。

          问题5:在我的pcap捕获中,我发现RASolicit通常也包含这些选项。这在非快速案例中似乎是多余的,因为Advertise和后续Request也必须包含该选项。在Reply中包含此选项的目的是什么?在Solicit执行此操作之前,DHCP服务器在Advertise中创建IP地址(或前缀)的目的是什么?

          问题6:RFC指出可以包含Request(或IA_NA)选项的多个实例。我认为这意味着接口将具有多个地址。客户端是否只在IA_TA中包含该选项的多个实例以获取多个地址?如果DHCP服务器可以提供一些但不是所有地址会发生什么?整个Request是否表示失败?或者给出了一些地址?


          发布地址

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

          如果客户端无法发送DeclineRelease,服务器将继续保留客户端的地址,直至其过期。

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

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


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

          • 创建一个由地址索引的地图,该地址存储分配给它的客户端(DUID)。
          • 收到DHCPv6 PDReplyRequestConfirmRenewRebind {{1} }}, 请执行下列操作:
            • 提取Solicit选项
            • 每个Rapid-CommitClient-DUID
              • 对于每个IA_NA,请设置IA_TA
              • 存储地址的到期时间
          • 收到IAmap[address]=Client-DUIDDecline后,请执行以下操作
            • 每个ReplyRelease
              • 对于每个IA_NA,请设置删除IA_TA
          • 当地址过期时,它将从地图中删除

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

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

2 个答案:

答案 0 :(得分: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的答案,但我现在不太关心它们。

谢谢!

答案 1 :(得分:0)

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