Как настроить несколько сетевых интерфейсов в Ubuntu 18.04
Для корректной работы нескольких сетевых интерфейсов с публичными IP адресами на Ubuntu 18.04 одновременно не достаточно просто прописать базовые параметры для них в Netplan. Ведь при этом все пакеты будут уходить с сервера через шлюз по умолчанию, а значит и доступности сервера по всем его IP адресам не будет. Это минус маршрутизации на основе адреса получателя. Здесь мы добавим необходимые настройки в Netplan для корректной работы нескольких сетевых интерфейсов в Ubuntu 18.04.
Отключение автонастройки Netplan
При создании сервера Ubuntu 18.04 в Serverspace или добавлении к нему новых сетевых интерфейсов из панели управления происходит автоматическая настройка параметров подключений. Кроме того, во время перезагрузки системы файл конфигурации Netplan тоже перезаписывается актуальными параметрами. Поэтому любые его изменения, сделанный в ручном режиме, будут потеряны. Чтобы этого избежать, можно отключить данную функцию. Для начала убедитесь, что Вы добавили необходимое количество сетевых адаптеров к серверу, а затем создайте файл:
Со следующим содержимым:
После сохранения файла функция автоматической настройки сетевых интерфейсов будет отключена.
Маршрутизация для несколько сетевых интерфейсов
Задача обеспечения доступности сервера через несколько сетевых подключений и IP адресов будет решена с использованием маршрутизации на основе политик, а именно на основе адреса отправителя. Таким образом, каждый пакет будет отправлен с сервера через тот же адрес, через который и попал на него. В первую очередь нужно создать таблицы маршрутизации для данной цели, а для этого нужен пакет iproute2. Если он отсутствует в системе, необходимо его установить:
Теперь откройте файл:
В его конец необходимо добавить столько таблиц, сколько сетевых интерфейсов настраивается. Одна таблица - это отдельная строка, состоящая из двух чисел, разделенных пробелом. Первое число - это приоритет, а второе - это имя таблицы. Например:
51 51
52 52
Таким образом, мы добавим 3 таблицы. Теперь пришло время добавить настройки маршрутизации в Netplan, откройте его конфиг по пути /etc/netplan/ с расширением .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
После завершения редактирования конфигурации, убедимся в ее корректности:
Если вывод пустой, значит всё сделано верно. Если же есть ошибки, Вы увидите нечто подобное:
- to: 0.0.0.0/0
^
В данном примере обнаружены табуляции. После исправления ошибок и успешного прохождения проверки примените изменения:
Теперь сервер будет доступен по всем настроенным таким образом IP адресам.