06.06.2023

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

Для корректной работы нескольких сетевых интерфейсов с публичными IP адресами на Ubuntu 18.04 одновременно не достаточно просто прописать базовые параметры для них в Netplan. Ведь при этом все пакеты будут уходить с сервера через шлюз по умолчанию, а значит и доступности сервера по всем его IP адресам не будет. Это минус маршрутизации на основе адреса получателя. Здесь мы добавим необходимые настройки в Netplan для корректной работы нескольких сетевых интерфейсов в Ubuntu 18.04.

Отключение автонастройки Netplan

При создании сервера Ubuntu 18.04 в Serverspace или добавлении к нему новых сетевых интерфейсов из панели управления происходит автоматическая настройка параметров подключений. Кроме того, во время перезагрузки системы файл конфигурации Netplan тоже перезаписывается актуальными параметрами. Поэтому любые его изменения, сделанный в ручном режиме, будут потеряны. Чтобы этого избежать, можно отключить данную функцию. Для начала убедитесь, что Вы добавили необходимое количество сетевых адаптеров к серверу, а затем создайте файл:

nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Со следующим содержимым:

network: {config: disabled}

После сохранения файла функция автоматической настройки сетевых интерфейсов будет отключена.

Маршрутизация для несколько сетевых интерфейсов

Задача обеспечения доступности сервера через несколько сетевых подключений и IP адресов будет решена с использованием маршрутизации на основе политик, а именно на основе адреса отправителя. Таким образом, каждый пакет будет отправлен с сервера через тот же адрес, через который и попал на него. В первую очередь нужно создать таблицы маршрутизации для данной цели, а для этого нужен пакет iproute2. Если он отсутствует в системе, необходимо его установить:

apt-get install iproute2

Теперь откройте файл:

nano /etc/iproute2/rt_tables

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

50 50
51 51
52 52

Таким образом, мы добавим 3 таблицы. Теперь пришло время добавить настройки маршрутизации в Netplan, откройте его конфиг по пути /etc/netplan/ с расширением .yaml (имя файла может отличаться в Вашей системе):

nano /etc/netplan/50-cloud-init.yaml

Netplan чувствителен к форматированию в файле конфигурации. Очень важно соблюсти правильное количество пробелов и не использовать табуляции, иначе результат не пройдёт проверку. Корректный пример приведен ниже. В нём показан блок настроек для одного интерфейса (enp0s5), такие же блоки Вы увидите в конфиге для каждого из подключений. В каждый из блоков надо добавить настройки routes и routing-policy, а остальные настройки оставить как есть. Расшифровка добавляемых значений:

  • to - IP подсети назначения любой - 0.0.0.0/0
  • via - IP шлюза текущего сетевого подключения
  • table - имя одной из добавленных в rt_tables таблиц. Должно совпадать в routes и routing-policy каждого подключения. Но для разных интерфейсов - разные таблицы.
  • from - IP адрес данного интерфейса
  • priority - можно не менять
network: version: 2 ethernets: enp0s5: addresses: - 11.22.33.44/24 gateway4: 11.22.33.1 match: macaddress: 00:99:88:77:66:55 mtu: 1500 nameservers: addresses: - 8.8.8.8 - 1.1.1.1 - 8.8.4.4 search: [] set-name: enp0s5 routes: - to: 0.0.0.0/0 via: 11.22.33.1 table: 50 routing-policy: - from: 11.22.33.44 table: 50 priority: 300

После завершения редактирования конфигурации, убедимся в ее корректности:

netplan generate

Если вывод пустой, значит всё сделано верно. Если же есть ошибки, Вы увидите нечто подобное:

/etc/netplan/50-cloud-init.yaml:24:1: Invalid YAML: tabs are not allowed for indent:
- to: 0.0.0.0/0
^

В данном примере обнаружены табуляции. После исправления ошибок и успешного прохождения проверки примените изменения:

netplan apply

Теперь сервер будет доступен по всем настроенным таким образом IP адресам.