Автоматизация Сети. Случай Из Жизни

Привет, Хабр! В этой статье мы хотели бы поговорить об автоматизации сетевой инфраструктуры.

Будет представлена рабочая схема сети, которая работает в одной небольшой, но очень гордой компании.

Все совпадения с реальным сетевым оборудованием случайны.

Мы рассмотрим случай, произошедший в этой сети, который мог привести к остановке бизнеса на длительное время и серьезным финансовым потерям.

Решение данного случая очень хорошо вписывается в концепцию «Автоматизация сетевой инфраструктуры».

Используя средства автоматизации, мы покажем, как можно эффективно решать сложные задачи за короткое время, и поразмышляем, почему эти проблемы нужно решать так, а не иначе (через консоль).

Отказ от ответственности Нашими основными инструментами автоматизации являются Ansible (как инструмент автоматизации) и Git (как репозиторий для сборников сценариев Ansible).

Сразу хочу оговориться, что это не вводная статья, где мы говорим о логике Ansible или Git, а объясняем базовые вещи (например, что такое роли\задачи\модули\файлы инвентаря\переменные в Ansible, или что происходит, когда вы вводите команды git push или git commit).

Эта история не о том, как можно попрактиковаться в Ansible и настроить NTP или SMTP на своем оборудовании.

Это история о том, как можно быстро и желательно без ошибок решить сетевую проблему.

Также желательно хорошо понимать, как работает сеть, в частности, что такое стек протоколов TCP/IP, OSPF, BGP. Мы также исключим из уравнения выбор Ansible и Git. Если вам все же необходимо выбрать конкретное решение, настоятельно рекомендуем прочитать книгу «Программирование и автоматизация сетей.

Навыки сетевого инженера нового поколения» Джейсона Эдельмана, Скотта С.

Лоу и Мэтта Освальта.

Теперь к делу.



Постановка задачи

Представим ситуацию: 3 часа ночи вы крепко спите и видите сны.

Телефонный звонок.

Технический директор звонит: - Да? — ###, ####, #####, кластер фаервола упал и не поднимается!!! Ты трешь глаза, пытаясь осмыслить происходящее и представить, как такое вообще могло произойти.

По телефону слышно, как рвутся волосы на голове директора, и он просит перезвонить, потому что по второй линии ему звонит генерал.

Через полчаса вы собрали первые вступительные записи дежурной смены, разбудили всех, кого можно было разбудить.

В итоге технический директор не врал, все как есть, основной кластер фаерволов упал, и никакие элементарные телодвижения не приводят его в чувство.

Все услуги, которые предлагает компания, не работают. Выбирайте задачу на свой вкус, каждый запомнит что-то свое.

Например, после ночного обновления при отсутствии большой нагрузки все работало хорошо, и все довольные легли спать.

Трафик начал идти, а буферы интерфейса начали переполняться из-за ошибки в драйвере сетевой карты.

Джеки Чан может хорошо описать ситуацию.



Автоматизация сети.
</p><p>
 Случай из жизни

Спасибо, Джеки.

Не очень приятная ситуация, не так ли? Оставим на время нашу сеть, братан, с его грустными мыслями.

Давайте обсудим, как будут развиваться события дальше.

Предлагаем следующий порядок изложения материала.

  1. Давайте посмотрим на сетевую диаграмму и посмотрим, как она работает;
  2. Мы опишем, как мы переносим настройки с одного роутера на другой с помощью Ansible;
  3. Давайте поговорим об автоматизации ИТ-инфраструктуры в целом.



Схема и описание сети

Схема

Автоматизация сети.
</p><p>
 Случай из жизни

Давайте рассмотрим логическую схему нашей организации.

Мы не будем называть конкретных производителей оборудования; для целей данной статьи это не имеет значения (Внимательный читатель догадается, какое оборудование используется) .

Это лишь одно из хороших преимуществ работы с Ansible; при настройке нас вообще не волнует, что это за оборудование.

Для понимания, это оборудование известных производителей, таких как Cisco, Juniper, Check Point, Fortinet, Palo Alto. можно заменить на свой вариант. У нас есть две основные задачи по перемещению трафика:

  1. Обеспечить публикацию наших услуг, которые являются бизнесом компании;
  2. Обеспечить связь с филиалами, удаленным дата-центром и сторонними организациями (партнерами и клиентами), а также доступ филиалов к сети Интернет через центральный офис.

