Часть 4: Работа с сетевой подсистемой CentOS, Network Manager и скрипты Networks - github2wiki/SPBSUT_KURS GitHub Wiki

Часть 4: Работа с сетевой подсистемой CentOS, Network Manager и скрипты Networks

Вводная часть

Компьютерная сеть (Computer Network) – это множество компьютеров, соединенных линиями связи и работающих под управлением специального программного обеспечения. Главной целью объединения компьютеров в сеть является предоставление пользователям возможности доступа к различным информационным ресурсам (например, документам, программам, базам данных и т.д.), распределенным по этим компьютерам и их совместного использования.

Компьютерные сети могут быть различной топологии, но все они используют протокол TCP/IP (OSI) Что такое протокол? Протокол, это некое правила общения между двумя системами.

IP

Для определения адресанта/адресата в сети используется адресация именуемая IP-адресом Существует два вида адресации IPv4, IPv6.Здесь мы разберём IPv4 Адрес состоит из 4 блоков по 8 бит и представляется в десятичном виде. Например 188.12.213.13 Для выделения адреса сети в которой находится адресант/адресат используется маска подсети. Которая имеет ту же структуру, что и ip адрес,при побитовом сложении по модулю 2 адреса и маски = адрес компьютера в сети, все 0 биты составляют адрес сети.

Порты

Компьютеры общаются, через специальные приложения, так вот, эти приложения работают, через специальные интерфейсы «сокеты», для того чтобы, верно обработать веб-серверу HTTP запрос допустим, надо чтобы веб сервер вызвал процесс HTTP находящийся по порту 80, по такому порту заработает хостинг, чтобы веб сервер обработал TCP, надо обращаться к процессу с портом 443. То есть порт, это идентификатор процесса на конечной системе, чтобы к ней мог обратится сокет.

Как представить сетевую полдсистему в Linux?

Сетевая модель TCP/IP условно согласуется с 7-ми уровневой моделью OSI, однако в Linux разделение условно происходит на следующие подуровни:

  • Всё, что относится к поддержке оборудования и канальному уровню, описывается как сетевые интерфейсы и обозначается как L2 (обычно тут у нас Ethernet);
  • Протоколы сетевого уровня OSI (IP, IPX, RIP и т.д.) - как сетевой уровень стека протоколов или уровень L3;
  • Всё, что выше (ICMP, UDP, TCP, SCTP и т.д.) - как протоколы транспортного уровня или уровень L4;
  • Всё то, что относится к выше лежащим уровням (сеансовый, представительский, прикладной) модели OSI (например: SSH, SIP, HTTP и т.д.), не проявляется в ядре и относится уже к области клиентских и серверных утилит пространства пользователя.

Такая сложившаяся числовая нумерация сетевых слоёв (L2, L3, L4) соответствует аналогичным уровням из модели OSI.

Отображение сетевых интерфейсов в Linux

В части 2 мы рассмотрели, как натроить сетевой интерфейс с помощью графического интерфейса установщика. Здесь мы разберём как настроить сеть из терминала. В отличии от остальных системных устройств, которым соответствуют имена в каталоге /dev, сетевые устройства создают сетевые интерфейсы, которые не отображаются как именованные устройства, но имеют свой набор конфигурационных параметров (MAC адрес, IP адрес, маска сети и т.д.). Интерфейсы могут быть физическими (отображающими реальные аппаратные сетевые устройства, например, eth0 — адаптер Ethernet) или логическими (отражающими некоторые моделируемые понятия, например, bond0 — бонд интерфейс).Одному реальному аппаратному сетевому устройству может соответствовать одновременно несколько различных сетевых интерфейсов. В Rad Hat/CentOS сетевые интерфейсы существуют, как конфигурационный файл по пути /etc/sysconfig/network-scripts/ifcfg-NAME_INT, каждый конфигурационный файл управляет одним интерфейсом.Например конфигурационный файл от интерфейса с именем eth0 будет /etc/sysconfig/network-scripts/ifcfg-eth0. Для ручного поднятия и отключения интерфейсов используются скрипты ifup и ifdown.Что бы изменения из конфигов вступили в силу, необходимо вручную презагрузить интерфейс или перезагрузить службу сети под кодовым названием network,если в конфиге прописаноONBOOT=yes, как это сделать, смотри часть 3.Например # ifup ifcfg-eth0.Сами скрипты находятся в папке usr/sbin, однако же в каталоге /etc/sysconfig/network-scripts/ существует файл-ссылка на эти скрипты.

Содержание конфигурационных файлов в CentOS

Содержание конфигурационных файлов в CentOS зависит от типа устройства(интерфейса), существует множество различных типов устройств(интерфейсов),как аппаратных, так и логических.Мы рассмотрим некоторые из них.

Ethernet Interfaces(физические интерфейсы)

Данный тип устройства является наиболее распространённым.Он описывает работу, например, одной сетевой карты.

