Neutron/MPLSVPNaaS
目录
概述
MPLS VPNaaS (MPLS VPN-as-a-Service) 是 Neutron 的一个扩展,它引入了 MPLS VPN 功能集。
以下是为 Havana 版本在 OpenStack Networking 中设计和实现 MPLS VPN 作为一项服务的计划。
此 BP 引用 Neutron/VPNaaS (IPSec VPN)( https://wiki.openstack.org/wiki/Neutron/VPNaaS) 。
相关蓝图
2013-03-27 Neutron 扩展用于 BGP MPLS VPN
2013-01-07 Quantum VPN 用于 WAN(广域网)
2013-07-17 Neutron/MPLS VPNaaS
为什么在OpenStack中使用MPLS VPN
1. 满足用户需求:QoS 保证
2. MPLS 得到骨干设备的广泛支持:通常,骨干网络中的核心节点具有部署 MPLS 隧道的能力。
在云计算时代,租户与数据中心网络之间的数据交互越来越多,并且需要安全连接、QoS 和弹性调整。因此,MPLS 隧道是构建通过骨干网络的 VPN 的更好解决方案。
注意
此 BP 中“VPN 服务”的定义可能已过时,我们稍后会更新它。
欢迎加入我们
我们专注于 OpenStack 中的 MPLS VPN,如果您对此 BP 有任何兴趣或疑问,请联系我们
laixuejiao@gmail.com
wangchang365@gmail.com
先决条件
我们认为 WAN 中的 MPLS VPN 已经由 ISP(或其他提供商)建立,因此我们只需要考虑租户的子网如何访问 MPLS VPN。我们使用术语“MPLS VPN 接入连接”来表示连接到 PE 的连接(连接租户的子网或仅虚拟机的 Neutron 路由器)。此外,MPLS VPN 接入连接可以表示 CE 路由器(供应商的硬件设备)和 PE 之间的连接。
用例
用例 1
如果 OpenStack 中没有硬件设备作为 CE 设备。那么我们将 quagga 和 Neutron 路由器结合起来,使 Neutron 成为 CE 接入路由器。此实现不需要特定的硬件设备。
用例 2
如果有供应商的硬件设备在 OpenStack 中,供应商需要提供其驱动程序,这将配置供应商的设备以访问 MPLS VPN。
MPLS VPN 工作原理
Neutron 路由器
在 Neutron 中,租户可以为子网或租户创建路由器,并定义子网之间的连接,所有这些都由 Neutron 路由器完成。
MPLS VPN 服务
根据 RFC-4364 BGP/MPLS IP 虚拟专用网络 (VPN),为了在 Neutron 中实现 MPLS VPN,我们需要一个与 Neutron 路由器配合的 Quagga 实例,然后该 Quagga 路由器将从 PE(或运行一些协议,如 BGP 等)交换路由,最终租户的子网或虚拟机将访问 MPLS VPN。
MPLS VPN 接入连接
如 RFC 定义,VPN 服务(带有 Quagga 的 Neutron 路由器)可以通过多种不同的方式连接到 PE:PPP 连接、ATM 虚拟电路 (VC)、帧中继 VC、以太网接口、以太网接口上的虚拟局域网 (VLAN)、GRE 隧道、第二层隧道协议 (L2TP) 隧道、IPSec 隧道等。我们将使用数据模型“MPLS VPN 接入连接”来指这些连接技术。
架构
下图显示了 Neutron MPLS VPN 的架构
MPLS VPN 接入连接模型
租户的子网访问 MPLS VPN
租户的虚拟机访问 MPLS VPN
数据模型
VPN 服务资源
| 属性 | 类型 | 必需 | CRUDt | 默认值 | 验证约束 | 笔记 |
|---|---|---|---|---|---|---|
| id | uuid-str | 不适用 | R | 自动生成 | 不适用 | VPN 服务对象的 UUID |
| tenant_id | uuid-str | Yes | CR | 无 | 有效的 tenant_id | vpn 服务的租户 UUID |
| name | 字符串 | 否 | CRU | 无 | 不适用 | VPN 服务的名称 |
| description | 字符串 | 否 | CRU | 无 | 不适用 | VPN 服务的描述 |
| vpn_type | 字符串 | 是 | C | 无 | L2 MPLS 或 L3 MPLS | 服务类型 - 定义服务类型。 |
| status | 字符串 | 不适用 | R | 不适用 | 不适用 | 指示 mpls vpnservice 是否当前处于运行状态。可能的值包括:ACTIVE DOWN BUILD ERROR |
| admin_state_up | 布尔值 | 不适用 | CRU | TRUE | true/false | vpnservice 的管理状态。如果为 false (down),端口将不转发数据包 |
| subnet_id | uuid | 是*(需要 subnet_id) | CR | 不适用 | 有效的子网 ID | 租户希望 VPN 服务所在的子网 ID |
| router_id | uuid | 是 | CR | 不适用 | 有效的路由器 ID | 插入 VPN 服务的路由器 ID |
MPLS VPN 接入连接资源
| 属性 | 类型 | 必需 | CRUDt | 默认值 | 验证约束 | 笔记 |
|---|---|---|---|---|---|---|
| id | uuid-str | 不适用 | CRD | 自动生成 | 不适用 | MPLS 连接 ID |
| 端口 ID | Uuid-str | 是 | CR | 无 | 有效的端口 ID | 将使用路由器的哪个端口进行 mpls 接入。 |
| tenant_id | uuid-str | 是 | CR | 无 | 有效的 tenant_id | 此 VPN 连接的租户的 UUID |
| name | 字符串 | 否 | CRU | 无 | 不适用 | 此 VPN 连接的名称 |
| description | 字符串 | 否 | CRU | 无 | 不适用 | 此 VPN 连接的描述 |
| connection_type | 字符串 | 是 | CRD | 无 | 不适用 | 定义此 VPN 连接将使用哪种接入技术。 |
| vpn_service_id | uuid-str | 不适用 | CRU | 无 | 有效的 VPN 服务 ID。 | 此连接属于哪个 VPN 服务。 |
接入技术资源
GRE 连接
| 属性 | 类型 | 必需 | CRUDt | 默认值 | 验证约束 | 笔记 |
|---|---|---|---|---|---|---|
| id | uuid-str | 不适用 | C | 自动生成 | 不适用 | 接入连接 ID |
| Mpls_connection_id | uuid-str | 不适用 | R | 无 | 有效的现有 mpls 连接 | 哪个 mpls 连接将使用此接入连接 |
| GRE_Local_IP | ipaddress | Yes | CR | 无 | 有效的 IP 地址格式 | GRE 隧道的本地 IP 地址 |
| GRE_Dst_IP | ipaddress | 是 | CRU | 无 | 不适用 | GRE 隧道的目的 IP 地址 |
| Local_IP | ipaddress | Yes | CRU | 无 | 不适用 | 端设备(VPN 服务、CE)的地址 |
| Dst_IP | ipaddress | Yes | CRU | 无 | 不适用 | PE 的地址 |
| 键 | 整数 | Yes | CR | 无 | 不适用 | 此 GRE 隧道的密钥值 |
VLAN
| 属性 | 类型 | 必需 | CRUD | 默认值 | 验证约束 | 笔记 |
|---|---|---|---|---|---|---|
| id | uuid-str | 不适用 | R | 自动生成 | 不适用 | 接入连接 ID |
| Mpls_connection_id | uuid-str | N/A R | 无 | 有效的现有 mpls 连接 | 哪个 mpls 连接将使用此接入连接 | |
| Vlan_id | id | Yes | CR | 无 | 有效的 VLAN ID | 用于接入连接的 VLAN ID |
PPP
| 属性 | 类型 | 必需 | CRUD | 默认值 | 验证约束 | 笔记 |
|---|---|---|---|---|---|---|
| id | uuid-str | 不适用 | R | 自动生成 | 不适用 | 接入连接 ID |
| Mpls_connection_id | uuid-str | 不适用 | R | 无 | 有效的现有 mpls 连接 | 哪个 mpls 连接将使用此接入连接 |
| Ppp-server | IP 地址 | Yes | CR | 无 | 有效的 IP 地址 | PPP 服务器的地址 |
| Auth_type | str | 是 | Auth_method:chap 或 pap | |||
| Auth_message | str | 是 | Auth 消息 |
L2TP
| 属性 | 类型 | 必需 | CRUD | 默认值 | 验证约束 | 笔记 |
|---|---|---|---|---|---|---|
| id | uuid-str | 不适用 | R | 自动生成 | 不适用 | 接入连接 ID |
| Mpls_connection_id | uuid-str | 不适用 | R | 无 | 有效的现有 mpls 连接 | 哪个 mpls 连接将使用此接入连接 |
| lns | IP 地址 | Yes | CR | 无 | 有效的 VLAN ID | 用于接入连接的 VLAN ID |
| 隧道 ID | id | 是 | 隧道 ID | |||
| 会话 ID | ID | 是 | 会话 ID | |||
| Ppp-server | IP 地址 | Yes | CR | 无 | 有效的 IP 地址 | PPP 服务器的地址 |
| Auth_type | str | 是 | Auth_method:chap 或 pap | |||
| Auth_message | str | 是 | Auth 消息 |
REST APIs
vpn-service-create 创建 VPNService
vpn-service-delete 删除给定的 VPNService
vpn-service-list 列出给定租户的所有 VPNService。
vpn-service-show 显示给定 VPNService 的详细信息。
vpn-service-update 更新给定的 VPNservice。
vpn-mpls-access-connection-create 创建 MPLS 接入 VPNConnection
vpn-mpls-access-connection-delete 删除给定的 MPLS 接入 VPNConnection。
vpn-mpls-access-connection-list 列出属于给定租户的 MPLS 接入 VPNConnection。
vpn-mpls-access-connection-show 显示给定 MPLS 接入 VPNConnection 的信息。
vpn-mpls-access-connection-update 更新给定的 MPLS 接入 VPNConnection。
vpn-mpls-access-connection-config-cretae 创建并配置 MPLS 接入的接入技术
vpn-mpls-access-connection-config-delete 删除 MPLS 的接入连接配置
vpn-mpls-access-connection-config-show 显示给定接入连接的信息




