вторник, 26 февраля 2008 г.

Полноценная симуляция объединенных сетей Ethernet при помощи dynamips и vmware.

Часто, в работе системного администратора, приходиться «резать по живому», то есть вносить изменения в конфигурацию рабочей сети прямо во время ее работы. Случается так, что те или иные изменения в конфигурации по разным причинам, не приводят к желаемому эффекту, что, в свою очередь, приводит к простою сети и рождает множество, связанных с этим, проблем. Одна из вышеупомянутых причин, конечно, неопытность системного администратора. Недостаток практики, одна из самых острых проблем, никакая теоретическая база не способна заменить практику в «боевых» условиях. Часто, вещи, кажущиеся теоретически простыми, на практике оказываются намного сложнее, всплывают всевозможные нюансы, находятся «подводные камни, и грабли». Рано или поздно, любому администратору приходит мысль о том, что было бы не плохо проверить то или иное решение на практике, прежде чем внедрять его в сети. Хорошо если в компании есть несколько свободных маршрутизаторов и серверов, из которых можно собрать модель будущего решения и «погонять» ее, выключая поочередно маршрутизаторы, или каким либо другим способом, тестируя надежность, собранной схемы и ее отказоустойчивость. К сожалению, большинству компаний такие лаборатории «не по карману». Что же им остается? Как получить ценный опыт и не «завалить» сеть на несколько часов? На помощь приходит симуляция.

Сразу скажу, что существует масса коммерческих пакетов, которые позволяют смоделировать сеть практически любой топологии и сложности, но стоимость их при всем этом колеблется от 400 до 5000 долларов, и, несмотря, на их стоимость, эти решения не безупречно отражают спецификацию оборудования cisco. Хотя, очень близко и снабжены многими инструментами, позволяющими отслеживать, например, движение служебных пакетов, рассылаемых по сети ospf на модели, а так же средствами визуального проектирования. Но чего действительно нет в этих программах, так это рабочих станций и программных маршрутизаторов под управлением linux, freebsd или windows, а в большинстве случаев «рядовому» системному администратору приходиться работать со связкой cisco + <OS> и решать проблемы, связанные с их взаимодействием, через сеть. По этой причине, а в большей степени из-за высокой стоимости, я продолжил поиски приемлемого решения для моделирования объединенных сетей.

Когда я наткнулся на проект dynamips, я не мог поверить «своему счастью». Мог ли я предположить, что существует возможность запустить реальный cisco ios у себя дома?! Поистине, проект заслуживает всяческой поддержки, потому как дает возможность «простому смертному» смоделировать сеть практически любой сложности на реальных ios, а это значит на 100% таких же, как и в реальной аппаратной сети, и только это одно заставило меня взяться за написание этой заметки. К сожалению, dynamips не позволяет эмулировать коммутаторы cisco catalyst, но с другой стороны, коммутаторы не представляют особого интереса и в большинстве случаев просты в настройке. Но, зато средства dynampis, позволяют симулировать практически любое количество сегментов, соединенных с любым из портов маршрутизатора, что при некоторой фантазии, может частично компенсировать отсутствие коммутаторов.

Хочу обозначить свои цели. Эта заметка носит больше обзорный характер и цель ее сводиться к тому, чтобы показать основные возможности dynamips, а так же рассказать о том, как можно ввести в симулируемую сеть программный маршрутизатор или рабочую станцию при помощи vmware. Я не стану подробно разбирать конфигурацию dynamips, для этих целей вам придеться ознакомиться с соответствующей документацией, я лишь коснусь основных параметров, необходимого минимума, достаточного для запуска небольшой сети. Так же постараюсь описать моменты, которые мне показались наиболее интересными, а потому, я думаю, могут показаться интересными и вам.

Пакет dynamips имеет клиент-серверную архитектуру и состоит из двух частей, а если быть точным, из двух проектов, это, собственно, сам dynamips эмулятор и dynagen проект гипервизора для управления процессом симуляции.

