View on GitHub

Network Technologies Labolatories

Practical materials for learning Network Technologies

Лабораторная работа №2 — Знакомство с системой


Быстрый поиск


Цель лабораторной — познакомить изучающего с системой

Задачи лабораторной:


Виртуальные машины VirtualBox

Каждая виртуальная машина по умолчанию имеет 4 COM-порта и 4 сетевых адаптера для организации подключения. При этом поддерживается до 36 псевдофизических (поскольку все интерфейсы ВМ на самом деле являются, очевидно, виртуальными; далее мы будем называть эти интерфейсы просто физическими, а виртуальными будем именовать программно реализованные внутри ВМ интерфейсы) и любое количество виртуальных интерфейсов.

Последовательные порты (COM-порты) представляют из себя аппаратные интерфейсы, позволяющие напрямую передавать информацию между абонентами на физическом уровне стека протоколов TCP/IP. COM-порты обозначаются в файловой системе в виде файлов специального типа, находящихся в директории /dev. Имена COM-портов обозначаются ttyS0-ttyS3 для портов 1-4 соответственно

Сетевые интерфейсы представлены в виде физических Ethernet-портов, позволяющих организовывать соединение устройств на интерфейсном и сетевом уровнях стека протоколов. Для работы с разного рода сетевыми настройками используется утилита iproute2(утилита предустановлена в образе виртуальной машины)


Работа с последовательным портами

ℹ Для настройки канала связи между двумя устройствами через COM-порты используется сокетное соединение (в VirtualBox оно называется Host Pipe).


Создание COM-соединения

📍 1. Создайте два клона с именами first и second согласно инструкции по клонированию.

📍 2. С помощью команды pysnap set VMName выведите текущие настройки COM-портов и сетевых интерфейсов:

(.pysnap) [papillon_rouge@localhost ~]$ pysnap set first
first (poweroff)
  COM1  TCP server, port 2326
  COM2  off
  COM3  off
  COM4  off
  NIC1  NAT
  NIC2  null
  NIC3  null
  NIC4  null
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set second
second (poweroff)
  COM1  TCP server, port 2327
  COM2  off
  COM3  off
  COM4  off
  NIC1  NAT
  NIC2  null
  NIC3  null
  NIC4  null
(.pysnap) [papillon_rouge@localhost ~]$

📍 3. С помощью команды pysnap set VMName comN=[server|client]:[link_name] создайте COM-соединение двух машин. На одной из ВМ укажите значение server, на другой – client. Имя соединения должно совпадать

(.pysnap) [papillon_rouge@localhost ~]$ pysnap set first com2=server:link
first (poweroff)
  COM1  TCP server, port 2326
  COM2  pipe server, creates "link" (/tmp/pysnap-link)
  COM3  off
  COM4  off
  NIC1  NAT
  NIC2  null
  NIC3  null
  NIC4  null
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set second com2=client:link
second (poweroff)
  COM1  TCP server, port 2327
  COM2  pipe client, connects to "link" (/tmp/pysnap-link)
  COM3  off
  COM4  off
  NIC1  NAT
  NIC2  null
  NIC3  null
  NIC4  null

📍 4. Запустите виртуальные машины. Для входа в систему каждой машины необходимо ввести логин (root) и пароль (root).

⚠ ДИСКРЕЙМЕР: Никогда не устанавливайте такие легко угадываемые пароли на свои персональные устройства!


Настройка имени пользователя

ℹ Для переименования виртуальной машины используется специальная команда sethostname (при смене имени виртуальной машины требуется повторный вход в систему):

📍 1. С помощью команды sethostname измените имена пользователей на first и second соответственно

@first

localhost login: root
Password:
[root@localhost ~]# sethostname first


first login: root
Password:
Last login: Fri Sep  5 13:09:38 UTC 2025 on ttyS0
[root@first ~]#

@second

localhost login: root
Password:
[root@localhost ~]# sethostname second


second login: root
Password:
Last login: Fri Sep  5 13:12:46 UTC 2025 on ttyS0
[root@second ~]#

Передача данных через COM-порты

