Статические маршруты для приватных подсетей

Чтобы обеспечить сетевую связность между облачными серверами в разных подсетях, не объединенных роутером, можно настроить статические маршруты.

Статические маршруты можно настроить только из приватной подсети. В качестве исходных подсетей нельзя выбрать:

  • публичные подсети;
  • подсети кросспроектных сетей в дочерних проектах (куда сеть была «расшарена»);
  • сегменты L3VPN-сетей.

Создание статического маршрута в панели управления

Статический маршрут можно создать только в приватной сети, в которой есть хотя бы одна подсеть.

Чтобы создать статический маршрут, в панели управления:

  1. Перейдите в раздел Сеть.
  2. Откройте вкладку Приватные сети.
  3. Выберите нужную приватную сеть и в ее карточке откройте вкладку Статические маршруты.
  4. Нажмите кнопку Создать маршрут.
  5. Выберите Исходную подсеть — можно выбрать любую подсеть, созданную в исходной сети.
  6. Укажите Подсеть назначения (destination) — подсеть, в которую будет направляться трафик. Можно ввести любую приватную или публичную подсеть.
  7. Введите Шлюз (next-hop) — адрес, через который все серверы из исходной подсети будут направлять трафик в подсеть назначения. Можно ввести любой адрес исходной подсети.
  8. Нажмите кнопку Добавить.
  9. После создания статического маршрута обязательно настройте их на серверах подсети.

Примечание: для статического маршрута нельзя задать метрику (вес или стоимость маршрута), поэтому невозможно создать два и более маршрута с одинаковыми исходной подсетью и подсетью назначения.

Настройка статических маршрутов на серверах

После создания статического маршрута нужно применить его на серверах исходной подсети. Настройка маршрутов зависит от того, включен или выключен DHCP в исходной подсети.

Если в подсети включен DHCP

DHCP можно включить на вкладке Подсети в карточке сети.

Если в подсети включен DHCP, то статические маршруты автоматически пропишутся на серверах подсети в течение 24 часов после создания. Если необходимо применить новые настройки быстрее, используйте один из вариантов:

  • последовательно включите и выключите сервер;
  • используйте команду dhclient eth0, где eth0 — имя интерфейса. При выполнении этой команды перезапрашивается информация от DHCP-сервера — добавляются новые маршруты, при этом старые не удаляются;
  • используйте команду INTERFACE=eth0; ip link set $INTERFACE down && ip link set $INTERFACE up && dhclient $INTERFACE, где eth0 — имя интерфейса. Эта команда выключит и включит порт, после чего перезапросит всю информацию у DHCP-сервера. В этом случае старые маршруты удалятся, а новые добавятся.

Если в подсети выключен DHCP

Чтобы статические маршруты настроились на серверах автоматически, вы можете включить DHCP на вкладке Подсети в карточке сети.

Если необходимо, чтобы DHCP был выключен, то настройка статических маршрутов на серверах зависит от того, был ли настроен агент cloud-init или cloudbase-init в образах, из которых были созданы серверы исходной подсети. Эти агенты предустановлены во всех готовых образах, представленных в Облачной платформе, а также в самостоятельно загруженных совместимых Linux-образах.

В образе сервера установлен агент cloud-init или cloudbase-init

В этом случае за сетевую настройку будет отвечать агент. Его работа зависит от того, в какой момент настраиваются статические маршруты:

  • если сначала были настроены статические маршруты для подсети, а потом в ней были созданы серверы, то в конфигурационных файлах серверов автоматически пропишутся все настройки статических маршрутов;
  • если сначала были созданы серверы, а потом были настроены статические маршруты, то дальнейшие действия зависят от того, какая опция выбрана на вкладке Настройки на странице сервера. Если выбрана опция:

    • на вкладке «Порты» в карточке сервера, то для настройки статических маршрутов на сервере нужно последовательно выключить и включить каждый сервер исходной подсети;
    • вручную в файле конфигурации сети внутри сервера, то нужно зайти в конфигурационный файл каждого сервера в исходной подсети и прописать статические маршруты вручную, т.к. агент не сможет применить настройки.

Опции можно переключить в процессе работы. Переключение опций недоступно для серверов Linux с агентом scarlet-init и серверов Windows с агентом cloudbase-init.

В образе сервера не установлен агент cloud-init или cloudbase-init

В этом случае не рекомендуется настраивать статические маршруты через панель управления, потому что настройки не будут автоматически применяться к серверам подсети. Статические маршруты нужно прописать в конфигурационном файле каждого сервера подсети.

Если в дальнейшем будет включен DHCP, то все настройки, прописанные вручную, могут перестать работать. Это происходит потому, что DHCP применяет ко всем серверам собственные настройки, которые могут противоречить настройкам, прописанным в файле конфигурации.

Настройка статических маршрутов для кластеров Облачных баз данных и Kubernetes

Облачные базы данных

Для новых кластеров баз данных все созданные статические маршруты, настроенные в подсети кластера, применятся автоматически.

Kubernetes

На нодах кластера Kubernetes статические маршруты будут применяться так же, как и для обычных облачных серверов.

Для применения новых маршрутов на уже существующих нодах кластера напишите в техническую поддержку.

Создание статического маршрута с помощью CLI

Подробно о начале работы с OpenStack CLI.

Статический маршрут можно создать только в приватной сети с хотя бы одной подсетью. Создать их можно по инструкции Управление сетями с помощью CLI.

Откройте список всех подсетей в проекте:

openstack subnet list

Список подсетей выглядит примерно следующим образом:

+---------------------+----------------+----------------------+----------------+
| ID                  | Name           | Network              | Subnet         |
+---------------------+----------------+----------------------+----------------+
| 2da17a11-ef95-4e90- | 192.168.0.0/24 | b201e006-10b8-1abc-a | 192.168.0.0/24 |
| a4da-5cb1e169d7b0   |                | 1c9-daa78407a1a1     |                |
+---------------------+----------------+----------------------+----------------+

Откройте свойства подсети:

openstack subnet show <subnet id>

В выводе команды видно, что в host_routes ничего не указано — не создан статический маршрут:

+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| allocation_pools     | 192.168.0.2-192.168.0.254            |
| cidr                 | 192.168.0.0/24                       |
| created_at           | 2021-04-09T07:54:37Z                 |
| description          |                                      |
| dns_nameservers      | 188.93.16.19, 188.93.17.19           |
| dns_publish_fixed_ip | None                                 |
| enable_dhcp          | False                                |
| gateway_ip           | 192.168.0.1                          |
| host_routes          |                                      |
| id                   | 2da17a11-ef95-4e90-a4da-5cb1e169d7b0 |
| ip_version           | 4                                    |
| ipv6_address_mode    | None                                 |
| ipv6_ra_mode         | None                                 |
| name                 | 192.168.0.0/24                       |
| network_id           | b201e006-10b8-1abc-a1c9-daa78407a1a1 |
| prefix_length        | None                                 |
| project_id           | 4ae1020346104d56aa9341a777bb01da     |
| revision_number      | 0                                    |
| segment_id           | None                                 |
| service_types        |                                      |
| subnetpool_id        | None                                 |
| tags                 |                                      |
| updated_at           | 2021-04-09T07:54:37Z                 |
+----------------------+--------------------------------------+

Создайте статический маршрут. Например, необходимо, чтобы все виртуальные машины из подсети 192.168.0.0/24 имели доступ к подсети 192.168.19.0/24 через шлюз 192.168.0.20:

openstack subnet set --host-route destination=192.168.19.0/24,gateway=192.168.0.20 <subnet id>

Проверьте, что в параметре host_routes добавлена подсеть назначения и шлюз:

openstack subnet show <subnet id>

Вывод:

+----------------------+-------------------------------------------------------+
| Field                | Value                                                 |
+----------------------+-------------------------------------------------------+
| allocation_pools     | 192.168.0.2-192.168.0.254                             |
| cidr                 | 192.168.0.0/24                                        |
| created_at           | 2021-04-09T07:54:37Z                                  |
| description          |                                                       |
| dns_nameservers      | 188.93.16.19, 188.93.17.19                            |
| dns_publish_fixed_ip | None                                                  |
| enable_dhcp          | False                                                 |
| gateway_ip           | 192.168.0.1                                           |
| host_routes          | destination='192.168.19.0/24', gateway='192.168.0.20' |
| id                   | 2da17a11-ef95-4e90-a4da-5cb1e169d7b0                  |
| ip_version           | 4                                                     |
| ipv6_address_mode    | None                                                  |
| ipv6_ra_mode         | None                                                  |
| name                 | 192.168.0.0/24                                        |
| network_id           | b201e006-10b8-1abc-a1c9-daa78407a1a1                  |
| prefix_length        | None                                                  |
| project_id           | 4ae1020346104d56aa9341a777bb01da                      |
| revision_number      | 1                                                     |
| segment_id           | None                                                  |
| service_types        |                                                       |
| subnetpool_id        | None                                                  |
| tags                 |                                                       |
| updated_at           | 2021-04-09T08:10:09Z                                  |
+----------------------+-------------------------------------------------------+

Если статический маршрут был создан ранее

Если необходимо удалить старый статический маршрут и сразу прописать новый, необходимо вместе с параметром --host-route указать --no-host-route:

openstack subnet set --no-host-route --host-route destination=192.168.24.0/24,gateway=192.168.0.40 <subnet id>

Проверьте обновленный параметр host_routes:

openstack subnet show <subnet id>

Вывод:

+----------------------+-------------------------------------------------------+
| Field                | Value                                                 |
+----------------------+-------------------------------------------------------+
| allocation_pools     | 192.168.0.2-192.168.0.254                             |
| cidr                 | 192.168.0.0/24                                        |
| created_at           | 2021-04-09T07:54:37Z                                  |
| description          |                                                       |
| dns_nameservers      | 188.93.16.19, 188.93.17.19                            |
| dns_publish_fixed_ip | None                                                  |
| enable_dhcp          | False                                                 |
| gateway_ip           | 192.168.0.1                                           |
| host_routes          | destination='192.168.24.0/24', gateway='192.168.0.40' |
| id                   | 2da17a11-ef95-4e90-a4da-5cb1e169d7b0                  |
| ip_version           | 4                                                     |
| ipv6_address_mode    | None                                                  |
| ipv6_ra_mode         | None                                                  |
| name                 | 192.168.0.0/24                                        |
| network_id           | b201e006-10b8-1abc-a1c9-daa78407a1a1                  |
| prefix_length        | None                                                  |
| project_id           | 4ae1020346104d56aa9341a777bb01da                      |
| revision_number      | 2                                                     |
| segment_id           | None                                                  |
| service_types        |                                                       |
| subnetpool_id        | None                                                  |
| tags                 |                                                       |
| updated_at           | 2021-04-09T08:11:08Z                                  |
+----------------------+-------------------------------------------------------+

Создание статического маршрута через Terraform

Через Terraform можно создать и настроить статические маршруты на серверах — готовый пример на GitHub.