Рассмотрим содержание одного из таких файлов файла /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
DEFROUTE=yes
DNS1=10.0.2.12
IPADDR=10.0.1.100
NETMASK=255.255.255.0
GATEWAY=10.0.1.1
NAME="eth0"

Все левые части пишутся заглавными буквами

  • DEVICE=[name] где name имя физического устройства
  • BOOTPROTO=протокол получения ip адреса в данном случае static говорит о том что ip адрес настроен вручную.
  • ONBOOT=yes|no поднимать ли интерфейс при запуске системы
  • TYPE=Ethernet тип интерфейса
  • IPADDR=10.0.1.100 - адрес
  • NETMASK=255.255.255.0 маска подсети
  • GATEWAY=10.0.1.1 шлюз по умолчанию
  • NAME="eth0" имя
  • DNS1=10.0.2.12 Адрес DNS сервера
  • NM_CONTROLLED=no забегая вперёд, данная строка говорит о том , что NetworkManager не может управлять данным устройством
  • DEFROUTE=(yes|no) - установить этот интерфейс как маршрут по умолчанию

Vlan интерфейс

В операционной системе CentOS предусмотрено два варианта именования VLAN — как subinterface (например, ens7.100) или vlanXX (vlan100). В зависимости от данного варианта, предусмотрен свой метод настройки Мы разберём второй вариант vlanXX

/etc/sysconfig/network-scripts/ifcfg-vlanXX

ONBOOT=yes
TYPE=Ethernet
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlanXX
PHYSDEV=eth0
VLAN_ID=XX
BOOTPROTO=static
IPADDR=192.168.0.15
NETMASK=255.255.255.0
NM_CONTROLLED=no

Тут есть уже знакомые нам свойства, разберём некоторые новые.

  • VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD говорит о том, что используется второй вариант - vlanXX
  • PHYSDEV=eth0 необходим только во втором способе создания vlan'а значение в правой части означает на какой физический интерфейс "повешен" влан
  • DEVICE=vlanXX имя, но уже не физического, а логического устройства

Bond интерфейс

Bond интерфейс служит для объединения нескольких устройств в одно. Существует несколько типов Bond-интерфейсов, зависящих от цели объединения.

  • mode=0 (balance-rr) Последовательно кидает пакеты, с первого по последний интерфейс.
  • mode=1 (active-backup) Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатора
  • mode=2 (balance-xor) Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.
  • mode=3 (broadcast) Все пакеты на все интерфейсы
  • mode=4 (802.3ad) Link Agregation — IEEE 802.3ad, требует от коммутатора настройки.
  • mode=5 (balance-tlb) Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.
  • **mode=6 (balance-alb)**Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.

Типовой конфигурационный файл для bond-устройства

TYPE=Bonding
NAME=bond0
DEVICE=bond0
BONDING_MASTER=yes
ONBOOT=yes
BONDING_OPTS="mode=(номер от 1 до 6) miimon=100"

BONDING_OPTS - значение mode - тип Bond устройства, значение miimon - период проверки объединённых интерфейсов в мс, обычно значение выставляется на 100

Bridge интерфейс

Это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост.

Для того, чтобы создать brige в CentOS необходимо загрузить пакет

# yum install bridge-utils

Типовой конфиг bridge интерфейса

TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.1.104
NETMASK=255.255.255.0
GATEWAY=10.0.1.1
DNS1=8.8.8.8

Текущие настройки сети

Для просмотра текущей конфигурации сети можно использовать утилиту ip

ip a

Network Manager

В CentOS по-умолчанию имеется служба, которая управляет всеми сетевыми подключениями — NetworkManager. Она постоянно контролирует сетевые настройки и с помощью демона по управлению конфигурациями вносит соответствующие изменения в активные сетевые устройства. Она поддерживает стандартные файлы конфигураций ifcfg. Пользователи не взаимодействуют с NetworkManager в CentOS напрямую, для этого используются графические и утилиты командной строки. Одной из таких утилит является nmcli NetworkManager является удобным средством настройки сети, однако, его обычно отключают по той причине, что он может являться причиной проблем связаных с настройкой сети, т.к. может самостоятельно менять настройки.По этой же причине в конфигурационных файлах, зачастую пишут NM_CONTROLLED=no.

Здесь мы рассмотрим некоторые возможности утилиты nmcli

  • Просмотр состояния интерфейсов
nmcli general status
  • Вывод доступных соединений
 nmcli connection show
  • Просмотр состояния интерфейсов
nmcli device status
  • Создание соединения со статическим адресом
# nmcli connection add con-name "static" ifname INTERF_NAME autoconnect no type ethernet ip4 IP_ADDR 
  • Добавить DNS для ip4
# nmcli connection modify "static" ipv4.dns DNS_IP_ADDDR
  • Обновление настроек
# nmcli connection up (TARGET)

Отредактировать

nmcli connection edit CON_NAME