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

AK
Aleksandr Komarov
28 мая 2021

Для корректной работы нескольких сетевых интерфейсов с публичными 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 адресам.

Остались вопросы? Задайте их нашему эксперту и получите квалифицированную помощь