暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

思科SDWAN探秘(1)--基础架构

zartbot 2020-12-27
862
这也是一个系列的文章,主要包括以下内容:
  1. 基础架构和OMP路由,及手工部署SDWAN最小化环境

  2. 基础设施即代码(IaC)-基于Terraform和Ansible部署

  3. Day2运维技巧

  4. 有空就补一些分享一些成功案例和部署经验


下面我们先看第一个内容,基本架构和OMP路由,您会在此了解到思科SDWAN为什么要设计多个控制组件,以及相应的路由工作流程。同时文末还有一个手工安装的快速介绍,当然您可能会觉得安装比较复杂,但是没关系,我们会在第二篇文章中带你使用Terraform和Ansible完全自动化的快速部署控制器。

“请您务必记住,本文后面的演示只是为了给您讲解整个安装的流程,您可能会觉得非常繁琐,但是没关系,我们稍后会推荐您使用Terraform和Ansible自动化一键部署的方式安装,实现完全的基础设施即代码(IaC)的运维能力”

1. SDWAN架构解析
1.1 为什么有多个控制器:  分布式架构避免单点故障和多云冗余
当我们实施SDWAN的时候,为了运维方便必须要实现控制器,而控制器又是一种中心化的软件架构,如何保证控制器不失效或者更进一步,如何把控制器做成一个分布式软件放置在多云环境中,这便是SDWAN去中心化的第一个挑战。

思科将SDWAN控制器拆分成三类组件便是出于分布式软件架构和多云部署的考虑,它将业务逻辑分为了编排vBond, 管理vManage,控制vSmart,转发Edge四个不同的功能组件,任何一个组件都能在多云环境下部署并构成集群,如下图所示:

这样极大的提高了在多云环境下的稳定性,任何一个云出现故障都不会导致SDWAN控制器下线。


1.2 控制器功能概述 

vBond:所有的广域网分支路由器节点都通过vBond作为安全认证的第一个接入点,然后由vBond编排选择可用的控制平面节点vSmart和管理平面节点vManage,同时vBond还被用于STUN业务帮助分支路由器发现自己的公网地址(NAT Traversal)。当分支路由器连上vBond后,vBond会反馈其公网地址信息,同时负责验证分支路由器的安全证书等,最后分配并告知分支路由器所需连接的vSmart和vManage。

vSmart:控制平面节点,用于控制面的路由接收和反射分发及实现和分发大量的控制策略。

vManage:管理平面节点,用于统一的WebUI界面管理和运维,集中式的配置各种策略和相应的模板,并监控运维数据和性能状况,处理告警信息等。


1.3 如何隔离网络

当你考虑将自己的广域网转发矩阵放置于Internet上时,SDWAN第一件事便是考虑到网络安全合规要求,隔离互联网和私有网络。通常我们把一个设备连接互联网的接口称为传输端口(Transport Interface)而连接VPC或者私有网络/数据中心的接口称为业务端口(Service Interface),如下图所示:

同时默认在非安全区域添加了默认安全策略组,仅有授权通过的白名单VPN流量和控制器流量可以通过。在转发平面上,通常我们会为他们放置不同的路由虚拟转发表(VRF)将它们完全隔离开。


1.4 如何标记站点

不同的VPC或者客户的分支站点甚至是数据中心,后面接的网络服务器容器或者是终端,我们都可以抽像为资源,或者就是不同的IP地址段来表示,并且可以通过不同的属性将它们进行VPN隔离,也就是我们常说的Overlay层,而Internet区域也被称为Underlay。那么Underlay和Overlay层是如何映射的呢?当然所有的人都会说MP-BGP协议进行TLV扩展来支持键值对(Key-Value Pair)。

直接使用MP-BGP或者BGP-EVPN的问题:

1. Underlay公网地址经常变动,BGP路由协议收敛慢

2. 通常VPC需要跨越NAT,标准的BGP协议NextHop为VPC私网地址,无法穿越NAT

3. 优选路径类型无法在单独的下一跳信息中获得,通常还需要Community熟悉扩展

4. 互联通信还需要NHRP一类的协议进行补充

这些都是思科在尝试使用DMVPN技术构建IWAN解决方案时犯的错误,DMVPN或者DSVPN的解决方案有明显的中心Hub结构,极易造成单点故障或者规模无法扩展的问题。

