Семинар 3: Канальный уровень. Работа с GNS3

GNS3

Как установить описано в соответствующей инструкции, если возникли проблемы, не стесняйтесь обращаться, лучше решить их раньше.

Для работы сначала запускаем сервер (виртуальную машину). После запуска сервера запускаем gui. Создаём новый проект.

Для добавления устройств есть специальная кнопка слева. Создание устройств происходит перетаскиванием из левого меню на рабочую область в центре.

добавление контейнеров

Сегодня потребуется только alpine, добавьте 2 устройства на рабочую область. Чтобы подключить устройства друг к другу, нужно выбрать в меню слева кнопку с проводом (ниже той, что нажимали для добавления устройств), затем нажать на первое устройство, покажется список интерфейсов, сейчас можно выбрать любой, после чего проделать то же самое со вторым устройством.

клик по первому клик по второму

Для запуска всех устройств проекта можно нажать зелёный треугольник сверху. Или же устройства можно запускать по одному через меню правой кнопки мыши.

После запуска попробуйте совершить двойной щелчок мыши по одному из устройств. Должна показаться консоль. В некоторых системах консоль не выводится на передний план, поэтому посмотрите уже открытые окна, если вы ранее открывали окно консоли. Либо может открываться другая консоль. Например, вы пользуетесь gnome-terminal, а открывается xterm. Данное поведение настраивается в Preferences->General->Console applications, в этой вкладке нажмите на Edit и выберите свой терминал из списка предложенных, как на скриншоте ниже:

Настройка консоли

В GNS3 можно прослушивать, какие пакеты передаются по проводу, для этого нужно правой кнопкой мыши нажать на нужном проводе и выбрать "Start capture", затем "OK". Откроется Wireshark, который будет отображать все передаваемые пакеты.

Работа с канальным уровнем в Linux

Сегодня на многие дистрибутивы Linux для настройки сети устанавливается утилита ip (зачастую в составе пакета iproute2). Для работы с канальным уровнем есть команда ip link. Если ввести её без параметров, то будет выполнена команда ip link show, которая отобразит список интерфейсов, их состояние и параметры. Справку можно получить по команде ip link help или man ip-link. Например, для изменения значения mtu на 1400 интерфейса eth0 нужно ввести команду: ip link set mtu 1400 dev eth0.

Bridge

Мост, он же bridge, switch и коммутатор. Если в системе больше одного интерфейса, то может возникнуть желание объединить их. Зачем такое может понадобиться? см схему ниже.

Схема

Представим, что PC3 не объединял свои интерфейсы мостом. Тогда PC3 может общаться и с PC1 и с PC2, а вот PC1 и PC2 друг друга не будут видеть. При создании моста в PC3 и добавлении в него интерфейсов eth0 и eth1, у пакетов канального уровня появится возможность проходить между этими двумя интерфейсами. Таким образом PC1 и PC2 смогут общаться.

Создать мост можно командой ip link add name BRNAME type bridge, разумеется вместо "BRNAME" нужно вписать своё (придумайте или используйте "br0", "br1" и т.д.). После создания нужно его "включить" командой ip link set dev BRNAME up и добавить в него необходимые интерфейсы командой ip link set IFNAME master BRNAME. Вместо "IFNAME" должно быть название интерфейса.

После создания моста схема объединения получится как на рисунке ниже. На PC3 создаётся мост, в который добавляются нужные интерфейсы PC3. В то же время создаётся виртуальный интерфейс (тот самый "BRNAME"), которым связывается PC3 и созданный мост.

Можно представить, что схема выше эквивалентна схеме ниже с применением коммутатора:

В данном моменте курса есть проблема того, что на лекциях была только частично рассмотрена работа канального и физического уровней, поэтому запускать ping было бы странно.. Выходом из такой ситуации стал протокол сетевого обнаружения устройств lldp.

LLDP

Для запуска демона lldp нужно запустить команду lldpd. При этом устройство будет рассылать сообщения "Меня зовут ..., я тут!" (можно посмотреть в wireshark)

Если устройства соединены и на обоих запущен lldpd, то через какое-то время они обнаружат друг друга. Вывести список соседей можно командой lldpcli show neighbors при этом команду можно сократить до lldpcli s n (по началу слов). При успешном обранужении вывод будет примерно таким:

/ # lldpcli show neighbors
-------------------------------------------------------------------------------
LLDP neighbors:
-------------------------------------------------------------------------------
Interface:    eth0, via: LLDP, RID: 1, Time: 0 day, 00:00:02
  Chassis:
    ChassisID:    mac ca:e2:73:40:8e:65
    SysName:      rerand0m-cn-alpine-2
    SysDescr:     Alpine Linux v3.20 Linux 5.15.0-84-generic #93~20.04.1-Ubuntu SMP Wed Sep 6 16:15:40 UTC 2023 x86_64
    MgmtIP:       fe80::c8e2:73ff:fe40:8e65
    MgmtIface:    77
    Capability:   Bridge, off
    Capability:   Router, on
    Capability:   Wlan, off
    Capability:   Station, off
  Port:
    PortID:       mac ca:e2:73:40:8e:65
    PortDescr:    eth0
    TTL:          120
-------------------------------------------------------------------------------

Аналогично увидеть список соседей можно командой lldpctl

Замечание касательно LLDP и мостов: по умолчанию пакеты LLDP не проходят сквозь мост, нужно это явно разрешить командой echo 16384 > /sys/class/net/BRNAME/bridge/group_fwd_mask

Команды lldpcli можно изучить подробнее, например, может пригодиться уменьшить интервалы рассылки: configure lldp tx-interval 2

Задание на семинар

Было придумано аж два варианта, тебе и соседу:

Вариант 1 Вариант 2

Необходимо составить такую топологию, как на картинке, запустить на каждом устройстве lldpd и настроить всё так, чтобы каждый показывал только три других устройства. Можно несколько раз показывать других, главное - чтобы себя не показывал.