СетиНемного о Netkit или Сетевая лаборатория

* Большая часть того что здесь написано по сути перевод документации в свободной форме.
Netkit — The NETwork emulation toolKIT

Netkit — «Недорогая» система для экспериментов с компьютерными сетями(или как повествует man страница «Недорогое автономное решение для эмуляции компьютерных сетей»).
Понимание компьютерных сетей без проведения практических экспериментов действительно трудно, если не сказать почти невозможно. К сожалению, создание сетевой лаборатории может быть очень дорогими.

Netkit был задуман как среда для создания и проведения экспериментов с сетями при минимальных затратах и без особых усилий. Позволяет «создавать» несколько виртуальных сетевых устройств (полноценные маршрутизаторы, коммутаторы, компьютеры и т.п.), которые могут быть легко соединены между собой в целях формирования сети на одном компьютере. Сетевое оборудование является виртуальным, но функционально многие из характеристик соответствуют таковым у реальных аналогов, в том числе конфигурационный интерфейс(тут я не совсем понял что имеется в виду под интерфейсом- скорее всего подобие цисковского cli в Quagga — прим.).
Netkit использует простой файл с описанием топологии канального уровня эмулируемой сети и некоторые конфигурационные файлы, идентичные тем, которые используются на реальном оборудовании(«в сетевых инструментах»- опять же видимо подразумевается конфиги реального железа или Quagga- прим.). Netkit запустит эмулируемое сетевое оборудование и соединит в сеть как требует конфигурация. Кроме того, сети могут быть описаны с помощью основанного на XML языка- NetML. Из описания сети в NetML можно автоматически получить конфигурационные файлы, которые могут быть использованы на реальных маршрутизаторах или в netkit-скриптах для имитации описанной сети.
Netkit разрабатывается как продукт с открытым исходным кодом (в основном под лицензией GPL) и в значительной степени основан на User Mode Linux (UML) варианте ядра Linux. Цель этого проекта состоит в решении многих проблем, в том числе технических, чтобы пользователь мог использовать UML для создания сетей. Мы предлагаем простой в использовании и установке пакет, который в то же время реализует эффективную эмуляции сети. Кроме того, предоставляем базовый учебный материал, который может быть использован для курсов на разных уровнях подготовки."

