Как мы перестали гадать на конфигах и отдали рутину ИИ (но без фанатизма)

Изображение: recraft
Сегодня сетевые конфиги — это очень запутанная сущность. Раньше у тебя была маленькая сеть, два десятка коммутаторов в одной стойке, и ты помнил каждый порт. А теперь облака, удалёнка, куча BGP-соседей, списки доступа на сотню страниц. И всё это живёт своей жизнью.
Классический способ «подключился по SSH — поправил — сохранил» работает до первого кривого правила. Которое ты добавил в пятницу вечером, уставший, потому что «ну надо было срочно открыть порт для тестов». А через три месяца этот порт светится наружу, и security спрашивает: «Ты чё, серьёзно?»
Человеческий мозг не железный. Мы не держим в голове 500 правил Firewall и не помним, что два года назад из-за похожего изменения лежало полсети. Поэтому мы пошли другим путём: не запрещать людям ошибаться, а дать им инструмент, который ловит глупости до того, как они уехали в прод.
Спойлер: мы скрестили Git, эмуляторы сети и локальный ИИ с памятью на всю нашу документацию. Получилось не идеально, но жить стало заметно легче.
Сначала порядок, потом магия
Какую бы умную нейросеть ты ни взял, если конфиги лежат кто в поле, кто в лесу — толку не будет. Поэтому первое условие: всё в Git. Каждый коммутатор, каждый роутер, каждый ACL — в репозитории. Любое изменение теперь выглядит так:
- создал ветку;
- поправил YAML или Jinja-шаблон;
- открыл Pull Request.
И вот тут, до того как конфиг уедет на железо, мы вклиниваемся в свои проверки. Обычный CI сумеет только синтаксис проверить: «скобка не там» или «IP не такой». А вот понять, что новое правило разрешает доступ к базе из любого места — это уже не к линтеру. Тут нужен кто-то с мозгами. Ну или с LLM.
ИИ — это не волшебник, а толковый стажёр
Модели вроде Llama или Mistral отлично понимают, что permit tcp any any eq 3306 значит открыть MySQL настежь. Но «голая» модель не знает, что в вашей компании так делать категорически нельзя. У неё нет ваших политик безопасности, нет истории инцидентов. Поэтому просто кинуть конфиг в ChatGPT — плохая идея. Он и поругает, и похвалит, но внутренних правил не знает. А если знает, значит, вы ему их скормили, а это уже утечка.
Нам нужно было, чтобы ИИ перед ответом лез в нашу базу знаний: политики, инструкции вендоров, старые тикеты. Это называется RAG (Retrieval-Augmented Generation). По-русски — «дай-ка я посмотрю в шпаргалку».
Как это работает на примере
Инженер открывает PR, меняет Firewall-правило. Система не просто скармливает весь конфиг нейросети, а сначала идёт в векторную базу, где лежат наши документы, и ищет похожие.
Допустим, есть правило: allow tcp any any eq 3306. База находит фрагмент из «Стандарта безопасности»: «порт 3306 только из подсети приложений, через прокси». ИИ это читает и пишет в PR коммент:
«Эй, это нарушает пункт 4.2. Нельзя открывать MySQL всему миру. Используй группу App-Proxy». Вжух — и инженер исправляет, не дожидаясь, когда его отругают на код-ревью. Но RAG умеет не только ругаться. Он ещё и память компании хранит.
Почему мы больше не наступаем на старые грабли
У каждого в команде есть такая история: «О, я такое уже делал, тогда полсети легло на два часа». Обычно эти знания уходят вместе с человеком. А мы загрузили в базу все постмортемы, тикеты из Jira и даже записи из корпоративного чата — но аккуратно, без личного.
И вот представь: инженер настраивает OSPF-фильтр. ИИ находит в архиве инцидент двухлетней давности: «Точно такой же фильтр на версии 17.3 привёл к чёрной дыре в маршрутизации». И выдаёт предупреждение. Даже если сейчас версия новая, он просто обратит внимание, и инженер полезет проверять документацию.
Это как если бы у тебя в команде был молчаливый ветеран, который помнит всё дерьмо, случившееся за последние пять лет, и вовремя дёргает за рукав.
А работает ли это вообще? Проверяем на эмуляторе
ИИ хорош, но иногда галлюцинирует. Может сказать, что всё ок, а на деле BGP-соседство не поднимется. Поэтому мы добавили в пайплайн ещё один шаг – эмуляцию.
Берём ContainerLab или Eve-NG, поднимаем там виртуальные копии наших устройств (с теми же версиями ОС, насколько возможно) и применяем новую конфигурацию. Потом запускаем тесты: пинги, BGP-сходимость, отказ линка.
Эмулятор честно скажет: «Соседство не установилось» или «Петля в маршрутизации». Мы эти результаты отдаём обратно ИИ, он их переваривает и пишет в PR: «Эмулятор подтвердил, что всё работает, но будь осторожен с версией: на железе у тебя 17.9, а эмулятор на 17.3».
Да, это не панацея. ASIC на эмуляторе не пощупать, очереди не проверить. Но 90% проблем с маршрутизацией и политиками ловится именно так.
Почему мы не используем облачный ChatGPT
Потому что конфиги — это по сути карта всей внутренней сети. IP-адреса, топология, пароли — да, иногда они зашиты в комментариях. Отправлять это в какой-то API за океан — самоубийство.
Поэтому мы развернули локальные модели. У нас стоит сервер с GPU, на нём крутится Llama или Mistral. Данные никуда не уходят. А значит, не нужно ничего маскировать, вырезать IP и притворяться, что ничего секретного нет. Модель видит конфиг как есть — и анализ получается точнее. Плюс скорость: ответ за пару секунд, а не «подожди, облако подумает».
Как это выглядит в жизни (спойлер: почти как обычный CI)
- Инженер пушит изменения в Git.
- Запускается CI (GitLab CI, GitHub Actions — не важно).
- Сначала обычный линтер: проверка синтаксиса.
- Потом RAG-модуль: ИИ лезет в базу знаний, ищет политики и старые кейсы, выдаёт замечания.
- Потом эмулятор поднимает стенд, прогоняет тесты.
- ИИ собирает всё в один комментарий под Pull Request.
Пример комментария, который видит инженер:
Синтаксис — ок.
Эмулятор — BGP сошёлся, пинги проходят.
Политики — нарушение пункта 5.1 (доступ к порту 22 из любой сети).
История — риск, похожий на инцидент #202 (два года назад так уронили DMZ).
Вердикт — нужен аппрув от security.
Человек читает, исправляет или аргументирует, почему сейчас можно. Без ИИ эти замечания ему бы написал сеньор на ревью через полдня. А тут — мгновенно.
Важный момент: человек всё равно главный
Мы не доверяем ИИ блокировать слияние кода. Он не робот-полицейский, а умный ассистент. Если он ошибся и назвал безопасное изменение опасным — инженер ставит пометку «ложное срабатывание». Мы это логируем и потом правим промпты или доки.
Со временем ложных срабатываний становится меньше. А младшие инженеры, читая развёрнутые комментарии ИИ со ссылками на документы, учатся быстрее. Двойная польза.
Ок, а что мы получили в цифрах?
Мы не фанаты KPI ради KPI, но пару метрик отслеживаем:
- Время обнаружения ошибки упало с «часы или дни» до нескольких минут (сразу после коммита).
- Откаты в проде стали реже процентов на 40. Потому что эмулятор ловит глупости до деплоя.
- Время ревью — старшие инженеры теперь смотрят только сложные моменты, а не вылавливают опечатки. Сэкономлена куча нервов.
Что дальше? Полная автоматизация?
Мы не гонимся за тем, чтобы ИИ сам правил конфиги. Но уже экспериментируем с таким сценарием: ИИ находит устаревшее правило, проверяет его по политикам, прогоняет в эмуляторе и, если уверен, создаёт Merge Request с исправлением. Инженеру остаётся только нажать Approve.
Или ещё круче: пишешь на русском: «Открыть доступ к серверу оплаты из подсети 10.0.0.0/24», а ИИ сам генерирует нужные ACL, сверяет с политиками и даже тесты для эмулятора пишет. До этого мы ещё не дошли, но выглядит реально.
Если коротко
Сети стали слишком сложными, чтобы полагаться только на глаза и память. Git + эмулятор + локальный ИИ с RAG — это не хайп, а рабочий инструмент. Он не заменит инженера, но избавит от рутины, напомнит о старых граблях и не даст случайно открыть MySQL на весь мир.
Попробуйте начать с малого: залейте свои политики в векторную базу, подключите локальную LLM и попросите её комментировать PR. Результат удивит. Только не забудьте про эмулятор — ИИ иногда врёт.
Ирек Багаутдинов, старший архитектор системных решений платформы «Боцман» (входит в «Группу Астра»)