思科新一代基于Viptela的SDWAN架构采用递归路径查询的方式,它结合和BGP和LISP的各自优点,将Overlay所对应的VPC网段等资源信息映射到一个被称作为TLOC的资源定位符上,如下图所示,然后再递归查询通过解析TLOC可达性等信息来进行路径选择和策略路由。

具体的TLOC编码如下图所示,我们对每一个VPC站点进行了编码(Site-ID),同时为每一个路由器也编制了System-IP,然后根据它们接入的不同运营商和不同的链路类型,我们为传输接口(Transport Interface)染上了不同的颜色(Color),例如Azure被标记为了Private2(紫色),数据中心的电信链路标记为蓝色(Blue),而联通的线路则标记为红色(Red)。封装形式(Encapsulation)则可以选择明文的GRE传输或者IPsec传输方式。



我们根据这些TLOC编码信息就可以产生VPN路由了,即将VPC的网段和资源信息和TLOC绑定了,如下图所示,VPN1:Prefix-D1的资源的路由下一跳属性被标记为TLOC <2.2.2.2, INET,IPsec>及<2.2.2.2,MPLS,IPsec>,即VPN1:Prefix-D1可以同时通过vEdge-D(system-ip=2.2.2.2)的这台路由器的INET网络和MPLS到达,但是约定必须使用IPsec加密封装的方式传达。

VPN路由通过OMP协议更新发送到控制平面vSmart上,并由vSmart集群分发到其它路由器,它的作用和BGP UPDATE消息以及BGP RR路由反射器功能类似。


1.5 分布式路径选择

经过控制器vSmart集群的反射,vEdge-S(1.1.1.1)已经知道VPN1:Prefix-D1的资源可以通过2.2.2.2的这台路由器到达了,但是还缺少一些信息,广域网Underlay的地址是什么?加密需要的密钥是什么?这里就需要递归查询的第二步了,如何将TLOC和Underlay的信息关联,很简单,再发一个BGP UPDATE消息让vSmart反射就好了,如下图所示


在TLOC Route信息中包含了IPsec的SPI/Auth/Encryption密钥等信息,同时还有NAT穿越的信息, 因为很多场景中,VPC给路由器分配的是私网地址,NAT地址翻译是云服务提供商做的,所以需要通过某种方式获得自己公网地址,这个时候vEdge会通过向vBond编排器集群查询的方式,让vBond编排器将其公网地址信息反馈回vEdge实现。

在获取了TLOC的Underlay信息后,vEdge-S便对会话进行BFD检验,同时测量延迟抖动和丢包等链路质量特征,它会根据自身的情况,进行TLOC可达性测量,并构造出一张TLOC 路由信息表,如下图所示:

最后,Overlay的VPN1:Prefix-D1的路径查询第一步查询TLOC,第二步再查询TLOC路由表,选择可达的或者SLA满足的路径查询到Underlay的封装和传输参数,然后将报文发出。这样的递归查询带来了极大的灵活性,例如我们可以根据不同的VPN定义不同的Overlay拓扑结构和选路规则:



2. 站点编址
2.1 Site-ID
Site-ID编制方式和邮编有几分相似之处,在六位数的Site-ID编码中官方建议的方式如下,当然您也可以根据自己的喜好编码.


2.2 System-IP
这个值的作用和Router-ID类似,主要用于标识设备和用于TLOC编址,它并不需要是一个可路由的地址,也不需要把它配置成某个接口的地址。

3. SDWAN部署示例
3.1 控制器初始配置
在整个SDWAN系统中,VPN0定义为广域网接入区域,VPN512定义为管理区域。因此您需要为控制器做地址规划并按照下表填写一些信息备用,首先是系统相关的信息,组织名称和NTP服务器名称:
Orgnization-Name:CiscoDMZ
NTP:10.74.5.1
然后是如第二章所述的Site-ID和System-IP分配:

网元
Site-ID
SystemIP
VPN0VPN512
vManage100001
1.0.0.110.74.30.222
192.168.100.2
vSmart100011
1.0.0.101
10.74.30.223
192.168.100.11
vBond
100021
1.0.0.20110.74.30.226
192.168.100.21






3.2 安装vManage
vManage需要两个接口,一个连接VPN0(eth0)用于互联网通信,另一个连接VPN512(eth1)连接,Hypervisor层支持VMWARE、KVM、AWS、Azure,当然阿里云和其它云如果对KVM支持较好也可以使用,但这些云并没有获得官方的测试。本教程以常见的VMWARE为例


体的CPU和内存消耗如下所示,请您注意,如果集群部署还需要第三个接口用于消息总线。