Ниже, я кратко расскажу об установке и запуске небольшой сети в среде домашней windowsXP. Для работы нам понадобиться инсталлятор dynamips для windows, установленные библиотеки winpcap и образ cisco ios. Инсталлятор dynamips можно найти на http://dynagen.org , там же расположена небольшая, но исчерпывающая инструкция по установке и использованию пакета на английском языке, так же у проекта есть форум, где можно найти ответ практически на любой интересующий вас вопрос. В поставке для windows, инсталлятор уже включает в себя обе части проекта. После его установки на «рабочем столе» появятся три ярлыка: Dynamips Server, Network device list, Dynagen Sample Labs. Библиотеку winpcap можно взять с сайта http://www.winpcap.org , только после ее установки можно запускать сервер (Dynamips Server). На рисунке 1 изображено окно, запущенного и готового к работе сервера dynamips. Что же касается образов cisco ios, с ними дела обстоят намного сложнее, особенно для тех, у кого нет оборудования cisco. Скажу одно, в Интернете можно найти практически все, в том числе и образы cisco ios, однако, если в вашем распоряжении есть хотя бы один маршрутизатор cisco, вы можете получить ios, скопировав его, прямо с маршрутизатора, при помощи команды copy. Но прежде, чем начать экспериментировать с этим, рекомендую ознакомиться с соответствующей документацией, потому, как неправильное понимание этой команды, при попытке скопировать загрузочный образ, может привести к выходу маршрутизатора «из строя».
На сегодняшний день dynamips позволяет использовать образы маршрутизаторов следующих моделей: 1700, 2600, 3600, 3700, 7200.


Рис. 1

Теперь можно переходить к разработке топологии небольшой сети, ее запуску и тестированию.

Рис. 2

Открыв Dynagen Sample Labs, мы обнаружим там, в числе других, папку simple1, а в ней файл simple1.net. На рисунке 2 изображена логическая схема подключения двух маршрутизаторов, описанная в этом файле. Рассмотрим ее подробнее.

[localhost]


Файл начинается с секции [localhost] , она указывает dns имя или ip адрес dinamips сервера, в нашем случае, это адрес «обратной петли» потому, как все эксперименты мы проводим на одной рабочей станции, не подключенной к какой-либо сети. В документации говорится о том, что один процесс dynamips сервера может использоваться сразу несколькими клиентами. При этом стоит учитывать, что в среде windowsXP, процесс имеет ограничение на размер, используемой оперативной памяти 2 гигабайта, а в Linux 3 гигабайта и при запуске нескольких клиентов одновременно, симуляция достаточно больших сетей, может привести к отказу в обслуживании последних.

[[7200]]

Далее идет секция [[7200]] , здесь указывается модель маршрутизатора, которую мы собираемся эмулировать и параметры относящиеся к ней.

image = \Program Files\Dynamips\images\c7200-jk9o3s-mz.124-7a.image

Параметром image, мы указываем полный или относительный путь расположения, распакованного загрузочного образа cisco ios, здесь имя конечного файла не имеет значения, но нужно иметь ввиду, что загрузочный образ ios, по умолчанию, запакован. В документации указано, что для распаковки и дальнейшего использования на платформе windows, можно использовать программу winrar, а в Linux unzip.

npe = npe-400

ram = 160

Параметр npe и ram относятся к аппаратной части, по умолчанию, указана платформа npe-400, и выделено 160 мегабайт оперативной памяти.

[[ROUTER R1]]

Далее, идут секции описания мршрутизаторов, секция [[ROUTER R1]] используется обозначения маршрутизатора и указывает симулятору запустить мршрутизатор с псевдонимом R1, этот псевдоним используется для внутреннего обращения симулятора и должен уникально идентифицировать маршрутизатор, то есть, двух маршрутизаторов с одинаковыми псевдонимами быть не должно.

s1/0 = R2 s1/0

В параметрах секции указано, что интерфейс Serial1/0 марушрутизатора, в секции которого, находится запись, то есть R1, соединен с интерфейсом Serial1/0 маршрутизатора R2.

[[ROUTER R2]]

Далее, снова идет секция маршрутизатора [[ROUTER R2]] без параметров, она говорит симулятору о том, что необходимо запустить маршрутизатор R2.

Теперь, когда с конфигурационным файлом все «более-менее» понятно, можно запускать нашу маленькую сеть. Пользователям windowsXP это не составит труда, нужно просто дважды щелкнуть на файле конфигурации, через некоторое время, когда симулятор загрузит образы и запустит сеть, вы увидите приглашение интерпретатора dynagen изображенное на рисунке 3.


Рис. 3

Теперь введя «?» , мы получим список доступных для использования команд. Рекомендую начать с команды list, она покажет список, загруженных маршрутизаторов, а так же порты, на которых ожидает соединения эмуляция консольной сессии через telnet. Используя telnet можно соединиться с консолью любого, запущенного маршрутизатора, но проще запускать telnet c помощью интерпретатора dynagen, введя команду telnet <псевдоним маршрутизатора>, в ответ на нее интерпретатор откроет telnet сессию на нужный ip адрес и порт, например, команда может выглядеть так:

