¡Hola, Habr!
En este artículo, nos gustaría hablar sobre la automatización de la infraestructura de red. Presentaremos un esquema de red que funciona en una pequeña, pero muy orgullosa empresa. Cualquier coincidencia con el equipo de red real es pura casualidad. Examinaremos un caso que ocurrió en esta red, que podría haber llevado a una detención prolongada del negocio y a pérdidas financieras significativas. La solución de este caso se enmarca muy bien en el concepto de "Automatización de la infraestructura de red". Con herramientas de automatización, mostraremos cómo se pueden resolver eficazmente problemas complejos en tiempos reducidos y reflexionaremos sobre por qué es más prometedor abordar estas tareas de esta manera, en lugar de hacerlo a través de la consola.
Descargo de responsabilidad
Los principales instrumentos para la automatización que utilizamos son Ansible (como herramienta de automatización) y Git (como almacenamiento de playbooks de Ansible). Quiero hacer hincapié en que este no es un artículo introductorio, donde hablamos sobre la lógica de trabajo de Ansible o Git, y explicamos cosas básicas (por ejemplo, qué son los módulos, los archivos de inventario y las variables en Ansible, o qué sucede al introducir los comandos git push o git commit). Esta historia no trata de cómo practicar con Ansible, configurar NTP o SMTP en el equipo. Se trata de cómo resolver un problema de red de manera rápida y, preferiblemente, sin errores. También es recomendable tener una buena comprensión del funcionamiento de la red, en particular, qué es la pila de protocolos TCP/IP, OSPF, BGP. La elección de Ansible y Git también queda fuera de discusión. Si todavía está considerando una solución específica, le recomendamos encarecidamente leer el libro "Network Programmability and Automation. Skills for the Next-Generation Network Engineer" de Jason Edelman, Scott S. Lowe y Matt Oswalt.
Vamos al grano.
Planteamiento del problema
Imaginemos la situación: son las 3 de la mañana, usted está durmiendo profundamente y soñando. Suena el teléfono. Llama el director técnico:
— ¿Sí?
— ###, ####, #####, ¡el clúster de cortafuegos ha caído y no se levanta!!!
Usted se frota los ojos, intenta comprender lo que está sucediendo y se pregunta cómo pudo ocurrir algo así. Al fondo, se oye cómo el director está despeinándose y pide que le devuelvan la llamada, porque en la otra línea está llamando el director general.
Después de media hora, recopilaste la primera información del turno de guardia y despertaste a todos los que pudiste. Al final, el director técnico no mintió; todo es cierto, el clúster principal de cortafuegos se ha caído y ningún movimiento básico lo está reactivando. Todos los servicios que ofrece la empresa no están funcionando.
Elige el problema que más te guste; cada uno recordará algo diferente. Por ejemplo, después de la actualización nocturna, en ausencia de una gran carga, todo funcionaba bien y todos, satisfechos, se fueron a dormir. Luego llegó el tráfico y los búferes de las interfaces comenzaron a desbordarse debido a un error en el controlador de la tarjeta de red.
La situación puede describirse bien con Jackie Chan.

Gracias, Jackie.
No es una situación muy agradable, ¿verdad?
Dejaremos de lado a nuestro amigo de red con sus tristes pensamientos por un momento.
Discutamos cómo se desarrollarán los eventos a partir de ahora.
Proponemos el siguiente orden de presentación del material.
- Analicemos el esquema de red y examinemos cómo funciona;
- Describiremos cómo transferimos configuraciones de un enrutador a otro utilizando Ansible;
- Hablaremos sobre la automatización de la infraestructura de TI en general.
Esquema de red y su descripción
Esquema

