网络自动化。生活案例

哈Ha!

在本文中,我们想谈谈网络基础设施的自动化。将显示一个有效的网络图,该网络图在一个很小但很引以为傲的公司中运作。与真实网络硬件的所有匹配都是随机的。我们将考虑在此网络中发生的一个案例,这可能导致长时间的业务关闭和严重的财务损失。这种情况的解决方案非常适合“网络基础结构自动化”的概念。使用自动化工具,我们将向您展示如何在短时间内有效解决复杂问题,并思考为什么这些任务更有希望以这种方式而不是其他方式(通过控制台)解决的主题

免责声明

我们的主要自动化工具是Ansible(作为自动化手段)和Git(作为Ansible剧本的存储库)。我立即想保留一点,即这不是一篇介绍性文章,我们在其中讨论Ansible或Git的逻辑,并解释基本内容(例如,Ansible中的角色\任务\模块\库存文件\变量是什么,或者当您输入git push命令时会发生什么情况)或git commit)。这个故事与您如何在Ansible中练习,如何在NTP或SMTP设备上进行配置无关。这是一个有关如何快速且最好没有错误地解决网络问题的故事。还希望对网络的工作方式有个好主意,尤其是什么是TCP / IP,OSPF,BGP协议栈。 Ansible和Git的选择也不可行。如果您仍然可以选择特定的解决方案,我们强烈建议您阅读《网络可编程性和自动化》一书。 Jason Edelman,Scott S. Lowe和Matt Oswalt撰写的“下一代网络工程师的技能”。


现在到了重点。

问题的提法


想象一下一种情况:凌晨3点,您睡得很香,梦见梦。拨打电话。技术总监

打电话:-是吗?
-###,####,#####,防火墙群集已下降且没有上升!
您揉揉眼睛,试着意识到正在发生的事情,并想象这种事情可能是怎么发生的。在管子中,您可以听到导演头上的头发在撕裂,他要求回电,因为将军在第二行叫他。

半个小时后,您收集了值班的第一批入门笔记,唤醒了您可能醒来的所有人。结果,技术总监没有撒谎,一切都是这样,防火墙的主要集群已经崩溃,并且没有任何基本的举动能使他感到满意。公司提供的所有服务均无效。

选择一个适合自己口味的问题,每个人都会记住一些不同的东西。例如,经过一整夜的更新后,在没有沉重的负荷的情况下,一切正常,所有人都满意了。流量消失了,由于网卡驱动程序中的错误,接口缓冲区开始溢出。

这种情况可以很好地描述成龙。



谢谢,杰基。

情况不是很愉快,对吗?

让我们带着他悲伤的想法离开我们的网络兄弟吧。

我们将讨论事件将如何进一步发展。

我们提供以下材料展示顺序

  1. 考虑网络图并分析其工作原理;
  2. 我们将描述如何使用Ansible将设置从一台路由器传输到另一台路由器。
  3. 让我们大致讨论一下IT基础架构的自动化。

网络图及其说明


方案





考虑我们组织的逻辑。我们不会指定设备的特定制造商,在本文中也没关系(专心的读者自己会猜测使用的是哪种设备)这只是与Ansible合作的优点之一,通常在安装时我们并不关心它是哪种设备。仅了解一下,该设备是Cisco,Juniper,Check Point,Fortinet,Palo Alto等知名供应商...您可以替代您自己的版本。

我们有两项主要任务来移动流量:

  1. 确保发布我们的服务,这是公司的业务;
  2. 提供与分支机构,远程数据中心和第三方组织(合作伙伴和客户)的通信,以及通过中心办公室访问Internet。

让我们从基本元素开始:

  1. 两个边界路由器(BRD-01,BRD-02);
  2. 防火墙群集(FW-CLUSTER);
  3. 内核开关(L3-CORE);
  4. 成为生命线的路由器(在解决问题的过程中,我们会将网络设置从FW-CLUSTER转移到EMERGENCY)(EMERGENCY);
  5. 用于管理网络基础结构的交换机(L2-MGMT);
  6. 具有Git和Ansible的虚拟机(VM-AUTOMATION);
  7. 一台为Ansible测试并开发剧本的笔记本电脑(笔记本电脑自动化)。

在网络上配置动态OSPF路由协议,其区域如下:

  • 区域0-包含负责交换区域中流量移动的路由器的区域;
  • 区域1-包括负责公司服务的路由器的区域;
  • 区域2-包含负责路由管理流量的路由器的区域;
  • 区域N-分支网络区域。

