2.5.1. 前言
当我们想连接多个云的时候,需要通过隧道来连接各个云,天智云 目前提供了 GRE 二层和三层隧道的支持,本文将向用户介绍如何通过界面和 API 创建 GRE 隧道。
2.5.2. 概念
隧道是对称的,我们需要在两边同时做一些设置,首先明确一些概念:
2.5.3. 三层 GRE 隧道
三层隧道是 GRE 隧道最常见的用法,大部分主流网络设备和操作系统均提供支持。GRE 隧道很灵活,但它一般不提供转发功能,也就是说当你的数据中心 A 的路由器(网关)已与你在 天智云 上的路由器 B 相连,同时 B 与你的另一个路由器 C 相连,并不代表此时 A 与 C 已经相连,我们会在下一步中提供这个功能(Cloud Hub)。
2.5.3.1. 连接 天智云 路由器与数据中心网关
我们以下面这个拓扑设计为例:
2.5.3.1.1. 在 天智云 公有云中的操作
首先打开 天智云 公有云控制台,在虚拟数据中心中选择“路由器”,点击路由器进入路由器的详情页,选择“隧道服务”标签,点击“创建隧道”,在新弹出的窗口做如下设置:
确认无误后,点击创建就完成了 天智云 公有云上的 GRE 隧道的配置。
2.5.3.1.2. 在数据中心的操作
在 天智云 上配置完,需要在您的数据中心网关(路由器)做类似的配置,具体配置需要参考您的设备的厂商手册,需要在网管上配置的有:
2.5.3.2. 使用 API 建立 GRE 隧道:
首先建立一个隧道:
curl -i -X POST https://bj1.network.api.ustack.com/v2.0/tunnels \ -H "X-Auth-Token: token_id" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"name": "Tunnel2", "type": 3, "router_id": "32", "mode": "gre"}'
然后创建隧道连接:
curl -i -X POST https://bj1.network.api.ustack.com/v2.0/tunnel-connections \ -H "X-Auth-Token: token_id" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"remote_ip": "2.2.2.2", "tunnel_id": "11", "key": "1024", "key_type": 3, "checksum": 0}'
最后添加目标网络:
curl -i -X POST https://bj1.network.api.tzyun.com/v2.0/target-networks \ -H "X-Auth-Token: token_id" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"network_cidr": "10.0.1.0/24" "tunnel_id": "11", }'
正常的话,以上操作均应返回 201 Created 及创建获得资源的详细信息。
2.5.4. 二层 GRE 隧道
二层隧道可以用来连接广播域,例如下面的拓扑:
首先打开 天智云 公有云控制台,在虚拟数据中心中选择“路由器”,点击路由器进入路由器的详情页,选择“隧道服务”标签,点击“创建隧道”,在新弹出的窗口做如下设置:
确认无误后,点击创建就完成了 天智云公有云上的 GRE 隧道的配置。
在 天智云 上配置完,需要在您的数据中心网关(路由器)做类似的配置,具体配置需要参考您的设备的厂商手册,配置时请注意两点:
2.5.4.1. 使用 API 建立 2 层 GRE 隧道:
首先建立一个隧道:
curl -i -X POST https://bj1.network.api.tzyun.com/v2.0/tunnels \ -H "X-Auth-Token: token_id" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"name": "Tunnel2", "type": 2, "router_id": "32", "mode": "gre", "local_subnet": "41"}'
然后创建隧道连接:
curl -i -X POST https://bj1.network.api.tzyun.com/v2.0/tunnel-connections \ -H "X-Auth-Token: token_id" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"remote_ip": "2.2.2.2", "tunnel_id": "11", "key": "1024", "key_type": 3, "checksum": 0}'
因为是二层隧道,所以不需要设置目标网络。