当然针对一些大使用量的场景,硬盘容量和IOPS的需求上表有些不够,例如您需要进行流量和应用的82号令审计,vManage可能需要更多的存储资源,建议您的VMWARE ESXi采用本地部署SSD或者NVMe硬盘的方式,当然您也可以部署专门的Netflow采集器来接收和分析这些信息。

3.2.1 部署vManage OVA
单击右键,选择部署OVF模板:

在界面中您可以选择本地文件,或者远程HTTP服务器上的OVA文件,选择后点击下一步:


选择所需要部署的数据中心和更改虚拟机名称,然后点击下一步:

选择主机或目标资源池,点击下一步,然后查看详细信息也点击下一步

选择存储时,这是第一块系统盘,可以随意选择,重要的存储盘则会在创建完OVA后再手工添加,因为我们考虑到第二块盘有一些SSD和高并发的需求,因此并没有将其打包做在OVA文件中,而是根据用户的需求在部署完后手工创建。

选择网络时,它默认已经创建了三个网卡,第一个我们选择VPN0需要的网络,第二个选择带外管理的网络,第三个暂时不用管它。

最后点击下一步完成OVA部署,然后右键选择刚才创建好的虚机,点击“编辑设置”,选择“添加新设备”,选择“硬盘”,

根据您的需求选择至少200GB容量的厚置备的硬盘,建议选择SSD,当然您自己做实验玩玩什么盘都行如下图所示:

3.2.2 配置vManage


完成配置后,开机即可,系统会自动停到如下界面,使用用户名admin、密码admin登录,注意刚开始有可能系统还在初始化,请稍等一会儿

登陆完成后,系统会要求您更改默认密码,请注意大小写字母加数字和符号都带上才能通过,然后选择需要安装的存储硬盘,只有一个选1就好,然后是否格式化选择y,系统就会自己安装了,安装完成了系统会自动重启。

重启登陆好以后,就可以键入“config terminal”进行配置了,按照前文所述,配置VPN512和eth1 为带外管理接口,配置VPN0和eth0为传输接口即可

完成配置后,根据前文所述,配置系统相关的参数:

然后您就可以通过ssh或者https登录管理口或者传输接口了,例如https://10.74.30.222


3.2.3 更改数据库默认密码(可选,不改登录网页会有告警)
以ssh登陆后,您还需要更改Neo4j数据库的密码,具体步骤如下,使用如下命令停止nms服务
request nms application-server stop
查询密码并更改它,然后重启NMS服务


3.3 安装vBond
vBond的资源需求如下图所示:

它和vEdge共享同样的OVA文件,因此使用vEdge的ova文件部署即可,文件名例如viptela-edge-20.4.1-genericx86-64.ova,部署时和vManage类似一路下一步就好了,唯一需要注意的是它默认会创建4个接口,但是我们可以忽视掉后面两个,仅把第一个接口用作VPN512(eth0),第二个接口用作传输接口VPN0(ge0/0),因此部署完后,删除多余网卡

系统启动后,使用用户名admin、密码admin登录,同样会要求您更改默认密码,然后按照如下方式配置,注意orgnization-name一定要和vManage配置的时候一致,同时需要添加vbond 10.74.30.226 local这个命令将该节点标记为vBond节点,最后commit

然后便是配置接口IP地址,如下所示,管理口VPN512-eth0-192.168.100.201,传输口VPN0-ge0/0为10.74.30.226,注意需要暂时no tunnel-interace模式关闭隧道,待加入到vmanage后再打开。


3.4 安装vSmart
vSmart的资源需求如下图所示:

继续部署vsmart的ova文件,然后连续下一步,网卡选择的时候注意第一个接口为VPN0(eth0)接入传输网段,第二个接口为VPN512(eth1)接入管理网段,完成部署后启动,使用用户名admin、密码admin登录,同样会要求您更改默认密码,然后按照如下方式配置,注意orgnization-name一定要和vManage配置的时候一致,vBond地址配置为10.74.30.226,但是不用带“local”关键字,如下图所示:

然后配置传输接口和管理接口:


