mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  ​路由器是实现 IPv6 地址自动配置的核心。它主要通过 ICMPv6 协议族中的路由器通告(Router Advertisement, RA) 来实现这一魔法。
  ​下面我们深入剖析其工作原理、配置方法和不同模式。

一、核心机制:路由器通告(RA)

  ​RA 是 IPv6 无状态地址自动配置(SLAAC)的基石。路由器会定期或多播地向其所在链路(如一个 VLAN)发送 RA 报文,这些报文中包含了主机自动配置所需的关键信息。

RA 报文中的关键字段:
  1. 网络前缀:例如 2001:db8:1234:1::/64。主机将这个前缀与自行生成的接口标识符结合,形成完整的 IPv6 地址。
  2. 前缀的有效生存期和首选生存期
    • 首选生存期:在此时间内,地址可用于新建连接。
    • 有效生存期:地址的总有效时间。超过有效期的地址将被弃用。
  3. Managed 标志位
    • M 标志:告知主机是否应通过 有状态 DHCPv6 获取 IP 地址。
  4. Other 标志位
    • O 标志:告知主机是否应通过 DHCPv6 获取其他配置信息(如 DNS 服务器地址、域名等)。
  5. 默认路由器信息:包含路由器的链路本地地址,并指明它是否可作为默认网关。
  6. 跳数限制等:提供建议的跳数限制值。

二、三种主要的自动化配置模式(由 M/O 标志位决定)

  ​路由器的 RA 消息通过设置 M 和 O 标志位,来指导客户端采用哪种配置模式。这三种模式是理解 IPv6 自动配置的关键。

模式一:纯无状态地址自动配置(SLAAC)
  • 标志位M=0, O=0
  • 工作流程
    1. 路由器发送 RA,公告网络前缀(如 2001:db8:1234:1::/64),并设置 M=0, O=0
    2. 客户端收到 RA 后,通过 EUI-64 或更常见的隐私扩展算法,自己生成一个 64 位的接口标识符。
    3. 客户端将前缀和接口标识符组合,得到全局 IPv6 地址(如 2001:db8:1234:1:a1b2:c3d4:e5f6:1234/64)。
    4. 客户端执行重复地址检测(DAD),确保地址唯一。
    5. DNS 如何获取? 客户端不会自动获得 DNS 信息。需要通过网络管理员手动配置,或通过如 IPv6 路由公告的 DNS 配置选项(RFC 6106) 来获取(但并非所有系统都支持)。
  • 适用场景:简单网络,或 DNS 通过其他方式(如组策略)下发的环境。
模式二:无状态地址自动配置 + 无状态 DHCPv6(推荐配置)
  • 标志位M=0, O=1
  • 工作流程
    1. 路由器发送 RA,公告网络前缀,并设置 M=0, O=1
    2. 客户端执行与模式一完全相同的 SLAAC 过程,为自己配置 IPv6 地址。
    3. 由于 O=1,客户端同时会启动一个无状态 DHCPv6 客户端进程
    4. 客户端向 DHCPv6 服务器请求其他配置信息,但不请求 IP 地址
    5. DHCPv6 服务器回应,提供 DNS 服务器地址、域名等信息。
  • 优点:结合了 SLAAC 的简单性和 DHCPv6 在管理 DNS 等方面的便利性,是当前最常用、最推荐的配置
  • 适用场景:绝大多数企业网络和家庭网络。
模式三:有状态 DHCPv6
  • 标志位M=1, O=1(有时 O 标志无关紧要,因为 M=1 已强制使用 DHCPv6)
  • 工作流程
    1. 路由器发送 RA,公告网络前缀(有时甚至不公告具体前缀,只告知“这里有路由器”),并设置 M=1
    2. 客户端收到 RA 后,忽略 SLAAC 生成地址的过程(但可能会生成一个链路本地地址)。
    3. 客户端启动一个有状态 DHCPv6 客户端进程
    4. 客户端向 DHCPv6 服务器请求分配一个完整的 IPv6 地址(就像 IPv4 的 DHCP 一样),同时也会获取 DNS 等其它信息。
  • 优点:实现集中化的 IP 地址管理,可以精确知道哪个客户端获得了哪个 IP。
  • 缺点:需要部署和维护 DHCPv6 服务器,失去了 SLAAC 的简洁性。
  • 适用场景:需要严格 IP 地址管理和审计的环境。