ℹ Внутри виртуальной машины управление портами осуществляется с помощью команды stty. Без управляющих параметров она позволяет посмотреть текущие параметры портов. Для просмотра конкретного порта можно использовать перенаправление на нужный порт.

📍 1. С помощью команды stty -a < <dev-name> получите информацию о параметрах COM-порта №2 (ttyS1)

@first

[root@first ~]# stty -a < /dev/ttyS1
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany
-imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho
-extproc
[root@first ~]#

ℹ Для соединения устройств необходимо подготовить порты к передаче данных: включить режим raw для передачи просто последовательности байт, а также отключить дублирование данных на экран:

📍 2. С помощью команды stty raw -echo < <dev-name> подготовьте COM-порты для передачи

@first

[root@first ~]# stty raw -echo < /dev/ttyS1
[root@first ~]#

@second

[root@second ~]# stty raw -echo < /dev/ttyS1
[root@second ~]#

📍 3. Запустите команду cat <dev-name> на first для получения данных с порта

@first

[root@first ~]# cat /dev/ttyS1

📍 4. С second передайте через порт календарь

@second

[root@second ~]# cal > /dev/ttyS1
[root@second ~]#

ℹ Заметьте, что календарь будет прочитан в first:

@first

[root@first ~]# cat /dev/ttyS1
  September 2025
Su Mo Tu We Th Fr Sa
   1  2  3  4  5  6
7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30


Работа с сетевыми интерфейсами

Сетевый интерфейсы могут быть настроены вручную на уже существующих машинах или автоматически добавлены при создании клонов.


Настройка eth-соединения

⚠ Для изменения параметров виртуальных машин их необходимо предварительно отключить (например, командой poweroff в командной строке ВМ, командой pysnap stop <VMName> в домашней консоли или из графического интерфейса самого VirtualBox)

📍 1. С помощью команды pysnap set VMName nicN=[net_name] создайте eth-соединение двух машин. Имя соединения должно совпадать: при указании у разных виртуальных машин одной и той же сети они автоматически соединяются через виртуальную ethernet-сеть и могут взаимодействовать в рамках этой сети (данное соединение аналогично соединению машин через коммутатор).

(.pysnap) [papillon_rouge@localhost ~]$ pysnap set first nic2=intnet
first (poweroff)
  COM1  TCP server, port 2326
  COM2  pipe server, creates "link" (/tmp/pysnap-link)
  COM3  off
  COM4  off
  NIC1  NAT
  NIC2  internal network "intnet"
  NIC3  null
  NIC4  null
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set second nic2=intnet
second (poweroff)
  COM1  TCP server, port 2327
  COM2  pipe client, connects to "link" (/tmp/pysnap-link)
  COM3  off
  COM4  off
  NIC1  NAT
  NIC2  internal network "intnet"
  NIC3  null
  NIC4  null

📍 2. Запустите виртуальные машины.


Настройка сетевых интерфейсов

📍 1. C помощью команды ip link покажите все сетевые интерфейсы на first:

@first

