06.06.2023

Как настроить несколько сетевых интерфейсов в CentOS 8

При наличии в системе 2 и более сетевых интерфейсов с публичными IP адресами для обеспечения их доступности из сети Интернет мало сделать правильные сетевые настройки. Минус применяемой по умолчанию маршрутизации в том, что все сетевые пакеты будут уходить с хоста через шлюз по умолчанию. И при этом не важно на какой из интерфейсов они попали изначально. В данной инструкции мы настроим доступность нескольких сетевых интерфейсов извне в CentOS 8 за счет source-based routing.

Параметры сетевых интерфейсов

Облачные серверы в Serverspace обладают функцией автоматической настройки сетевых интерфейсов в момент их добавления или создания сервера. Поэтому, в случае их использования, переходите к следующему шагу. В противном случае для начала необходимо прописать правильные параметры сетевых интерфейсов.

Откройте файл настроек сетевого интерфейса. Их имена можно посмотреть с помощью команды ip a или же задать новые, если они не настроены.

nano /etc/sysconfig/network-scripts/ifcfg-enp0s5

Конфигурацию ниже можно скопировать и заменить следующие значения на свои:

  • имя интерфейса (enp0s5)
  • шлюз (GATEWAY)
  • MAC-адрес (HWADDR)
  • IP адрес (IPADDR)
  • маска подсети (NETMASK)
BOOTPROTO=none
DEFROUTE=yes
DEVICE=enp0s5
GATEWAY=34.56.78.1
HWADDR=99:88:77:66:55:44
IPADDR=34.56.78.90
MTU=1500
NETMASK=255.255.255.0
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet

Подобным образом настройте все сетевые интерфейсы. GATEWAY для второго, третьего и т.д. интерфейсов не указывается, т.к. это шлюз по умолчанию и должен быть только один.

Отключение NetworkManager

Настройку маршрутизации на основе политик мы будем осуществлять с помощью network-scripts, поэтому отключим NetworkManager и связанные службы:

systemctl mask NetworkManager.service
systemctl stop NetworkManager.service
systemctl mask NetworkManager-wait-online.service
systemctl mask NetworkManager-dispatcher.service

Установим пакет network-scripts

dnf install network-scripts

Запустим сетевую службу:

systemctl enable network
systemctl start network

Настройка source based routing

Проверим присутствует ли пакет iproute. Если нет, установите его.

dnf install iproute

Создадим новые таблицы для настройки политик маршрутизации.

nano /etc/iproute2/rt_tables

В конец файла добавим записи:

300 300
301 301

Каждая строка - это новая таблица. Формат записи - приоритет пробел название таблицы. Данные значения должны быть уникальны относительно других записей в файле. Приоритет имеет числовое значение, а название таблицы может содержать и буквы. Добавьте столько новых таблиц, сколько интерфейсов Вы настраиваете.
В следующих файлах будут указаны настройки маршрутизации. Для каждого интерфейса нужно создать по паре файлов: rule-eth-name, route-eth-name, где eth-name заменить на имя интерфейса. Пример для интерфейса enp0s5:

nano /etc/sysconfig/network-scripts/rule-enp0s5

Вставляем в него следующую строку с актуальным IP адресом вместо 34.56.78.90 и именем таблицы, созданной на предыдущем шаге вместо 300:

from 34.56.78.90 lookup 300

Второй файл:

nano /etc/sysconfig/network-scripts/route-enp0s5

Заменяем 34.56.78.0/24 на адрес своей подсети, enp0s5 - на имя интерфейса, 300 на название соответствующей таблицы, а 34.56.78.1 на шлюз для маршрутизации трафика и вставляем в открытый файл:

34.56.78.0/24 dev enp0s5 table 300
default dev enp0s5 via 34.56.78.1 table 300

После создания таких файлов для каждого сетевого интерфейса перезагрузим сетевую службу и наша цель достигнута.

systemctl restart network