3.5 证书安装
由于整个SDWAN控制器采用零信任的方式部署,因此所有的通信需要有签名的证书,这也是安装会感觉到繁琐的原因,特别是有些企业网络团队没有自己的CA服务器的时候,而很多企业通常也因为第三方的证书服务器怕运维麻烦,或者找应用部门产生证书也是一个跨部门协作的事情比较头疼。
我来教你一个非常简单的处理方式,我通常喜欢使用MobaXterm,因为登录后会自动启用scp服务传输文件,因此您可以ssh登录到vmanage上,然后使用vshell登录到shell模式,我们就可以在这个linux shell中构建证书服务器了,然后按照如下方式进入Openssl并输入一下命令即可构建自签名根证书,注意在第四行的时候,O=CiscoDMZ,OU=CiscoDMZ一定要和vmanage里面配置的Orgnization-name一致。
vmanage# vshell
vmanage:~$ openssl
OpenSSL> genrsa -out rootCA.key 4096
OpenSSL> req -new -x509 -days 3650 -key rootCA.key -out rootCA.crt -subj "/C=CN/ST=CN/L=Shanghai/O=CiscoDMZ/OU=CiscoDMZ/CN=sdwan.cisco.com/emailAddress=none@cisco.com"
OpenSSL> x509 -in rootCA.crt -out root-ca-chain.pem -outform PEM

生成好以后,请注意将rootCA.key、rootCA.crt、root-ca-chain.pem拷贝出来备份。然后https登录到vmanage,选择“Administration->Settings”界面:

选择vBond,点击右侧“Edit”,配置vBond地址10.74.30.226,如下图所示:

然后选择“Controller Certificate Authorization”,点击右侧Edit,选择“Enterprise Root Certificate”,然后点击“Select a file”选择您刚下载的“root-a-chain.pem", 上传,然后勾选“Set CSR Properties”,注意填写时,Secondary Orgnization Unit留空,然后Orgnization和Orgnization Unit填写您配置vmanage和vbond、vsmart所用的Orgnization-name,如下所示:

然后点击Import&Save即可,然后接下来点击“Configuration”->"Devices",如下图所示,

然后点击“Controllers”子页面,选择“Add Controller”添加vBond和vSmart,如下图所示:

添加界面如下:

然后点击左侧菜单栏“Configuration”->"Certificates",并选择Controllers子页,如下图所示:

分别选择右侧每个设备“...”字样按钮,点击后会有下拉菜单,

选择Generate CSR,然后就会弹出一个窗口,然后点击Download即可,并将下载好的CSR根据设备改名为vmanage.csr、vbond.csr、vsmart.csr,

然后将他们都通过mobaXterm上传到vmanage vshell开着的那个窗口,如下图所示,直接拖入到左边文件列表窗口就可以上传了:

然后通过如下命令在窗口中签发证书:
OpenSSL>x509 -req -days 1000  -CA rootCA.crt -CAkey rootCA.key -set_serial 02 -in vmanage.csr -out vmanage.pem
OpenSSL>x509 -req -days 1000 -CA rootCA.crt -CAkey rootCA.key -set_serial 03 -in vsmart.csr -out vsmart.pem
OpenSSL>x509 -req -days 1000 -CA rootCA.crt -CAkey rootCA.key -set_serial 04 -in vbond.csr -out vbond.pem

然后将这三个文件拷贝出来,回到vmanage webui,然后点击右上角“Install Certificate”,选择下载的pem文件安装即可:

安装需要等待一会儿,待显示Success了再安装第二台,以vmanage、vbond、vsmart的顺序安装:

安装完成后,您看到的证书状态就如下图所示了:

最后一步,就是在vmanage、vbond、vsmart的传输接口上配置tunnel-interface即可, 唯一需要注意的是要在vbond上配置encapsulation ipsec:

配置完成后,你就可以看到所有的控制器都上线了:


4. 安装边缘设备
4.1 安装serial文件
Serial file有两种方式,如果您都是物理设备也不需要PnP零配置开局,可以手工生成一个csv文件,当然这样的场景较少,我们来看支持PnP的方式,登录到software.cisco.com 选择“Plug and Play Connect”,点击“Controller Profiles”,然后选择“+Add Profile”,如下图示:

Controller Type选择vBond,然后点击下一步:

配置如下,证书选择root-ca-chain.pem上传即可:

然后再点入devices页面,根据您的设备序列号点击”+Add Devices"或者购买的虚机版本点击“+Add Software Devices”,输入相应的信息即可。

最后回到Controller Profiles页面,点击“Provisioning File”就会自动下载Serial文件,选择文件版本为18.3 and newer:

然后在vmanage中点击"Configuration->Devices"选择“Upload WAN Edge List”,

然后选择刚刚下载的文件,并且勾选“validate the uploaded vEdge list and send to controllers”

