Как работать с Openflow контроллером NOX

от автора

Привет, хабр.

Эта статья посвещена OpenFlow контроллеру NOX потому, что пока я не нашел единого источника информации для работы с ним без гугления и танцев.

Вы можете почитать об OpenFlow, протоколе, для работы с которым и был реализован NOX, подробнее в этой habrahabr.ru/post/149126/ или habrahabr.ru/post/148745/ этой статьях.


Что понадобится для выполнения действий, описанных ниже? Дистрибутив Linux, для простоты мы будем использовать Ubuntu, Virtualbox и образ mininet, который вы можете найти по адресу

Mininet — это образ Ubuntu с уже установленными контроллером, сниффером и эмулятором сетей. Он понадобится нам для проверки работы контроллера. Ставим его на Virtualbox.

После установки необходимо настроить на виртуальной машине интерфейсы, через которые мы сможем открывать ssh сессии.
Для этого в VirtualBox выделяем виртуальную машину с mininet, далее идем в Settings Tab — Network — Adapter 2 и выбираем Enable adapter. Ставим галку напротив host-only network.

Если вы не настраивали до этого host-only network то пройдите в меню File — Preferences — Network и нажмите на кнопку Add host-only network.

Время запустить виртуальную машину. Логин и пароль — openflow
Первым делом необходимо убедиться, что интерфейсы получили IP адреса.
Наберем в консоли:

ifconfig -a 

Если адресов нет, то сделайте

sudo dhclient ethN 

где N — номер интерфейса.

Подробную инструкцию как работать с mininet я приложу в конце статьи в списке источников.

Далее переходим непосредственно к контроллеру. Инструкция по его установке проверялась на версиях Ubuntu 11.04, 11.10, 12.04. Контроллер необходимо устанавливать на локальную ОС.

1. Для начала необходимо установить все зависимости для NOX и систему контроля версий Git

cd /etc/apt/sources.list.d sudo wget http://openflowswitch.org/downloads/debian/nox.list sudo apt-get update sudo apt-get install nox-dependencies git libboost-thread-dev 

2. Теперь необходимо склонировать репозиторий NOX

git clone http://github.com/noxrepo/nox 

3. А теперь третий шаг, самый магический. Необходимо установить библиотеку tbb и boost версии 1.48. Поехали

cd sudo apt-get install libtbb-dev wget http://citylan.dl.sourceforge.net/project/boost/boost/1.48.0/boost_1_48_0.tar.bz2 tar --bzip2 -xf /<path_to_boost>/boost_1_48_0.tar.bz2 cd /<path to boost>/boost_1_48_0 ./bootstrap.sh --prefix=/usr sudo ./b2 install 

3a. Если вы используете Ubuntu 12.04, то вы можете пропустить этот шаг. Если же нет, то вам необходимо установить autoconf 2.68

cd wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.bz2 tar --bzip2 -xf autoconf-2.68.tar.bz2 cd autoconf-2.68/ ./configure make sudo make install 

4. А теперь можно собрать NOX. Для этого используем команды

cd ~/<nox_sources_dir>/nox ./boot.sh mkdir build && cd build ../configure make         

Вы можете установить NOX, выполнив команду sudo make install. В таком случае вам не придется каждый раз при запуске NOX указывать путь до nox_core.

5. Проверим, все ли работает.

cd ~/<nox_sources_dir>/nox/build/src ./nox_core -v -i ptcp<:<IP address>>:<port> "<app_name>" 

IP address — IP адрес интерфейса, который NOX должен слушать.
port — Порт, который должен слушать NOX. По умолчанию это 6633.
app_name — Имя вашей реализации learning switch, которая должна находиться в директории ~/<nox_sources_dir>/nox/build/src.

Вот пример рабочей команды

./nox_core -v -i ptcp:192.168.56.1:6633 "switch" 

192.168.56.1 IP адрес интерфейса виртуальной машины
switch Стандартная реализация L2 learning switch в NOX

Теперь установим Wireshark с плагином openflow dissector на локальную машину. Сразу хочу предупредить, что плагин сможет работать только на старых версиях Wireshark.
Похоже, что его разработка прекращена.

1. Установим зависимости для Wireshark

sudo apt-get install libgtk2.0-dev byacc libpcap-dev 

2. Загрузим и установим Wireshark 1.4.15

wget http://www.wireshark.org/download/src/wireshark-1.4.15.tar.bz2 tar --bzip2 -xf wireshark-1.4.15.tar.bz2 cd wireshark-1.4.15/ ./configure  make sudo make install 

3. Установим Wireshark dissector плагин

cd ~/ git clone http://github.com/noxrepo/openflow cd openflow/utilities/wireshark_dissectors/openflow/ make sudo cp packet-openflow.so /usr/lib/wireshark/libwireshark0/plugins/ 

4. Проверим, видит ли Wireshark плагин. Для этого запустим его, далее Help — About — Plugins и упорядочим список. В списке должен присутствовать packet-openflow.so

Ура, мы установили все необходимое и теперь самое время проверить работу нашего контроллера!

Необходимо посмотреть на локальной машине какой интерфейс соответствует виртуальной и узнать его IP адрес. Наберем в консоли ifconfig. У меня это 192.168.56.1
Запустим NOX так, чтобы он слушал этот IP.

~/<nox_sources_dir>/nox/build/src/nox_core -v -i 192.168.56.1:6633 “switch” 

В другом окне на локальной машине запустим Wireshark и прицепим его тоже к 192.168.56.1, а в поле фильтра введем метку OpenFlow пакетов — of.

Теперь mininet. Заходим на виртуальную машину. Если вам необходимо создать свою топологию, то переходим в директорию ~/mininet/custom/ и создаем скрипт на питоне. Mininet содержит пример топологии в файле mytopo.py, вы можете воспользоваться им.
Для запуска mininet введите

sudo mn --custom ~/mininet/custom/mytopo.py --topo=mytopo --mac --controller remote --ip=192.168.56.1 

—topo говорит что будет использована пользовательская топология.
—controller указывает тип контроллера — локальный или удаленный.
—ip адрес контроллера

В открывшемся mininet shell введем команду pingall

Все! NOX должен зашевелиться, в консоли мы увидим его сообщения, а Wireshark должен начать ловить OpenFlow пакеты.

Источники:
www.openflow.org/wk/index.php/OpenFlow_Tutorial
github.com/noxrepo
github.com/noxrepo/nox-classic/wiki
www.openflow.org/wk/index.php/OpenFlow_Wireshark_Dissector

ссылка на оригинал статьи http://habrahabr.ru/post/161289/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *