Если вам хочется попробовать себя в роли разработчика SDN-приложений, или есть желание “пощупать” доступные на рынке SDN контроллеры, но приводит в уныние отсутствие под рукой нужного оборудования, после прочтения этой статьи как минимум одной проблемой станет меньше. Несколько простых шагов, и у вас есть полноценная виртуальная лаборатория для экспериментов с OpenFlow.

Какой должна быть виртуальная лаборатория?

Сетевой инженер хорошо понимает, что должен представлять из себя лабораторный стенд: это в первую очередь несколько устройств и рабочих станций-хостов, соединённых сетевыми интерфейсами, с возможностью включать-выключать линки, генерировать трафик и иметь возможность просматривать и снимать дампы пакетов как на хостах, так и на транзитных интерфейсах.

Лаборатория должна быть легкой, быстро запускаться, чтобы хватало ресурсов самого слабого компьютера. Базовая настройка должна быть интуитивно понятной, а документация — содержать примеры конфигураций. В идеале хотелось бы иметь графический интерфейс для «рисования» сетевой топологии. Забегая вперёд, скажу, что GUI у mininet есть, но карьера инженера-разработчика всё-таки заставит вас быстро подружиться с преимущественно текстовыми инструментами.

Mininet — SDN-сеть на вашем ноутбуке

Достаточно любого PC-компьютера или виртуальной машины, чтобы запустить виртуальную сеть, вполне пригодную для изучения, тестирования и разработки продуктов на основе OpenFlow. Mininet в качестве коммутаторов использует открытый и стандартный OpenFlow-бридж OpenVSwitch (OVS), а в качестве хостов — namespaces ядра Linux.

Для управления стендом можно использовать как командную строку Mininet CLI (интерактивно), так и API для реализации сложных топологий и автотестов. Этот инструментарий уже успел стать стандартом де-факто среди разработчиков, оброс библиотеками, делающими его использование ещё более удобным, и продолжает развиваться. Документация особенно дружелюбна для новичка и изложена в формате “walkthrough”. Именно с неё я рекомендую начать знакомство с этим эмулятором.

Установка и подготовка к работе

Самый простой способ подготовить стенд — скачать и запустить преднастроенный образ виртуальной машины, собранный заботливыми руками комьюнити Mininet. Для запуска образа рекомендуется бесплатный гипервизор VirtualBox (работает на Windows, OS X и linux), но можно использовать и альтернативы — VMWare Workstation, VMWare Fusion, KVM. Скачивание образа и запуск виртуальной машины не должно вызвать вопросов, и в результате вы окажетесь в консоли с Ubuntu Linux, которая уже имеет на борту всё необходимое для дальнейших экспериментов — Python, Mininet, OpenVSwitch, Wireshark.

Собирать ли Mininet из исходников?

В инструкции есть альтернативные способы установки — сборка из исходников или установка пакетов из репозитория. Сборка из кода — особенно интересный и познавательный процесс, особенно когда что-то идёт не так. Но если вы ещё не гуру-программист и не опытный Linux-админ, то, скорее всего, вам не удастся самостоятельно собрать всё необходимое с первого раза. В процессе компиляции непременно обнаружатся какие-нибудь зависимости, которые потребуется самостоятельно устранить.

Хотя описанный способ компиляции и установки считается универсальным и сработает на большинстве дистрибутивов, но на постоянно используемой системе, где вы храните ваши данные, его применять не стоит. В интернете есть множество статей против использования “make install”. Из санитарных соображений лучше использовать виртуальную машину или другой вариант изоляции файловых систем вашего экспериментального окружения, например docker. Для первого шага именно виртуальная машина — лучший способ начать знакомство с mininet, а уже в ней можно безопасно экспериментировать.

Первые шаги

Итак, виртуальная машина со всем необходимым запущена, теперь самое время запустить нашу топологию и убедиться, что сеть работает — заставить виртуальные хосты попинговать друг друга. В Sample Workflow предлагается всё сделать одной командой:

sudo mn —switch ovs —controller ref —topo tree,depth=2,fanout=8 —test pingall

