Перейти к основному контенту

Лабораторная работа 3. Работа с сетью в Linux. Виртуальный коммутатор Linux Bridge.

Цель
Получить представления о работе сетевой подсистемы в операционной системе Linux (CentOS 7), и научиться выполнять базовые действия с ней. Научиться работать с виртуальным коммутатором Linux Bridge.

Задачи

  1. Задать статический IP адрес на интерфейс.
  2. Настроить объединение интерфейсов.
  3. Настроить сетевой мост.
  4. Настроить VxLAN(виртуальные сети).
  5. Ознакомиться с возможностями сетевых утилит.

Схема виртуального лабораторного стенда

Задание 1. Установка статического IP адреса физическому интерфейсу

Переключиться на проект [GROUP]:[team]-lab:3. Подключиться к labnode-1. логин - labuser, пароль - labpass1! Подключение должно быть выполнено по следующей схеме (рис. 1).

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

ip address

Там же будут отображены основные параметры этих сетевых интерфейсов.
Команда ip позволяет использовать короткие имена команд. в данном случае, вместо ip address можно использовать команду

ip a

В случае правильного выполнения команд (для всех команд кроме ip address) утилита ip не будет возвращать никакого значения. В случае, если команда выполнена неправильно, будет возвращена соответствующая ошибка.

Задать интерфейсу eth1 IP адрес:

sudo ip address add 10.0.12.20/24 dev eth1

Изменить состояние на up.

Посмотреть изменения (состояние устройства eth1 должно измениться на UP):

ip address

Подключиться к labnode-2. Установить интерфейсу eth1 IP адрес:

sudo ip address add 10.0.12.30/24 dev eth1

Изменить состояние на up:

С labnode-1 проверить доступность labnode-2:

ping -c 4 10.0.12.30

После перезагрузки сервера, или сервиса сети все изменения отменяются. Перезагрузить оба сервера, и посмотреть на состояние интерфейсов (необходимо проверить, сохранились ли на интерфейсе адреса, заданные предыдущими командами):

reboot
ip address

Задание 2. Настройка статического адреса через конфигурационные файлы

Подключение должно быть выполнено по следующей схеме (рис. 1). Для того, чтобы изменения оставались в силе, нужно настроить интерфейс через конфигурационный файл. Тогда настройки будут загружаться при старте системы. Создать конфигурацию интерфейса eth1 на labnode-1:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1

И привести его к следующему виду:

TYPE=Ethernet
DEVICE=eth1
BOOTPROTO=static
IPADDR=10.0.12.20
PREFIX=24
ONBOOT=yes

Основные параметры:

  1. TYPE - Тип сетевого интерфейса
  2. NAME - Имя интерфейса
  3. DEVICE - Устройство, которое интерфейс использует
  4. BOOTPROTO - если этот параметр static, то интерфейс не будет автоматически получать адрес от сети, маску и другие параметры подключения. В случае необходимости автоматического получения адреса – необходимо указать значение этого параметра -dhcp.
  5. ONBOOT - включать ли интерфейс при загрузке.
  6. IPADDR - IP-адрес
  7. DNS1 - DNS, через который обращаться к доменам. Можно указать несколько параметров: DNS1, DNS2...
  8. PREFIX - префикс, другой способ задания маски сети. Для префикса 24 маска будет 255.255.255.0
  9. GATEWAY - шлюз

Все остальные параметры являются необязательными в данной лабораторной работе, и могут быть удалены.

Скопировать файл ifcfg-eth1 с именем ifcfg-eth2:

sudo cp /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth2

Отредактировать его с помощью редактора vi:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth2

И привести его содержимое к следующему виду:

TYPE=Ethernet
DEVICE=eth2
BOOTPROTO=static
IPADDR=10.0.12.21
PREFIX=24
ONBOOT=yes

Перезагрузить сеть и посмотреть интерфейсы:

sudo systemctl restart network
ip address

Далее необходимо настроить интерфейсы на узле labnode-2, по такому же принципу, как и labnode-1. Создать конфигурацию интерфейса eth1:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1

И привести его к следующему виду:

TYPE=Ethernet
DEVICE=eth1
BOOTPROTO=static
IPADDR=10.0.12.30
PREFIX=24
ONBOOT=yes

Скопировать файл ifcfg-eth1 с именем ifcfg-eth2:

sudo cp /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth2