在边界路由器上,它是在虚拟路由器(VRF-INTERNET)上创建的,在该虚拟路由器上会引发带有相应已分配AS的eBGP全视图。在VRF之间,配置了iBGP。该公司拥有在这些VRF-INTERNET上发布的白色地址池。一些白色地址直接路由到FW-CLUSTER(公司服务在其上运行的地址),一些白色地址通过EXCHANGE区域(内部公司服务需要办公室的外部IP地址和外部NAT地址)路由。此外,流量会到达在L3-CORE上创建的带有白色和灰色地址(安全区域)的虚拟路由器。

管理网络使用专用交换机,并且是物理专用网络。管理网络也分为安全区域。
紧急路由器在物理上和逻辑上复制FW-CLUSTER。除了查看管理网络的接口以外,所有接口都被禁用。

自动化及其描述


我们弄清了网络是如何工作的。现在,让我们看一下将流量从FW-CLUSTER转移到EMERGENCY的步骤:

  1. 禁用内核交换机(L3-CORE)上将其连接到FW-CLUSTER的接口;
  2. 禁用L2-MGMT核心交换机上将其连接到FW-CLUSTER的接口;
  3. 配置紧急路由器(默认情况下,除与L2-MGMT关联的接口外,所有接口均禁用):

  • 我们在EMERGENCY上包含接口;
  • 配置外部IP地址(用于NAT),该地址位于FW-Cluster上;
  • 我们生成gARP请求,以便在L3-CORE arp表中,罂粟地址从FW-Cluster更改为EMERGENCY;
  • BRD-01, BRD-02;
  • NAT;
  • EMERGENCY OSPF Area 1;
  • EMERGENCY OSPF Area 2;
  • Area 1 10;
  • Area 1 10;
  • ip-, L2-MGMT ( , FW-CLUSTER);
  • gARP , arp- L2-MGMT - FW-CLUSTER EMERGENCY.

同样,我们回到问题的原始表述。凌晨三点,压力巨大,任何阶段的错误都可能导致新问题。准备通过CLI键入命令了吗?是?好吧,至少要去洗一下脸,喝咖啡,然后用拳头收起你的意志。
布鲁斯,请帮忙。



好吧,我们继续削减自动化。
下面是用Ansible表示的工作簿图。该图反映了我们上面描述的内容,只是Ansible中的一个具体实现。


在这个阶段,我们意识到需要做的事情,开发了剧本,进行了测试,现在我们准备开始了。

另一个小的题外话。简单的叙述不应误导您。编写剧本的过程并不像看起来那样简单快捷。测试花费了很多时间,创建了虚拟机架,解决方案多次滚动,进行了大约100次测试。

我们开始……感觉一切都进行得非常缓慢,某处有一个错误,最后某些东西将无法工作。跳伞的感觉,而跳伞不想立刻打开……这很正常。

接下来,我们阅读Ansible剧本操作的结果(出于阴谋目的,我们替换了IP地址):

[xxx@emergency ansible]$ ansible-playbook -i /etc/ansible/inventories/prod_inventory.ini /etc/ansible/playbooks/emergency_on.yml 

PLAY [------->Emergency on VCF] ********************************************************

TASK [vcf_junos_emergency_on : Disable PROD interfaces to FW-CLUSTER] *********************
changed: [vcf]

PLAY [------->Emergency on MGMT-CORE] ************************************************

TASK [mgmt_junos_emergency_on : Disable MGMT interfaces to FW-CLUSTER] ******************
changed: [m9-03-sw-03-mgmt-core]

PLAY [------->Emergency on] ****************************************************

TASK [mk_routeros_emergency_on : Enable EXT-INTERNET interface] **************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Generate gARP for EXT-INTERNET interface] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable static default route to EXT-INTERNET] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change NAT rule to EXT-INTERNET interface] ****************
changed: [m9-04-r-04] => (item=12)
changed: [m9-04-r-04] => (item=14)
changed: [m9-04-r-04] => (item=15)
changed: [m9-04-r-04] => (item=16)
changed: [m9-04-r-04] => (item=17)

