12. 重新编号考虑
IPv6 网络可能因各种原因需要重新编号, 例如更换 Internet Service Providers (ISPs), 公司合并或网络重组. Neighbor Discovery 包含便于平滑执行重新编号操作的功能. 本节讨论 IPv6 网络重新编号的考虑事项.
12.1. 重新编号概述
网络重新编号涉及改变网络上主机使用的 IPv6 地址前缀. IPv6 中重新编号的主要机制包括:
- 带有新前缀的 Router Advertisements: 路由器使用适当的 lifetimes 通告新前缀, 同时逐步淘汰旧前缀.
- DHCPv6: Dynamic Host Configuration Protocol for IPv6 也可以在重新编号期间管理地址分配.
- Stateless Address Autoconfiguration (SLAAC): 主机根据路由器通告的新前缀自动生成新地址.
12.2. 基于 Router Advertisement 的重新编号
Neighbor Discovery 的 Router Advertisement 机制旨在支持平滑的重新编号:
12.2.1. 引入新前缀
引入新前缀时:
-
初始通告: 路由器开始通告新前缀, 并带有:
- Valid Lifetime: 设置为合理的持续时间 (例如 2 小时或更长)
- Preferred Lifetime: 初始设置为等于 Valid Lifetime
- A (Autonomous) flag: 设置以指示主机应使用 SLAAC
-
共存期: 同时通告旧前缀和新前缀, 允许:
- 新连接使用新地址
- 现有连接继续使用旧地址
- 在不中断服务的情况下逐步迁移
12.2.2. 弃用旧前缀
要逐步淘汰旧前缀:
-
将 Preferred Lifetime 设为零: 这会使主机:
- 停止为新连接使用旧前缀
- 继续使用带旧地址的现有连接
- 不再从已弃用前缀生成新地址
-
缩短 Valid Lifetime: 逐步减少 Valid Lifetime, 以允许现有连接完成.
-
最终移除: 一旦 Valid Lifetime 过期或被设为零, 主机会从其配置中移除这些地址和前缀.
12.2.3. 时间线建议
典型的重新编号时间线可能是:
- 第 0 周: 开始与旧前缀同时通告新前缀 (两者均为 preferred)
- 第 1-2 周: 弃用旧前缀 (Preferred Lifetime = 0, Valid Lifetime = 1 week)
- 第 2-3 周: 继续缩短旧前缀的 Valid Lifetime
- 第 3 周及以后: 完全停止通告旧前缀
确切时间线取决于网络要求以及应用和连接的性质.
12.3. 实现考虑
12.3.1. 主机行为
主机 应该:
- 监测 Router Advertisements: 持续处理 Router Advertisements, 以获知新前缀和 lifetime 变化.
- 遵守 Lifetimes: 为新连接选择源地址时, 遵守 Preferred Lifetimes 和 Valid Lifetimes.
- 平滑弃用: 当前缀变为 deprecated (Preferred Lifetime = 0) 时, 避免将其用于新连接, 但维持现有连接.
- 移除过期地址: 当地址的 Valid Lifetime 过期时删除该地址.
12.3.2. 路由器行为
路由器 应该:
- 协调重新编号: 链路上的所有路由器都应通告一致的前缀信息.
- 使用保守定时器: 留出足够时间完成重新编号, 而不中断服务.
- 监测进度: 网络管理员应监测重新编号进度, 以确保平滑过渡.
12.3.3. 应用考虑
应用应设计为:
- 处理地址变化: 准备好在长时间运行的应用生命周期内处理地址变化.
- 优先使用临时地址: 对于隐私敏感型应用, 使用会周期性变化的临时地址 [RFC4941].
- 实现 Happy Eyeballs: 在过渡期间支持旧地址和新地址 [RFC8305].
12.4. DHCPv6 和重新编号
使用 DHCPv6 进行地址分配时:
- Lease Times: DHCPv6 服务器可以通过调整旧地址和新地址的 lease times 来控制重新编号.
- RECONFIGURE Messages: 服务器可以使用 RECONFIGURE messages 指示客户端更新其配置并获得新地址.
- 与 RA 协调: 基于 DHCPv6 的重新编号应与 Router Advertisements 协调, 以确保一致性.
12.5. DNS 考虑
重新编号期间, 必须更新 DNS 记录:
- 添加新记录: 为新地址创建 AAAA 记录.
- 降低 TTL: 在重新编号前降低 DNS 记录的 Time-To-Live (TTL), 以尽量减少缓存问题.
- 保留旧记录: 在过渡期内保持旧 AAAA 记录可用.
- 移除旧记录: 重新编号完成且旧地址不再使用后, 移除过时的 DNS 记录.
Dynamic DNS (DDNS) 可以为支持它的主机自动执行此过程.
12.6. 运行建议
网络运营者应:
- 仔细规划: 制定详细的重新编号计划, 包括时间线和回滚过程.
- 沟通: 告知用户和利益相关者重新编号日程.
- 监测: 使用网络监测工具跟踪重新编号进度并识别问题.
- 测试: 如有可能, 在部署到生产环境前, 在实验室环境中测试重新编号流程.
- 记录: 维护前缀分配和重新编号历史的文档.
12.7. 多宿主和重新编号
多宿主网络 (连接到多个 ISPs) 面临额外挑战:
- 多个前缀: 主机可能同时拥有来自多个前缀的地址.
- 源地址选择: 正确的源地址选择 (RFC 6724) 对于为出站连接选择正确地址至关重要.
- Provider Failover: 当某个提供商的前缀不可用时, 主机应无缝过渡到使用其他前缀的地址.
12.8. 企业考虑
对于企业网络:
- 内部编号: 内部地址分配可能不需要像边缘前缀那样频繁改变.
- ULA 使用: Unique Local Addresses (ULA, RFC 4193) 可以提供不依赖 ISP 变化的稳定内部寻址.
- NAT66: 虽然通常不建议使用, 一些企业可能会使用 NAT66 将内部重新编号与外部变化隔离, 但这有显著缺点.
12.9. 自动化和工具
为便于重新编号:
- 配置管理: 使用自动化配置管理工具更新路由器配置.
- 监测系统: 实现监测以检测与重新编号相关的问题.
- 脚本和 APIs: 开发脚本或使用 APIs 自动执行 DNS 更新和其他重新编号任务.
12.10. 总结
Neighbor Discovery 的 Router Advertisement 机制为 IPv6 网络重新编号提供了稳健支持. 通过仔细管理前缀 lifetimes, 并在路由器,DHCPv6 服务器和 DNS 之间协调变更, 网络运营者可以实现服务中断最少的平滑过渡. 适当的规划, 沟通和监测是成功完成重新编号操作的关键.