Analizaremos el esquema lógico de nuestra organización. No nombraremos a los fabricantes específicos de equipos, ya que esto no tiene relevancia en el contexto del artículo. (El lector atento adivinará por sí mismo qué equipo se utiliza.). Este es uno de los buenos beneficios de trabajar con Ansible; en general, no nos importa qué tipo de equipo es al configurar. Solo para entender, este equipo es de proveedores conocidos, como Cisco, Juniper, Check Point, Fortinet, Palo Alto... puedes insertar tu opción.
Tenemos dos tareas principales para mover el tráfico:
- Asegurar la publicación de nuestros servicios, que son el negocio de la empresa;
- Asegurar la comunicación con las sucursales, el centro de datos remoto y organizaciones externas (socios y clientes), así como la salida de las sucursales a internet a través de la oficina central.
Comencemos con los elementos principales:
- Dos enrutadores perimetrales (BRD-01, BRD-02);
- Clúster de cortafuegos (FW-CLUSTER);
- Conmutador de núcleo (L3-CORE);
- Un enrutador que actuará como salvavidas (durante la solución del problema, transferiremos las configuraciones de red de FW-CLUSTER a EMERGENCY) (EMERGENCY);
- Conmutadores para gestionar la infraestructura de red (L2-MGMT);
- Máquina virtual con Git y Ansible (VM-AUTOMATION);
- Portátil utilizado para las pruebas y el desarrollo de los playbooks para Ansible (Laptop-Automation).
En la red se ha configurado el protocolo de enrutamiento dinámico OSPF con las siguientes áreas:
- Área 0 – área que incluye los enrutadores responsables del movimiento de tráfico en la zona EXCHANGE;
- Área 1 – área que incluye los enrutadores que manejan los servicios de la empresa;
- Área 2 – área que incluye los enrutadores responsables del enrutamiento del tráfico de gestión;
- Área N – áreas de redes de sucursales.
Se ha creado un enrutador virtual (VRF-INTERNET) en los enrutadores de borde, donde se ha establecido una vista completa de eBGP con el AS correspondiente. Entre los VRF se ha configurado iBGP. La empresa tiene un grupo de direcciones blancas que se publican en estos VRF-INTERNET. Parte de las direcciones blancas se enrutan directamente a FW-CLUSTER (direcciones donde operan los servicios de la empresa), parte se enrutan a través de la zona EXCHANGE (servicios internos de la empresa que requieren direcciones IP externas y direcciones externas NAT para las oficinas). A continuación, el tráfico se dirige a los enrutadores virtuales creados en L3-CORE con direcciones blancas y grises (zonas de seguridad).
En la red de gestión se utilizan conmutadores dedicados que representan una red físicamente segregada. La red de gestión también se divide en zonas de seguridad.
El enrutador EMERGENCY es un duplicado físico y lógico de FW-CLUSTER. Todos los interfaces están desactivados excepto aquellos que se conectan a la red de gestión.
Automatización y su descripción
Hemos comprendido cómo funciona la red. Ahora desglosaremos paso a paso lo que haremos para redirigir el tráfico de FW-CLUSTER a EMERGENCY:
- Desconectamos los interfaces en el conmutador de núcleo (L3-CORE) que lo conectan a FW-CLUSTER;
- Desconectamos los interfaces en el conmutador de núcleo L2-MGMT que lo conectan a FW-CLUSTER;
- Configuramos el enrutador EMERGENCY (por defecto, todos los interfaces están desactivados excepto aquellos que están conectados a L2-MGMT):
- Activamos los interfaces en EMERGENCY;
- Configuramos la dirección IP externa (para NAT) que estaba en FW-Cluster;
- Generamos solicitudes gARP para que en las tablas arp de L3-CORE cambien las direcciones MAC de FW-Cluster a EMERGENCY;
- Escribimos la ruta por defecto estática hacia BRD-01, BRD-02;
- Creamos reglas NAT;
- Activamos OSPF Área 1 en EMERGENCY;
- Activamos OSPF Área 2 en EMERGENCY;
- Cambiamos el costo de las rutas en Área 1 a 10;
- Cambiamos el costo de la ruta por defecto en Área 1 a 10;
- Cambiamos dirección IP, relacionados con L2-MGMT (por los que estaban en FW-CLUSTER);
- Generamos solicitudes gARP para que las direcciones MAC en las tablas arp de L2-MGMT cambien de FW-CLUSTER a EMERGENCY.
Volvemos a la formulación original del problema. Son las tres de la mañana, hay un gran estrés, un error en cualquiera de las etapas puede llevar a nuevos problemas. ¿Están listos para ingresar comandos a través de la CLI? ¿Sí? Bien, vayan a lavarse la cara, tómense un café y reúnan valor.
Bruce, por favor, ayuda a los chicos.

