Программно-конфигурируемые сети (1187415), страница 2
Текст из файла (страница 2)
Единственное различие между физическим портоми логическим – пакет пересылаемый через данные порты в заголовке можетиметь дополнительное поле Tunnel-ID, и когда пакет приходит с логическогопорта он пересылается на контроллер.• Зарезервированный порт – представляет собой специальное действие по пересылки пакета:– all – представляет собой все порты, на которые может быть продублированпакет(может быть использован, только как output port)– controller – канал связи с OpenFlow контроллером(может быть использован как для входящих, так и для исходящих пакетов)– table – действие по передачи обработки пакета в другую таблицу(см.выше)– in_port – представляет собой ID порта входящего пакета3.3OpenFlow таблица.Flow-таблица состоит flow-записей, где каждая состоит из:Поля сравненияПриоритетСчетчикиИнструкцииВременные метки• Поля сравнения(match fields) – параметры содержащиеся в заголовке пакета(данные L2-L4), а также некоторые OpenFlow данные(номер входящего порта, метаданные обработки процесса обработки пакета)• приоритет(priority) – числовое поле от 0 до 65535, среди flow-записей совпавших с заголовком пакета, выбрана будет одна с большим приоритетом.• счетчики(counters) – хранят статистические данные о работе записи(напримерсколько пакетов было обработано в соответствии с данной записью)• инструкции(instructions) – набор команд, которые необходимо выполнитьнад пакетов в процессе обработки(см.Конвейер обработки пакетов)• временные метки(timeouts) – максимальное время до удаление соответствующей flow-записи–8–Соответствующая запись определяется по полям сравнения и приоритету: средизаписей, у которых совпали поля выбирается уникальная с наибольшим приоритетом.Анализ начинается с нулевой таблицы(см.рисунок), из пакета извлекаются данные заголовка.
Далее проходит сравнение этих данных со всеми полями во flowтаблице(стоит отметить, что поиск идет не только по заголовку пакета, но напримерпо номеру входящего порта и специальным метаданным, которые могли быть получены на предыдущих этапах обработки)(если подходит несколько записей с одинаковым приоритетом, будет выбрана только одна запись, причем выбор конкретнойзаписи неопределен).После совпадения, записи инструкции добавляются в Action Set(своеобразный накопитель действий, которые будут выполнены после окончания анализа пакета)(естьвозможность выставить бит OFPFF_CHECK_OVERLAP для запрета использования совпадающих правил).3.4Конвейер обработки пакетов.OpenFlow – совместимые маршрутизаторы можно разедить на два типа: толькоOpenFlow (OpenFlow-only) и гибридные(OpenFlow-hybrid ).Гибридные маршрутизаторы – поддерживают как и протокол OpenFlow так истандартную Ethernet маршрутизацию, например L2 Ethernet маршрутизация(L2Ethernet switching), VLAN, L3 маршрутизацию(L3 routing)(IPv4 routing, IPv6 routing...),–9–ACL, QoS.
Такие маршрутизаторы должны иметь механизм отделения обработки пакетов по конвейеру OpenFlow или же по стандартными способами(в данной работе,эти механизмы не рассматриваются).OpenFlow-конвейер состоит из множества flow-таблиц, в каждой таблицы множество flow-записей.
Спецификация протокола OpenFlow требует, что маршрутизаторобязан иметь хотя бы одну flow-таблицу, хотя может иметь и несколько.OpenFlow SwitchPacketInIngressportActionSet={}Table0Packet+Ingress port+metadataActionSetTable1...TablenPacketActionSetExecutionActionSetPacketOutРис.
2: Конвейер обработки сетевых пакетов(www.opennetworking.org)Flow-таблицы последовательно пронумерованы начиная от 0. Обработка всегданачинается с начальной таблицы: заголовок пакета сравнивается с полями flow-записейв таблице 0. Если найдена соответствующая flow-запись, выполняются инструкции,определенные в данной записи(одна из возможностей – передача пакета в другуютаблицу, где данный процесс повторяется заново). Для дальнейшей обработки пакетможно передавать только в таблицу с большим порядковым номером, чем текущий.В последней таблице, в качестве инструкций запрещено использовать передачу далее по конвейеру(разрешен только список непосредственных действий над пакетом).Если в найденной flow-записи нет инструкций передачи пакета далее по конвейеру,обработка на этом месте заканчивается и к пакету применяются действия, добавленные в action set в процессе обработки.Если ни одна запись не подходит для обрабатываемого пакета, генеририруется событие table miss.
Действие применненое к пакету зависит от статической конфигурации маршрутизатора(можно сбросить пакет, отправить на контроллер или отправитьна обработку в специальную таблицу).– 10 –4Open vSwitch4.1Структура Open vSwitch.Open vSwitch – это виртуальный многоуровневый(multilayer ) маршрутизаторразрабатываемый под лицензией Apache 2.0.Open vSwitch условно можно разделить на две части – user-space и kernel-space.Рис. 3: Структура Open vSwitch(www.openvswitch.org)User-space состоит из нескольких наиболее важных компонент: это демоны(daemons),которые реализуют свитч с таблицей потоков, ядро Open vSwitch, и набор утилит,которые позволяют конфигурировать свитч, его базу данных(ovsdb) и напрямую посылать сообщения в ядро.Openvswitch service запускает три демона: ovs-vswitchd – сохраняет и отвечаетза изменение конфигурации маршрутизатора, а также сохраняет состояние в базуданных(ovsdb), ovsdb-server – манипулирует базой данных, конфигурацией и набором потоков, ovs-brcompatd – создает совместимость Open vSwitch с обычнымиLinux мостами(которые создаются командой brctl).Демон ovs-vswitchd – единственная компонента, связанная с kernel-space черезпротокол netlink, также меняет конфигурацию Open vSwitch и сохраняет ее в базуданных(ovsdb), которая управляется при помощи демона ovsdb-server(коммуникацияovs-vswitchd и ovsdb-server осуществляется при помощи сокетов)– 11 –• ovs-dpctl – позволяет напрямую обращаться к kernel-space, без сторонних обращений к базе данных.• ovsdb-client – утилита для конфигурирования базы данных ovsdb.• ovs-ofctl – команда для работы с протоколом OpenFlow, модификацией flowтаблиц, настройки соединения с удаленным контроллером.Стоит отметить, что Open vSwitch является гибридным маршрутизатором –помимо поддержки OpenFlow, маршрутизатор поддерживает специализированныекоманды(Nicira Extensions)(L2 routing, QoS, tunneling и.т.д), но наибольший интересон представляет как проект поддерживающий протокол OpenFlow(на данный моментесть поддержка OpenFlow 1.0 и тестовые версии с поддержкой OpenFlow 1.3).4.2Настройка QoS.В некоторых случая администратору необходимо ограничить пропускную способность выделенных виртуальных машин, в частности, когда различные пользователииспользуют одно и то же виртуальное пространство.Open vSwitch дает простую возможность ограничения максимальной скоростипередачи выбранного интерфейса.
Пропускная способность до установления QoS:[root@localhost /]# netperf -H 192.168.0.2MIGRATED TCP STREAM TEST from 0.0.0.0 () port 0 AF_INET to 192.168.0.2 ()port 0 AF_INETRecv Send SendSocket Socket MessageElapsedSize Size SizeThroughputTimebytes bytes bytessecs87380 16384 1638413.0710^6bits/sec1382.34Выставляются ограничения пропускной способности(inrgress_policing_rate – максимальная скорость передачи в килобайтах в секунду, через выбранный интерфейса, inrgress_policing_burst – максимальный размер данных(в килобайтах), которыеможно передать с превышением пропускной способности):– 12 –[root@localhost /]# ovs-vsctl set Interface <target interface> \ingress_policing_rate=1000[root@localhost /]# ovs-vsctl set Interface <target interface> \ingress_policing_burst=100Тест пропускной способности после установления ограничений:[root@localhost /]# netperf -H 192.168.0.2MIGRATED TCP STREAM TEST from 0.0.0.0 () port 0 AF_INET to 192.168.0.2 ()port 0 AF_INETRecv Send SendSocket Socket MessageElapsedSize Size SizeThroughputTimebytes bytes bytessecs87380 16384 1638412.3110^6bits/sec0.99Приведенный выше способ ограничения пропускной способности не буферизуетпакеты, а сбрасывает, при превышении пропускной способности.Есть также возможность применять политику QoS на выделенный порт.
Для этогосоздается буфер(queue), который и влияет на скорость передачи определенных пакетов на выбранный порт(например в следущей конфигурации, будет введено ограничение 2Мб/c на порт eth1):1) Создание буфера(q0)q0 (2 Mbps):ovs-vsctl --id=@q0 create queue other-config:min-rate=2000000 \other-config:max-rate=20000002) Создание QoS(newqos) и добавление новой очереди в таблицу QoSovs-vsctl --id=@newqos create qos type=linux-htb queues=0=@q03) Добавление QoS (newqos) к выбранному порту (eth1)ovs-vsctl set port eth1 qos=@newqosСледует также отметить, что на выбранный порт можно определить несколько очередей, и таким образом гарантировать различное качество обслуживания для разныхвидов трафика.– 13 –4.3Зеркалирование трафика.Для использования системы обнаружения вторжения, необходимо использоватьзеркалирование траффика на порт для анализа. Для настройки зеркалированиянеобходимо создать порт-зеркало(mirror-port) и добавить его в соответствующиймаршрутизатор:[host]# ovs-vsctl create mirror name=mirror select_all=1 output_port=port_idДля того, чтобы узнать ID порта, который необходим:[host]# ovs-vsctl list port <IDS target port>Добавление зеркала:[host]# ovs-vsctl add bridge extern0 mirrors=mirror_id4.4Настройка GRE туннелирования.Open vSwitch – позволяет использовать GRE туннелирование между хостами, какспособ инкапсуляции трафика и создание оверлейных сетей(overlay networks).
На следующей схеме показано, как настраивать GRE туннель между двумя виртуальнымимашинами:Процесс настройки состоит из трех частей:• Создать изолированный мост для виртуальной машины• Создать конечные точки GRE туннеля на каждом из гипервизоров.• Добавить GRE интерфейс и инициализировать туннель.Создание изолированного моста Open vSwitch(его можно назвать изолированным,т.к. он не содержит реальных физических интерфейсов):– 14 –[hypervisor1]# ovs-vsctl add-br br2Смысл использования “изолированного моста” и отдельного GRE интерфейса в том,чтобы отделить системный трафик гипервизора от трафика GRE, что в свою очередьотделяет управление сетью для виртуальной машины, от особенностей сети хоста,на котором запущен гипервизор. Для этого создается внутренний интерфейс и емуприсваивается IP адрес:[hypervisor1]# ovs-vsctl add-port br0 tep0 -- set Interface tep0type=internal[hypervisor1]# ifconfig tep0 192.168.200.20 netmask 255.255.255.0На втором гипервизоре прописываются те же команды, выставляется другой IP адресинтерфейса tep0.