Сетевая лаборатория
Материал из Xgu.ru
Правильная ссылка: http://xgu.ru/wiki/netlab
Что нужно описать:
- физический стенд
- соединения
- виртуальный хост
- руководство по использованию
Устройства для связи:
Содержание |
[править] Задача
Построить лабораторию удобную для изучения гетерогенных компьютерных сетей, насчитывающих большое количество узлов.
Построение сетей со сложной физической топологией должно выполняться достаточно легко.
[править] Использование
[править] Консольный доступ к физическим сетевым устройствам
Для того чтобы начать работу с консолями сетевых устройств с помощью ssh зайдите на машину unix.nt под учётной записью пользователя serial (пароль serial).
%ssh serial@procurve.unix.nt password: serial
Вы попадёте в консольный оконный менеджер screen, на котором будет запущенном много терминалов. Каждый терминал подключен к порту одного сетевого устройства.
Для управления screen'ом используйте комбинации клавиш Ctrl-a и клавиша, где клавиша это:
- 0 .. 9 — переключиться на экран с заданным номером.
- " — посмотреть список экранов;
- d — отключиться от screen'а.
Для того чтобы завершить работу с консолями сетевых устройств нажмите Ctrl-a d.
[править] Виртуальные машины
Виртуальная машина имеет три сетевых интерфейса:
| eth0 +-+--+ | | m<N>.unix.nt | | ++--++ eth1 | | eth2 eth1 = port <N> eth2 = port <N+20> N — номер машины
Интерфейс eth0 является служебным — через этот интерфейс осуществляется доступ к машине из сети.
Интерфейсы eth1 и eth2 выведены на коммутатор.
Порт коммутатора для доступа к интерфейсу eth1 машины N — порт с номером N. Порт коммутатора для доступа к интерфейсу eth2 машины N — порт с номером N+20.
Машины доступны из сети под именами m[N].unix.nt, где вместо N — число в диапазоне 1..20.
Учётные записи для доступа к машинам (учётная запись — пароль):
- root — rootpass (привилегированная);
- user — password (обычная)
Машины доступны по SSH.
[править] Примеры топологий
| eth0 | eth0 +-+--+ +-+--+ | | m1.unix.nt | | m11.unix.nt | | | | ++--++ ++--++ eth1 | | eth2 eth1 | | eth2 192.168.10.1| 192.168.20.1 | +---------+ +---------+ vlan10 | |vlan20 192.168.10.254| |192.168.20.254 +-------------+ | | +-------------+
| eth0 | eth0 +-+--+ +-+--+ | | m1.unix.nt | | m11.unix.nt | | | | ++--++ ++--++ eth1 | | eth2 eth1 | | eth2 192.168.10.1| 192.168.20.1 | +---------+ +---------+ vlan10 | |vlan20 192.168.10.254| |192.168.20.254 +-------------+ | () | +----||-------+ || +----||-------+ | () | +-------------+ | | vlan10 | |vlan20 +---------+ +---------+ 192.168.10.3| 192.168.20.3 | eth1 | | eth2 eth1 | | eth2 ++--++ ++--++ | | | | | | m2.unix.nt | | m12.unix.nt +-+--+ +-+--+ | eth0 | eth0
[править] Устройство
[править] Подключение к консоли
Файл ~/.screenrc
$ cat .screenrc screen -t switch1 1 minicom ttyV1 screen -t switch2 2 minicom ttyV2 screen -t "switch3 (nashe vse)" 3 minicom ttyV3 screen -t switch4 4 minicom ttyV4 screen -t switch5 5 minicom ttyV5 screen -t switch6 6 minicom ttyV6 screen -t switch7 7 minicom ttyV7 screen -t switch8 8 minicom ttyV8 screen -t switch9 9 minicom ttyV9
Скрипт create-links для создания ссылок на устройства.
Таблица соответствия PAIRS показывает на какой консоли виден какой коммутатор при первом запуске без перетасовки.
#!/bin/sh get_pair1() { cat <<PAIRS | awk '{if ($2=='$1') print $1}' 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 PAIRS } get_pair2() { cat <<PAIRS | awk '{if ($2=='$1') print $1}' 1 3 2 4 3 2 4 6 5 7 6 5 7 1 8 8 9 9 10 10 11 11 12 12 PAIRS } mkdir -p ~/dev/ for i in `seq 1 12` do if [ "$1" == 'remake' ] then ln -sf /dev/ttyUSB$[$(get_pair2 $i)-1] ~/dev/ttyV$i else ln -sf /dev/ttyUSB$[$(get_pair1 $i)-1] ~/dev/ttyV$i fi done if [ "$1" != remake ] then echo check cables and after that run: echo echo $0 remake echo fi
Конфигурационные файлы minicom
$ ls -1 .minirc.ttyV* .minirc.ttyV0 .minirc.ttyV1 .minirc.ttyV10 .minirc.ttyV11 .minirc.ttyV12 .minirc.ttyV2 .minirc.ttyV3 .minirc.ttyV4 .minirc.ttyV5 .minirc.ttyV6 .minirc.ttyV7 .minirc.ttyV8 .minirc.ttyV9
Конфигурационный файл minicom (на примере .minirc.ttyV0)
cat .minirc.ttyV0 # Machine-generated file - use "minicom -s" to change parameters. pu port /tmp/dev/ttyV0 pu baudrate 9600 pu bits 8 pu parity N pu stopbits 1 pu rtscts No
Быстро сгенерировать такие файлы в текущем каталоге можно
с помощью скрипта:
<sh/>
for i in `seq 0 8`
do
cat <<EOF > .minirc.ttyV$i
- Machine-generated file - use "minicom -s" to change parameters.
pu port /home/serial/dev/ttyV$i pu baudrate 9600 pu bits 8 pu parity N pu stopbits 1 pu rtscts No EOF done
[править] Виртуальные машины
/etc/xen/debian
kernel = "/boot/vmlinuz-2.6.18-4-xen-686" ramdisk = "/boot/initrd.img-2.6.18-4-xen-686" builder='linux' memory = 40 name = "debian"+N vif = [ 'mac=00:16:3e:00:00:'+N+', bridge=vlan141', 'mac=00:16:3e:00:01:'+N+', bridge=vlan'+str(100+int(N)), 'mac=00:16:3e:00:02:'+N+', bridge=vlan'+str(120+int(N)) ] disk = [ 'file:/home/xen/debian'+N+'.img,hda1,w' ] root = "/dev/hda1 ro"
Запуск виртуальных машин:
<sh/>
for i in `seq 1 20`
do
xm create debian N=$i
done
[править] Модуль netloop
$ cat /etc/modules
loop max_loop=64 netloop nloopbacks=64
[править] Создание виртуальных мостов
В системе виртуализации должны быть виртуальные мосты, отражённые на VLAN'ы внешнего интерфейса.
(для Xen версии <3.2 из репозитория Debian GNU/Linux)
make-xen-bridges
<sh/>
- !/bin/sh
iface=eth1 eth1_ip=192.168.15.254 first_vlan=140 last_vlan=141
for vlan in `seq ${first_vlan} ${last_vlan}` do
vconfig add ${iface} ${vlan} /etc/xen/scripts/network-bridge start vifnum=$[vlan-100] bridge=vlan${vlan} netdev=${iface}.${vlan} ip link set vlan${vlan} up
done
ifconfig ${iface} 0.0.0.0 ifconfig ${iface}.${last_vlan} ${eth1_ip}
(для Xen любой версии из исходников и версии >=3.2 из репозитория Debian GNU/Linux)
<sh/>
- !/bin/sh
zero_vlan=100 last_vlan=200
for vlan in `seq ${zero_vlan} ${last_vlan}` do
vconfig add ${iface} ${vlan} /etc/xen/scripts/network-bridge start vifnum=$[vlan-zero_vlan] bridge=vlan${vlan} netdev=${iface}.${vlan} ip link set vlan${vlan} up
done
[править] Настройка коммутатора виртуальных машин
Обязательно убедитесь, что коммутатор настроен на поддержку достаточно количества VLAN'ов. В частности, на коммутаторах ProCurve используйте директиву max-vlans 256 в режиме настройки |
$ cat make-many-vlans.pl
<perl/>
- !/usr/bin/perl
my $i=0;
print "conf t\nmax-vlans 256\n"; for (my $i=1; $i<41; $i++) {
$vlan = 100 + $i; print <<EOF
vlan $vlan untagged $i tagged 44 no ip address exit EOF } $vlan=100+$i; print <<EOF; vlan $vlan untagged 41-43 tagged 44 end EOF print "exit\nexit\nexit\ny\n";
make-vlans-on-switch
<sh/>
- !/bin/sh
VLAN_COMMANDS=./vlan-commands SWITCH=192.168.15.103 PASSWORD=procurve
usleep() {
perl -mTime::HiRes -e "Time::HiRes::usleep($1);"
}
z ()
{
SWITCH=$1 PASSWORD=$2
( sleep 5; echo ${PASSWORD}; sleep 2; echo; sleep 3; echo; $VLAN_COMMANDS | while read line; do echo $line; usleep 100000; done; sleep 2 ) | socat - EXEC:"ssh ${SWITCH}",setsid,pty,ctty
}
z ${SWITCH} $PASSWORD
/etc/bind/db.unix.nt
for i in `seq 1 20` do echo m$i A 192.168.15.$[5+i] done
Фрагмент файла /etc/dhcpd.conf генерируется скриптом:
for i in `seq 1 20` do echo "host m${i} { hardware ethernet 00:16:3e:00:00:${i}; fixed-address m${i}.unix.nt; }" done
Если вы используете редактор vim или vi, наберите этот код непосредственно внутри файла /etc/dhcpd.conf, затем выделите его в визуальном режиме (shift-V) (или, для vi, запомните с какой по какую строку в файле он идёт). После этого нажмите:
:!sh -s
Скрипт будет выполнен и заменён в файле резульатом его выполнения.
/etc/default/dhcp
INTERFACES="eth1.141"
[править] Подготовка класса к тренингам с использованием виртуальной сетевой лаборатории
[править] Подготовка класса к курсу HP ProCurve AEF
- Основная страница: Подготовка класса к курсу HP ProCurve AEF
[править] Подготовка класса к курсу по MS Windows
[править] Подготовка класса к курсу по Unix/Linux-системам
[править] Работа с виртуальными машинами
Создание ISO-образа диска.
Образ создаётся на локальной системе. Убедитесь, что места в каталоге, в котором создаётся образ, достаточно.
%# cat /dev/hdc > windows2003.iso
Вместо имени /dev/hdc укажите правильное название CD/DVD-устройства. Вместо имени windows-2003.iso укажите название ISO-образа, которое будет соответствовать его содержимому.
Копирование образа на сервер.
%$ scp windows2003.iso user@192.168.25.251:/ISO/
здесь вместо user укажите правильное имя пользователя, а вместо 192.168.25.251 — правильный IP-адрес сервера.
Просмотр списка доменов (виртуальных машин) на узле.
%$ xm list
Запуск новой машины.
Если конфигурационный файл машины параметризован:
%# xm create nacN N=1
Если не параметризован:
%# xm create windows2003
Завершение работы машины.
Посмотреть список машин и потом завершить по имени или идентификатору.
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 250 1 r----- 26493.1 nac-800-1 45 2000 1 -b---- 6347.2 nac-800-2 50 2000 1 -b---- 3249.1 nac-800-3 51 2000 1 r----- 2372.7
Грубое.
%# xm destroy 50
Нежное.
%# xm shutdown 50
(нежная остановка пока что возможна только для паравиртуальных доменов, то есть, например, возможна для Linux, но невозможна для Windows)
[править] Создание новой виртуальной машины
Создание дискового образа для виртуальной машины.
%# dd if=/dev/zero of=/images/windows2003.img count=$[4*1024*1024] bs=1k
Здесь создаётся файл размером 4G заполненный нулями. С помощью команды df убедитесь, что в том месте, где создаётся этот файл, места достаточно.
Создание конфигурационного файла.
Для HVM-систем:
kernel = "hvmloader" builder='hvm' memory = 1024 shadow_memory = 8 name = "windows2003" vif = [ 'type=ioemu, bridge=service0, mac=00:16:3e:03:00:c3' ] disk = [ 'file:/images/windows2003.img,hda,w', 'file:/ISO/windows2003.iso,hdc:cdrom,r' ] device_model = 'qemu-dm' boot="d" sdl=0 vnc=1 vncpasswd='' stdvga=0 serial='pty' usb=1
Здесь service0 — мост, на который будет смотреть нулевой интерфейс машины. Укажите правильное название моста.
Список доступных мостов можно получить с помощью команды
%# brctl show
После того как конфигурационный файл создан,
можно выполнять первый запуск виртуальной машины.
Если машина запустилась без ошибок, к её экрану можно подключиться при помощи vnc.
%$ vncviewer 192.168.25.250:0
Когда инсталляция машины окончена, завершите виртуальный домен. Скопируйте образец проинсталлированный системы на всякий случай, если вы планируете экспериментировать с ним, чтобы избежать процедуры повторной инсталляции.
%# cp /images/windows2003.img /images/orig/
[править] План перехода на использование виртуальной сетевой лаборатории
[править] Разделение курсов на категории
- ProCurve
- Linux
- FreeBSD
- Cisco1 — тренинги Cisco, которые можно читать на тонких клиентах
- Cisco2 — тренинги Cisco, которые нельзя читать на тонких клиентах
- Windows1 — тренинги Windows, которые можно читать на тонких клиентах и которые читает Сергей Черепенин
- Windows2 — тренинги Windows, которые можно читать на тонких клиентах и которые читает НЕ Сергей Черепенин
- Windows3 - тренинги Windows, которые НЕЛЬЗЯ читать на тонких клиентах
- Офисные тренинги
Группы категорий курсов:
Группа1 ProCurve, Linux, FreeBSD
Группа2 Windows1
Группа3 Windows2
Группа4 Офис
Группа5 Cisco1
Этапы перевода курсов различных групп и дополнительных служб на систему виртуализации:
Этап1 Группа1
Этап2 Группа2 Учебные серверы (gate, exchange) Серверы бизнес-решений
Этап3 Группа4 (офисные тренинги)
Этап3 Группа3
Этап5 Группа5 (Cisco1)
[править] Временные рамки каждого этапа
Каждый этап займёт около 2 месяцев + 2 месяца запас = итого 12 месяцев. То есть, полный переход на единую систему виртуализации возможен не ранее чем через год.
Каждый этап предполагает, что нагрузка на систему виртуализации
возрастает и соответственно количество узлов и их мощность должны
возрастать.
Ориентировочные требования к ресурсам для проведения типового курса по Windows на 6 человек:
* 12G ОЗУ * 250G дисковое пространство * 12 ядер центральных процессоров
Суммарное количество ресурсов, которые будут использоваться
в системе виртуализации определяется количеством слушателей на
курсах; курсах, которые проводятся одновременно; типам курсов.
Если предположить что одновременно будет проводится 5 курсов по 6 человек в системе должно быть (в сумме):
* 60 GB * 60 ядер процессоров (15 чипов по 4 ядра) * 2.5 TB для хранения текущих образов машин
Хранилище должно хранить ещё и библиотеку образов, так что его реальный объём нужно брать ориентировочно в два раза большим.
Такой кластер виртуализации нам реально понадобится не ранее чем через год. Причём наращивание до такого размера будет выполняться плавно, путём постепенного докупания модулей, ресурсов которых недостаточно.
[править] Дополнительная информация
[править] Информация по обучению
- Метакурс
- Инструменты
- Методика
- Курсы для администраторов Unix
- Сетевая лаборатория