В оболочке bash (и во многих других оболочках) для упрощения ввода текста выше можно использовать упрощенную форму ввода текста выше:

sudo cp /etc/sysconfig/network-scripts/ifcfg-eth{1,2}

Отредактировать его через vi:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth2

И привести к следующему виду:

TYPE=Ethernet
DEVICE=eth2
BOOTPROTO=static
IPADDR=10.0.12.31
PREFIX=24
ONBOOT=yes

Перезагрузить сеть и посмотреть интерфейсы:

sudo systemctl restart network
ip address

Проверить доступность интерфейсов:

(labnode-1) ping -c 4 10.0.12.30
(labnode-1) ping -c 4 10.0.12.31
(labnode-2) ping -c 4 10.0.12.20
(labnode-2) ping -c 4 10.0.12.21

Задание 3. Настройка объединения интерфейсов.

"Объединение" (bonding) сетевых интерфейсов - позволяет совокупно собрать несколько портов в одну группу, эффективно объединяя пропускную способность в одном направлении. Например, вы можете объединить два порта по 100 мегабит в 200 мегабитный магистральный порт.

<I>В некоторых случаях интерфейсы после перезапуска сетевой службы не удаляют ip адреса, что связано с особенностью работы up/down скриптов. В таком случае в системе на разных интерфейсах может присутствовать одинаковый ip адрес (проверить можно командой ip address). Для решения этой проблемы необходимо отчистить все адреса на интерфейсе. Сделать это можно как просто удалив конкретный адрес с интерфейса, так и воспользоваться специальной командой, которая очистит все имеющиеся на нём адреса:

sudo ip address flush dev eth1
sudo ip address flush dev eth2

Подключение должно быть выполнено по следующей схеме (рис. 2).

Для того, чтобы создать интерфейс bond0, нужно создать файл конфигурации:

sudo vi /etc/sysconfig/network-scripts/ifcfg-bond0

Конфигурация bond0 интерфейса на labnode-1 будет следующей:

TYPE=Bond
DEVICE=bond0
BOOTPROTO=static
IPADDR=10.0.12.20
PREFIX=24
BONDING_MASTER=yes
BONDING_OPTS="mode=0 miimon=100"
ONBOOT=yes

Это создаст сам bond0 интерфейс. Но нужно также назначить физические интерфейсы eth1 и eth2, как подчиненные ему. Необходимо изменить конфигурационный файл eth1:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1

И привести его к следующему виду:

TYPE=Ethernet
DEVICE=eth1
MASTER=bond0
SLAVE=yes

То же самое сделать и с eth2:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth2
TYPE=Ethernet
DEVICE=eth2
MASTER=bond0
SLAVE=yes

Перезагрузить сеть.

sudo systemctl restart network

Посмотреть, что получилось:

ip address

В полученном выводе интерфейсы eth1 и eth2 должны быть в подчиненном режиме (SLAVE), а интерфейс bond0 должен иметь ip адрес и находиться в состоянии UP. Также необходимо проверить, что на интерфейсах eth1 и eth2 нет никаких ip адресов. Теперь необходимо проделать тоже самое на labnode-2.

sudo vi /etc/sysconfig/network-scripts/ifcfg-bond0

Конфигурация bond0 интерфейса будет следующей:

TYPE=Bond
DEVICE=bond0
BOOTPROTO=static
IPADDR=10.0.12.30
PREFIX=24
BONDING_MASTER=yes
BONDING_OPTS="mode=0 miimon=100"
ONBOOT=yes

Конфиг eth1:

TYPE=Ethernet
DEVICE=eth1
MASTER=bond0
SLAVE=yes

Конфиг eth2:

TYPE=Ethernet
DEVICE=eth2
MASTER=bond0
SLAVE=yes

Перечитать конфигурационные файлы сетевых устройств и проверить после этого настройки сетевых интерфейсов:

sudo systemctl restart network

С labnode-1 необходимо проверить доступность labnode-2:

ping -c 4 10.0.12.30

Теперь на labnode-1 необходимо отключить eth1 и посмотреть его состояние:

И с labnode-2 проверить его доступность:

ping 10.0.12.20 -c 4

Если объединение интерфейсов настроено правильно, то узел будет доступен, даже после выключения одного из интерфейсов.

Задание 4. Настройка bridge интерфейса.

