
Сегодня разберем такой вопрос, как выбор и использование инструментов в работе сетевого инженера, ведь правильно подобранный и настроенный инструмент — это уже половина дела. Такие религиозные вопросы, как выбор операционной системы или конкретной программы поднимать не будем, так как это дело вкуса каждого. В последнее время выбору и изучению инструментов уделяется особенное место и навыки по использованию этих инструментов становятся все более значимыми. Рассмотрим вопросы использования текстовых редакторов, системы контроля версий, языка шаблонов, инструментов для подключения к сетевому оборудованию, использование ChatOps и некоторых экзотических решений.
Текстовый редактор
Что нужно:
- редактирование конфигов (в том числе с применением regex);
- сравнение конфигов;
- просмотр и анализ лог-файлов;
- редактирование кода и всевозможных YAML, JSON, XML файлов.
Примеры продукта: Notepad++, Atom, Sublime Text, Visual Studio Code или любой другой. Ниже разберем примеры задач и их решения.
1. Редактирование конфигов
Например, есть некий конфиг, в котором надо по определенному правилу заменить некие параметры. Приведу оторванный от сетевой тематики пример: допустим есть список российских имен людей и надо заменить все женские и мужские имена на male/female. Тут на помощь придет использование регулярных выражений. Допустим, что все женские имена заканчиваются на “а” или “я”, тогда этого будет достаточно, чтобы выполнить задачу в две итерации:
- Замена (^\S+?[ая]$) на female;
- Замена (^[^f]\S+) на male.




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

2. Сравнение двух конфигов
Сравнение конфигураций или логов — довольна частая задача в работе сетевого инженера.

3. Просмотр и анализ лог-файлов
Допустим, есть длинный лог файл и нам надо просмотреть только те строки, которые начинаются на “fe”. У разных редакторов это делается по-своему, рассмотрим на примере VS Code. Тут надо установить расширение “Filter Line” и затем будет возможность отобразить нужные строки по регулярному выражению.



4. Редактирование кода
Это довольно объемная тема. Для сетевого инженера чаще возникает задача редактирования кода на Python, а так же файлов YAML, JSON, XML. Минимально достаточные функции редактора для сетевого инженера:
- табы и пробелы (настройка 1 таба как Х пробелов);
- подсвечивание (и удаление) пустых пробелов в конце (trailing whitespace);
- вертикальная линия на 79 (или сколько вам нужно) знаков;
- помощь в редактировании YAML, JSON, XML файлов.

Совместная работа с файлами и шаблонами
Что нужно:
- хранение и отслеживание изменений конфигов / шаблонов;
- совместное редактирование конфигов / шаблонов;
- процедура принятия изменений в конфигах / шаблонах командой.
Примеры продукта: утилиты Git, Github Desktop, GitKraken и пр., а также сервисы такие как GitHub, GitLab и пр. Ниже разберем примеры задач и их решения.
1. Хранение и версионирование файлов
Git позволяет хранить все версии файлов, позволяя переключаться между разными версиями. Может быть использован как клиент в командной строке, так и графический клиент, вроде Github Desktop, GitKraken и многие другие, в том числе и встроенные в IDE.

2. Совместное редактирование файлов
Сервис Git позволяют вести совместно один файл, при этом будет видно кто и какие изменения внес.
3. Процедура принятия изменений командой
Для совместной командной работы в сервисе GitHub может быть использован механизм Pull-request, когда выбранные участники команды подтверждают изменение конфигурации, и только после этого она попадает в основную ветку, при этом прозрачно видны все изменения.

4. Создание шаблонов
Jinja – это язык шаблонов, созданный для Python. Как правило, шаблоны конфигураций пишутся на языке Jinja, а генерирование конфигурации на основе шаблона производятся при помощи модуля Jinja2 для Python.