Начнем с основных элементов:
  1. Два пограничных маршрутизатора (БРД-01, БРД-02);
  2. Кластер межсетевых экранов (FW-CLUSTER);
  3. Основной переключатель (L3-CORE);
  4. Маршрутизатор, который станет спасательным кругом (по мере решения проблемы перенесем настройки сети из FW-CLUSTER в АВАРИЙНЫЙ) (АВАРИЙНЫЙ);
  5. Коммутаторы для управления сетевой инфраструктурой (L2-MGMT);
  6. Виртуальная машина с Git и Ansible (VM-АВТОМАТИЗАЦИЯ);
  7. Ноутбук, на котором ведется тестирование и разработка плейбуков для Ansible (Laptop-Automation).

Сеть настроена с использованием протокола динамической маршрутизации OSPF со следующими областями:
  • Зона 0 – зона, включающая маршрутизаторы, отвечающие за передачу трафика в зоне EXCHANGE;
  • Зона 1 – зона, включающая маршрутизаторы, отвечающие за работу сервисов компании;
  • Область 2 – область, включающая маршрутизаторы, отвечающие за маршрутизацию трафика управления;
  • Зона N – зоны филиальных сетей.

На пограничных маршрутизаторах создается виртуальный маршрутизатор (VRF-INTERNET), на котором устанавливается eBGP full view с соответствующей назначенной AS. iBGP настроен между VRF. У компании есть пул белых адресов, которые публикуются в этом VRF-ИНТЕРНЕТЕ.

Часть белых адресов маршрутизируется напрямую в FW-CLUSTER (адреса, на которых работают сервисы компании), часть маршрутизируется через зону EXCHANGE (внутренние сервисы компании, требующие внешние IP-адреса, и внешние NAT-адреса для офисов).

Далее трафик идет на созданные на L3-CORE виртуальные маршрутизаторы с белыми и серыми адресами (зонами безопасности).

Сеть управления использует выделенные коммутаторы и представляет собой физически выделенную сеть.

Сеть управления также разделена на зоны безопасности.

АВАРИЙНЫЙ маршрутизатор физически и логически дублирует FW-КЛАСТЕР.

Все интерфейсы на нем отключены кроме тех, которые смотрят в сеть управления.



Автоматизация и ее описание

Мы разобрались, как работает сеть.

Теперь пошагово рассмотрим, что мы будем делать для перевода трафика с FW-CLUSTER на EMERGENCY:

  1. Отключаем интерфейсы на коммутаторе ядра (L3-CORE), которые подключают его к FW-CLUSTER;
  2. Отключаем интерфейсы на коммутаторе ядра L2-MGMT, которые подключают его к FW-CLUSTER;
  3. Настраиваем АВАРИЙНЫЙ роутер (по умолчанию на нем отключены все интерфейсы, кроме связанных с L2-MGMT):
  • Включаем интерфейсы АВАРИЙНО;
  • Настраиваем внешний IP-адрес (для NAT), который был на FW-кластере;
  • Генерируем gARP-запросы, чтобы мак-адреса в arp-таблицах L3-CORE менялись с FW-Cluster на EMERGENCY;
  • Мы регистрируем маршрут по умолчанию как статический для BRD-01, BRD-02;
  • Создание правил NAT;
  • Поднимите уровень до АВАРИЙНОЙ зоны OSPF 1;
  • Поднимите уровень до АВАРИЙНОЙ зоны OSPF 2;
  • Изменяем стоимость маршрутов в Зоне 1 на 10;
  • Мы меняем стоимость маршрута по умолчанию в Зоне 1 на 10;
  • Меняем IP-адреса, связанные с L2-MGMT (на те, что были на FW-CLUSTER);
  • Генерируем gARP-запросы, чтобы мак-адреса в arp-таблицах L2-MGMT менялись с FW-CLUSTER на EMERGENCY.
Опять возвращаемся к исходной постановке задачи.

Три часа ночи, колоссальный стресс, ошибка на любом этапе могут привести к новым проблемам.

Готовы вводить команды через CLI? Да? Ладно, пойди хотя бы ополосни лицо, выпей кофейку и соберись с силой воли.

Брюс, пожалуйста, помоги ребятам.



Автоматизация сети.
</p><p>
 Случай из жизни

Что ж, мы продолжаем совершенствовать нашу автоматизацию.

Ниже приведена диаграмма того, как работает плейбук в терминах Ansible. Эта схема отражает то, что мы описали чуть выше, это просто конкретная реализация в Ansible.

Автоматизация сети.
</p><p>
 Случай из жизни

