28.06.2022

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

Для настройки доступности сервера через разные сетевые интерфейсы и публичные IP адреса не достаточно просто прописать параметры для каждой сетевой карты. Т.к. шлюз по умолчанию может быть только один, то и все сетевые пакеты будут уходить с сервера через него, даже если изначально были получены на другой адрес. Это минус используемой по умолчанию политики маршрутизации на основе адреса получателя. В данном руководстве мы рассмотрим процесс настройки маршрутизации на основе адреса источника (source based routing).

Настройка сетевых интерфейсов

Если Вы используете сервер в Serverspace, то настройка параметров сетевых интерфейсов происходит автоматически при их добавлении или создании сервера. В противном же случае необходимо привести параметры к приведенному ниже виду. Приведенный пример можно скопировать, подставив свои значения для имени интерфейса (eth0), шлюза (GATEWAY), MAC-адреса (HWADDR), IP адреса (IPADDR) и в некоторых случаях маски подсети (NETMASK):

nano /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=none
DEFROUTE=yes
DEVICE=eth0
GATEWAY=55.66.77.1
HWADDR=aa:bb:cc:dd:ee:ff
IPADDR=55.66.77.88
MTU=1500
NETMASK=255.255.255.0
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet

Шлюз прописывается только для одного сетевого интерфейса, т.к. он должен быть только один в системе. Настройка второго интерфейса:

nano /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
HWADDR=bb:cc:dd:ee:ff:gg
IPADDR=66.77.88.99
MTU=1500
NETMASK=255.255.255.0
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet

Аналогичным образом производится настройка того количества интерфейсов, которое подключено к системе.

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

На всякий случай стоит проверить установлен ли пакет iproute и установить его, если нет.

yum install iproute

Теперь откройте следующий файл:

nano /etc/iproute2/rt_tables

Добавьте в его конец следующие строки:

100 table100
101 table101

Запись должна быть в формате число пробел название таблицы. Оба значения могут быть произвольными. Единственное условие - их уникальность относительно значений других записей в файле. Количество строк должно соответствовать количеству сетевых интерфейсов, для которых настраиваем доступность.

Теперь создадим файлы с параметрами таблиц маршрутизации. Нужно создать отдельный такой файл для каждого интерфейса, заменив в названии файла eth0 на актуальное имя сетевого соединения.

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

Ниже содержимое файла, где вместо 55.66.77.88 надо поставить IP адрес сетевого интерфейса, а вместо table100 - добавленные выше таблицы, по 1 для каждого интерфейса:

from 55.66.77.88 lookup table100

И соответствующие файлы с правилами маршрутизации. Создаются по тем же принципам, что и файлы параметров таблиц маршрутизации.

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

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

55.66.77.0/24 dev eth0 table table100
default dev eth0 via 55.66.77.1 table table100

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

systemctl restart network