实战配置示例(以 Cisco IOS 为例)

  ​假设我们要在接口 GigabitEthernet0/1 上配置模式二(SLAAC+无状态DHCPv6),使用的全局前缀是 2001:db8:1234:1::/64

第 1 步:在路由器上启用 IPv6 单播路由

这是最基础且必须的一步,它开启了路由器的 IPv6 路由和 RA 功能。

Router> enable
Router# configure terminal
Router(config)# ipv6 unicast-routing  ! 启用 IPv6 路由功能
第 2 步:在接口上配置 IPv6 地址并设置 RA

为接口配置一个地址,这个地址通常会成为该链路的网关地址。

Router(config)# interface GigabitEthernet0/1
Router(config-if)# description LAN for Users
! 为接口配置 IPv6 地址(通常作为该网段的网关)
Router(config-if)# ipv6 address 2001:db8:1234:1::1/64
! 设置 M 和 O 标志位,启用 SLAAC + 无状态 DHCPv6
Router(config-if)# ipv6 nd managed-config-flag no    ! M=0
Router(config-if)# ipv6 nd other-config-flag yes    ! O=1
! (可选)明确通告此前缀,并设置地址有效期
Router(config-if)# ipv6 nd prefix 2001:db8:1234:1::/64 86400 14400
! 86400 秒是有效生存期(7天),14400 秒是首选生存期(4小时)
! (可选)通告 DNS 服务器地址(如果路由器支持 RFC 6106)
! Router(config-if)# ipv6 nd ra dns server 2001:4860:4860::8888
! Router(config-if)# ipv6 nd ra dns server 2001:4860:4860::8844
Router(config-if)# no shutdown
Router(config-if)# exit
第 3 步:部署无状态 DHCPv6 服务器(在同一路由器或另一台服务器上)

你需要一个 DHCPv6 服务器来响应客户端的“其他信息”请求。
在 Cisco IOS 路由器上配置 DHCPv6 服务示例:

Router(config)# ipv6 dhcp pool LAN_POOL
Router(config-dhcpv6)# dns-server 2001:4860:4860::8888  ! Google DNS
Router(config-dhcpv6)# dns-server 2001:4860:4860::8844
Router(config-dhcpv6)# domain-name example.com
Router(config-dhcpv6)# exit
! 在接口上启用 DHCPv6 无状态服务,并关联地址池
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ipv6 dhcp server LAN_POOL rapid-commit
! `rapid-commit` 选项可以加速 DHCPv6 交互过程。

客户端视角的完整过程

  1. 路由器发现:客户端启动后,发送 路由器请求(RS) 报文(目的地址 ff02::2,所有路由器)。
  2. 路由器通告:网络上的路由器立即回应 RA 报文(而不是等待定期公告)。
  3. 地址配置:客户端根据 RA 中的前缀和 M/O 标志,选择模式二,自行生成 IPv6 地址。
  4. DAD:客户端在链路上询问是否有人使用这个新地址。
  5. DHCPv6 交互:由于 O=1,客户端联系 DHCPv6 服务器获取 DNS 配置。
  6. 连接建立:客户端现在拥有全局 IP 地址、默认网关和 DNS 服务器,可以访问 IPv6 网络。

总结

  ​路由器通过 ICMPv6 RA 报文 实现 IPv6 地址自动化配置,其核心在于 M 和 O 两个标志位的组合,它们决定了客户端是使用 SLAACSLAAC+DHCPv6 还是纯 有状态 DHCPv6。对于大多数场景,模式二(M=0, O=1) 是最佳实践,它完美结合了自动地址配置的便利性和集中化 DNS 管理的灵活性。

posted on 2025-10-30 12:11  mthoutai  阅读(60)  评论(0)    收藏  举报