На этом этапе мы поняли, что нужно сделать, разработали плейбук, провели тестирование и теперь готовы его запустить.

Еще одно небольшое лирическое отступление.

Легкость этой истории не должна вводить вас в заблуждение.

Процесс написания пьес оказался не таким простым и быстрым, как могло показаться.

Тестирование заняло довольно много времени, был создан виртуальный стенд, решение тестировалось много раз, было проведено около 100 тестов.

Запускаем.

Есть ощущение, что все происходит очень медленно, где-то ошибка, что-то в итоге не работает. Ощущение прыжка с парашютом, но парашют не хочет сразу раскрываться.

это нормально.

Далее читаем результат выполненных операций Ansible playbook (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. Мы никак не можем на это повлиять.

Ждем.

Это сработало.

Теперь все готово.

А в деревне Вилабахо (которая не хочет автоматизировать настройку сети) продолжают мыть посуду.

Брюс (правда, уже другой, но не менее крутой) пытается понять, насколько еще будет происходить ручная перенастройка оборудования.



Автоматизация сети.
</p><p>
 Случай из жизни

Еще хотелось бы остановиться на одном важном моменте.

Как нам вернуть все обратно? Через некоторое время мы вернем к жизни наш FW-КЛАСТЕР.

Это основное оборудование, а не резервное, на нем должна работать сеть.

Чувствуете, как сетевики начинают выгорать? Технический директор выслушает тысячу аргументов, почему этого делать нельзя, почему это можно сделать позже.

К сожалению, так работает сеть из кучи патчей, кусков и остатков былой роскоши.

Получается лоскутное одеяло.

Наша задача в целом, не в этой конкретной ситуации, а вообще в принципе, как ИТ-специалистов, — довести работу сети до красивого английского слова «consistency», оно очень многогранное, его можно перевести как: согласованность.

, последовательность, логика, связность, системность, сопоставимость, связность.

Это все о нем.

Только в таком состоянии сеть управляема, мы четко понимаем, что и как работает, четко понимаем, что нужно изменить, если необходимо, четко знаем, куда смотреть, если возникнут проблемы.

И только в такой сети можно выполнять трюки, подобные тем, которые мы только что описали.

Собственно, был подготовлен еще один плейбук, который вернул настройки в исходное состояние.

Логика его работы та же (важно помнить, что порядок выполнения задач очень важен), чтобы не удлинять и без того немаленькую статью, мы решили не публиковать листинг выполнения плейбука.

После проведения таких упражнений вы почувствуете себя намного спокойнее и увереннее в будущем, к тому же любые костыли, которые вы там нагромоздили, сразу же проявят себя.

Любой может написать нам и получить исходники всего написанного кода вместе со всеми книгами.

Контакты в профиле.



выводы

На наш взгляд, процессы, которые можно автоматизировать, еще не выкристаллизовались.

Исходя из того, с чем мы столкнулись и что обсуждают наши западные коллеги, пока просматриваются следующие темы:

  • Предоставление устройств;
  • Сбор данных;
  • Составление отчетов;
  • Поиск неисправностей;
  • Согласие.

Если есть интерес, можем продолжить дискуссию по одной из заданных тем.

Еще хотелось бы немного поговорить об автоматизации.

Каким оно должно быть в нашем понимании:

  • Система должна жить без человека, совершенствуясь при этом человеком.

    Система не должна зависеть от людей;

  • «Операция должна быть экспертной.

    Нет класса специалистов, выполняющих рутинные задачи.

    Есть специалисты, которые автоматизировали всю рутину и решают только сложные задачи;

  • Рутинные/стандартные задачи выполняются автоматически «одним нажатием кнопки», ресурсы не тратятся зря.

    Результат таких задач всегда предсказуем и понятен.

И к чему должны привести эти пункты:
  • Прозрачность ИТ-инфраструктуры (Меньше рисков эксплуатации, модернизации, внедрения.

    Меньше простоев в год);

  • Возможность планирования ИТ-ресурсов (Система планирования мощностей - видно сколько потребляется, видно сколько ресурсов требуется в единой системе, а не по письмам и визитам в верхние отделы);
  • Возможность сокращения количества ИТ-персонала.

Авторы статьи: Александр Человеков (CCIE RS, CCIE СП) и Павел Кириллов.

Мы заинтересованы в обсуждении и предложении решений по теме автоматизации ИТ-инфраструктуры.

Теги: #информационная безопасность #Сетевые технологии #git #Системное администрирование #сеть #автоматизация сети #asible

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.