Automatisation du réseau. Cas de vie

Bonjour, Habr!

Dans cet article, nous aimerions parler de l'automatisation de l'infrastructure réseau. Un schéma de réseau fonctionnel sera présenté, qui opère dans une petite mais très fière entreprise. Toutes les correspondances avec du matériel réseau réel sont aléatoires. Nous allons considérer un cas survenu dans ce réseau, qui pourrait conduire à une fermeture de l'entreprise pendant longtemps et à de graves pertes financières. La solution de ce cas s'inscrit très bien dans le concept d '"Automatisation de l'infrastructure réseau". Avec l'aide d'outils d'automatisation, nous montrerons comment vous pouvez résoudre efficacement des problèmes complexes en peu de temps et réfléchirons à la raison pour laquelle ces tâches sont plus prometteuses à résoudre de cette manière et non autrement (via la console) .

Avertissement

Nos principaux outils d'automatisation sont Ansible (comme moyen d'automatisation) et Git (comme référentiel des playbooks d'Ansible). Je veux immédiatement faire une réservation que ce n'est pas un article introductif où nous parlons de la logique d'Ansible ou Git, et expliquer des choses de base (par exemple, quels sont les rôles \ tâches \ modules \ fichiers d'inventaire \ variables dans Ansible, ou ce qui se passe lorsque vous entrez des commandes push git ou git commit). Cette histoire n'est pas sur la façon dont vous pouvez vous entraîner dans Ansible, le configurer sur un équipement NTP ou SMTP. C'est une histoire sur la façon dont vous pouvez résoudre rapidement et de préférence sans erreur un problème de réseau. Il est également souhaitable d'avoir une bonne idée du fonctionnement du réseau, en particulier de la pile de protocoles TCP / IP, OSPF, BGP. Le choix d'Ansible et de Git est également hors de question. Si vous avez toujours le choix d'une solution spécifique,nous vous recommandons fortement de lire le livre Network Programmability and Automation. Compétences pour l'ingénieur réseau de nouvelle génération »par Jason Edelman, Scott S. Lowe et Matt Oswalt.


Maintenant au point.

Formulation du problème


Imaginez une situation: à 3 heures du matin, vous dormez profondément et rêvez. L'appel au téléphone. Le directeur technique appelle:

- Oui?
- ###, ####, #####, le cluster de pare-feu est tombé et ne monte pas !!!
Vous vous frottez les yeux, essayez de réaliser ce qui se passe et imaginez comment une telle chose aurait pu arriver. Dans le tube, on entend les cheveux se déchirer sur la tête du réalisateur, et il demande de rappeler, car le général l'appelle en deuxième ligne.

Après une demi-heure, vous avez recueilli les premières notes introductives du quart de travail, réveillé toutes les personnes avec qui vous pourriez vous réveiller. En conséquence, le directeur technique n'a pas menti, tout est ainsi, le groupe principal de pare-feu est tombé, et aucun geste de base ne le ramène à ses sens. Tous les services que l'entreprise propose ne fonctionnent pas.

Choisissez un problème à votre goût, tout le monde se souviendra de quelque chose de différent. Par exemple, après une mise à jour du jour au lendemain, en l'absence d'une lourde charge, tout a bien fonctionné et tous les satisfaits se sont couchés. Le trafic est allé et les tampons d'interface ont commencé à déborder en raison d'un bogue dans le pilote de la carte réseau.

La situation peut bien décrire Jackie Chan.



Merci, Jackie.

La situation n'est pas très agréable, n'est-ce pas?

Partons pour le temps de notre réseau frère avec ses tristes pensées.

Nous discuterons de l'évolution future des événements.

Nous vous proposons l'ordre suivant de présentation du matériel

  1. Examinez le schéma du réseau et analysez son fonctionnement;
  2. Nous décrirons comment nous transférons les paramètres d'un routeur à un autre à l'aide d'Ansible;
  3. Parlons de l'automatisation de l'infrastructure informatique en général.

Schéma du réseau et sa description


Schème