=> telnet R1

Так же нужно помнить о том, что dynagen чувствителен к регистру, то есть, различает строчные и прописные буквы ,по этому будьте внимательны при использовании команд.

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

Следующий по очередности, но не по значению, вопрос: как ввести в симулируемую сеть Linux или FreeBSD? Среди многочисленных средств dynamips, есть и такие, которые позволяют создавать прозрачные мосты между сетевым интерфейсом, симулируемого маршрутизатора, и сетевым интерфейсом рабочей станции, под управлением windows или Linux. Таким образом, мы можем соединить один из интерфейсов нашей операционной системы с одним из интерфейсов, симулируемой сети и запустить, например, программу трассировки маршрута. Но, что если нам нужно поместить какую ни будь нетривиальную операционную систему, например NetBSD, в середину симулируемой сети? На помощь приходит vmware workstation. Скачать дистрибутив vmware workstation можно с сайта http://vmware.com , для доступа требуется регистрация. На момент написания заметки в дистрибутив vmware workstation, входил так же и vmware player, это важно, потому, что позволяет нам без особых проблем, не затрачивая денег на приобретение этого продукта, все же выполнить поставленную перед нами задачу. Я объясню, сам продукт vmware workstation является всем известным и одним из самых лучших средств виртуализации, изолированных друг от друга, виртуальных машин. К сожалению, он стоит денег и не позволяет запускать виртуальные машины если не приобретена лицензия. Но при помощи него, можно сконфигурировать сеть и виртуальную машину, удовлетворяющую нашим требованиям. Второй инструмент vmware player, распространяется абсолютно бесплатно и служит для запуска, сконфигурированных виртуальных машин, но не включает в себя средства конфигурирования сети или эмулируемого оборудования. Таким образом, при помощи двух этих инструментов, мы можем вполне комфортно работать.

Средства эмуляции сетевых интерфейсов vmware включают в себя, так называемые, host-only интерфейсы, которые служат для соединения виртуальной машины и рабочей станции. Их мы будем использовать. После установки в системе, по умолчанию, создается два сетевых интерфейса vmware, один из них и есть host-only, он носит имя VMnet1. Теперь нам нужно запустить ярлык с «рабочего стола» Network device list и скопировать идентификатор сетевого адаптера VMnet1, чтобы подставить его в наш конфигурационный файл. На рисунке 4 изображен список идентификаторов сетевых адаптеров, генерируемый запуском ярлыка Network device list, выделен идентификатор интерфейса VMnet1.


Рис. 4

Ниже приведен исправленный файл конфигурации sample1.net, а рисунок 5 иллюстрирует логическую схему подключения устройств:

[localhost]

[[7200]]

image = \Program Files\Dynamips\images\c7200-jk9o3s-mz.124-7a.image

npe = npe-400

ram = 160

[[ROUTER R1]]

f1/0 = R2 f1/0

[[ROUTER R2]]

f1/1 = NIO_gen_eth:\Device\NPF_{504218C3-5EEE-42EF-ADE6-811B6BAD2AD0}


Рис. 5

Я намеренно изменил имена интерфейсов с s1/0 на f1/0, между маршрутизаторами R1 и R2 для того, чтобы показать, как dynamips может динамически изменять конфигурацию маршрутизаторов в случаи необходимости, добавляя им интерфейсы, которых раньше не было. Теперь, после запуска сети, на маршрутизаторах пропадут интерфейсы Serial, а вместо них появятся fastEthernet.

