Сетевая лаборатория
Материал из 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
- Сетевая лаборатория