Привет, хабр.
Эта статья посвещена 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 адреса.
Наберем в консоли:
Если адресов нет, то сделайте
где N — номер интерфейса.
Подробную инструкцию как работать с mininet я приложу в конце статьи в списке источников.
Далее переходим непосредственно к контроллеру. Инструкция по его установке проверялась на версиях Ubuntu 11.04, 11.10, 12.04. Контроллер необходимо устанавливать на локальную ОС.
1. Для начала необходимо установить все зависимости для NOX и систему контроля версий Git
2. Теперь необходимо склонировать репозиторий NOX
3. А теперь третий шаг, самый магический. Необходимо установить библиотеку tbb и boost версии 1.48. Поехали
3a. Если вы используете Ubuntu 12.04, то вы можете пропустить этот шаг. Если же нет, то вам необходимо установить autoconf 2.68
4. А теперь можно собрать NOX. Для этого используем команды
Вы можете установить NOX, выполнив команду sudo make install. В таком случае вам не придется каждый раз при запуске NOX указывать путь до nox_core.
5. Проверим, все ли работает.
IP address — IP адрес интерфейса, который NOX должен слушать.
port — Порт, который должен слушать NOX. По умолчанию это 6633.
app_name — Имя вашей реализации learning switch, которая должна находиться в директории ~/<nox_sources_dir>/nox/build/src.
Вот пример рабочей команды
192.168.56.1 IP адрес интерфейса виртуальной машины
switch Стандартная реализация L2 learning switch в NOX
Теперь установим Wireshark с плагином openflow dissector на локальную машину. Сразу хочу предупредить, что плагин сможет работать только на старых версиях Wireshark.
Похоже, что его разработка прекращена.
1. Установим зависимости для Wireshark
2. Загрузим и установим Wireshark 1.4.15
3. Установим Wireshark dissector плагин
4. Проверим, видит ли Wireshark плагин. Для этого запустим его, далее Help — About — Plugins и упорядочим список. В списке должен присутствовать packet-openflow.so
Ура, мы установили все необходимое и теперь самое время проверить работу нашего контроллера!
Необходимо посмотреть на локальной машине какой интерфейс соответствует виртуальной и узнать его IP адрес. Наберем в консоли ifconfig. У меня это 192.168.56.1
Запустим NOX так, чтобы он слушал этот IP.
В другом окне на локальной машине запустим Wireshark и прицепим его тоже к 192.168.56.1, а в поле фильтра введем метку OpenFlow пакетов — of.
Теперь mininet. Заходим на виртуальную машину. Если вам необходимо создать свою топологию, то переходим в директорию ~/mininet/custom/ и создаем скрипт на питоне. Mininet содержит пример топологии в файле mytopo.py, вы можете воспользоваться им.
Для запуска mininet введите
--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
Эта статья посвещена 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