Подключение к оборудованию
Подключение к сетевому оборудованию — важная составляющая работы сетевым инженером.
Разделим варианты подключения на 4 условных типа:
- подключение по SSH из терминала;
- подключение по SSH с использованием Connection Manager-ов;
- подключение по SSH с использованием средств управления конфигурацией;
- подключение по API.
1. Подключение по SSH из терминала
Это самый простой и базовый вариант подключения из командной строки (bash, shell, zsh, PowerShell и пр.), тут могут быть применены алиасы и функции для упрощения процесса подключения:
- простое подключение из терминала (для единичных подключений);
- алиас (например, алиас на команду “ssh admin@10.1.1.1 -p 1111”);
- функция (например, для оборачивания sshpass, утилиты для подключения по ssh, позволяющую не вводить пароль);
- использование менеджеров окон tmux или screen для одновременного вывода на экран нескольких подключений и отправки групповых команд в несколько окон сразу.
2. Использование Connection Manager-ов
Более продвинутый способ подключения, представлен в графическом режиме, подходит для более регулярного использования. Пример популярных продуктов: SecureCRT, PAC Manager.
3. Использование средств управления конфигурацией
Применение средств управления конфигурацией (Ansible, Salt и пр.) позволяет автоматизировать конфигурирование сети.
Возможности средств управления конфигурацией:
- Отправка команд на оборудование по условному имени, имени группы, составному перечню групп;
- Отслеживание результата выполнения команды;
- Использование сценариев для решения комплексных или регулярных задач.
4. Использование Python
Скрипты на Python позволяют автоматизировать подключение по SSH (модули pexpect, paramiko, netmiko, scrapli и пр.) и API (модули requests, NAPALM и пр.).
Возможный сценарий использования Python с целью динамического формирования инвентарного файла для Ansible:

5. Использование инструментов для тестирования API
Postman — это наиболее популярный инструмент для тестирования API. Позволяет протестировать подключение к оборудованию по API.
ChatOps — собрать все в единое целое
Сервис чата Slack позволяет интегрироваться с разными сервисами, такими как:
- GitHub. При обновлении шаблонов или конфигов в Github довольно важно, чтобы все участники команды узнали об изменениях, для этого удобно использовать сервис чата, такой как Slack, и интегрировать туда чат-бота с уведомлениями изменений нужного репозитория на Github или другими сервисами.
- Trello. Ведение задач в любой из систем будет хорошо дополнено уведомлениями в Slack, дополнительно, есть возможностью управлять задачами в Trello из чата, отправляя сообщения соответствующему боту в нужном канале.
- Google Drive. Например, команда инженеров ведет общую базу знаний с документацией, тогда при интеграции с чатом, о добавлении нового файла в хранилище узнают все участники через автоматическое уведомление в соответствующем канале чата.
Бывает важно вовремя остановиться, чтобы чат не становился перегруженным сообщениями, а содержал только нужную информацию.
Традиционные инструменты
Чтобы статья была наиболее полной, надо упомянуть и ключевые для сетевой тематики инструменты, которые уже давно служат верой и правдой.
- Быстро или медленно (iperf и его аналоги)
- Найти проблему (Wireshark и его вариации)
- Сделать и проверить Wi-Fi (Ekahau Site Survey и аналоги)
- Прочие специфичные утилиты
Экзотика
Не стоит недооценивать возможности автоматизации в смартфонах. Гибкая настройка правил автоматизации и возможность запуска скрипта подключения по SSH на бастион-сервер с заданными параметрами или переменными может позволить решить ту или иную задачу по администрированию сетевой инфраструктуры или для каких-либо бытовых вопросов.
Приведу пример. Команда работает на разных площадках и не знает о том, кто когда пришел. Допустим, что есть некоторая особенность работы, что команде важно знать, кто когда пришел и ушел с работы. Вручную это сложно, а сам СКУД или интеграция с ним отсутствует.
Добавляем на смартфон автоматизацию, которая при попадании смартфона в определенную геолокацию будет запускать скрипт по подключению на некий сервер, и оттуда уже дергать web-hook бота в Slack чате curl-ом с заданными параметрами. Значение переменной времени можно брать из смартфона.



nekopilot
Есть еще прекрасная утилита анализатор wifi от Хельге Кек: winfi lite