Mientras tanto, continuamos desarrollando nuestra automatización.
A continuación se presenta un diagrama de cómo funciona el playbook en términos de Ansible. Este diagrama refleja lo que describimos un poco más arriba, solo que es una implementación concreta en Ansible.

En esta etapa hemos comprendido lo que hay que hacer, hemos desarrollado el playbook, realizado pruebas, y ahora estamos listos para ejecutarlo.
Otro pequeño desvío lírico. La fluidez de la narrativa no debe engañarte. El proceso de escribir playbooks no fue tan simple ni rápido como puede parecer. Las pruebas tomaron bastante tiempo, se creó un banco de pruebas virtual, se probó la solución repetidamente, y se llevaron a cabo alrededor de 100 pruebas.
Desplegando... Hay una sensación de que todo avanza muy lentamente, hay un error en algún lugar, algo no funcionará al final. Es como saltar en paracaídas y que el paracaídas no quiera abrirse de inmediato... es normal.
A continuación, leemos el resultado de las operaciones realizadas por el playbook de Ansible (las direcciones IP han sido reemplazadas por motivos de conspiración):
[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 : Deshabilitar las interfaces PROD al FW-CLUSTER] *********************
modificado: [vcf]
PLAY [------->Emergency on MGMT-CORE] ************************************************
TASK [mgmt_junos_emergency_on : Deshabilitar las interfaces MGMT al FW-CLUSTER] ******************
modificado: [m9-03-sw-03-mgmt-core]
PLAY [------->Emergency on] ****************************************************
TASK [mk_routeros_emergency_on : Habilitar la interfaz EXT-INTERNET] **************************
modificado: [m9-04-r-04]
TASK [mk_routeros_emergency_on : Generar gARP para la interfaz EXT-INTERNET] ****************
modificado: [m9-04-r-04]
TASK [mk_routeros_emergency_on : Habilitar la ruta estática por defecto a EXT-INTERNET] ****************
modificado: [m9-04-r-04]
TASK [mk_routeros_emergency_on : Cambiar la regla NAT a la interfaz EXT-INTERNET] ****************
modificado: [m9-04-r-04] => (item=12)
modificado: [m9-04-r-04] => (item=14)
modificado: [m9-04-r-04] => (item=15)
modificado: [m9-04-r-04] => (item=16)
modificado: [m9-04-r-04] => (item=17)
TASK [mk_routeros_emergency_on : Habilitar OSPF Área 1 PROD] ******************************
modificado: [m9-04-r-04]
TASK [mk_routeros_emergency_on : Habilitar OSPF Área 2 MGMT] *****************************
modificado: [m9-04-r-04]
TASK [mk_routeros_emergency_on : Cambiar los costos de las interfaces OSPF Área 1 a 10] *****************
modificado: [m9-04-r-04] => (item=VLAN-1001)
modificado: [m9-04-r-04] => (item=VLAN-1002)
modificado: [m9-04-r-04] => (item=VLAN-1003)
modificado: [m9-04-r-04] => (item=VLAN-1004)
modificado: [m9-04-r-04] => (item=VLAN-1005)
modificado: [m9-04-r-04] => (item=VLAN-1006)
modificado: [m9-04-r-04] => (item=VLAN-1007)
modificado: [m9-04-r-04] => (item=VLAN-1008)
modificado: [m9-04-r-04] => (item=VLAN-1009)
modificado: [m9-04-r-04] => (item=VLAN-1010)
modificado: [m9-04-r-04] => (item=VLAN-1011)
modificado: [m9-04-r-04] => (item=VLAN-1012)
modificado: [m9-04-r-04] => (item=VLAN-1013)
modificado: [m9-04-r-04] => (item=VLAN-1100)
TASK [mk_routeros_emergency_on : Cambiar el costo por defecto del área OSPF 1 a 10] ******************
modificado: [m9-04-r-04]
TASK [mk_routeros_emergency_on : Cambiar las direcciones IP de las interfaces MGMT] ********************
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})
TASK [mk_routeros_emergency_on : Generar gARPs para las interfaces MGMT] *********************
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
modificado: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})
PLAY RECAP ************************************************************************¡Listo!
En realidad, aún no está completamente listo; no olvidemos la convergencia de los protocolos de enrutamiento dinámico y la carga de una gran cantidad de rutas en el FIB. No podemos influir en esto de ninguna manera. Esperemos. Ha convergido. Ahora sí está listo.
Y en el pueblo de Vilabadjo (que no quiere automatizar la configuración de la red) siguen lavando platos. Bruce (aunque ya es otro, pero no menos genial) está tratando de entender cuántos dispositivos más necesita reconfigurar manualmente.