Её достаточно, чтобы Mininet запустил 9 OVS-коммутаторов и 64 хоста, соединил их в древовидную топологию с указанной глубиной и количеством выходов, проверил сетевую связность между всеми хостами, сообщил результат и прекратил работу.

Что происходит «под капотом»?

Вы будете удивлены, но пакеты между виртуальными хостами в вышеописанном примере были доставлены SDN-сетью, реализующей приложение Learning switch. Перехватив OpenFlow-сообщения и передаваемый трафик с помощью wireshark, вы увидите, как коммутаторы при старте подключаются к OF-контроллеру. Контроллер изучает сеть средствами OpenFlow и программирует правила для доставки трафика.

Можно запустить этот же пример без опции —test, выполнять команды ping вручную, наблюдая за заполнением таблиц коммутаторов, утилитой ovs-ofctl. Таким образом, мы можем углубиться в динамику происходящих процессов:

Когда хост отправляет первый пакет в сеть, коммутатор не содержит никаких правил, и отсылает пакет, для которого не найдено соответствие, на контроллер в OpenFlow-сообщении Packet_IN. Контроллер запоминает какой MAC-адрес находится за каким портом коммутатора, и по мере изучения MAC-адресов программирует правила в свитчи для доставки трафика с порта на порт. Следующие пакеты попадают в уже запрограммированные правила на коммутаторах, что видно по счётчикам пакетов, и доставляются без участия контроллера.

Mininet_ovs-ofctl-output
Вывод ovs-vsctl, flow-таблица и дамп OpenFlow сообщений позволяют в реальном времени наблюдать работу виртуальной SDN-сети

О чём не пишут в инструкции к Mininet

Три документа: Mininet Get Started, Sample Workflow и Walkthrough — это почти всё, что вам нужно для старта. Но есть жизненно важные команды, которые имеет смысл освоить, т.к. используются они чаще всех остальных.

ip — очень продвинутая стандартная Linux утилита, заменяющая устаревший ifconfig и ряд других традиционных утилит — arp, route и т.д. Наиболее полезные команды — ip addr, ip route, ip neigh, ip link, ip netns. Документация тут.

ovs-vsctl — утилита, входящая в OVS. С её помощью можно просмотреть коммутаторы, созданные mininet’ом, их интерфейсы и состояние. Также можно на лету добавить новый интерфейс в коммутатор;

ovs-ofctl — приложение, позволяющее просмотреть flow tables, group tables и другие таблицы OpenVSwitch коммутатора, добавить/изменить записи в таблицах.

Что дальше?

Хорошим продолжением знакомства с SDN на основе OpenFlow может служить упражнение “Create a learning switch”, в котором описаны шаги по самостоятельному программированию функционала с использованием одного из фрэймворков.

Пробовать все описанные платформы смысла нет, лично мне достаточно было знакомства с Ryu, на нём и остановился. Имея некоторые познания в python-программировании, пользуясь примерами, библиотеками и развитым API, можно реализовать намного более сложные приложения: роутер, Firewall, NAT, IPS.

Если вы не ощущаете тягу к самостоятельной  разработке, то Mininet — отличный вариант для освоения уже существующих OpenFlow контроллеров. Могу смело порекомендовать для изучения, интересный продукт с открытым кодом — OpenDaylight. Контроллер можно запустить в той же виртуальной машине, что и mininet, и указать в качестве адреса для соединения 127.0.0.1. Ознакомление с возможностями API, графического интерфейса и множества подключаемых модулей OpenDaylight на примере виртуальной сети Mininet не уступает сети на реальном оборудовании.

Вместо послесловия

Доступность, полноценность и простота этого эмулятора позволяет использовать его как новичкам, так и матёрым администраторам и разработчикам. Если вы ещё не знаете с чего начать практическое знакомство с SDN, самое время установить Mininet  и попробовать его в действии!

Системный инженер Brain4Net. Специалист по развитию сетевой и сервисной инфраструктуры операторов связи. Всегда вдохновлялся OpenSource технологиями и стандартами, системным администрированием, прикладным программированием, архитектурой приложений. До перехода в Brain4Net работал в ПАО "Вымпелком" и Cisco Systems.

1 КОММЕНТАРИЙ

ОСТАВЬТЕ КОММЕНТАРИЙ