上传完毕后点击"Configuration->Devices“就可以看到已经支持的设备列表了,这些都有一次性的Token用于OTP开局。

4.2 部署CSR8000v
我们前一篇文章中讲述了一种CSR1000v开局方式

今天的主角NFVIS,即完全将一个基于CentOS的操作系统安装在ENCS或者UCS标准服务器平台上,然后以虚拟化的方式构建VNF、VM及容器,并通过支持SDWAN的统一虚拟路由器平台CSR8000v链接到云环境。

zartbot.Net,公众号:zartbot云网一体,端网融合:思科NFVIS探秘
在NFVIS中可以通过如下界面实现一键开局,其中UUID就是上图中的Chassis Number,OTP就是上图中的token,设备就会自动上线。
而今天我们针对云环境在vmware上部署一个虚机版本的CSR8000v,选择ova部署,然后也是下一步点到选择不同的Profile,做实验玩选择最小的就好,但是成年人的世界,肯定是最大都要呀~

存储选择也随意,反正它做转发基本不用硬盘,然后网络分三个接口GigabitEthernet1接Internet隧道服务口,Gi2、Gi3接业务口即可:

填写基本的主机名,管理用户名密码以及相应的广域网接口地址即可:


然后直接翻到最后填写SDWAN配置,选择一个UUID和OTP对填入即可:

重新启动后,登录CSR8000v,配置系统相关属性,例如systemip和siteid以及Organization-name:

配置IP地址和默认路由:


在CSR上拷贝RootCA证书,然后输入如下命令安装证书即可:


request platform software sdwan root-cert-chain install bootflash:root-ca-chain.pem
最后按照如下方式配置隧道即可:

如果需要ssh登录则需要按如下方式配置:

最后配置OTP加入到控制器:
CedgeA#request platform software sdwan vedge_cloud activate chassis-number <chassis-number> token <token>
稍等片刻,设备就上线了:


4.3 部署Catalyst Edge8300
我来看物理路由器如何开局的,默认它会有PnP开局的方式,但是我们先跳过,毕竟这文是讲原理的,首先打开机器接上串口线,将其转换为SDWAN模式,配置 如下:
enable
controller-mode enable

然后使用admin、admin登录,登陆后会要求您更改密码,然后中止原有的pnp流程,配置如下:
Router# pnpa service discovery stop
基本配置如下:
config-transaction
hostname CE8300A
clock timezone china 8
ntp server 10.74.5.1
system
system-ip 203.0.0.1
site-id 130001
organization-name CiscoDMZ
vbond 10.74.30.226
interface GigabitEthernet0/0/0
ip address 10.74.6.133 255.255.255.0
no shut
ip route 0.0.0.0 0.0.0.0 10.74.6.1
commit


然后再安装证书:

在Vmanage上配置“Administration-->Settings"选择One Touch Provisioning,选择“Enabled”并保存。

配置隧道:
interface Tunnel1
no shutdown
ip unnumbered GigabitEthernet0/0/0
tunnel source GigabitEthernet0/0/0
tunnel mode sdwan
exit
sdwan
interface GigabitEthernet0/0/0
tunnel-interface
encapsulation ipsec
color mpls
commit


完成后就可以在vmanage ”Configuration=》Devices=Unclaimed WAN Edges“中看到这个设备了,选择,然后Claim就上线咯~


4.4 配置service vpn
点击Tools-》SSH TERMINAL可以通过ssh远程登录到设备:

然后可以配置VRF和Service接口完成Service VPN的配置:
vrf definition 101
rd 1:101
address-family ipv4
exit-address-family
!
!


interface GigabitEthernet0/0/1
no shutdown
vrf forwarding 101
ip address 192.168.101.1 255.255.255.0
exit
interface Loopback101
no shutdown
vrf forwarding 101
ip address 192.168.222.1 255.255.255.255
exit


sdwan
omp
address-family ipv4 vrf 101
advertise connected
commit
远端也同样的方式配置相应的service vpn即可,然后查看VRF路由就可以看到远端的路由了

就此上线结束~ 以后我们再来看如何把这些流程自动化,今天还在跟朋友们开玩笑说DevOps是一个伪命题,因为做Ops的人写代码的能力并没有经历过严格的计算机系的训练,而Dev基本上也连Ops的能力都没有,搭个Testbed都要求人,所以先把Ops的东西写完,过几天我把Terraform+Ansible的运维脚本弄好了再教大家如何快速构建前面这么多复杂的步骤~
文章转载自zartbot,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论