在 Dnsmasq 中支持 DHCPv6 无状态和有状态模式¶
由于 [Spec_RADVD] 建议使用 radvd 作为 IPv6 路由器通告和 SLAAC 的首选参考实现,因此本规范旨在允许租户 VM 在 ipv6_address_mode 设置为租户子网时,通过 Dnsmasq 获取有状态 dhcpv6 地址或无状态 dhcpv6 地址。
Launchpad蓝图
https://blueprints.launchpad.net/neutron/+spec/dnsmasq-ipv6-dhcpv6-stateless https://blueprints.launchpad.net/neutron/+spec/dnsmasq-ipv6-dhcpv6-stateful
问题描述¶
1. 当将有状态 dhcpv6 设置为租户子网的 IPv6 地址模式时,OpenStack 管理员希望租户 VM 可以从 OpenStack 网络服务获取 IPv6 地址和可选信息(例如 DNS 信息)。
2. 当将无状态 dhcpv6 设置为租户子网的 IPv6 地址模式时,路由器通告由外部路由器或 OpenStack 管理的 RADVD 处理。OpenStack 管理员希望租户 VM 可以通过 SLAAC 获取 IPv6 地址,并从 OpenStack 网络服务获取可选信息。
+----------------------------------------------------------------------+
| |
| |
| | +---------------------------------+
| +------------------------------+ +---------------------------+ | | |
| |dhcp namespace | | router | | | +--------------+ |
| | +-----------+ | | namespace +----------+ | | | | | |
| | | dnsmasq | | | | RADVD | | | | | | |
| | +-+---+-----+--------+ | | +----+--------+++ | | | +-------> | |
| | | | qdhcp-xxxx | | | | qr-xxxx || | | | | | | |
| | | +-------+------+ | | +----+---------+ | | | | +-----> VM | |
| | | | | | | | | | | | | | | |
| +------------------------------+ +---------------------------+ | | | | +-------+------+ |
| | | | | | | | | | |
| | +--+--------------------------------+-+ | | | | | | |
| | | br-int | | | | | | +--------+--------+ |
| | +------------------+------------------+ | | | | | | br-int | |
| | | | | | | | +--------+--------+ |
| | | | | | | | | |
| | +------+------+ | | | | | | |
| | | br-eth0 | | | | | | +---------------+ |
| | +------+------+ | | | | | | br-eth0 | |
| | | | | | | | +---------------+ |
| | | | | | | | | |
| | +-----+-----+ | | | | | +------+-------+ |
| | | eth0 | | | | | | | eth0 | |
+-----------------------------+-----+-----+----------------------------+ +--------+-------+------+---------+
| | | | | |
| | | | | |
| +--------------------------------------------------------+
| | | |
+------------------------------------------------------------------------+
IPv6 address/optional info | RA |
+----------------+
提议的变更¶
1. DHCPv6 无状态模式:可以使用 dnsmasq 作为简单的无状态 dhcp 服务器,在“static”模式下使用“–dhcp-optsfile”选项。
2. DHCPv6 有状态模式:可以使用 dnsmasq 作为有状态 dhcp 服务器,在“static”模式下使用“–dhcp-hostsfile”和“–dhcp-optsfile”选项。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
在 Icehouse 版本中,引入了 ipv6_ra_mode 和 ipv6_address_mode 到子网 API 中,以启用租户网络 IPv6 支持。
Icehouse 参考中 IPv6 模式的 REST API 变更:[IPv6_MODES_REST]
此蓝图将实现满足 ipv6_address_mode 设置为“dhcpv6-stateful”或“dhcpv6-stateless”的 IPv6 子网所需的功能。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
此变更需要在 python-neutronclient 中为两个 IPv6 子网属性提供支持——目前在 review 中。
性能影响¶
无
其他部署者影响¶
此变更将在特定配置下更改 Neutron 的行为,即当设置子网的 IPv6 属性时。 之前,这些属性不起作用。
开发人员影响¶
无
实现¶
将创建 ipv6_address_mode 设置为“dhcpv6-stateful”或“dhcpv6-stateless”的子网。
如果未启动子网网络的 dnsmasq 进程,Neutron 将在子网的 dhcp 端口的“qdhcp-”命名空间中启动新的 dnsmasq 进程。 如果先前已启动 dnsmasq 进程,则使用新配置重启 dnsmasq。
当子网更新时,Neutron 将更新 dnsmasq 进程并重启它。
负责人¶
- 主要负责人
Shixiong
xuhanp
工作项¶
将此 代码审查 分解为更小的补丁,并提交新的代码审查以支持 dhcpv6 有状态/无状态模式。
依赖项¶
本规范的假设是,路由器通告由提供商网络路由器或 OpenStack 网络服务提供(一种实现是 RADVD [Spec_RADVD])。
将 DNSMASQ 版本升级到 2.63 以支持 IPv6 标签。[DNSMASQ_VERSTION]
测试¶
添加单元测试以支持 ipv6_address_mode 设置为“dhcpv6-stateful”或“dhcpv6-stateless”的子网。
验证 dnsmasq 是否可以在正确的命名空间中以预期模式和选项启动。
为有状态和无状态 dhcpv6 添加 tempest API 和场景测试。 参考:[API_TESTS_IPV6]
文档影响¶
需要编写关于此网络配置的文档。