Ядро Linux имеет встроенный механизм коммутации пакетов между интерфейсами, и может функционировать как обычный сетевой коммутатор. Интерфейс Bridge представляет собой как сам виртуальный сетевой коммутатор, так и сетевой интерфейс с ip адресом, назначенным на порт этого коммутатора. Подключение должно быть выполнено по следующей схеме (рис. 3).

На labnode-1 требуется создать конфиг ifcfg-br0:

sudo vi /etc/sysconfig/network-scripts/ifcfg-br0

Мост будет иметь следующую конфигурацию:

TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
IPADDR=10.0.12.20
PREFIX=24
STP=on
ONBOOT=yes

Spanning Tree Protocol (STP) нужен, чтобы избежать петель коммутации.

Интерфейс bond0, настроенный до этого, может быть интерфейсом этого сетевого коммутатора, но в таком случае ip адрес уже будет назначен на интерфейс виртуального сетевого коммутатора, и все настройки ip с интерфейса bond0 можно будет убрать. Для этого в конфигурационный файл интерфейса bond0 также нужно добавить параметр BRIDGE=br0. Также удалить из него параметры BOOTPROTO, IPADDR, PREFIX, ONBOOT (можно просто закомментировать с помощью символа #, когда пригодятся, раскомментировать их, убрав символ #):

sudo vi /etc/sysconfig/network-scripts/ifcfg-bond0

Перезагрузить сеть:

sudo systemctl restart network

Можно проверить результат. Для этого на labnode-2 выполнить следующую команду:

ip address

Проверить, что в результате вывода этой команды ip адрес будет назначен только на интерфейс br0, и он будет в состоянии UP. Если все правильно, то проверить доступность соседнего узла командой:

ping -c 4 10.0.12.20

Мост может подняться не сразу. Если что, необходимо подождать.

Задание 5. Создание VxLAN интерфейсов.

VxLAN является механизмом построения виртуальных сетей на основаниях тоннелей, поверх реальных сетей, но при этом позволяющим их разграничивать.

Подключение должно быть выполнено по следующей схеме (рис. 4).

На labnode-1 удалить конфигурацию моста br0:

sudo rm /etc/sysconfig/network-scripts/ifcfg-br0

И привести bond0 к прежнему виду:

TYPE=Bond
DEVICE=bond0
BOOTPROTO=static
IPADDR=10.0.12.20
PREFIX=24
BRIDGE=br0
BONDING_MASTER=yes
BONDING_OPTS="mode=0 miimon=100"
ONBOOT=yes

И перезагрузить сервер:

sudo reboot

После загрузки сервера проверить работу сети с узла labnode-2:

ping -c 4 10.0.12.20

На labnode-1 добавить интерфейс vxlan10:

Настроить коммутацию Linux Bridge:

  sudo bridge fdb append to 00:00:00:00:00:00 dst 10.0.12.30 dev vxlan10

Назначить vxlan10 IP адрес и перевести его в состояние up:

sudo ip addr add 192.168.1.20/24 dev vxlan10
sudo ip link set up dev vxlan10

VxLAN работает как приложение. Пакеты инкапсулируются в udp, и для работы VxLAN требуется udp порт 8472. Открыть его в фаерволе:

sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload

После нужно сделать все то-же самое на labnode-2. Добавить интерфейс vxlan10:

Настроить коммутацию Linux Bridge:

sudo bridge fdb append to 00:00:00:00:00:00 dst 10.0.12.20 dev vxlan10

Назначить vxlan10 IP адрес и перевести его в состояние up:

sudo ip addr add 192.168.1.30/24 dev vxlan10
sudo ip link set up dev vxlan10

Открыть порт 8472/udp в фаерволе:

sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload

Протестировать соединение через vxlan. Для этого на labnode-1:

ping -c 4 192.168.1.30

Посмотреть на arp таблицу. Там можно увидеть соответствие mac адресов с ip адресами.

sudo arp

Нужно убедиться, что появилось приложение, которое слушает порт 8472.

ss -tulpn | grep 8472

Теперь необходимо добавить vxlan с другим тегом (20), и убедиться в том, что из него не будет доступа к vxlan с тегом 10 (пакеты будут отбрасываться из-за разных тегов). Перезагрузить labnode-2. Текущая настройка vxlan сбросится.

sudo reboot

На labnode-2 добавить интерфейс vxlan20 и настроить его:

Протестировать соединение через vxlan. Для этого на labnode-1:

ping 192.168.1.30 -c 4