И более «техничное» описание из man страницы
В среде Netkit каждое сетевое устройство осуществляется на виртуальной машине, а объединяются они через виртуальные домены колизий(которые вы можете увидеть, как виртуальные hub-ы(на самом деле могут эмулироваться и неактивные L2 свитчи, о чем чуть ниже). Каждая виртуальная машина может иметь произвольное число (виртуальных) сетевых интерфейсов или же вообще не иметь их — выполняя роль отдельной машины — однако Netkit был придуман не для этого.Netkit — эмулятор сети, а не «хоста».
Виртуальные машины используют кастомизированную файловую систему, которая содержит стандартную установку Linux (в настоящее время это Debian ), которая включает в себя «сеть-ориентированное» программное обеспечение, такое как:
— демоны маршрутизации (RIP, OSPF и т.д.),
— группа серверов (FTP, HTTP и т.д.),
— межсетевой экран (Iptables),
— диагностические средства(ping, traceroute, tcpdump, и т.д.)
и другие приложения. Виртуальная машина ведет себя как отдельное устройство сети (например, маршрутизатор) и используют вариант стандартного ядра Linux, предназначенный для запуска как процесс «в пространстве пользователя» (UML).
Netkit предоставляет вам два альтернативных интерфейса для запуска и настройки виртуальных машин:
— набор команд с `v ' префиксом (vclean, vconfig, vcrash, vhalt, vlist, vstart) для запуска и управления отдельными виртуальными машинами, и
— набор команд с `l` префиксом (lclean, lcrash, lhalt, linfo, lrestart, lstart, ltest) для управления «сетевыми лабораториями», состоящими из нескольких виртуальных машин.

От себя хочу добавить, что можно быть хорошим теоретиком, но на практике мало что уметь. Или же уметь многое на практике, но без хорошей теоретической базы — умения останутся всего лишь навыками. Netkit может помочь совместить теоретические знания с «практическим» опытом. Помимо прочего, Netkit возможно использовать для отладки новых конфигураций вашей сети. В общем, как говорится, «Verum ipsum factum».

Прежде чем с чем-то экспериментировать — нужно «это» установить; тут нам не лгут — в установке действительно нет ничего сложного: можно либо поставить netkit себе на компьютер, либо использовать LiveDVD/USB версию.
1) Скачиваем netkit, netkit-filesystem и netkit-kernel отсюда
распаковываем
tar -xjSf netkit-x.y.tar.bz2
tar -xjSf netkit-filesystem-Fx.y.tar.bz2
tar -xjSf netkit-kernel-Kx.y.tar.bz2
2) Устанавливаем переменные окружения:
export NETKIT_HOME=/path/to/netkit
export MANPATH=:$NETKIT_HOME/man
export PATH=$NETKIT_HOME/bin:$PATH
это лучше добавить в ваш .bash_profile ( если шелом у вас bash) и перезайти в систему.
3) Проверяем
cd netkit
./check_configuration.sh
Если чего-то будет не хватать или переменные окружения не подцепились — вы увидите закономерную ругань.

В принципе установка на этом закончена(возможно netkit есть в репозитариях каких-либо дистрибутивов), и можно запустить «виртуальную машину».
Как упоминалось выше заместо хаба может эмулироваться неактивный L2-свитч (хаб оно конечно хорошо — когда мы изучаем работу какого-нибудь протокола, чтобы видеть весь проходящий через данный домен колизий трафик, но в случае изучения принципов маршрутизации иногда бывает важно четко знать — на какой/с_какого интерфес(а) пришел/ушел пакет). Для этого нужно немного поправить файлик
$NETKIT_HOME/bin/script_utils и убрать из него передачу параметра -hub команде uml_switch, к примеру таким образом:
sed -i 's/-hub//g' $NETKIT_HOME/bin/script_utils
, естественно сделав копию исходного файла на случай возвращения всего в исходное состояние.
Конфигурационный файл netkit располагается в $NETKIT_HOME/netkit.conf. Можно оставить все по умолчанию и спокойно работать — он хорошо прокомментирован, поэтому подробно на нем останавливаться не будем.

Ну и коротко пробежимся по тому как управлять этой замечательной сетевой лабораторией:
vclean — используется для очистки netkit-процессов и конфигураций, позволяет останавливать виртуальные машины, удалять неиспользуемые более виртуальные хабы и тоннели,
vconfig — присоединяет сетевой интерфейс к запущенной виртуальной машине,
vcrash — используется для принудительного завершения виртуальной машины,
vlist — без параметров выводит список запущенных виртуальных машин, или же при указании конкретной машины — выводит информацию о ней,
vstart — запустить виртуальную машину,
vhalt — выключить виртуальную машину,
Команды с префиксом «l» принципиально не отличаются от таковых с «v» префиксом, поэтому описаны не будут. Единственное отличие — они применяются для управления целыми сетевыми лабораториями, а не отдельно взятыми машинами. Более подробно по каждой команде на соответствующей man-странице.
Несколько примеров:
vstart machine_name --eth0=A
запустить виртуальную машину «machine_name» и присоединить eth0 к домену колизий «A», по сути просто откроется окно xterm с основанным на дебиан окружением,
vconfig --eth1=tap,TAP-ADDRESS,GUEST-ADDRESS machine_name
добавить eth1 интерфейс в виртуальную машину «machine_name» и присоединить его к tap устройству основной системы (используется для вывода виртуальной машины в интернет — при этом будет автоматически настроен маскарадинг),
vhalt -r machine_name
завершить виртуальную машину «machine_name» с удалением «временной» файловой системы,
lstart -d lab_directory
запустить лабораторную работу, находящуюся в папке «lab_directory»,
lhalt -d lab_directory
остановить все машины в лаборатории папки «lab_directory»,
linfo -d lab_directory
просмотреть информацию о лаборатории в папке «lab_directory».

На этом пока все, интересных экспериментов.

Ссылки по теме:
Официальный сайт Netkit
Другие эмуляторы сетей
Лабораторные работы для Netkit
FAQ

Ps: предлагаю ввести правило хорошего тона: при написании статей по сетям или каким-либо сетевым технологиям прикладывать к ним лабораторную работу для netkit — для лучше понимания описываемого.
Ps2: спасибо всем кто помогал в написании и переводе, в частности boleg2 и IOException

Немного скриншотов:
  • +7
  • CraDem
  • 29 августа 2010, 17:29

Комментарии (5)

Очень толковая статья между прочим! Все как воды в рот набрали… :(
Дык, а что тут сказать… все написано. Добавить нечего. =)
CraDem всегда пишет очень качественные и полезные посты. :-)
Плюсовали тогда бы неистово. :) Про себя могу сказать что мне этот материал очень полезен, т.к. часто тестирую сетевые конфигурации, а развернуть под это дело отдельную сеть не всегда могу.
На сайте Netkit:
The poor man's system to experiment computer networking

Пацталом! :)
Ага, переводили тоже с улыбкой =D
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.