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