TASK [mk_routeros_emergency_on : Enable OSPF Area 1 PROD] ******************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable OSPF Area 2 MGMT] *****************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change OSPF Area 1 interfaces costs to 10] *****************
changed: [m9-04-r-04] => (item=VLAN-1001)
changed: [m9-04-r-04] => (item=VLAN-1002)
changed: [m9-04-r-04] => (item=VLAN-1003)
changed: [m9-04-r-04] => (item=VLAN-1004)
changed: [m9-04-r-04] => (item=VLAN-1005)
changed: [m9-04-r-04] => (item=VLAN-1006)
changed: [m9-04-r-04] => (item=VLAN-1007)
changed: [m9-04-r-04] => (item=VLAN-1008)
changed: [m9-04-r-04] => (item=VLAN-1009)
changed: [m9-04-r-04] => (item=VLAN-1010)
changed: [m9-04-r-04] => (item=VLAN-1011)
changed: [m9-04-r-04] => (item=VLAN-1012)
changed: [m9-04-r-04] => (item=VLAN-1013)
changed: [m9-04-r-04] => (item=VLAN-1100)

TASK [mk_routeros_emergency_on : Change OSPF area1 default cost for to 10] ******************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change MGMT interfaces ip addresses] ********************
changed: [m9-04-r-04] => (item={u'ip': u'..n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+14.254', u'name': u'VLAN-899'})

TASK [mk_routeros_emergency_on : Generate gARPs for MGMT interfaces] *********************
changed: [m9-04-r-04] => (item={u'ip': u'..n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'..n+14.254', u'name': u'VLAN-899'})

PLAY RECAP ************************************************************************

做完了!

实际上,它还没有准备好,不要忘记动态路由协议的融合以及FIB中大量路由的加载。我们不能以任何方式影响这一点。我们等。它走到了一起。现在准备好了。

在Vilabaggio村(不想自动进行网络设置),他们继续洗碗。布鲁斯(虽然已经有所不同,但同样不错)却试图找出手动重新配置设备的数量。



我也想谈一谈重要的一点。我们如何收回一切?一段时间后,我们将使FW-CLUSTER复活。这是主要设备,而不是备用设备,网络应该可以在上面工作。

想要开始在网络专家中燃烧吗?技术总监将听到一千个争论,为什么没有必要,为什么以后可以这样做。不幸的是,这是网络从一堆过去的奢侈品中残留下来的方式。原来是被子。我们的整体任务不是在这种特殊情况下,而是总的来说,原则上,作为IT专家,是将网络带到漂亮的英文单词“ consistency”,它是一个非常多方面的内容,可以翻译为:一致性,一致性,一致性,一致性,一致性,可比性,连通性。这就是他的全部。只有在这种状态下网络才是可控的,我们才能清楚地了解它的作用和工作方式,我们清楚地意识到需要更改的内容,如果有必要,我们会清楚地知道在出现问题时应该去哪里。而且只有在这样的网络中,您才能做我们刚刚描述的技巧。

实际上,还准备了另一本剧本,将设置恢复为原始状态。他的工作逻辑是相同的(要记住,重要的是,任务的顺序非常重要),为了不延长已经很长的文章,我们决定不发布剧本的清单。进行了此类练习之后,您将对未来感到更加镇定和自信,此外,您堆在那里的拐杖都会立即发现自己。

每个人都可以给我们写信,并获取所有书面代码以及所有手册的源代码。个人资料中的联系人。

发现


我们认为,可以自动化的流程尚未明确。根据我们遇到的情况以及我们的西方同事正在讨论的内容,以下主题仍然可见:

  • 设备配置;
  • 数据采集​​;
  • 报告中
  • 故障排除;
  • 合规

如果有兴趣,我们可以继续就给定主题之一进行讨论。

我也想推测一下自动化。在我们的理解中应该是什么:

  • 该系统必须在没有人的情况下生存,同时要改善人。系统不应依赖于人;
  • 操作必须是专家。没有执行日常任务的专家类别。有些专家可以使整个例程自动化,并且只能解决复杂的问题。
  • 常规\标准任务通过“按钮”自动完成,不会浪费资源。此类任务的结果始终是可预测和可理解的。


这些观点应该导致什么:

  • IT基础架构的透明度(运营,现代化,实施的风险较小。每年的停机时间更少);
  • 计划IT资源的能力(容量计划系统-您可以查看消耗了多少资源,在单个系统中需要多少资源,而无需通过信函和高层部门的来访);
  • 减少IT人员数量的能力。

本文的作者:Alexander Manov(CCIE RS,CCIE SP)和Pavel Kirillov。我们有兴趣讨论和提出有关IT基础架构自动化主题的解决方案。

All Articles