[root@first ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
   link/ether 08:00:27:77:45:6f brd ff:ff:ff:ff:ff:ff
   altname enp0s3
   altname enx08002777456f
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
   link/ether 08:00:27:47:8a:8c brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027478a8c
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
   link/ether 08:00:27:45:3d:0d brd ff:ff:ff:ff:ff:ff
   altname enp0s9
   altname enx080027453d0d
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
   link/ether 08:00:27:7a:79:33 brd ff:ff:ff:ff:ff:ff
   altname enp0s10
   altname enx0800277a7933
[root@first ~]#

ℹ Система показывает 5 интерфейсов (4 физических и один логический loopback, для которого отправка в него вызывает приём данных из него же). Все интерфейсы на данный момент отключены.

📍 2. С помощью команды управления интерфейсом :new: ip link set eth1 up включите интерфейс с сетью intnet

⚠ Здесь и далее в лабораторных знаком :new: будет обозначаться вводимая в рамках лабораторных терминология. В будущем для команд, описываемых данной терминологией, не будет писаться сама команда, а будет использоваться упоминание термина. Список терминов и связанные с ним команды представлены на заглавной странице лабораторных

📍 3. Покажите параметры интерфейса с помощью команды ip link show eth1:

@first

[root@first ~]# ip link set eth1 up
[root@first ~]# ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default q
len 1000
   link/ether 08:00:27:47:8a:8c brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027478a8c
[root@first ~]#

Статус интерфейса стал UP, соединение включено.

📍 4. С помощью команды настройки IP-адресов :new: ip addr add dev <interface> <IPv4>/<mask> добавьте на интерфейс IP-адрес

📍 5. Покажите параметры интерфейса с сетью с помощью команды ip addr show eth1:

@first

[root@first ~]# ip addr add dev eth1 10.9.0.1/24

[root@first ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:47:8a:8c brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027478a8c
   inet 10.9.0.1/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@first ~]#

📍 6. С помощью команд управления интерфейсом и команд настройки IP-адресов аналогично настройте second (При выборе IP-адреса номер сети для всех абонентов одной сети должен быть одинаковым)

@second

[root@second ~]# ip link set eth1 up
[root@second ~]# ip addr add dev eth1 10.9.0.2/24
[root@second ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:14:02:d0 brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx0800271402d0
   inet 10.9.0.2/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@second ~]#

Передача данных через сетевые интерфейсы

Сгенерируем трафик для проверки соединения. Самый простой способ генерации трафика — команда ping -с<количество отправляемых пакетов> <dstIP>.

📍 1. С помощью команды ping -c5 <dstIP> сгенерируйте ICMP-трафик между абонентами

@first

[root@first ~]# ping -с5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.948 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.577 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.784 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.711 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.751 ms

--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 5105ms
rtt min/avg/max/mdev = 0.577/0.749/0.948/0.109 ms
[root@first ~]#

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

📍 2. С помощью команды tcpdump -i eth1 -с2 запустите на second сканирование интерфейса

@second

[root@second ~]# tcpdump -i eth1 -c2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes

📍 3. С помощью команды ping -c1 <ip address> выполните одиночный ping-запрос на ‘first’

@first

[root@first ~]# ping -c1 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.570 ms

--- 10.9.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.570/0.570/0.570/0.000 ms
[root@first ~]#

ℹ Убедитесь, что данные о ping-сообщении были считаны:

@second

[root@second ~]# tcpdump -i eth1 -c2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
15:27:43.398843 IP 10.9.0.1 > second: ICMP echo request, id 3, seq 1, length 64
15:27:43.398872 IP second > 10.9.0.1: ICMP echo reply, id 3, seq 1, length 64
2 packets captured
2 packets received by filter
0 packets dropped by kernel
[root@second ~]#

Сдача самостоятельных работ

Создание отчета

ℹ Для сдачи самостоятельных работ используется специальная утилита report, создающая tar-архив с записью команд в системе.

📍 1. С помощью команды report <#Lab> <hostname> запустите запись отчёта на обеих машинах:

@first

[root@first ~]# report 1 first
Report is started. Task: 01; host: first.
Use exit or ^D to finish.
[root@01-first ~]#

@second

[root@second ~]# report 1 second
Report is started. Task: 01; host: second.
Use exit or ^D to finish.
[root@01-second ~]#

ℹ Затем необходимо будет выполнять указанные в самостоятельной работе команды. Сейчас выполним на каждой виртуальной машине следующие команды:

📍 2. На каждой машине выполните описанные команды в режиме report. Затем завершите запись с помощью команды exit или сочетания клавиш Ctrl+D

@first

[root@01-first ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:da:00:dd brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027da00dd
   inet 10.9.0.1/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@01-first ~]# ping -c5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.712 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.558 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.927 ms

--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.531/0.672/0.927/0.142 ms
[root@01-first ~]#
<^D>exit
Report is stopped.
[root@first ~]#

@second

[root@01-second ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:e1:50:ee brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027e150ee
   inet 10.9.0.2/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@01-second ~]# ping -c5 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=0.648 ms
64 bytes from 10.9.0.1: icmp_seq=2 ttl=64 time=0.780 ms
64 bytes from 10.9.0.1: icmp_seq=3 ttl=64 time=0.832 ms
64 bytes from 10.9.0.1: icmp_seq=4 ttl=64 time=0.569 ms
64 bytes from 10.9.0.1: icmp_seq=5 ttl=64 time=0.758 ms

--- 10.9.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.569/0.717/0.832/0.095 ms
[root@01-second ~]# exit
exit
Report is stopped.
[root@second ~]#

ℹ После записи в домашнем каталоге появится файл report.<#Lab>.<hostname>. С помощью ls -l можно убедиться в предварительной корректности записи (число после слова root показывает размер файла, он должен быть ненулевой), а с помощью команды report <report-name> можно “проиграть” запись команд.

📍 3. С помощью команды report <report-name> запустите получившиеся отчёты

@first

[root@first ~]# ls -l
total 12
drwxr-xr-x 2 root root 4096 May 12 17:18 bin
-rw-r--r-- 1 root root 2621 Oct 13 12:28 report.01.first
drwx------ 2 root root 4096 May 12 17:19 tmp

[root@first ~]# report report.01.first
Replay report.01.first
[root@01-first ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:da:00:dd brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027da00dd
   inet 10.9.0.1/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@01-first ~]# ping -c5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.712 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.558 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.927 ms

--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.531/0.672/0.927/0.142 ms
[root@01-first ~]#
exit

Replay report.01.first finished
[root@first ~]#

@second

[root@second ~]# ls -l
total 12
drwxr-xr-x 2 root root 4096 May 12 17:18 bin
-rw-r--r-- 1 root root 2498 Oct 13 12:29 report.01.second
drwx------ 2 root root 4096 May 12 17:19 tmp

[root@second ~]# report report.01.second
Replay report.01.second
[root@01-second ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:e1:50:ee brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027e150ee
   inet 10.9.0.2/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@01-second ~]# ping -c5 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=0.648 ms
64 bytes from 10.9.0.1: icmp_seq=2 ttl=64 time=0.780 ms
64 bytes from 10.9.0.1: icmp_seq=3 ttl=64 time=0.832 ms
64 bytes from 10.9.0.1: icmp_seq=4 ttl=64 time=0.569 ms
64 bytes from 10.9.0.1: icmp_seq=5 ttl=64 time=0.758 ms

--- 10.9.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.569/0.717/0.832/0.095 ms
[root@01-second ~]# exit
exit

Replay report.01.second finished
[root@second ~]#

Извлечение отчета из ВМ

Следующим шагом необходимо перенести полученные отчёты из виртуальных машин в основную систему.

📍 1. Не выключая ВМ, в отдельном окне терминала запустите команду pysnap report extract VMName REPORT_Name

(.pysnap) [papillon_rouge@localhost ~]$ pysnap report extract first report.01.first
Extracted "$HOME"/report.01.first from first to /home/papillon-rouge/report.01.first (2506 bytes, sha256 22a53940de290b208010e774ab5ec1c10812e0b707f865d4ca3c1790696afbc3).
(.pysnap) [papillon_rouge@localhost ~]$ pysnap report extract second report.01.second
Extracted "$HOME"/report.01.second from second to /home/papillon-rouge/report.01.second (2474 bytes, sha256 0b45ad605e04dc8571287ca6ea05e0d8770b32e9ad6e4e4a8eaf5f8e8154186a).

📍 2. C помощью команды pysnap report text <REPORT_Name> просмотрите записанный отчет.

(.pysnap) [papillon_rouge@localhost ~]$ pysnap report text report.01.first
[root@01-first ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 08:00:27:da:00:dd brd ff:ff:ff:ff:ff:ff
   altname enp0s8
   altname enx080027da00dd
   inet 10.9.0.1/24 scope global eth1
      valid_lft forever preferred_lft forever
[root@01-first ~]# ping -c5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.712 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.558 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.927 ms

--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.531/0.672/0.927/0.142 ms
[root@01-first ~]#
exit

Самостоятельная работа

В качестве отчёта о проделанной лабораторной пришлите преподавателю два отчёта report.01.first и report.01.second с описанными в последнем разделе командами.