Considérez la logique de notre organisation. Nous ne nommerons pas de fabricants spécifiques d'équipements, cela n'a pas d'importance dans l'article (le lecteur attentif lui-même devinera quel type d' équipement est utilisé) . Ce n'est là qu'un des bons avantages de travailler avec Ansible, lors de la configuration, en général, nous ne nous soucions pas de quel type d'équipement il s'agit. Juste pour comprendre, cet équipement est des fournisseurs bien connus tels que Cisco, Juniper, Check Point, Fortinet, Palo Alto ... vous pouvez remplacer votre propre version.

Nous avons deux tâches principales pour déplacer le trafic:

  1. Assurer la publication de nos services, qui sont l'affaire de l'entreprise;
  2. Fournissez la communication avec les succursales, un centre de données distant et des organisations tierces (partenaires et clients), ainsi que l'accès à Internet via le bureau central.

Commençons par les éléments de base:

  1. Deux routeurs frontaliers (BRD-01, BRD-02);
  2. Cluster de pare-feu (FW-CLUSTER);
  3. Commutateur de noyau (L3-CORE);
  4. Un routeur qui deviendra une bouée de sauvetage (dans le processus de résolution du problème, nous transférerons les paramètres réseau de FW-CLUSTER vers EMERGENCY) (EMERGENCY);
  5. Commutateurs pour la gestion de l'infrastructure réseau (L2-MGMT);
  6. Machine virtuelle avec Git et Ansible (VM-AUTOMATION);
  7. Un ordinateur portable qui teste et développe des playbooks pour Ansible (Laptop-Automation).

Un protocole de routage OSPF dynamique est configuré sur le réseau avec les zones suivantes:

  • Zone 0 - la zone dans laquelle les routeurs responsables du mouvement du trafic dans la zone ECHANGE sont inclus;
  • Zone 1 - la zone dans laquelle les routeurs responsables du travail des services de l'entreprise sont inclus;
  • Zone 2 - la zone dans laquelle les routeurs responsables du trafic de gestion de routage sont inclus;
  • Zone N - zones du réseau de succursales.

Sur les routeurs frontaliers, il a été créé à l'aide d'un routeur virtuel (VRF-INTERNET), sur lequel une vue complète eBGP a été élevée avec l'AS affecté correspondant. Entre les VRF, iBGP est configuré. La société possède un pool d'adresses blanches qui sont publiées sur ces VRF-INTERNET. Certaines des adresses blanches sont acheminées directement vers FW-CLUSTER (adresses sur lesquelles opèrent les services de l'entreprise), certaines sont acheminées via la zone EXCHANGE (services internes à l'entreprise qui nécessitent des adresses IP externes et des adresses NAT externes pour les bureaux). De plus, le trafic parvient aux routeurs virtuels créés sur L3-CORE avec des adresses blanches et grises (zones de sécurité).

Les réseaux de gestion utilisent des commutateurs dédiés et constituent un réseau physiquement dédié. Le réseau de gestion est également divisé en zones de sécurité.
Le routeur d'URGENCE duplique physiquement et logiquement le FW-CLUSTER. Toutes les interfaces y sont désactivées sauf celles qui regardent le réseau de gestion.

L'automatisation et sa description


Nous avons compris comment fonctionne le réseau. Voyons maintenant les étapes, que ferons-nous pour transférer le trafic de FW-CLUSTER vers l'URGENCE:

  1. Désactivez les interfaces sur le commutateur du noyau (L3-CORE) qui le connectent au FW-CLUSTER;
  2. Désactivez les interfaces sur le commutateur principal L2-MGMT qui le connectent au FW-CLUSTER;
  3. Configurez le routeur d'URGENCE (par défaut, toutes les interfaces sont désactivées sur celui-ci, sauf celles associées à L2-MGMT):

  • Nous incluons des interfaces sur l'URGENCE;
  • Configurez l'adresse IP externe (pour NAT), qui était sur FW-Cluster;
  • Nous générons des requêtes GARP de sorte que dans les tables d'arp L3-CORE, les adresses de pavot passent de 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.

Encore une fois, nous revenons à la formulation originale du problème. Trois heures du matin, un stress énorme, une erreur à n'importe quelle étape peut entraîner de nouveaux problèmes. Prêt à taper des commandes via la CLI? Oui? D'accord, allez au moins vous rincer le visage, buvez du café et rassemblez votre volonté dans un poing.
Bruce, s'il vous plaît, aidez les gars.



Eh bien, nous continuons de réduire notre automatisation.
Vous trouverez ci-dessous un schéma du classeur en termes d'Ansible. Ce diagramme reflète ce que nous avons décrit ci-dessus, juste une implémentation concrète dans Ansible.


À ce stade, nous avons réalisé ce qui devait être fait, développé un playbook, effectué des tests, maintenant nous sommes prêts à le lancer.

Encore une petite digression. La facilité de la narration ne doit pas vous induire en erreur. Le processus d'écriture des playbooks n'était pas aussi simple et rapide qu'il y paraît. Les tests ont pris beaucoup de temps, un stand virtuel a été créé, la solution a été déployée plusieurs fois, une centaine de tests ont été effectués.

On commence ... On a l'impression que tout se passe très lentement, quelque part il y a une erreur, quelque chose ne fonctionnera pas au final. La sensation d'un saut en parachute, et le parachute ne veut pas s'ouvrir immédiatement ... c'est normal.

Ensuite, nous lisons le résultat des opérations du livre de jeu Ansible (nous avons remplacé les adresses IP à des fins de complot):

[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 ************************************************************************

Terminé!

En fait, ce n’est pas tout à fait prêt, n’oubliez pas la convergence des protocoles de routage dynamique et le chargement d’un grand nombre de routes dans la FIB. Nous ne pouvons en aucun cas influencer cela. Nous attendons. C'est venu ensemble. Maintenant c'est prêt.

Et dans le village de Vilabaggio (qui ne veut pas automatiser la configuration du réseau), ils continuent de laver la vaisselle. Bruce (bien que déjà différent, mais non moins cool) essaie de comprendre combien de plus pour reconfigurer manuellement l'équipement.



Je voudrais également insister sur un point important. Comment récupérer tout? Après un certain temps, nous redonnerons vie à notre FW-CLUSTER. Il s'agit de l'équipement principal, pas de l'équipement de sauvegarde, le réseau devrait y fonctionner.

Envie de commencer à brûler chez les networkers? Le directeur technique entendra mille arguments pourquoi cela n'est pas nécessaire, pourquoi cela peut être fait plus tard. Malheureusement, c'est ainsi que le réseau fonctionne à partir d'un tas de patchs, de pièces, de vestiges de l'ancien luxe. Il s'avère qu'une courtepointe. Notre tâche dans son ensemble, pas dans cette situation particulière, mais en général, en principe, en tant que spécialistes des TI, est d'amener le réseau au beau mot anglais «cohérence», il est très multiforme, il peut se traduire par: cohérence, cohérence, cohérence, cohérence, cohérence, cohérence, comparabilité, connectivité. Tout tourne autour de lui. Ce n'est que dans cet état que le réseau est gérable, nous comprenons clairement ce qu'il fonctionne et comment il fonctionne, nous comprenons clairement ce qui doit être changé, si nécessaire, nous savons clairement où chercher en cas de problème.Et ce n'est que dans un tel réseau que vous pouvez faire des tours comme ceux que nous venons de décrire.

En fait, un autre playbook a été préparé, qui a remis les paramètres à leur état d'origine. La logique de son travail est la même (il est important de se rappeler, l'ordre des tâches est très important), afin de ne pas prolonger l'article déjà long, nous avons décidé de ne pas publier la liste du playbook. Après avoir effectué de tels exercices, vous vous sentirez beaucoup plus calme et plus confiant dans l'avenir, de plus, toutes les béquilles que vous y aurez entassées se retrouveront immédiatement.

Tout le monde peut nous écrire et obtenir le code source de tout le code écrit, ainsi que tous les palybooks. Contacts dans le profil.

résultats


À notre avis, les processus pouvant être automatisés ne se sont pas encore cristallisés. Sur la base de ce que nous avons rencontré et de ce que nos collègues occidentaux discutent, les sujets suivants sont toujours visibles:

  • Provisionnement des appareils;
  • Collecte de données;
  • Rapports
  • Dépannage;
  • Conformité

S'il y a un intérêt, nous pouvons poursuivre la discussion sur l'un des sujets donnés.

Je veux également spéculer un peu sur l'automatisation. Que devrait-il être dans notre compréhension:

  • Le système doit vivre sans homme, tout en améliorant l'homme. Le système ne doit pas dépendre de la personne;
  • L'opération doit être experte. Il n'y a pas de classe de spécialistes qui effectuent des tâches de routine. Il y a des experts qui ont automatisé toute la routine et ne résolvent que des problèmes complexes;
  • Les tâches de routine \ standard sont effectuées automatiquement "par bouton", les ressources ne sont pas gaspillées. Le résultat de ces tâches est toujours prévisible et compréhensible.


Et que devraient conduire ces points:

  • Transparence de l'infrastructure informatique (moins de risques d'exploitation, de modernisation, de mise en œuvre. Moins de temps d'arrêt par an);
  • La capacité de planifier les ressources informatiques (système de planification des capacités - vous pouvez voir combien est consommé, combien de ressources sont nécessaires dans un seul système, et non par des lettres et des visites aux départements supérieurs);
  • Capacité à réduire le nombre de personnel informatique.

Auteurs de l'article: Alexander Manov (CCIE RS, CCIE SP) et Pavel Kirillov. Nous souhaitons discuter et proposer des solutions sur le thème de l'automatisation des infrastructures informatiques.

All Articles