Me gustaría detenerme en un punto importante más. ¿Cómo podemos devolver todo a su estado anterior? Después de algún tiempo, volveremos a poner en marcha nuestro FW-CLUSTER. Este es el equipo principal, no uno de respaldo; en él debe funcionar la red.
¿Sientes cómo la tensión empieza a elevarse entre los administradores de red? El director técnico escuchará mil argumentos sobre por qué no se debe hacer esto, por qué se puede hacer después. Lamentablemente, así es como se trabaja en la red, con un montón de parches, piezas, restos de prosperidad pasada. Se convierte en un mosaico. Nuestra tarea, en general, no solo en esta situación específica, sino como especialistas en TI, es llevar el funcionamiento de la red a una hermosa palabra inglesa: "consistency", que es muy polifacética y se puede traducir como: coherencia, no contradicción, lógica, unidad, sistematización, comparabilidad, conexión. Todo esto se refiere a ella. Solo en tal estado la red puede ser gestionada; entendemos claramente qué y cómo funciona, somos conscientes de lo que hay que cambiar si es necesario, y sabemos exactamente dónde mirar si surgen problemas. Y solo en tal red se pueden realizar trucos como los que hemos descrito.
De hecho, se ha preparado otro playbook que revertía la configuración a su estado original. Su lógica de funcionamiento es la misma (es importante recordar que el orden de las tareas es muy importante); para no alargar este artículo que ya es bastante extenso, decidimos no publicar el listado de ejecución del playbook. Al realizar tales ejercicios, te sentirás mucho más tranquilo y seguro sobre el futuro; además, cualquier parche que hayas implementado se evidenciará de inmediato.
Todos los interesados pueden escribirnos y obtener el código fuente de todo lo escrito, junto con todos los playbooks. Los contactos están en el perfil.
Conclusiones
En nuestra opinión, los procesos que se pueden automatizar aún no se han cristalizado. A partir de lo que hemos enfrentado y de lo que discuten nuestros colegas occidentales, los siguientes temas son visibles:
- Provisionamiento de dispositivos;
- Recopilación de datos;
- Informes;
- Resolución de problemas;
- Cumplimiento.
Si hay interés, podemos continuar la discusión sobre uno de los temas planteados.
También nos gustaría reflexionar un poco sobre la automatización. ¿Cómo debería ser en nuestra comprensión:
- El sistema debe funcionar sin intervención humana, mientras mejora con la ayuda de personas. El sistema no debe depender de los humanos;
- La operación debe ser experta. Falta una clase de especialistas que realice tareas rutinarias. Hay expertos que han automatizado toda la rutina y solo resuelven tareas complejas;
- Tareas rutinarias y estándar se realizan automáticamente "con un botón", sin desperdiciar recursos. El resultado de tales tareas siempre es predecible y claro.
Y a dónde deberían llevar estos puntos:
- Transparencia de la infraestructura de TI (Menos riesgos de operación, modernización, implementación. Menos tiempo de inactividad al año);
- Capacidad para planificar recursos de TI (Sistema de planificación de capacidad — se ve cuántos se consumen, se ve cuántos recursos se requieren en un único sistema, y no a través de correos electrónicos y visitas a los jefes de departamento);
- Posibilidad de reducir la cantidad de personal de TI que brinda soporte.
Los autores del artículo: Alexander Chelnakov (CCIE RS, CCIE SP) y Pavel Kirilov. Nos interesa discutir y proponer soluciones sobre la automatización de la infraestructura de TI.
Fuente: habr.com
