VK Cloud logo

Привязка нескольких Floating IP-адресов к одной ВМ

По умолчанию при создании ВМ ей назначается один внутренний IP-адрес. К нему можно привязать один Floating IP-адрес. Чтобы привязать несколько Floating IP-адресов к одной ВМ, нужно создать дополнительные порты в подсети, подключить их к ВМ и привязать к каждому порту свой Floating IP-адрес.

Подготовительные шаги

  1. Убедитесь, что клиент OpenStack установлен, и пройдите аутентификацию в проекте.
  2. Выберите или создайте виртуальную машину в вашем проекте VK Cloud.
  3. Подключите виртуальную машину к сети. Запишите идентификаторы сети и подсети.
  4. Добавьте в проект нужное количество Floating IP-адресов.

1. Создайте дополнительные порты

  1. Для каждого дополнительного Floating IP-адреса добавьте порт в подсеть виртуальной машины.

  2. Убедитесь, что порты созданы:

    openstack port list --network <ИМЯ_ИЛИ_ID_СЕТИ>

2. Подключите порты к ВМ

  1. Присоедините созданные порты к ВМ:

    openstack server add port <ID_ВМ> <ID_ПОРТА>
  2. Убедитесь, что порты успешно подключены к ВМ:

    openstack port list --server <ID_ВМ>

3. Привяжите Floating IP-адреса к портам ВМ

  1. Привяжите каждый свободный Floating IP-адрес к соответствующему порту ВМ.

  2. Убедитесь, что Floating IP-адреса успешно привязаны к портам:

    openstack floating ip list

4. Настройте сетевые интерфейсы на ВМ

После добавления портов на ВМ появятся дополнительные сетевые интерфейсы.

Для каждого нового порта проверьте и настройте сетевой интерфейс внутри операционной системы ВМ.

5. Настройте маршрутизацию

По умолчанию все исходящие пакеты отправляются через основной интерфейс ВМ. Из-за этого ответы на запросы, пришедшие через дополнительные интерфейсы, уходят через основной интерфейс, и привязанные к ним Floating IP-адреса не работают.

Чтобы каждый интерфейс использовал свой маршрут, настройте правила маршрутизации (policy routing). Для каждого интерфейса создайте таблицу маршрутизации и правило, которое направляет пакеты с IP-адреса этого интерфейса через его шлюз.

Далее приведены примеры для интерфейса eth1 с внутренним IP-адресом 10.0.1.97/24 и шлюзом 10.0.1.1.

  1. Добавьте в файл /etc/netplan/50-cloud-init.yaml для каждого дополнительного интерфейса параметры routes и routing-policy.

    Пример:

    network:  version: 2  ethernets:    eth0:      dhcp4: true    eth1:      dhcp4: true      routes:        - to: 0.0.0.0/0          via: 10.0.1.1          table: 101      routing-policy:        - from: 10.0.1.97/32          table: 101

    Для каждого следующего интерфейса используйте следующий номер таблицы (102, 103 и т. д.) и укажите соответствующие IP-адрес и шлюз.

  2. Примените настройки:

    sudo netplan apply

6. Проверьте доступность Floating IP-адресов

  1. Убедитесь, что каждый Floating IP-адрес доступен извне. Выполните проверку с вашего компьютера:

    ping <FLOATING_IP_1>ping <FLOATING_IP_2>
  2. Подключитесь к ВМ.

  3. Убедитесь, что каждый интерфейс имеет внутренний IP-адрес из подсети:

    ip addr show
  4. Проверьте связность между Floating IP-адресом и внутренним IP-адресом:

    curl --interface <ИМЯ_ИНТЕРФЕЙСА> ifconfig.me

    Команда вернет Floating IP-адрес, привязанный к этому интерфейсу.

  5. Убедитесь, что правила маршрутизации применены:

    ip rule listip route show table <НОМЕР_ТАБЛИЦЫ>