В настоящее время технологии виртуализации являются неотъемлемой составляющей IT-мира. Помимо промышленного применения технологии виртуальных машин, позволяющей сократить совокупную стоимость владения IT-инфраструктурой, о чем уже несколько лет пишут все кому не лень, технология также широко используется для изучения или тестирования системного, сетевого и прикладного программного обеспечения.
В большинстве публикаций чаще всего рассматривается виртуализация первого уровня. На одном или нескольких физических компьютерах, связанных реальными сетями, на базе некоторого ПО виртуализации функционирует множество виртуальных машин (VM), связанных виртуальными сетями (также эмулируемых при помощи ПО виртуализации), которые при необходимости связываются с реальными сетями через сетевые адаптеры физических компьютеров. Иными словами чаще всего рассматривается уровень реальных устройств и один уровень виртуальных объектов (обычно машин, на базе которых функционируют те или иные ОС). Правда, если быть более точным, в примерах, рассматриваемых в публикациях, неявно присутствуют объекты второго или более глубоких уровней виртуализации, но авторы практически никогда не акцентируют на этом свое внимание.
В данной же статье автор хотел бы поделиться опытом многоуровневой виртуализации, причем в домашних или полевых условиях, когда чаще всего под рукой нет ничего, кроме обычного компьютера или ноутбука, и требуется смоделировать некоторую сетевую инфраструктуру (в пределах требуемой степени соответствия модели реальному объекту) с целью ее изучения или тестирования. Причем инфраструктура включает как серверы и рабочие станции, так и маршрутизаторы и коммутаторы, работающие под управлением полнофункциональных операционных систем и поддерживающие современные сетевые технологии. В статье затрагиваются различные системные и сетевые технологии и программные продукты, и автор статьи исходит из того, что читатель знаком с ними и имеет опыт работы с ними (по всем вопросам относительно них читатель отсылается к соответствующей документации производителей), автор подробно останавливается лишь на существенных моментах, требующих разъяснений.
Рассмотрим следующую сеть, которая придумана исключительно ради примера, и сама по себе особой практической ценности в себе не несет (каждый может выбрать для себя любой другой пример, в том числе из реальной практики). Имеются две компании, у каждой есть головной офис с сервером в одной географической точке, и филиал с рабочей станцией в другой географической точке. Географические точки разделяет некоторый MPLS-backbone на базе маршрутизаторов Cisco. Для каждой компании в отдельности организован Layer 2 VPN между головным офисом и филиалом посредством технологии Ethernet over MPLS (EoMPLS) для возможности «прозрачного» взаимодействия на канальном уровне (Ethernet) между рабочей станцией и сервером через MPLS-backbone.
Ниже показана физическая структура рассматриваемой сети.
Также ниже показана логическая структура взаимодействия рабочих станций и серверов рассматриваемой сети. В каждой из компаний рабочая станция и сервер могут «прозрачно» взаимодействовать друг с другом, и изолированы от рабочей станции и сервера другой компании.
Задача заключается в том, что требуется эту сеть смоделировать и протестировать, в частности взаимодействие рабочих станций c серверами через EoMPLS среду, и все это необходимо выполнить, располагая одним единственным персональным компьютером. Достаточно знакомая ситуация для большинства специалистов по системным и сетевым технологиям, перед которыми возникает аналогичная задача и у которых, как правило, нет под рукой ни лишних компьютеров, ни, тем более уж, маршрутизаторов Cisco.
Что же, реальные компьютеры легко заменяются виртуальными машинами, создаваемых и запускаемых при помощи того или иного программного обеспечения, реализующих технологию виртуальных машин, например, того же VMware Workstation 6.0 (в этой статье автор рассматривает многоуровневую виртуализацию на примере именно данного программного обеспечения). Для моделирования маршрутизаторов Cisco c поддержкой EoMPLS хорошо подходит популярный симулятор Dynamips (а также удобная и наглядная графическая среда к нему – GNS3). Однако, возникает проблема: можно отдельно смоделировать виртуальные машины с установленными на них «реальными» полнофункциональными ОС MS Windows, и отдельно – маршрутизаторы Cisco c «реальными» полнофункциональными ОС Cisco IOS, но как увязать между собой две среды моделирования по сети?
Тем не менее, выход из ситуации есть. В VMware Workstation можно привязывать виртуальные коммутаторы VMnet к сетевым адаптерам физического компьютера (утилитой Virtual Network Editor), а виртуальные сетевые адаптеры виртуальных машин, соответственно, привязывать к соответствующим виртуальным коммутаторам VMnet (при конфигурировании виртуальной машины). Ниже показан пример такой привязки посредством виртуального коммутатора VMnet0:
В свою очередь, в среде GNS3 на базе Dynamips имеется объект типа «Cloud», который можно также проецировать на сетевые адаптеры физического компьютера. После этого объект можно подсоединять к сетевым интерфейсам других объектов среды GNS3, в том числе к интерфейсам маршрутизаторов Cisco. Следует особо отметить, что объект типа «Cloud» по сути своей не является каким-либо полноценным виртуальным устройством – это все лишь виртуальная «точка стыка» (как разъем на коммутационной панели), которую с сетевой точки зрения можно на что-нибудь спроецировать, например, на сетевой адаптер компьютера. Забегая вперед, также отметим, что объекты «Computer» и «Server», используемые в среде GNS3 также являются объектами типа «Cloud» (простыми «точками стыка» с соответствующими иконками для наглядности), а вовсе не какими-то эмуляциями компьютера или сервера программными средствами, как это, например, делается в учебном симуляторе Cisco Packet Tracer.
Ниже показан пример проецирования объекта типа «Cloud» C0, соединенного с сетевым интерфейсом маршрутизатора R0 в среде GNS3, на сетевой адаптер физического компьютера:
Неопытных специалистов может смутить длинный код (идентификатор сетевого транспорта, назначаемый ОС MS Windows для сетевого адаптера) в настройках, и чтобы не запутаться в названиях сетевого подключения, названиях сетевого адаптера, MAC-адресе адаптера и его идентификаторе, можно воспользоваться встроенной в ОС MS Windows утилитой GETMAC, запускаемой с ключом V (Verbose – подробная информация):
Таким образом, через подобное «двустороннее проецирование» на канальном уровне OSI (по сути Layer 2 Bridging) на один и тот же сетевой адаптер физического компьютера виртуальные маршрутизаторы в среде GNS3 на базе Dynamips могут на Ethernet-уровне взаимодействовать с виртуальными машинами в среде VMware Workstation (это многократно проверено экспериментально). Напрямую увязать по сети коммутаторы VMnet из VMware-среды с объектами типа «Cloud» (точками стыка) из GNS3 на базе Dynamips, увы, нет возможности (по крайней мере, без применения каких-либо специальных программных средств).
Теперь возникает новая загвоздка: количество сетевых «точек соприкосновения» между VMware-средой и Dynamips-средой может быть далеко не одно, а несколько (в рассматриваемом примере их 4 – две рабочие станции и два сервера), в то время как на физическом компьютере может быть один-два или вообще ни одного сетевого адаптера. К тому же, привязанность к сетевым адаптерам физического компьютера в любом случае мысль не самая разумная с точки зрения безопасности. Наконец, мы и не особо стремимся все разместить на первом уровне виртуализации, цель данной статьи – многоуровневая виртуализация.
В этой ситуации мы прибегнем к следующей нехитрой уловке: никто нам не мешает создать еще одну вспомогательную виртуальную машину с необходимым количеством сетевых адаптеров (столько, сколько нужно точек «соприкосновения»), установить на нее ОС, и самое главное – программное обеспечение GNS3 на базе Dynamips. Потом уже в GNS3 создать, настроить и запустить требуемую для моделирования сеть на базе маршрутизаторов Cisco. Таким образом, маршрутизаторы Cisco «переезжают» на второй уровень виртуализации (на первом находится сама вспомогательная виртуальная машина). Сетевые «точки соприкосновения» будут осуществляться через соответствующие объекты типа «Cloud» (точки стыка) в GNS3 на базе Dynamips, привязанные к соответствующим сетевым адаптерам виртуальной машины CISCONET, которые, в свою очередь, привязаны к соответствующим виртуальным коммутаторам VMnet, к которым мы можем подсоединять другие виртуальные машины. В нашем примере мы будем использовать вспомогательную виртуальную машину CISCONET с 4-мя сетевыми адаптерами (VMware Workstation 6.0 поддерживает до 10 сетевых адаптеров для виртуальной машины), привязанных к соответствующим виртуальным коммутаторам VMnet.
Таким образом, мы и приходим к двум уровням виртуализации: VMware-инфраструктура внутри физического компьютера (1-й уровень виртуализации), и Dynamips-инфраструктура внутри вспомогательной виртуальной машины (2-й уровень виртуализации).
Наконец, если вспомнить, что EoMPLS – это тоже своего рода виртуализация средствами Cisco IOS, то увидим, что в рассматриваемом примере имеется еще и 3-й уровень виртуализации. На 3-м уровне виртуализации находятся виртуальное «облако» MPLS и виртуальные цепочки передачи данных (virtual circuits) поверх этого облака, которые эмулируются средствами Cisco IOS на двух маршрутизаторах Cisco.
В итоге мы получаем следующую многоуровневую схему виртуализации:
Как видно из схемы выше, компьютер экспериментатора находится на уровне реальных объектов и с сетевой точки зрения полностью изолирован от виртуальных машин и виртуальных маршрутизаторов, что вполне разумно и правильно. Первый уровень виртуализации обеспечивается программным обеспечением VMware Workstation, на этом уровне находятся виртуальные рабочие станции (WINPC1, WINPC2), виртуальные серверы (WINSRV1, WINSRV2), и вспомогательная виртуальная машина CISCONET, а также виртуальные коммутаторы VMnet3-VMnet6. Второй уровень виртуализации обеспечивается программным средством GNS3 на базе Dynamips, работающим на виртуальной машине CISCONET, на этом уровне находятся виртуальные маршрутизаторы Cisco (R1, R2), а также виртуальные коммутаторы SW1-SW4, подсоединенные к соответствующим сетевым интерфейсам маршрутизаторов (R1, R2). Сетевое взаимодействие между первым и вторым уровнем виртуализации осуществляется за счет «двустороннего проецирования» на канальном уровне OSI: виртуальные коммутаторы VMnet3-VMnet6 привязаны к соответствующим сетевым адаптерам LAN1-LAN4 вспомогательной виртуальной машины CISCONET, а соответствующие порты виртуальных коммутаторов SW1-SW4 посредством соответствующих объектов типа «Cloud» (на схеме они не показаны, поскольку по сути своей они являются простыми «точками стыка» и не более того), также привязаны к соответствующим сетевым адаптерам LAN1-LAN4 вспомогательной виртуальной машины CISCONET. Наконец, третий уровень виртуализации обеспечивается средствами ОС Cisco IOS, работающими на виртуальных маршрутизаторах, на этом уровне находятся виртуальное MPLS-облако и виртуальные цепочки (VC 111, VC 222) по технологии EoMPLS. Виртуальные цепочки EoMPLS средствами самой ОС Cisco OS проецируются на соответствующие интерфейсы виртуальных маршрутизаторов (R1, R2) и тем самым обеспечивается сетевое взаимодействие между вторым и третьим уровнем виртуализации.
Перейдем теперь непосредственно к результатам моделирования этой многоуровневой конструкции на персональном компьютере. Вот как все выглядит после создания, настройки и запуска виртуальных машин, включая CISCONET, внутри которой также создана, настроена и запущена сеть с маршрутизаторами Cisco:
В виртуальной машине CISCONET четыре сетевых адаптера: LAN1, LAN2, LAN3 и LAN4, которые привязаны к соответствующим виртуальным коммутаторам VMnet3, VMnet4, VMnet5 и VMnet6. В свою очередь, сетевой адаптер виртуальной машины WINPC1 привязан к виртуальному коммутатору VMnet3, сетевой адаптер WINPC2 – к VMnet4, сетевой адаптер WINSRV1 – к VMnet5 и сетевой адаптер WINSRV2 – к VMnet6. Так реализуется одна сторона точек «соприкосновения»: виртуальные машины WINPC1, WINPC2, WINSRV1 и WINSRV2 могут взаимодействовать с виртуальной машиной CISCONET через соответствующие сетевые адаптеры этой машины. Очень важно отметить, что какая-либо коммутация или маршрутизация между сетевыми адаптерами виртуальной машины CISCONET средствами самой ОС MS Windows на этой машине по определению должна быть запрещена. В свою очередь, на машине CISCONET запущена среда GNS на базе Dynamips, в которой работают два виртуальных маршрутизатора Cisco. Соответствующие интерфейсы маршрутизаторов подсоединены к соответствующим виртуальным коммутаторам SW1, SW2, SW3 и SW4 (не путать их с виртуальными коммутаторами VMnet), а коммутаторы, в свою очередь, подключены к соответствующим объектам PC1, PC2, SRV1 и SRV2 (не путать их с виртуальными машинами VMware c аналогичными названиями). PC1, PC2, SRV1 и SRV2 по сути являются объектами типа «Cloud» – простыми «точками стыка», спроецированными на соответствующие сетевые адаптеры LAN1, LAN2, LAN3 и LAN4 виртуальной машины CISCONET. Таким образом, реализуется вторая сторона точек «соприкосновения»: соответствующие интерфейсы маршрутизаторов также могут взаимодействовать с виртуальной машиной CISCONET через соответствующие сетевые адаптеры этой машины.
Ниже частично показано, как реализуются необходимые привязки между виртуальными коммутаторами VMnet и сетевыми адаптерами виртуальной машины CISCONET, а также между объектами PC1, PC2, SRV1 и SRV2 (точками стыка) и сетевыми адаптерами виртуальной машины CISCONET. На снимке экрана видно окно с конфигурационным файлом виртуальной машины CISCONET, на котором видны MAC-адреса сетевых адаптеров и привязка к виртуальным коммутаторам VMnet. В другом окне отображена таблица сетевых подключений виртуальной машины CISCONET и соответствующие им названия сетевых адаптеров (присвоенные в ОС MS Windows этой машины), MAC-адреса адаптеров и идентификаторы сетевого транспорта. Наконец, в третьем окне отображено привязка объекта PC1 типа «Cloud» (точки стыка) к соответствующему идентификатору сетевого транспорта виртуальной машины CISCONET.
Для того чтобы не запутаться в сетевых привязках между различными объектами на различных уровнях виртуализации, сведем их в одну наглядную таблицу:
Сеть
Виртуальные машины VMware
Виртуальный коммутатор VMware
Сетевое подключение CISCONET
MAC-адрес сетевого адаптера CISCONET
Идентификатор сетевого транспорта CISCONET
Объект «Cloud» в GNS3
Виртуальный коммутатор в GNS3
Виртуальный маршрутизатор Cisco и сетевой интерфейс
Виртуальная цепочка EoMPLS
Уровень виртуализации 1
Уровень 2
Уровень 3
1
WINPC1 CISCONET
VMnet3
LAN1
00:0c:29:25:1f:ac
C0E98EFF-BFA7- 472F-A5C0-A22293E1EE26
PC1
SW1
R1: FA0/0
VC 111
2
WINPC2 CISCONET
VMnet4
LAN2
00:0c:29:25:1f:b6
390F3C01-A168- 40D8-A539- 1E417F3D6E1B
PC2
SW2
R1: FA0/1
VC 222
3
WINSRV1 CISCONET
VMnet5
LAN3
00:0c:29:25:1f:c0
6577836B-60A3- 4891-931C- 232ED8B2F8F2
SRV1
SW3
R2: FA0/0
VC 111
4
WINSRV2 CISCONET
VMnet6
LAN4
00:0c:29:25:1f:ca
7834C67F-12F2- 4559-BEF4- C170C3E0B7DC
SRV2
SW4
R2: FA0/1
VC 222
Теперь перейдем к результатам тестирования. На нижеприведенном снимке экрана видно, что соответствующие рабочие станции и сервера «видят» друг друга по сети (в том числе при помощи сетевых служб, использующих широковещательные запросы) сквозь MPLS-облако, благодаря виртуальным цепочкам EoMPLS. Специалистам по сетевым технологиям также будет интересно посмотреть на таблицы MPLS-коммутации и состояние виртуальных цепочек EoMPLS на маршрутизаторах Cisco. На втором снимке экрана видно, что виртуальные цепочки (VC 111, VC 222) успешно функционируют и по ним в обе стороны передано некоторое количество байтов:
Таким образом, многоуровневая виртуализация позволяет изучать и тестировать разнообразные примеры сетевой инфраструктуры, эффективно используя вычислительные ресурсы имеющегося под рукой персонального компьютера, который на сегодняшний день нередко имеет на «борту» многоядерный процессор и оперативную память большой емкости. К тому же многоуровневая виртуализация позволяет более гибко распределять вычислительные ресурсы и контролировать их использование. Так, например, в рассмотренном выше примере виртуальные маршрутизаторы работают в рамках вычислительных ресурсов вспомогательной виртуальной машины, а не реального компьютера, как это было бы в случае одноуровневой виртуализации.
Связаться с автором статьи можно по адресу: PavelAR at yandex.ru