IPv6 路由器

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/neutron/+spec/ipv6-router

IPv6 和 IPv4 在 IP 地址格式以及协议操作上存在显著差异。 在本规范中,我们将讨论如何从公共访问的角度支持 IPv6 neutron 路由器。

问题描述

对于 IPv4,租户可以为其网络分配一个私有前缀,并使用浮动 IP 来获得对分配了公共 IP 地址的公共网络的访问权限。 目前 neutron 不支持 IPv6 的浮动 IP。 存在一个 neutron 规范用于 IPv6 浮动 IP,可能适用于后续的 OpenStack 版本 [IPV6_FIP]。 为了获得通过连接到公共网络的 neutron 路由器的公共访问权限,租户可以在其自身网络中使用 GUA 地址。

对于 IPv4,需要将公共 IP 地址分配给网关端口,以便 NAT 流量可以终止。 对于使用 GUA 租户网络的 IPv6,无需将 GUA 前缀(或任何前缀)分配给网关端口。 这是因为,默认情况下,IPv6 网络始终分配了 LLA 前缀 fe80::/10 [IPV6_ADDR]。 同样,在启用 IPv6 的 neutron 路由器中,网关端口也是如此。

请注意,外部网络仍然可以关联一个显式的 IPv6 子网。 其用例将在 [IPV6_FIP] 中解释。

上游路由器可能运行 RA。 RA 可能只是通告一个默认路由。 同时,它也可能携带 SLAAC 的前缀。 在任何一种情况下,neutron 路由器在处理 RA 消息后都应该安装一个默认路由。 为了涵盖上游路由器不通过 RA 通告默认路由的情况,需要有一种配置 neutron 路由器默认下一跳的方法。

提议的变更

router-gateway-set API 的实现将被更改,以便在由 external-network-id 标识的外部网络中不需要 IPv6 子网。 为了创建 neutron 路由器的网关端口,会调用 port-create API 的内部实现。 目前在仅 IPv6 的情况下,如果没有显式提供 IPv6 子网,将生成一个 Bad Request 异常。 假设网关端口与 fe80::/10 前缀关联,将进行更改以确保网关端口成功创建。

当在路由器中添加 IPv4 子网时,请检查以确保路由器的网关端口位于 IPv4 公共网络上。

为了支持在没有上游 RA 的情况下对 neutron 路由器的显式下一跳配置,在 l3 代理配置文件中添加一个 ipv6-gateway 参数,如下所示

ipv6-gateway = GATEWAY_LLA

GATEWAY_LLA 应该是一个有效的 LLA 地址。 如果它不是有效的 LLA 地址,L3 代理将记录一条警告消息。 具有有效的 ipv6-gateway LLA 地址,l3 代理将安装一个默认路由,下一跳为 GATEWAY_LLA,传出接口为网关端口。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

IPv6 影响

本规范指定了支持 IPv6 路由器的更改。

其他部署者影响

本规范引入了一个新的 l3 代理配置参数,如上所述。

开发人员影响

如果一个插件支持 neutron 路由器和 IPv6,那么它可能需要更改以支持路由器 API 语义的更改。

可能还需要 devstack 更改来支持仅 IPv4、仅 IPv6 和双栈配置。

社区影响

此更改与社区在 neutron 中支持 IPv6 的努力保持一致

备选方案

在仅 IPv6 的情况下,可以创建一个假的 ipv6 子网并使用它来创建网关端口。

在仅 IPv6 的路由器中,neutron 公共网络当前实际上不包含任何有用的信息。 但是删除它需要 API 更改。 此外,将来将公共网络划分为较小的广播域可能是有用的。

另一个想法是为 neutron 路由器关联一个标志,以指示路由器是否在以下三种模式之一下运行:仅 IPv4、仅 IPv6 或双栈。 这可以确保使用所需的子网正确创建网关端口。

是否需要为 neutron 网络提供一个 disable_ipv6 选项,以及/或 neutron 配置文件中的一个整体配置选项 disable_ipv6

实现

负责人

主要负责人

baoli

其他贡献者

将根据需要添加

工作项

  • 由于路由器 API 语义更改而产生的更改

  • 在没有子网的情况下创建网关端口

  • 开发测试用例

  • Tempest 测试

依赖项

如果发现 l3 代理需要更改,则可能需要对 l3 代理进行重构。

测试

Tempest 测试

应开发 Tempest 测试,以确保 neutron 路由器在仅 IPv4、仅 IPv6 和双栈环境中正常工作。

功能测试

需要功能测试,以确保在仅 IPv4、仅 IPv6 和双栈情况下正确创建网关端口。

API 测试

可能需要更新路由器 API 的现有单元测试,以反映更改。 可能需要新的单元测试来测试 API 语义更改。

文档影响

用户文档

需要更新 neutron 路由器的用户指南

开发人员文档

需要记录 API 语义更改。

参考资料