В ежедневной работе сетевого администратора можно выделить следующие задачи: управление конфигурацией сети и ее компонентами, мониторинг, обеспечение отказоустойчивости и безопасности. Наличие в инфраструктуре компании большого количества различных устройств не способствует использованию единого интерфейса управления и потенциально может приводить к ошибкам в конфигурации из-за человеческого фактора.
Автоматизация работы сетевого администратора осуществляется с применением различных инструментов и решений для более быстрого и эффективного выполнения рутинных задач, а самое главное для получения детерминированных результатов.
В настоящее время не существует единого подхода по автоматизации при работе с сетевым оборудованием, это связано с использованием различного проприетарного программно-аппаратного обеспечения. Также отсутствует большое количество литературы на русском языке, описывающей методы и способы внедрения автоматизации в сетевую инфраструктуру.
Наша задача - рассказать вам об архитектуре построения программируемых сетей и на практических примерах показать инструменты, которые вы сможете использовать в своей инфраструктуре, но обо всем по порядку.
Программно-конфигурируемая сеть или Software Defined Networking – сеть передачи данных, в которой уровень управления сетью отделен от уровня передачи данных и реализуется программно.
Идея о создании подобных систем возникла еще в 2006 году, инициаторами выступили специалисты университета Стэнфорда и Беркли. Данное предложение активно поддержали крупные IT-компании: Google, Facebook, Microsoft, Oracle, Dell и др.
Потребность в разработке новых видов сетей была связана с увеличением общего объема трафика, что было вызвано ростом числа активных абонентов по всему миру. Начиная с 2007 года ежегодные темпы роста пропускной способности сетей во всем мире составляли около 60%, однако исследования специалистов IEEE показывают, что пропускную способность каналов связи требуется увеличивать вдвое раз в два года.
В тоже время с ростом нагрузки на сети усложнялись задачи по администрированию, увеличивался перечень поддерживаемых протоколов, повышались требования к безопасности и отказоустойчивости. Современная топология сетей состоит из устройств (узлов), аппаратно-программное обеспечение которых постоянно усложняется, для того чтобы поддерживать все современные технологии.
В качестве основных идей при разработке SDN были выдвинуты следующие:
В работe сетевого устройства можно выделить три абстрактных уровня: уровень передачи (Data Plane), уровень управления трафиком (Control Plane) и уровень администрирования (Management Plane):
Подход SDN изменил концепцию взаимодействия между абстрактными уровнями сетевых устройств. На рисунке показано, что за уровень управления и администрирования стал отвечать отдельный программный контроллер, сетевой узел остался работать на уровне передачи.
Данное решение способствовало развитию технологий и инструментов, которые упрощают выполнение задач администрирования сети, среди которых можно выделить :
Таким образом, мы с вами кратко познакомились с концепцией и архитектурой построения программируемых сетей. В рамках наших статей мы рассмотрим инструменты по инвентаризации, сбору данных, конфигурировании различного сетевого оборудования без привязки к производителю.
За долгие годы развития ИТ-индустрии способ управления сетями оставался не изменчив. В это же время появлялись новые протоколы для взаимодействия, расширялись возможности самих сетевых устройств. Тем не менее Command Line Interface (CLI) остался широко распространенным и популярным среди сетевых администраторов.
Данный метод в основном используется по умолчанию при первичной настройке сетевого оборудования, он поддерживает различные типы подключения (Telnet, SSH и другие). Администратор сети взаимодействует с программной оболочкой устройства, которая передает команды в ядро ОС и тем самым вносит изменения в конфигурационный файл.
Файл конфигурации – текстовый файл, содержащий настройки системы или ее части (утилиты, демона и т. п.). Обычно инициализируется при запуске ОС и доступен для резервного копирования.
Ежедневно администраторы опрашивают сетевые устройства и вносят изменения в их конфигурацию, подключаясь с помощью CLI, отправляя команды из заранее подготовленных файлов-шаблонов. Данный метод несет за собой большие риски и не является эффективным в части трудозатрат, ведь ошибка при настройке одного из устройств может повлиять на работоспособность всей сети.
Развитие языков программирования способствовало автоматизации управления и администрирования сетевых устройств. Алгоритм по автоматической отправке команд до оборудования состоит из двух шагов: формирование списка команд или конфигурационного файла, далее его доставка.
Прежде чем мы познакомимся с программными инструментами автоматизации, необходимо обсудить классический процесс взаимодействия с сетевым оборудованием. В качестве сервера выступает сетевое оборудование, в качестве клиента – запущенный терминал на самом устройстве или на ПК администратора сети, формат ввода-вывода команд - текстовая строка.
Преимуществом использования данного подхода для взаимодействия с сетевым устройством является:
Как правило, при работе через CLI существует несколько режимов доступа, заранее запрограммированных в сетевом ПО: режим без привилегий (первичное подключение к устройству), привилегированный режим (просмотр конфигурации устройства, базовые команды), режим конфигурации (внесение изменений, осуществление настроек).
При внедрении средств автоматизации управления сетевыми устройствами - метод CLI рассматривается в первую очередь, потому что его поддержка заявлена каждым производителем. Он обладает полной документацией команд и высокой отказоустойчивостью, не требует больших вычислительных мощностей со стороны подключаемого клиента. Для перехода в интерфейс CLI необходимо установить соединение с узлом, для этого используется один из сетевых протоколов (Telnet, SSH и др).
Автоматизация процесса обслуживания сетевых устройств невозможна без использования одного из языков программирования.
Для 2021 года базовое знание Python это уже не преимущество кандидата (системного администратора, сетевого инженера) , а одно из требований при трудоустройстве на работу. В рамках наших статей мы не будем обучать вас основам языка, потому что в Интернете большое количество ресурсов на эту тему и вы сможете подготовиться самостоятельно.
Наша задача показать и разобрать практические примеры, где вы можете использовать автоматизацию для упрощения ежедневных рутинных процессов.
Итак, одно из весомых преимуществ языка Python - большое количество сторонних библиотек для решения задач из различных областей. Естественно, энтузиасты и разработчики в рамках работы с сетью и сетевым оборудованием написали достаточное количество модулей. Давайте перечислим популярных из них, поддерживающие режим взаимодействия CLI:
В рамках сегодняшней статьи мы рассмотрим лишь библиотеку telnetlib языка Python3. Мы будем подключаться по Telnet к маршрутизатору Cisco (IOS15), вы же можете использовать оборудование другого производителя.
Наша задача: сконфигурировать два сетевых интерфейса (задать ip-адресацию), включить поддержку динамического протокола маршрутизации OSPF.
После символа # будет следовать комментарий к строке, файл написан в формате ".py"
import getpass # импорт библиотеки getpass
import telnetlib # импорт библиотеки getpass
HOST = "192.168.122.71" # ip-адрес маршрутизатора Cisco
user = input("Enter your telnet username: ") # запрос ввода имени
password = getpass.getpass() # запрос ввода пароля в зашифрованном виде
tn = telnetlib.Telnet(HOST) # инициализация подключения telnet
tn.read_until(b"Username: ") # ожидание строки Username от CLI
tn.write(user.encode("ascii") + b"\n")#передача данных пользователя и ENTER "ЕСЛИ требуется пароль, то передать"
if password:
tn.read_until(b"Password: ")
tn.write(password.encode("ascii") + b"\n")
tn.write(b"enable\n")# вход в режим enabletn.write(b"cisco\n") # ввод пароля для enable, не всегда требуется
tn.write(b"conf t\n")# переход в конфигурационный режим
tn.write(b"int loop 0\n") # настройка интерфейса loop 0
tn.write(b"ip address 1.1.1.1 255.255.255.255\n")# задание ip-адреса
tn.write(b"int loop 1\n") # настройка интерфейса loop 1
tn.write(b"ip address 2.2.2.2 255.255.255.255\n")# задание ip-адреса
tn.write(b"router ospf 1\n") # включение протокола OSPF
tn.write(b"network 0.0.0.0 255.255.255.255 area 0\n") # настройка OSPF
tn.write(b"end\n")# выход из режима конфигурации
tn.write(b"exit\n")# выход из режима enable
print(tn.read_all().decode("ascii") # вывести на экран команды и результат
Приведенный выше скрипт написан для начала знакомства с автоматизацией, в дальнейшем будут приведены более сложные примеры. Но даже он позволяет вам подключаться к различному сетевому оборудованию и отправлять команды конфигурации или сбора данных, после чего выводить их на экран или в файл.
Таким образом, сегодня мы познакомились с понятием "автоматизация при работе с сетевым оборудованием", рассмотрели основные концепции и начали изучать инструменты работы с сетью на языке Python. Мы написали скрипт, позволяющий вам взаимодействовать с оборудованием и получать предсказуемый результат. Далее будет более подробное знакомство с различными инструментами, приведем практические примеры использования, оставайтесь на связи!
Ну точно, реферат. 10-летний опыт в области "автоматизации при работе с сетевым оборудованием" говорит что:
Невозможно построить универсальный инструмент, сети постоянно развиваются, меняются технологии, вендоры, приходится что-то доавтоматизировать, либо наколеночные скрипты на bash/perl пописывать, менять/добавлять шаблоны оборудования, и т.д. И, кмк, даже уровни абстракции не спасут от сабжа.
Практика пока теорию не опровергла.
Я думал там хотя бы Ansible...
Всё идёт к software defined network, а там будет какойнить апи или язык для конфигурации, стандартизированный, так что проблема будет решена и все эти железки в текущем виде, когда каждый вендор творил куету как хотел - закончатся.
Угу, как телефоны на Андроиде, да? Или системы "безумный дом"...
А как РКН отнесётся к этому SDN, если он не сможет работать с ТСПУ?
Хорошо телефоны на андройде.
И умный дом хорошо. Там в беспроводе потихоньку зигби побеждает для дешман устройств, но в целом иметь несколько шлюзов в разные протоколы ни разу не проблема, всё это уходит в mqtt - оно как стандартное апи для всего в итоге.
Ниипёт, прогресс идёт не для них а вопреки им.
Ваня, много раз видел, что стандарты дохнут и создаются новые, все эти апи, хэмээли, дыжсоны, ямлы, сотни их. Ну и где эта универсальность? Ты же сам в курсе, вон днла, что-нить получилось?
Крайне маловероятно. Имхо.
Везде будут ставить RouterOS, будет однаковое cli и конфигурирование.