Сетевая лаборатория

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Правильная ссылка: 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

  1. 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/>

  1. !/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/>

  1. !/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

[править] Настройка коммутатора виртуальных машин

Icon-caution.gif

Обязательно убедитесь, что коммутатор настроен на поддержку достаточно количества VLAN'ов. В частности, на коммутаторах ProCurve используйте директиву max-vlans 256 в режиме настройки

$ cat make-many-vlans.pl <perl/>

  1. !/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/>

  1. !/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/

[править] План перехода на использование виртуальной сетевой лаборатории

[править] Разделение курсов на категории

  1. ProCurve
  2. Linux
  3. FreeBSD
  4. Cisco1 — тренинги Cisco, которые можно читать на тонких клиентах
  5. Cisco2 — тренинги Cisco, которые нельзя читать на тонких клиентах
  6. Windows1 — тренинги Windows, которые можно читать на тонких клиентах и которые читает Сергей Черепенин
  7. Windows2 — тренинги Windows, которые можно читать на тонких клиентах и которые читает НЕ Сергей Черепенин
  8. Windows3 - тренинги Windows, которые НЕЛЬЗЯ читать на тонких клиентах
  9. Офисные тренинги


Группы категорий курсов:

   Группа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 для хранения текущих образов машин

Хранилище должно хранить ещё и библиотеку образов, так что его реальный объём нужно брать ориентировочно в два раза большим.

Такой кластер виртуализации нам реально понадобится не ранее чем через год. Причём наращивание до такого размера будет выполняться плавно, путём постепенного докупания модулей, ресурсов которых недостаточно.

[править] Дополнительная информация

[править] Информация по обучению