Осталось запустить vmplayer и установить требуемую операционную систему, в моем случае, это FreeBSD. Установка FreeBSD, а так же использование wmware workstation-это отдельные большие темы, о которых написано , пожалуй, уже не мало другими авторами, поэтому я оставлю их, упомяну только, что vmware позволяет создать множество host-only интерфейсов, которые затем можно использовать на разных виртуальных машинах или на нескольких виртуальных машинах одновременно, создавая сегменты или разделенные маршрутизатарами участки сети. Возможные варианты использования связки dynamips и vmware ограничены только вашей фантазией и аппаратными ресурсами рабочей станции, которых уходит на виртуализацию и симуляцию в избытке. Тут стоит упомянуть, что dynamips имеет несколько параметров оптимизации использования памяти и времени процессора. Один из них это ghostios, который позволяет не загружать один и тот же образ ios в память для каждого маршрутизатора, вместо этого загружается только один образ, для всех маршрутизаторов одного типа. Так же есть параметр sparseme, который позволяет выделять виртуальную память рабочей станции для работы ios, что может замедлить работу симуляции, но позволяет обойти ограничение, наложенное операционной системой на объем памяти, выделяемой процессу. Документация рекомендует использовать его только в том случае, если реальной физической памяти уже не хватает для запуска симуляции даже при включенном ghostios. Эти опции можно включить глобально, добавив строки ghostios=true и sparsemem=true в самое начало конфигурационного файла. Либо для каждой модели маршрутизаторов отдельно, например, в секции [[7200]].

Что касается оптимизации затрат процессорного времени, здесь все немного сложнее, обычно после запуска симуляции сети, можно заметить, что процессор (или даже несколько) занят на все 100%, в документации на эту тему говорится много, но общий смысл сводится к тому, что эмулятор не знает, насколько занят маршрутизатор в данный момент и отдает ему все свободное процессорное время. Для исправления этой ситуации используется механизм определения загруженности маршрутизатора, для того, чтобы им воспользоваться, необходимо запустить симуляцию, а так же рекомендуется дать определенную нагрузку на симулируемую сеть для вычисления наиболее справедливого значения загруженности маршрутизатора, в частности, рекомендуется хотя бы выполнить заход на маршрутизатор. После того ,как симуляция запущена и нагрузка дана, в консоли dynagen нужно ввести команду idlepc get <имя маршрутизатора под нагрузкой>, например idlepc get R1. После этого dynagen сгенерирует список средней загруженности маршрутизатора относительно рабочей станции, предусмотрительно пометив наиболее лучшие, по его мнению, значения звездочкой. В нижней части появится запрос на установление значения idlpc для текущего сеанса, введя нужное число из списка ,рекомендую проверить текущую загруженность процессора и несколько раз повторить операцию, используя разные параметры, для того, чтобы убедиться, что вы выбрали наилучшее значение. После того, как вы уверились в правильности своего выбора, можно сохранить значение idlpc в локальной базе данных с помощью команды idlepc save <имя маршрутизатора> db, например save idlepc R1 db. После этого значение idlepc будет применяться для всех маршрутизаторов этого типа при старте симуляции. Есть другой способ, можно указать значение idlepc в файле конфигурации, используя параметр idlepc=xxxx глобально, либо для каждого маршрутизатора в отдельности, точно так же, как и в случае с оптимизацией памяти.

Dynagen представляет еще одну очень интересную и архи полезную возможность, «дампить» поток с порта в файл, для этого и используется библиотека winpcap. Информацию из файла, можно в реальном времени, просматривать с помощью популярного сетевого анализатора Ethereal, который ныне зовется Wireshark, разработанного для использования с той же самой библиотекой winpcap. Домашняя страница проекта http://www.wireshark.org . Для того, чтобы воспользоваться этой возможностью, в консоли dynagen нужно ввести команду capture <имя маршрутизатора> <имя интерфейса> <имя файла>.cap, например, capture R1 f0/0 example.cap. После того, как команда будет выполнена, в папке с файлом проекта, появится файл, ассоциированный с программой Wireshark, все, что вам останется, это открыть его и наслаждаться видом «собранных» с интерфейса пакетов.

В общем, то и все, собирался написать заметку, а вышла целая статья, хотя хотелось бы коснуться некоторых тем глубже, но к чему бы это могло привести, так и книга может выйти, а моя цель иная. Пора подвести итог. Проект dynamips, не смотря на то, что он полностью opensource и бесплатен, позволяет сделать то, что другим симуляторам локальных сетей едва ли удастся в ближайшие годы, а именно, дать людям в руки настоящий - живой cisco ios, но это только одна сторона. С другой стороны, существенным недостатком является высокое требование к аппаратным ресурсам, отсутствие возможности эмуляции cisco catalyst или какого-либо иного коммутационного оборудования, лишая тем самым возможности пользователя, «поиграться» с протоколами spanning-tree или GVRP. Ну и менее существенным недостатком является отсутствие средств визуального моделирования. И между тем, то, что dynamips дает возможность соединить симулируемую и реальную сети, выводит этот проект на новый уровень, открывает существенно большие возможности для сетевого администратора, по сравнению с другими средствами симуляции сетей.