3.14.3 Настройка сетевых интерфейсов, bonding, VRRP
Сетевые настройки необходимо выполнять с помощью netplan.
Затем netplan преобразует, написанную нами конфигурацию, в вид понятный для systemd-network.
По умолчанию в Ubuntu 18.X для управления сетевыми настройками используется сервис networking.
Его нужно отключить:
sudo systemctl disable networking.service
Конфигурационный файл /etc/network/interfaces необходимо удалить:
sudo rm /etc/network/interfaces
Настройка bonding-интерфейса
Предположим, что система имеет следующие сетевые интерфейсы, которые требуется объединить в модуль bonding:
sasha@ecss1:~$ lshw -c network
WARNING: you should run this program as super-user.
*-network
description: Ethernet interface
product: 82566DM-2 Gigabit Network Connection
vendor: Intel Corporation
physical id: 19
bus info: pci@0000:00:19.0
logical name: enp0s25
version: 02
serial: e6:ba:27:44:78:35
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=1.3-0 latency=0 link=yes multicast=yes port=twisted pair slave=yes speed=1Gbit/s
resources: irq:24 memory:fe940000-fe95ffff memory:fe979000-fe979fff ioport:bc00(size=32)
*-network
description: Ethernet interface
product: DGE-530T Gigabit Ethernet Adapter (rev 11)
vendor: D-Link System Inc
physical id: 0
bus info: pci@0000:03:00.0
logical name: enp3s0
version: 11
serial: e6:ba:27:44:78:35
capacity: 1Gbit/s
width: 32 bits
clock: 66MHz
capabilities: bus_master cap_list rom ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=skge driverversion=1.14 latency=64 link=no maxlatency=31 mingnt=23 multicast=yes port=twisted pair slave=yes
resources: irq:16 memory:febfc000-febfffff ioport:e800(size=256) memory:febc0000-febdffff
Настройка bonding-интерфейса состоит из следующих этапов:
Создание bond-интерфейса
Для того чтобы определить bond-интерфейс в системе, необходимо создать следующий конфигурационный файл:
/etc/netplan/ecss.netplan Внести в него свои параметры сети:
# netplan for ecss1 biysk-work network: version: 2 renderer: networkd ethernets: enp0s25: # Intel 82566DM-2 Gigabit Network Connection (MB) dhcp4: no enp3s0: # D-Link DGE-530T Gigabit Ethernet Adapter (rev 11) PCI dhcp4: no bonds: bond1: interfaces: - enp0s25 - enp3s0 parameters: mode: active-backup mii-monitor-interval: 100 primary: enp0s25 optional: false vlans: bond1.2: # Voip internal vlan 2 id: 2 link: bond1 addresses: [192.168.2.21/24] bond1.3: # mgm internal vlan 3 id: 3 link: bond1 addresses: [192.168.1.21/24] gateway4: 192.168.1.203 nameservers: addresses: [192.168.1.203] bond1.476: id: 476 # mgm techology net vlan 476 link: bond1 addresses: [10.16.33.5/24] routes: - to: 10.16.0.0/16 via: 10.16.33.254 on-link: true - to: 10.136.16.0/24 via: 10.16.33.254 on-link: true
Настройка /etc/hosts
Доменное имя хоста ecss1 должно резолвиться в адрес 127.0.1.1. Также нужно прописать адрес хоста ecss2. Для этого в файле /etc/hosts необходимо прописать:
127.0.0.1 ecss1
127.0.1.1 ecss1
192.168.1.22 ecss2
Для ecss2 тоже:
127.0.0.1 ecss2
127.0.1.1 ecss2
192.168.1.21 ecss1
Настройки сети при помощи netplan
Введение
Netplan обеспечивает хранение параметров в формате YAML и предоставляет бэкенды, абстрагирующие доступ к конфигурации для NetworkManager и systemd-networkd.
Конфигурация может происходить в /{etc|run|lib}/netplan/*.yaml.
Netplan подгружает все данные файлы и применяет их.
Команды для управления netplan:
- netplan apply - применить новые настройки
- netplan try - попытаться применить настройки
- netplan ip leases interface - просмотреть настройки interface (например, enp3s0 )
- netplan ifupdown-migrate - осуществляет преобразование старых настроек /etc/network/interfaces в формат netplan.
- netplan generate - создаёт из конфигураций с расширением .yaml специфичную конфигурацию для бэкенда (network-manager или systemd-network)
Базовые настройки
Для конфигурации netplan применяется yaml - формат сериализации данных. Ниже приведен пример автоматической настройки сетевых интерфейсов.
Пример конфигурации:
# /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager ethernets: enp3s0: addresses: [] dhcp4: true optional: true
В начале идёт секция network, с которой начинается конфигурация. Далее следует указать version, который объявляет версию yaml, на котором представлена конфигурация.
renderer - указывает netplan в какой backend транслировать, доступные: networkd (systemd-network) и NetworkdManager (Network Manager)
После определения какой backend использовать, идёт поле ethernets, которое декларирует физические проводные интерфейсы, в нём определяются сетевые интерфейсы, которые реально подключены, например, enp3s0. Для данного интерфейса указывается список статических адресов addresses, включается dhcp4 для dhcp клиента IPv4, а также optional, что означает следующее: Данный интерфейс не обязателен для загрузки системы. Поле optional: по умолчанию false, поддерживается только networkd.
Настройка интерфейсов
Общие настройки для физических интерфейсов
- match (mapping) - выбирает интерфейсы по критерию
- macaddress (scalar) - макадрес устройства
- set-name (scalar) - установка имени интерфейса
- driver (scalar) - указание имени драйвера ядра
- wakeonlan (bool) - включение машины по сети
Общие настройки для всех типов
- renderer (scalar) - выбор бэкенда
- dhcp4 (bool) - получения настроек сети по dhcp IPv4
- dhcp6 (bool) - получения настроек сети по dhcp IPv6
- addresses (sequence of scalar) - список сетевый адресов вида a.b.c.d/mask для IPv4 или "2001:1::/64" для IPv6
- gateway4 (scalar) - шлюз для IPv4
- gateway6 (scalar) - шлюз для IPv6
- nameservers (mapping) - настройка dns
- optional (bool) - является ли обязательным при старте
- routes (mapping) - настройка маршрутизации
Маршрутизация
- vlans: — объявляем блок настройки vlan.
- vlan10: — произвольное имя vlan интерфейса.
- id: — тег нашего vlan.
- link: — интерфейс через который vlan будет доступен.
- routes: — объявляем блок описания маршрутов.
- to: — задаем адрес/подсеть до которой необходим маршрут.
- via: — указываем шлюз через которой будет доступна наша подсеть.
- on-link: — указываем что прописывать маршруты всегда при поднятии линка.
Пример
network: version: 2 ethernets: id0: match: macaddress: 00:11:22:33:44:55 wakeonlan: true dhcp4: true addresses: - 192.168.14.2/24 - 2001:1::1/64 gateway4: 192.168.14.1 gateway6: 2001:1::2 nameservers: search: [foo.local, bar.local] addresses: [8.8.8.8] lom: match: driver: ixgbe set-name: lom1 dhcp6: true switchports: match: name: enp2* mtu: 1280 wifis: all-wlans: match: {} access-points: "Joe's home": password: "s3kr1t" wlp1s0: access-points: "guest": mode: ap channel: 11 bridges: br0: interfaces: [wlp1s0, switchports] dhcp4: true routes: - to: 0.0.0.0/0 via: 11.0.0.1 metric: 3
vlans: vlan10:
id: 10 link: bond0 dhcp4: no addresses: [10.10.10.2/24] gateway: 10.10.10.1 routes: - to: 10.10.10.2/24 via: 10.10.10.1 on-link: true
Bond (Агрегация)
Настройка бондов, агрегирование физических каналов, в логический происходит следующим образом:
Блок параметров
- parameters (mapping)
- mode (scalar) - Режим бонда: balance-rr(default), active-backup, balance-xor, broadcast, 802.3ad(default for ssw), balance-tlb, and balance-alb
- mii-monitor-interval (scalar) - интервал мониторинга интерфейса(живой или нет). По умолчанию 0 (по умолчанию в милисек)
- down-delay (scalar) - задержка перед отключением. По умолчанию 0 (по умолчанию в милисек).
- up-delay (scalar) - задержка перед включением. По умолчанию 0 (по умолчанию в милисек).
- lacp-rate (fast|slow) - Только в 802.3ad. Скорость передачи LACPDU.
- transmit-hash-policy (salar) - Политика передачи хэша для выбора ведомых. Полезно в balance-xor, 802.3ad и balance-tlb. Возможные значения: layer2, layer3+4, layer2+3, encap2+3, and encap3+4.
bonds: bond0: interfaces: [enp1s0f0, en01s0f1] addresses: [10.110.1.253/24] gateway4: 10.1.1.1 parameters: mode: 802.3ad nameservers: addresses: [10.110.10.22]
Основные параметры это:
- interfaces (sequence of scalar) - список физических интерфейсов, которые необходимо объединить в один
- parameters (mapping) - настройки агрегации
network: version: 2 renderer: networkd ethernets: enp0s3 dhcp4: no enp0s8: dhcp4: no bonds: bond-ssw: dhcp4: yes interfaces: - enp0s3 - enp0s8 parameters: mode: 802.3ad optional: true
- bonds: — блок поясняющий что мы будем настраивать bonding.
- bond0: — произвольное имя интерфейса.
- interfaces: — набор интерфейсов собираемых в bond-динг, ''как оговаривалось ранее если параметров несколько описываем их в квадратных скобках".
- parameters: — описываем блок настройки параметров
- mode: — указываем мод по которому будет работать bonding.
- mii-monitor-interval: — задаем интервал мониторинга 1 сек.
bonds: bond0: dhcp4: no interfaces: [enp3s0f0, enp3s0f1] parameters: mode: 802.3ad mii-monitor-interval: 1
Vlan
Настройка виртуальных интерфейсов мало чем отличается от настройки физического
vlans: vdev: id: 101 link: net1 addresses: - 10.0.1.10/24 vprod: id: 102 link: net2 addresses: - 10.0.2.10/24 vtest: id: 103 link: net3 addresses: - 10.0.3.10/24 vmgmt: id: 104 link: net4 addresses: - 10.0.4.10/24
Для определения vlan служит секция `vlans`, в ней определяются имена новых vlan'ов. У vlan есть 2 обязательных аргумента: `id` и `link`.
- id (scalar) - номер vlan
- link (scalar) - родительский интерфейс
Пример
# Пример конфигурации для настройки ECSS-10
# В варианте когда каждый хост подключен к коммутаторам выделенным линком
# Коммутаторы организованны в erps-кольцо
network:
version: 2 # Версия
renderer: networkd # systemd
ethernets: # настройка сетевых интерфейсов
enp1s0f0: # Наименование интерфейса. Может быть иным
dhcp4: no # Отключаем настройку по dhcp
dhcp6: no # Отключаем настройку по dhcp v6
enp1s0f1:
dhcp4: no
dhcp6: no
enp2s1:
dhcp4: no
dhcp6: no
bonds: # Связываем физические интерфейсы в бонды для отказоустойчивости
bond1: # Наименование бонда
interfaces: # перечисляем интерфейсы, которые входят в данный бонд
- enp1s0f0
- enp1s0f1
parameters: # Параметры агрегации
mode: active-backup # Рекомендуемый режим для линков подключенных к коммутаторам в ERPS-кольце
primary: enp1s0f0 # Основной интерфейс
mii-monitor-interval: 100ms
up-delay: 100ms
down-delay: 200ms
lacp-rate: fast
optional: false
vlans: # Настраиваем vlan
vlan.80: # Название vlan
id: 80 # тэг vlan
link: bond1 # на каком интерфейсе будет добавляться тэг
addresses:
- 10.80.0.10/26 # адрес
nameservers: # На другой внутренней машине настроен dns
addresses:
- 172.16.0.250
- 172.16.0.100
Настройка VRRP
Для настройки механизма резервирования сервера посредством протокола VRRP используется функционал, который предоставляет приложение keepalived.
На первом сервере нужно создать файл конфигурации /etc/keepalived/keepalived.conf со следующим содержимым (адреса и имена интерфейсов прописать свои):
Пример:
vrrp_script chk_sip { script "/usr/bin/ecss_pa_sip_port 65535" interval 2 timeout 2 } vrrp_script check_core { script "nc -z localhost 8085" interval 2 # check every 2 seconds } #For domain_bsk_ecss1 SIP vrrp_instance VI_SIP_61 { state MASTER interface bond1.2 virtual_router_id 61 priority 100 advert_int 1 preempt_delay 60 unicast_src_ip 192.168.2.21 unicast_peer { 192.168.2.22 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.61/24 dev bond1.2 label bond1.2:SIP61 } track_script { chk_sip } } #For domain_bsk_ecss2 SIP vrrp_instance VI_SIP_62 { state BACKUP interface bond1.2 virtual_router_id 62 priority 50 advert_int 1 smtp_alert preempt_delay 60 unicast_src_ip 192.168.2.21 unicast_peer { 192.168.2.22 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.62/24 dev bond1.2 label bond1.2:SIP62 } } #For TC ecss1 vrrp_instance VI_TC63 { state BACKUP interface bond1.2 virtual_router_id 63 priority 100 advert_int 1 preempt_delay 20 unicast_src_ip 192.168.2.21 unicast_peer { 192.168.2.22 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.63/24 dev bond1.2 label bond1.2:TC } track_script { check_core } } include ecss-mysql-replication.conf
CODEНа первом сервере создается файл с конфигурацией MySQL /etc/keepalived/ecss-mysql-replication.conf
vrrp_script check_mysqld { script "nc -z localhost 3306" # cheaper than pidof interval 2 # check every 2 seconds fall 1 rise 2 } #For MySQL vrrp_instance MySQL71 { state BACKUP interface bond1.3 virtual_router_id 71 priority 100 advert_int 1 preempt_delay 10 unicast_src_ip 192.168.1.21 unicast_peer { 192.168.1.21 } authentication { auth_type PASS auth_pass pmysql } virtual_ipaddress { 192.168.1.71/24 dev bond1.3 label bond1.3:MYSQL } track_script { check_mysqld } }
CODEНа втором сервере нужно создать аналогичный файл /etc/keepalived/keepalived.conf со следующим содержимым:
vrrp_script chk_sip { script "/usr/bin/ecss_pa_sip_port 65535" interval 2 timeout 2 } vrrp_script check_core { script "nc -z localhost 8085" interval 2 # check every 2 seconds } #For domain_bsk_ecss1 SIP vrrp_instance VI_SIP_62 { state MASTER interface bond1.2 virtual_router_id 62 priority 100 advert_int 1 preempt_delay 60 unicast_src_ip 192.168.2.22 unicast_peer { 192.168.2.21 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.62/24 dev bond1.2 label bond1.2:SIP62 } track_script { chk_sip } } #For domain_bsk_ecss2 SIP vrrp_instance VI_SIP_61 { state BACKUP interface bond1.2 virtual_router_id 61 priority 50 advert_int 1 smtp_alert preempt_delay 60 unicast_src_ip 192.168.2.22 unicast_peer { 192.168.2.21 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.61/24 dev bond1.2 label bond1.2:SIP61 } } #For TC ecss1 vrrp_instance VI_TC63 { state BACKUP interface bond1.2 virtual_router_id 63 priority 80 advert_int 1 preempt_delay 20 unicast_src_ip 192.168.2.22 unicast_peer { 192.168.2.21 } authentication { auth_type PASS auth_pass kassw2 } virtual_ipaddress { 192.168.2.63/24 dev bond1.2 label bond1.2:TC } track_script { check_core } } include ecss-mysql-replication.conf
CODEНа втором сервере создается файл с конфигурацией MySQL /etc/keepalived/ecss-mysql-replication.conf
vrrp_script check_mysqld { script "nc -z localhost 3306" # cheaper than pidof interval 2 # check every 2 seconds fall 1 rise 2 } #For MySQL vrrp_instance MySQL71 { state BACKUP interface bond1.3 virtual_router_id 71 priority 80 advert_int 1 preempt_delay 20 unicast_src_ip 192.168.1.22 unicast_peer { 192.168.1.22 } authentication { auth_type PASS auth_pass pmysql } virtual_ipaddress { 192.168.1.71/24 dev bond1.3 label bond1.3:MYSQL } track_script { check_mysqld } }
CODE
Далее нужно произвести корректировку IP-адресов и имен интерфейсов, согласно конфигурации системы.
Более подробная информация о приложении keepalived и его настройке приведена в документации по адресу: http://www.keepalived.org/pdf/UserGuide.pdf.
/usr/bin/ecss_pa_sip_port 65535, где 65535 дефолтное значение порта, который адаптер открывает в случае, когда он готов принимать нагрузку. Для того, чтобы изменить
порт необходимо в конфиге sip адаптера (/etc/ecss/ecss_pa_sip/sip1.config) в секции ip_ssw_intercom изменить в параметрe keepalive значение порта, после чего перезапустить адаптер.