Как настроить несколько сетевых интерфейсов в 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