Netwerkautomatisering. Een casus uit iemands leven

Hé Habr!

In dit artikel willen we het hebben over automatisering van netwerkinfrastructuur. Er zal een werkdiagram worden gepresenteerd van het netwerk dat opereert in een klein maar zeer trots bedrijf. Alle matches met echte netwerkapparatuur zijn willekeurig. We zullen kijken naar een geval dat zich in dit netwerk heeft voorgedaan en dat tot een langdurige bedrijfssluiting en ernstige financiële verliezen had kunnen leiden. De oplossing voor dit geval past heel goed in het concept van “Automatisering van netwerkinfrastructuur”. Met behulp van automatiseringstools laten we zien hoe je complexe problemen in korte tijd effectief kunt oplossen en reflecteren we waarom deze problemen op deze manier moeten worden opgelost en niet anders (via de console).

Disclaimer

Onze belangrijkste tools voor automatisering zijn Ansible (als automatiseringstool) en Git (als repository voor Ansible-playbooks). Ik wil meteen een voorbehoud maken dat dit geen inleidend artikel is, waarin we praten over de logica van Ansible of Git, en basiszaken uitleggen (bijvoorbeeld wat roltaskimodules, inventarisbestanden, variabelen in Ansible zijn, of wat er gebeurt als je voert de git push of git commit commando's in). Dit verhaal gaat niet over hoe u Ansible kunt oefenen en NTP of SMTP op uw apparatuur kunt configureren. Dit is een verhaal over hoe je snel en liefst foutloos een netwerkprobleem kunt oplossen. Het is ook raadzaam om goed te begrijpen hoe het netwerk werkt, in het bijzonder wat de TCP/IP-, OSPF-, BGP-protocolstack is. We zullen ook de keuze voor Ansible en Git buiten beschouwing laten. Als u nog een specifieke oplossing moet kiezen, raden wij u ten zeerste aan het boek “Network Programmability and Automation” te lezen. Vaardigheden voor de netwerkingenieur van de volgende generatie" door Jason Edelman, Scott S. Lowe en Matt Oswalt.

Nu naar het bedrijfsleven.

Formulering van het probleem

Laten we ons een situatie voorstellen: om 3 uur 's ochtends slaap je diep en droom je. Telefoongesprek. De technisch directeur roept:

- Ja?
— ###, ####, #####, het firewallcluster is gevallen en stijgt niet!!!
Je wrijft in je ogen, probeert te begrijpen wat er gebeurt en stelt je voor hoe dit überhaupt zou kunnen gebeuren. Aan de telefoon hoor je de haren op het hoofd van de directeur scheuren en hij vraagt ​​terug te bellen omdat de generaal hem op de tweede lijn belt.

Een half uur later verzamelde je de eerste inleidende aantekeningen van de dienst en maakte iedereen wakker die wakker kon worden. Als gevolg hiervan heeft de technisch directeur niet gelogen, alles is zoals het is, het hoofdcluster van firewalls is gevallen en geen enkele fundamentele lichaamsbeweging brengt hem bij zinnen. Alle diensten die het bedrijf aanbiedt, werken niet.

Kies een probleem naar jouw smaak, iedereen zal zich iets anders herinneren. Na een nachtelijke update zonder zware belasting werkte alles bijvoorbeeld goed en ging iedereen tevreden naar bed. Het verkeer begon te stromen en de interfacebuffers begonnen over te stromen als gevolg van een bug in het stuurprogramma van de netwerkkaart.

Jackie Chan kan de situatie goed beschrijven.

Netwerkautomatisering. Een casus uit iemands leven

Dank je, Jackie.

Geen erg prettige situatie, toch?

Laten we ons netwerk broer een tijdje met zijn droevige gedachten achterlaten.

Laten we bespreken hoe de evenementen zich verder zullen ontwikkelen.

Wij raden de volgende volgorde van presentatie van het materiaal aan

  1. Laten we naar het netwerkdiagram kijken en zien hoe het werkt;
  2. We zullen beschrijven hoe we instellingen van de ene naar de andere router overbrengen met behulp van Ansible;
  3. Laten we het hebben over de automatisering van de IT-infrastructuur als geheel.

Netwerkdiagram en beschrijving

Het schema

Netwerkautomatisering. Een casus uit iemands leven

Laten we eens kijken naar het logische diagram van onze organisatie. We zullen geen specifieke fabrikanten van apparatuur noemen; voor de doeleinden van dit artikel doet het er niet toe (De oplettende lezer raadt wel wat voor apparatuur er gebruikt wordt). Dit is slechts een van de goede voordelen van het werken met Ansible; bij het opzetten maakt het ons over het algemeen niet uit wat voor soort apparatuur het is. Om het goed te begrijpen: dit is apparatuur van bekende leveranciers, zoals Cisco, Juniper, Check Point, Fortinet, Palo Alto... u kunt uw eigen optie vervangen.

Voor het verplaatsen van verkeer hebben wij twee hoofdtaken:

  1. Zorgen voor de publicatie van onze diensten, die tot de bedrijfsactiviteiten van het bedrijf behoren;
  2. Zorg voor communicatie met vestigingen, een extern datacenter en externe organisaties (partners en klanten), evenals toegang van vestigingen tot internet via het centrale kantoor.

Laten we beginnen met de basiselementen:

  1. Twee grensrouters (BRD-01, BRD-02);
  2. Firewallcluster (FW-CLUSTER);
  3. Kernschakelaar (L3-CORE);
  4. Een router die een levensader zal worden (terwijl we het probleem oplossen, zullen we de netwerkinstellingen overbrengen van FW-CLUSTER naar EMERGENCY) (EMERGENCY);
  5. Switches voor netwerkinfrastructuurbeheer (L2-MGMT);
  6. Virtuele machine met Git en Ansible (VM-AUTOMATION);
  7. Een laptop waarop het testen en ontwikkelen van draaiboeken voor Ansible (Laptop-Automation) wordt uitgevoerd.

Het netwerk is geconfigureerd met een dynamisch OSPF-routeringsprotocol met de volgende gebieden:

  • Gebied 0 – gebied met routers die verantwoordelijk zijn voor het verplaatsen van verkeer in de EXCHANGE-zone;
  • Gebied 1 – gebied dat routers omvat die verantwoordelijk zijn voor de werking van bedrijfsdiensten;
  • Gebied 2 – gebied dat routers omvat die verantwoordelijk zijn voor het routeren van beheerverkeer;
  • Gebied N – gebieden van vestigingsnetwerken.

Op borderrouters wordt een virtuele router (VRF-INTERNET) aangemaakt, waarop eBGP Full View wordt geïnstalleerd met de bijbehorende toegewezen AS. iBGP wordt geconfigureerd tussen VRF's. Het bedrijf beschikt over een pool van witte adressen die op dit VRF-INTERNET worden gepubliceerd. Sommige witte adressen worden rechtstreeks naar FW-CLUSTER gerouteerd (adressen waarop de services van het bedrijf actief zijn), andere worden via de EXCHANGE-zone gerouteerd (interne bedrijfsservices waarvoor externe IP-adressen nodig zijn, en externe NAT-adressen voor kantoren). Vervolgens gaat het verkeer naar virtuele routers die op L3-CORE zijn gemaakt met witte en grijze adressen (beveiligingszones).

Het beheernetwerk maakt gebruik van speciale switches en vertegenwoordigt een fysiek speciaal netwerk. Het beheernetwerk is ook onderverdeeld in beveiligingszones.
De EMERGENCY-router dupliceert fysiek en logisch de FW-CLUSTER. Alle interfaces erop zijn uitgeschakeld, behalve de interfaces die naar het beheernetwerk kijken.

Automatisering en de beschrijving ervan

We hebben ontdekt hoe het netwerk werkt. Laten we nu stap voor stap bekijken wat we gaan doen om verkeer van FW-CLUSTER naar EMERGENCY over te dragen:

  1. We schakelen de interfaces op de kernschakelaar (L3-CORE) uit die deze verbinden met de FW-CLUSTER;
  2. We schakelen de interfaces op de L2-MGMT-kernelschakelaar uit die deze verbinden met de FW-CLUSTER;
  3. We configureren de EMERGENCY-router (standaard zijn alle interfaces uitgeschakeld, behalve die welke zijn gekoppeld aan L2-MGMT):

  • Wij maken interfaces mogelijk op EMERGENCY;
  • We configureren het externe IP-adres (voor NAT) dat zich op het FW-Cluster bevond;
  • We genereren gARP-verzoeken zodat de poppy-adressen in de L3-CORE arp-tabellen worden gewijzigd van FW-Cluster naar EMERGENCY;
  • We registreren de standaardroute als statisch naar BRD-01, BRD-02;
  • NAT-regels maken;
  • Ga naar EMERGENCY OSPF-gebied 1;
  • Ga naar EMERGENCY OSPF-gebied 2;
  • We veranderen de kosten van routes in gebied 1 naar 10;
  • We veranderen de kosten van de standaardroute in gebied 1 naar 10;
  • We veranderen de IP-adressen die zijn gekoppeld aan L2-MGMT (naar de IP-adressen die zich op FW-CLUSTER bevonden);
  • We genereren gARP-verzoeken zodat de klaproosadressen in de L2-MGMT arp-tabellen worden gewijzigd van FW-CLUSTER naar EMERGENCY.

Opnieuw keren we terug naar de oorspronkelijke formulering van het probleem. Drie uur 's ochtends, enorme stress, een fout in welk stadium dan ook kan tot nieuwe problemen leiden. Klaar om opdrachten te typen via de CLI? Ja? Oké, ga in ieder geval je gezicht spoelen, drink wat koffie en verzamel je wilskracht.
Bruce, help de jongens alsjeblieft.

Netwerkautomatisering. Een casus uit iemands leven

Welnu, we blijven onze automatisering verbeteren.
Hieronder ziet u een diagram van hoe het draaiboek in Ansible-termen werkt. Dit schema weerspiegelt wat we hierboven hebben beschreven, het is slechts een specifieke implementatie in Ansible.
Netwerkautomatisering. Een casus uit iemands leven

In dit stadium realiseerden we ons wat er moest gebeuren, ontwikkelden we een draaiboek, voerden we tests uit en nu zijn we klaar om het te lanceren.

Nog een kleine lyrische uitweiding. Het gemak van het verhaal mag je niet misleiden. Het proces van het schrijven van draaiboeken was niet zo eenvoudig en snel als het lijkt. Het testen kostte behoorlijk wat tijd, er werd een virtuele stand gecreëerd, de oplossing werd vele malen getest, er werden ongeveer 100 tests uitgevoerd.

Laten we lanceren... Er is een gevoel dat alles heel langzaam gebeurt, er is ergens een fout, iets zal uiteindelijk niet werken. Het gevoel alsof je met een parachute springt, maar de parachute wil niet meteen opengaan... dit is normaal.

Vervolgens lezen we het resultaat van de uitgevoerde bewerkingen van het Ansible-playbook (de IP-adressen zijn vervangen vanwege geheimhouding):

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

Klaar!

In feite is het nog niet helemaal klaar, vergeet de convergentie van dynamische routeringsprotocollen en het laden van een groot aantal routes in de FIB niet. Wij kunnen hier op geen enkele manier invloed op uitoefenen. We wachten. Het is gelukt. Nu is het klaar.

En in het dorp Vilabajo (dat de netwerkinstallatie niet wil automatiseren) blijven ze de afwas doen. Bruce (toegegeven, al anders, maar niet minder cool) probeert te begrijpen hoeveel meer handmatige herconfiguratie van de apparatuur zal plaatsvinden.

Netwerkautomatisering. Een casus uit iemands leven

Ik wil ook graag stilstaan ​​bij een belangrijk punt. Hoe krijgen we alles terug? Na enige tijd zullen we ons FW-CLUSTER weer tot leven brengen. Dit is de hoofdapparatuur, geen back-up, het netwerk moet erop draaien.

Voel jij hoe netwerkers een burn-out beginnen te krijgen? De technisch directeur krijgt duizend argumenten te horen waarom dit niet moet, en waarom dit later wel kan. Helaas is dit hoe het netwerk werkt vanuit een aantal patches, stukken en overblijfselen van zijn vroegere luxe. Het blijkt een lappendeken te zijn. Onze taak in het algemeen, niet in deze specifieke situatie, maar in het algemeen in principe, als IT-specialisten, is om het werk van het netwerk naar het mooie Engelse woord “consistentie” te brengen, het is zeer veelzijdig, het kan vertaald worden als: coherentie , consistentie, logica, coherentie, systematiek, vergelijkbaarheid, coherentie. Het draait allemaal om hem. Alleen in deze staat is het netwerk beheersbaar, we begrijpen duidelijk wat werkt en hoe, we begrijpen duidelijk wat er veranderd moet worden, we weten duidelijk waar we moeten zoeken als er zich problemen voordoen. En alleen in zo'n netwerk kun je trucs uitvoeren zoals degene die we zojuist hebben beschreven.

Eigenlijk werd er een ander draaiboek voorbereid, waarmee de instellingen naar hun oorspronkelijke staat werden teruggezet. De logica van de werking ervan is hetzelfde (het is belangrijk om te onthouden dat de volgorde van de taken erg belangrijk is). Om een ​​toch al vrij lang artikel niet te verlengen, hebben we besloten geen lijst met de uitvoering van het draaiboek te plaatsen. Na het uitvoeren van dergelijke oefeningen zul je je in de toekomst veel rustiger en zelfverzekerder voelen, bovendien zullen alle krukken die je daar hebt opgestapeld zich onmiddellijk openbaren.

Iedereen kan ons schrijven en de bronnen van alle geschreven code ontvangen, samen met alle palybooks. Contacten in profiel.

Bevindingen

Naar onze mening zijn processen die geautomatiseerd kunnen worden nog niet uitgekristalliseerd. Op basis van wat we zijn tegengekomen en wat onze westerse collega’s bespreken, zijn tot nu toe de volgende thema’s zichtbaar:

  • Apparaatinrichting;
  • Gegevensverzameling;
  • Rapportage;
  • Probleemoplossen;
  • Compliance.

Als er interesse is, kunnen we de discussie over een van de aangegeven onderwerpen voortzetten.

Ik wil het ook graag even hebben over automatisering. Wat het volgens ons zou moeten zijn:

  • Het systeem moet leven zonder een persoon, terwijl het door een persoon wordt verbeterd. Het systeem mag niet afhankelijk zijn van mensen;
  • De bediening moet deskundig zijn. Er bestaat geen klasse specialisten die routinetaken uitvoeren. Er zijn experts die de hele routine hebben geautomatiseerd en alleen complexe problemen oplossen;
  • Routinematige standaardtaken worden automatisch uitgevoerd “met één druk op de knop”, er gaan geen middelen verloren. Het resultaat van dergelijke taken is altijd voorspelbaar en begrijpelijk.

En waar moeten deze punten toe leiden:

  • Transparantie van de IT-infrastructuur (minder risico's van exploitatie, modernisering, implementatie. Minder downtime per jaar);
  • De mogelijkheid om IT-middelen te plannen (capaciteitsplanningssysteem - u kunt zien hoeveel er wordt verbruikt, u kunt zien hoeveel middelen nodig zijn in een enkel systeem, en niet via brieven en bezoeken aan de topafdelingen);
  • Mogelijkheid om het aantal IT-personeel te verminderen.

Auteurs van het artikel: Alexander Chelovekov (CCIE RS, CCIE SP) en Pavel Kirillov. Wij zijn geïnteresseerd in het bespreken en voorstellen van oplossingen op het gebied van automatisering van de IT-infrastructuur.


Bron: www.habr.com

Voeg een reactie