Функции виртуальной сети#

Основной пользовательский сценарий интеграции:

../../../../../_images/vir_f_1.png

Работа с параметрами контекстуализации#

Параметры контекстуализации, указанные в шаблоне ВМ, определяют начальную конфигурацию ВМ. Для настройки VNF существуют специфичные наборы параметров для каждой из функций виртуальной сети. Параметры должны быть указаны в разделе CONTEXT шаблона ВМ.

Примечание

  1. Пустое значение является корректным для всех параметров контекстуализации и используется при удалении параметров.

  2. Если требуется удалить ранее использованные параметры контекстуализации, необходимо задать пустую строку в качестве значения. Далее можно безопасно удалить эти параметры после повторной контекстуализации или перезагрузки виртуального маршрутизатора.

  3. Если параметры поддерживают указание нескольких значений, эти значения могут быть разделены пробелами (x y), запятыми (x,y) или точками с запятой (x;y).

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

У каждой функции VNF есть параметр контекстуализации, который определяет, на каких сетевых интерфейсах подключенная функция будет активна, а на каких нет. Если не указывать эти параметры, то подключенная функция VNF прослушивает все доступные интерфейсы (за исключением loopback-интерфейса и интерфейса управления).

При указании в параметрах сетевых интерфейсов всегда необходимо использовать имена интерфейсов вида eth, за которыми следует индекс, начинающийся с 0, т.е. eth0 для первой сетевой карты, eth4 для пятой сетевой карты. Например, чтобы включить функцию DNS VNF только на 3-м и 4-м сетевых интерфейсах, параметр контекстуализации должен выглядеть следующим образом:

ONEAPP_VNF_DNS_INTERFACES="eth2 eth3"

Высокая доступность (keepalived)#

Keepalived — служба обеспечивающая высокую доступность VNF на основе протокола VRRP и специального сервиса, отслеживающего состояние экземпляра ВМ виртуального маршрутизатора и его сетевых функций. В случае инцидента (недоступности сервиса VNF) сервис перенесет все плавающие IP-адреса и сетевые функции на другой экземпляр виртуального маршрутизатора с минимальным временем простоя.

Предупреждение

Для работы keepalived должен быть настроен хотя бы один VNF и один плавающий IP-адрес. Также должен быть указан параметр ONEAPP_VNF_KEEPALIVED_VRID, уникальный для подсетей. В противном случае разные ВМ с одинаковым идентификатором могут безуспешно пытаться объединиться в один и тот же кластер.

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

Переход между состояниями BACKUP/MASTER и инициализацию других VNF функций можно отследить в журнале сервиса выполнив команду:

sudo journalctl -u keepalived

Основные параметры контекстуализации высокой доступности представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_KEEPALIVED_ENABLED

NO

Включение/выключение функции keepalived (YES/NO)

ONEAPP_VNF_KEEPALIVED_INTERFACES

все интерфейсы

Список управляемых интерфейсов (<[!]ethX> …)

VROUTER_KEEPALIVED_PASSWORD

Пароль для аутентификации VRRP (максимум 8 символов)

ONEAPP_VNF_KEEPALIVED_PRIORITY

100

Числовой приоритет VRRP маршрутизатора

ONEAPP_VNF_KEEPALIVED_VRID

1

Идентификатор VRRP маршрутизатора (1-255)

ONEAPP_VNF_KEEPALIVED_INTERVAL

1

Периодичность поверки (секунды)

Расширенные параметры контекстуализации высокой доступности представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_KEEPALIVED_ETHx_PASSWORD

Пароль VRRP маршрутизатора для сетевого интерфейса (максимум 8 символов)

ONEAPP_VNF_KEEPALIVED_ETHx_PRIORITY

100

Числовой приоритет VRRP маршрутизатора для сетевого интерфейса

ONEAPP_VNF_KEEPALIVED_ETHx_VRID

1

Идентификатор VRRP маршрутизатора для сетевого интерфейса(1255)

ONEAPP_VNF_KEEPALIVED_ETHx_INTERVAL

1

Периодичность поверки для сетевого интерфейса(секунды)

ROUTER4#

Сервис VNF обеспечивает функциональность маршрутизации между различными сетями и позволяет ВМ из разных виртуальных сетей взаимодействовать друг с другом. Если включить функцию маршрутизации (параметр ONEAPP_VNF_ROUTER4_ENABLED="YES"), то по умолчанию маршрутизация будет выполняться между всеми подключенными интерфейсами (кроме интерфейса управления). Для выбора определенных интерфейсов для маршрутизации необходимо указать значение параметра ONEAPP_VNF_ROUTER4_INTERFACES.

Примечание

Функция ROUTER4 обеспечивает только маршрутизацию. Например, для того чтобы предоставить ВМ частной сети доступ к общедоступным интернет сервисам, эту функцию необходимо использовать вместе с NAT4.

Функция ROUTER4 использует стандартные возможности IP-стека Linux по маршрутизации транзитных IP-пакетов (IP forwarding). Основные параметры контекстуализации ROUTER4 представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_ROUTER4_ENABLED

NO

Включение/выключение функции ROUTER4 (YES, NO)

ONEAPP_VNF_ROUTER4_INTERFACES

все интерфейсы

Список маршрутизируемых интерфейсов (<[!]ethX> …)

DHCP4#

VNF предоставляет сервис протокола динамической настройки узла (DHCPv4), реализованный с помощью DHCP-сервера ISC Kea версии 2.2.0.

При настройке DHCPv4 всегда необходимо указывать список интерфейсов в параметре ONEAPP_VNF_DHCP4_INTERFACES. В противном случае работа службы будет распространятся на все интерфейсы (несвязанные с управлением) и все настроенные подсети.

По умолчанию, сервис предоставляет сетевую конфигурацию для DHCP клиентов основываясь на конфигурации интерфейсов, включенных параметром ONEAPP_VNF_DHCP4_INTERFACES. Конфигурация создается на основе заданных постоянных параметров контекста виртуальных сетей (например, ETH0_GATEWAY), а не из действующей конфигурации конкретных сетевых интерфейсов.

Настройки могут быть предопределены параметрами контекстуализации DHCP VNF, с указанием сетевого интерфейса или псевдонима, например:

CONTEXT=[
    ONEAPP_VNF_DHCP4_ETHx="<CIDR>:<start IP>-<end IP>",
    ONEAPP_VNF_DHCP4_ETHx_DNS="<IP> ...",
    ONEAPP_VNF_DHCP4_ETHx_GATEWAY="<IP> ...",
    ONEAPP_VNF_DHCP4_ETHx_MTU="<number>",
    ONEAPP_VNF_DHCP4_ETHx_ALIASy="<CIDR>:<start IP>-<end IP>",
    ONEAPP_VNF_DHCP4_ETHx_ALIASy_DNS="<IP> ...",
    ONEAPP_VNF_DHCP4_ETHx_ALIASy_GATEWAY="<IP> ...",
    ONEAPP_VNF_DHCP4_ETHx_ALIASy_MTU="<number>",
    ...
]

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

Примечание

Пример:

В ВМ настроены интерфейс и его псевдонимом — eth0: 192.168.0.1/255.255.0.0 и eth0 alias 0: 192.168.1.100/255.255.0.0, и следующая контекстуализация DHCP4 VNF:

CONTEXT=[
     ONEAPP_VNF_DHCP4_ETH0_DNS="8.8.8.8",
     ONEAPP_VNF_DHCP4_ETH0_ALIAS0_DNS="4.4.4.4",
     ONEAPP_VNF_DHCP4_ETH0_ALIAS0="192.168.0.0/16:192.168.100.100-192.168.200.250",
     ...
]

В этом примере интерфейс eth0 и его псевдоним используют одну подсеть, но имеются два разных параметра, переопределяющих настройки сервера имен и пула IP-адресов (по-умолчанию и конкретно заданные). Таким образом, когда VNF пытается создать конфигурацию DHCP4, он встречает конфликт пулов адресов и параметров (DNS, GATEWAY, и MTU). Именно по этому переменные сетевого интерфейса (ONEAPP_VNF_DHCP4_ETH0) всегда главнее в таких сценариях (ONEAPP_VNF_DHCP4_ETH0_ALIAS0 и ONEAPP_VNF_DHCP4_ETH0_ALIAS0_DNS будут проигнорированы).

Конечная сгенерированная конфигурации из этого примера:

...
"subnet4": [
{
  "subnet": "192.168.0.0/16",
  "pools": [ { "pool": "192.168.0.2-192.168.255.254" } ],
  "option-data": [
    { "name": "domain-name-servers", "data": "8.8.8.8" },
    { "name": "routers", "data": "192.168.0.1" }
  ],
  "reservations": [
    { "flex-id": "'DO-NOT-LEASE-192.168.101.1'", "ip-address": "192.168.0.1" },
    { "flex-id": "'DO-NOT-LEASE-192.168.101.100'", "ip-address": "192.168.1.100" }
  ],
  "reservation-mode": "all"
},

Для более тонкой настройки конфигурации подсетей можно напрямую передать параметры DHCP-сервера с помощью параметра ONEAPP_VNF_DHCP4_SUB. Значением параметра должна являться корректная JSON-конфигурация для ISC Kea (раздел subnet4 section), закодированная в Base64. Так же может быть указано больше переменных конфигурации, и они должны оканчивать на числовые индексы (например, ONEAPP_VNF_DHCP4_SUBNET0). Определения подсетей такими контекстными параметрами всегда имеет приоритет над другими интерфейс-специфичными параметрами (например, заданный параметр ONEAPP_VNF_DHCP4_SUBNET отключает любую контекстуализацию, основанную на конфигурации интерфейса).

Так же возможна живая переконфигурация и адаптирование к контексту по мере внесения изменений. Возможным последствием может являться то, что некоторые прежде назначенные переменные могут оставаться активными даже после их удаления. Для примера, проблема может возникнуть, если переменные вида ONEAPP_VNF_DHCP4_SUBNET были заданы, но теперь вы желаете использовать переменные интерфейсов (вида ONEAPP_VNF_DHCP4_ETHx), удаляете первую переменную, но она все еще продолжает существовать в рамках контекста. Обходным решением является назначение переменным пустого контекста, вместо их удаления (для примера, ONEAPP_VNF_DHCP4_SUBNET0="").

Примечание

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

Трансляция MAC-адреса в IPv4#

В ПВ существует прямая корреляция между MAC и IPv4 адресами, выделенными сетевым интерфейсам виртуальных машин. MAC-адреса сетевых интерфейсов формируются из:

  • 2-байтового префикса (по умолчанию 02:00). Он может быть назначен переменной MAC_PREFIX в oned.conf;

  • шестнадцатеричного представления назначенного IPv4-адреса (например, 01:02:03:04 для адреса 1.2.3.4).

К службе DHCP сервера дополнительно подключен модуль (hook) для реализации функции назначения IPv4 адреса на основе MAC-адреса виртуальной машины. Это позволяет ВМ получать с помощью DHCP такой же адрес, какой она бы получила при обычном использовании виртуальных сетей (параметры которых передаются через статичный контекст ВМ). Это позволяет подключать к виртуальной сети ВМ, не использующие настройку через контекстуализацию (т.е. без установленного пакета one-context).

Примечание

Функция трансляции MAC-адреса в IPv4 работает полностью автономно, без обращения к серверу управления. Функция включена по умолчанию и может быть отключена переменной ONEAPP_VNF_DHCP4_MAC2IP_ENABLED.

Трансляция может быть настроена на работу только в определенных подсетях с помощью параметра ONEAPP_VNF_DHCP4_MAC2IP_SUBNETS, который принимает в качестве значения список диапазонов в формате CIDR. Для оставшихся сетей, не определенных в этом параметре, применяются обычные правила выделения адресов DHCP-сервером. Отсутствующий или пустой параметр включает работу трансляции MAC в IPv4 во всех подсетях.

Предупреждение

При включенной трансляции MAC-адреса в IPv4 запросы с MACадресов, которые не могут быть преобразованы в подходящий IP-адрес, игнорируются.

При настройке DHCP для ВМ, не находящихся под управлением ПК СВ, необходимо задать значение параметра ONEAPP_VNF_DHCP4_MAC2IP_SUBNETS или полностью отключить функцию трансляции MAC-адреса в IPv4 (ONEAPP_VNF_DHCP4_MAC2IP_ENABLED="NO").В противном случае может возникнуть проблема неработоспособности DHCP.

Основные параметры контекстуализации DHCP4#

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_DHCP4_ENABLED

NO

Включение/выключение функции DHCP4 (YES/NO)

ONEAPP_VNF_DHCP4_INTERFACES

all ifaces

Список управляемых интерфейсов (<[!]ethX> …).

ONEAPP_VNF_DHCP4_AUTHORITATIVE

YES

Определяет, является ли DHCP-сервер авторитативным (YES/NO)

ONEAPP_VNF_DHCP4_LEASE_TIME

3600

Время аренды IP-адреса (секунды)

ONEAPP_VNF_DHCP4_DNS

DNS-сервер по умолчанию (IP-адрес)

ONEAPP_VNF_DHCP4_GATEWAY

Шлюз по умолчанию (IP-адрес)

ONEAPP_VNF_DHCP4_MAC2IP_ENABLED

YES

Включение/отключение трансляции MAC-адреса в IPv4 (YES/NO)

Расширенные параметры контекстуализации DHCP4#

Примечание

Параметры ONEAPP_VNF_DHCP4_ETHx_DNS/GATEWAY/MTU применяются только при наличии хотя бы одного диапазона, указанного в параметре ONEAPP_VNF_DHCP4_ETHx. Аналогично, параметры ONEAPP_VNF_DHCP4_ETHx_ALIASy_DNS/GATEWAY/MTU активны при указании хотя бы одного диапазона в ONEAPP_VNF_DHCP4_ETHx_ALIASy.

Параметр

Описание

ONEAPP_VNF_DHCP4_ETHx

Диапазон IP-адресов подсети/пула ВМ (<CIDR>:<start IP>-<end IP>)

ONEAPP_VNF_DHCP4_ETHx_DNS

Пул интерфейсов DNS (<IP> …)

ONEAPP_VNF_DHCP4_ETHx_GATEWAY

Пул сетевых шлюзов (<IP> …)

ONEAPP_VNF_DHCP4_ETHx_MTU

Максимальный передаваемый модуль данных (MTU) (число)

ONEAPP_VNF_DHCP4_ETHx_ALIASy

Диапазон IP-адресов псевдонимов сетевых интерфейсов (<CIDR>:<start IP>-<end IP>)

ONEAPP_VNF_DHCP4_ETHx_ALIASy_DNS

Пул интерфейсов DNS для псевдонимов сетевых интерфейсов (<IP> …)

ONEAPP_VNF_DHCP4_ETHx_ALIASy_GATEWAY

Пул сетевых шлюзов для псевдонимов сетевых интерфейсов (<IP> …)

ONEAPP_VNF_DHCP4_ETHx_ALIASy_MTU

Максимальный передаваемый модуль данных (MTU) для псевдонимов сетевых интерфейсов (число)

ONEAPP_VNF_DHCP4_MAC2IP_SUBNETS

Список подсетей для

DNS#

Сервис VNF предоставляет службу DNS, которая может делегировать запросы вышестоящим серверам (на основе параметров контекста сети) или напрямую разрешать DNS-запросы самостоятельно.

По умолчанию VNF использует корневые серверы DNS (из dns-root-data от Astra Linux) для самостоятельного разрешения запросов. DNS также может перенаправлять запросы (в случае использования ONEAPP_VNF_DNS_USE_ROOTSERVERS="NO") на другие настроенные DNS-серверы, указанные в ONEAPP_VNF_DNS_NAMESERVERS или автоматически настроенные из параметров виртуальных сетей.

В режиме перенаправления запросов автоматическая настройка параметров обычно нежелательна, поэтому следует явно указать вышестоящие DNS-сервера, например:

CONTEXT=[
    ONEAPP_VNF_DNS_NAMESERVERS="8.8.8.8, 8.8.4.4",
    ...
]

Сервис может быть ограничен только для обслуживания определенных сетевых интерфейсах через ONEAPP_VNF_DNS_INTERFACES. Помимо описанного выше синтаксиса для перечисления интерфейсов, для которых необходимо включить или выключить функцию (ethX, !ethX), в случае DNS также можно задать дополнительный IP-адрес для прослушивания и порт для конкретного интерфейса (ethX/IP[@port]), например:

CONTEXT=[
    ONEAPP_VNF_DNS_INTERFACES="eth0, eth1/10.0.0.1, eth2/192.168.0.1@53",
    ...
]

Функция DNS может быть отключена для протокола TCP (через ONEAPP_VNF_DNS_TCP_DISABLED="YES") или UDP (через ONEAPP_VNF_DNS_UDP_DISABLED="YES").

Примечание

Не рекомендуется отключать протокол UDP, поскольку многие общедоступные серверы DNS используют только протокол UDP.

Для полного контроля над DNS VNF можно использовать возможность указания полного конфигурационного файла для DNS-сервера Unbound (ONEAPP_VNF_DNS_CONFIG). Значением должна быть строка в кодировке Base64 с корректным содержимым unbound.conf.

Основные параметры контекстуализации DNS представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_DNS_ENABLED

NO

Включение/выключение функции DNS (YES/NO)

ONEAPP_VNF_DNS_INTERFACES

все интерфейсы

Список интерфейсов для прослушивания

ONEAPP_VNF_DNS_MAX_CACHE_TTL

3600

Максимальное время кэширования (секунды)

ONEAPP_VNF_DNS_USE_ROOTSERVERS

YES

Использование корневых DNSсерверов напрямую (YES/NO)

ONEAPP_VNF_DNS_NAMESERVERS

Список вышестоящих серверов имен для пересылки запросов (<IP>[@<PORT>] …)

ONEAPP_VNF_DNS_UPSTREAM_TIMEOUT

1128

Время ожидания исходящего соединения к серверу имен (миллисекунды)

Расширенные параметры контекстуализации DNS представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_DNS_CONFIG

Конфигурация Unbound сервера (в кодировке Base64)

ONEAPP_VNF_DNS_ALLOWED_NETWORKS

Список клиентских сетей, из которых разрешено делать запросы (<network>/<prefix> …)

ONEAPP_VNF_DNS_TCP_DISABLED

NO

Включение/отключение TCP (YES/NO)

ONEAPP_VNF_DNS_UDP_DISABLED

NO

Включение/отключение UDP (YES/NO)

NAT4#

Сервис VNF предоставляет функцию транслирования IPv4 адресов (Network Address Translation, маскарадинг) для подключенных сетевых интерфейсов через указанные выходные интерфейсы.

Предупреждение

Выходной интерфейс всегда должен быть указан в параметре ONEAPP_VNF_NAT4_INTERFACES_OUT.

Без указания выходного интерфейса функция NAT4 не сможет быть запущена.

Основные параметры контекстуализации NAT4 представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_NAT4_ENABLED

NO

Включение/выключение функции NAT (YES/NO)

ONEAPP_VNF_NAT4_INTERFACES_OUT

Обязательный параметр: выходной интерфейс для NAT (<[!]ethX> …)

SDNAT4#

Примечание

Для работы функции SDNAT4 необходимо настроить ПВ для использования службы сервера OneGate.

Функция SDNAT4 схожа с функцией NAT4, поскольку реализована при помощи двустороннего NAT: SNAT (исходящий NAT) и DNAT (целевой NAT).

SDNAT4 сопоставляет виртуальные сети, позволяя прозрачно передавать трафик (для какого-либо целевого IP-адреса, например публичного) из одной сети на устройство в другой сети без необходимости прямого подключения устройства к первой сети (то есть, без раскрытия адреса конечного устройства в первой сети). Механизм реализуется с помощью сопоставления указанных двух IP-адресов из разных сетей. Такое сопоставление обслуживается виртуальным маршрутизатором, к которому должны быть подключены все связанные сети. Внешний IP-адрес для сопоставления должен быть присоединен к ВМ в качестве внешнего псевдонима сетевого интерфейса.

Интерфейсы на виртуальном маршрутизаторе, между которыми может быть установлено сопоставление, всегда должны быть указаны в параметре контекстуализации ONEAPP_VNF_SDNAT4_INTERFACES, в противном случае никакие правила применяться не будут (параметр отличается от подобных параметров в других функциях VNF, где пустой список по умолчанию означает все интерфейсы).

Как только список интерфейсов передается в VNF, служба, развернутая внутри виртуального маршрутизатора, начинает отслеживать изменения в распределении IP-адресов через OneGate. На основе агрегированных данных создается список пар для SNAT/DNAT, где конечная часть — это IP-адрес внешнего псевдонима сетевого интерфейса, а исходная часть — реальный IP-адрес, назначенный ВМ, к которой происходит подключение.

Предупреждение

Обязательно должен быть установлен параметр шаблона EXTERNAL=YES, в противном случае псевдоним будет настроен как внутренний и в виртуальной машине появится дополнительный IP-адрес. Использование внешних псевдонимов также может быть реализовано для всех IP-адресов виртуальной сети, если параметр EXTERNAL=YES задан непосредственно в шаблоне вашей виртуальной сети.

Такой псевдоним может быть присоединен к ВМ (например, с идентификатором 10) командой:

onevm nic-attach 10 --file external-nic-alias.tmpl

Основные параметры контекстуализации SDNAT4 представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_SDNAT4_ENABLED

NO

Включение/выключение функции SDNAT4 (YES/NO)

ONEAPP_VNF_SDNAT4_INTERFACES

Обязательный параметр: список интерфейсов для работы функции SDNAT4 (<[!]ethX> …)

ONEAPP_VNF_SDNAT4_REFRESH_RATE

30

Интервал обновления правил сопоставления (секунды)

OSPF#

Сервис VNF предоставляет поддержку протокола динамической маршрутизации OSPF (Open Shortest Path First) для определения оптимального маршрута передачи данных в рамках виртуальных и гибридных сетей.

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

При этом для основного экземпляра виртуального маршрутизатора (MASTER) для всех интерфейсов OSPF применяется стоимость 20 (метрика cost), для резервного экземпляра — 65534.

Основные параметры контекстуализации OSFP представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_OSPF_ENABLED

NO

Включение/выключение функции OSPF (YES/NO)

ONEAPP_VNF_OSPF_INTERFACES

все интерфейсы

Список интерфейсов для функции OSPF

ONEAPP_VNF_OSPF_INTERFACE[0-9]_AREA_ID

Идентификатор зоны (Area ID). Идентификатор может быть указан в десятичном формате или в формате записи IP-адреса

ONEAPP_VNF_OSPF_REDISTRIBUTE_CONNECTED

YES

Включение/выключение анонсирования непосредственно подключенных маршрутов (connected route redistribution)

ONEAPP_VNF_OSPF_REDISTRIBUTE_BGP

NO

Включение/выключение анонсирования BGP маршрутов (BGP route redistribution)

Расширенные параметры контекстуализации OSFP представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_OSPF_DEFAULT_ROUTE_ORIGINATE

NO

Включение/выключение распространения в сеть маршрута по умолчанию (default route)

ONEAPP_VNF_OSPF_AREA[0-9]_ID

Идентификатор зоны (Area ID) для зоны с указанным индексом. Параметр несовместим с ONEAPP_VNF_OSPF_INTERFACE[09]_AREA_ID

ONEAPP_VNF_OSPF_NETWORK[0-9]

Сеть для включения функции OSPF (например, 10.152.0.0/24). Использует идентификатор зоны с соответствующим индексом

ONEAPP_VNF_OSPF_AREA[0-9]_TYPE

NORMAL

Устанавливает тип зоны с указанным индексом (NORMAL/NSSA)

ONEAPP_VNF_OSPF_AREA[0-9]_AUTHENTICATION

NONE

Определяет, требуется ли аутентификация для всех интерфейсов зоны при установлении соседских отношений (NONE/PASSWORD/MD5)

ONEAPP_VNF_OSPF_AREA[0-9]_KEYID

Порядковый номер парольной фразы md5 для зоны

ONEAPP_VNF_OSPF_AREA[0-9]_PASSWORD

Парольная фраза для зоны OSPF (8 символов для типа PASSWORD, 16 символов для типа MD5)

ONEAPP_VNF_OSPF_INTERFACE[0-9]_NETWORK_TYPE

BROADCAST

Устанавливает тип OSPF сети - точка-точка или широковещательная (P2P/BROADCAST)

ONEAPP_VNF_OSPF_INTERFACE[0-9]_TIMER_HELLO

10

Интервал времени в секундах, используемый маршрутизатором для отправки hello-сообщений

ONEAPP_VNF_OSPF_INTERFACE[0-9]_TIMER_DEAD

40

Интервал времени в секундах, используемый маршрутизатором для определения недоступности соседа

BGP#

Сервис VNF предоставляет поддержку протокола динамической маршрутизации BGP (Border Gateway Protocol) для маршрутизации пакетов между автономными системами.

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

При этом для основного экземпляра виртуального маршрутизатора (MASTER) для принимаемых маршрутов eBGP соседей применяется значение BGP AS Local Preference=100, для резервного экземпляра — 90. Кроме того, для резервного экземпляра номер автономной системы AS добавляется в список AS-Path Prepend для «ухудшения» пути.

Основные параметры контекстуализации OSFP представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_BGP_ENABLED

NO

Включение/выключение функции BGP (YES/NO)

ONEAPP_VNF_BGP_AS

Номер локальной автономной системы BGP

ONEAPP_VNF_BGP_NEIGHBOR[0-9]

IP-адрес соседнего маршрутизатора (параметр должен использоваться в паре с ONEAPP_VNF_BGP_- NEIGHBOR[0-9]_AS)

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_AS

Номер автономной системы соседнего маршрутизатора (параметр должен использоваться в паре с ONEAPP_VNF_BGP_NEIGHBOR[0-9])

Расширенные параметры контекстуализации BGP представлены в таблице:

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_BGP_GRACEFUL_RESTART

HELPER

Устанавливает режим сохранения сессий BGP при перезапуске маршрутизатора (DISABLE, HELPER, GR_AND_HELPER)

ONEAPP_VNF_BGP_MULTIPATH_RELAX

YES

При включении параметра BGP-маршрутизатор будет учитывать маршруты с одинаковой длиной AS_PATH для ECMP (equal-cost multipath routing)

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_MAX_HOP

1

Максимальное количество пересылок (хопов) при установке соседских отношений через несколько промежуточных маршрутизаторов (1255)

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_TIMER_HOLD

180

Интервал времени в секундах, используемый маршрутизатором для определения недоступности соседа

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_TIMER_KEEP_ALIVE

60

Интервал времени в секундах, используемый маршрутизатором для отправки keepalive-сообщений

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_AUTH

Парольная фраза, используемая для MD5аутентификации при соединении с удаленным узлом

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_FILTER_IN[0-9]

Все настроенные параметры FILTER_IN[0-9] для указанного соседа формируют префиксный список (prefixlist) для последующей фильтрации маршрутов во входящем направлении. Формат: подсеть [ge NUM] [le NUM]. Например: 198.51.0.0/16 ge 16 le 24

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_FILTER_OUT[0-9]

Все настроенные параметры FILTER_IN[0-9] для указанного соседа формируют префиксный список (prefixlist) для последующей фильтрации маршрутов в исходящем направлении. Формат: подсеть [ge NUM] [le NUM]. Например: 198.51.0.0/16 ge 16 le 24

ONEAPP_VNF_BGP_NETWORK[0-9]

Настраивает анонсирование указанной подсети. Например: 198.51.0.0/16

ONEAPP_VNF_BGP_REDISTRIBUTE_CONNECTED

NO

Включение/выключение анонсирования непосредственно подключенных маршрутов (connected route redistribution)

ONEAPP_VNF_BGP_REDISTRIBUTE_OSPF

NO

Включение/выключение анонсирования OSPF маршрутов (OSPF route redistribution)

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_ENABLED

YES

При установке в NO - отключает соседство по BGP без удаления конфигурации, связанной с соседом

ONEAPP_VNF_BGP_NEIGHBOR[0-9]_NEXTHOPSELF

NO

Включение/выключение режима, при котором для указанного соседа все анонсируемые маршруты будут использовать IP-адрес виртуального маршрутизатора в качестве nexthop

LB (LoadBalancer)#

Примечание

Для работы функции LB (LoadBalancer) необходимо настроить ПВ для использования службы сервера OneGate.

Функция предоставляет службу балансировщика нагрузки, которая для заданных входящих подключений будет перенаправлять трафик и балансировать нагрузку на пул статических и/или динамических реальных серверов.

Функция LoadBalancer основана на Linux Virtual Server (LVS/IPVS) и использует вспомогательные средства пакета ipvsadm, входящего в состав репозитория Astra Linux.

Основные параметры контекстуализации LB представлены в таблице:

Примечание

Основные параметры влияют на все настроенные балансировщики нагрузки.

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_LB_ENABLED

NO

Включение/выключение функции балансировщика нагрузки (YES/NO)

ONEAPP_VNF_LB_ONEGATE_ENABLED

NO

Включение/выключение динамических реальных серверов с помощью OneGate (YES/NO)

ONEAPP_VNF_LB_REFRESH_RATE

30

Частота обновления пула реальных серверов (секунды)

ONEAPP_VNF_LB_FWMARK_OFFSET

10000

Начальное значение маркировки (firewall mark) для LVS/IPVS

ONEAPP_VNF_LB_CONFIG

Индивидуальные конфигурации балансировщиков нагрузки (JSON в кодировке BASE64, разделенные запятыми). При использовании этого параметра игнорируются параметры контекстуализации балансировщика нагрузки и статических реальных серверов. Динамические параметры реального сервера по-прежнему будут применяться

Параметры балансировщика нагрузки#

В таблице перечислены параметры, определяющие балансировщик нагрузки, если не был настроен параметр ONEAPP_VNF_LB_CONFIG.

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_LB[0-9]_IP

Обязательный параметр: IP-адрес балансировщика нагрузки. Если указан только IP-адрес (не указаны ни порт, ни протокол), то весь трафик по этому IP-адресу с балансировкой нагрузки будет перенаправляться на реальные серверы в соотношении 1:1

ONEAPP_VNF_LB[0-9]_PORT

IP-порт для балансировки соединения (опционально)

ONEAPP_VNF_LB[0-9]_PROTOCOL

IP-протокол для балансировки соединения (опционально TCP, UDP или BOTH)

ONEAPP_VNF_LB[0-9]_METHOD

NAT

Метод LVS/IPVS (NAT или DR (Direct Routing — прямая маршрутизация). Для работы метода прямой маршрутизации потребуются дополнительные действия на реальных серверах, которые описаны в разделе (указать после перевода)

ONEAPP_VNF_LB[0-9]_TIMEOUT

10

Допустимый тайм-аут любого реального сервера для этого LB (секунды)

Метод LVS/IPVS NAT#

Балансировщик нагрузки по умолчанию будет использовать метод NAT, при котором VNF будет направлять трафик между ВМ и реальными серверами через себя в обоих направлениях.

Для этого метода потребуется два настроенных сетевых интерфейса в VNF и две виртуальные сети — одна общедоступная, из которой будет инициироваться трафик, и частная, где будут расположены реальные серверы:

NAT method:

                 .--------.
                 | Client |
                 `--------`
                eth0: client IP
                     |
                     |

               (public vnet)

    src: client IP <---> dest: LB IP

                     |
                     |
                eth0: LB IP
              .-------------.
      DNAT >> | VNF/Vrouter | >> SNAT
              `-------------`
                eth1: Priv IP
                     |
                     |

               (private vnet)

    src: client IP <---> dest: RS IP

                     |
                     |
                eth0: RS IP
              .-------------.
              | Real Server |
              `-------------`

Метод LVS/IPVS DR (Direct Routing — прямая маршрутизация)#

Альтернативой методу NAT является использование метода прямой маршрутизации. Например, какой-то конкретный балансировщик нагрузки (в данном случае LB0) можно переключить на метод прямой маршрутизации, установив контекстному параметру ONEAPP_VNF_LB0_METHOD (параметру lb-method в конфигурационном JSON) значение DR.

При использовании DR VNF будет видеть только входящий трафик, но исходящий трафик с любого реального сервера будет возвращаться непосредственно на ВМ. Для настройки DR метода потребуется только один сетевой интерфейс и только одна виртуальная сеть:

DR method:

                 .--------.
                 | Client |
                 `--------`
                eth0: client IP

                ^               V
                ^               v
                ^                \______
                |                       \
                |                        `_____
                |                              \
                |                               \
                |
                |                src: client IP --> dest: LB IP
                |
                |                               |
                |
                |                          eth0: LB IP
                                         .-------------.
    src: LB IP --> dest: client IP       | VNF/Vrouter |
                                         `-------------`
                |
                |                               |
                |
                |               src: client IP --> dest: LB IP (!!!)
                |
                |                               /
                |                        ______'
                |                       /
                |                ______'
                ^               /
                ^              v
                ^              V

                lo: LB IP (!!!)
                eth0: RS IP
              .-------------.
              | Real Server |
              `-------------`

Предупреждение

На приведенной выше схеме реальный сервер отвечает на любые запросы ARP для IP с балансировкой нагрузки, из-за этого возникает конфликт IP-адресов в одной подсети — IP балансировщика нагрузки настроен как на реальном сервере, так и на VNF.

Для предотвращения этого необходимы следующие дополнительные настройки:

  • каждому реальному серверу балансировщика нагрузки, использующего DR, также должен быть назначен IP-адрес с балансировкой нагрузки — для этого можно использовать либо loopback-интерфейс, либо какой-либо интерфейс-заглушку (modprobe dummy):

$ ip addr add <LB_IP> dev lo
  • на каждом реальном сервере также необходимо настроить обход проблемы ARP flux, чтобы избежать нежелательных ответов ARP:

# e.g. in /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

Примечание

Аналогичный результат может быть достигнут и с помощью команды arptables — если использование sysctl нежелательно.

Параметры контекстуализации статического реального сервера#

В таблице перечислены параметры, определяющие статический реальный сервер, если не был настроен параметр ONEAPP_VNF_LB_CONFIG.

Параметр

Значение по умолчанию

Описание

ONEAPP_VNF_LB[0-9]_SERVER[0-9]_HOST

Обязательный параметр: реальный адрес сервера (IP-адрес или доменное имя)

ONEAPP_VNF_LB[0-9]_SERVER[0-9]_PORT

Порт реального сервера (необходимо указывать если определен параметр ONEAPP_VNF_LB[0-9]_PORT)

ONEAPP_VNF_LB[0-9]_SERVER[0-9]_WEIGHT

используется из ipvs

Вес реального сервера

ONEAPP_VNF_LB[0-9]_SERVER[0-9]_ULIMIT

используется из ipvs

Верхний предел количества подключений к реальному серверу

ONEAPP_VNF_LB[0-9]_SERVER[0-9]_LLIMIT

используется из ipvs

Нижний предел количества подключений к реальному серверу

Использование динамических реальных серверов#

Если для ПВ сконфигурирован сервис OneGate, то есть возможность динамически обновлять пул реальных серверов, используемый балансировщиком нагрузки.

При таком способе создаются ВМ, выполняющие специальную программу или скрипт, которые при начальной загрузке или при возникновении необходимости дадут команду VNF присоединить эту ВМ к пулу реальных серверов, используя переменные OneGate.

В таблице перечислены переменные OneGate.

Переменная

Описание

ONEGATE_LB[0-9]_IP

Обязательная переменная: IP-адрес с балансировкой нагрузки, определенный в VNF

ONEGATE_LB[0-9]_PORT

IP-порт с балансировкой нагрузки, определенный в VNF (требуется указывать, если используется для балансировщика нагрузки)

ONEGATE_LB[0-9]_PROTOCOL

IP-протокол с балансировкой нагрузки, определенный в VNF (требуется указывать, если используется для балансировщика нагрузки)

ONEGATE_LB[0-9]_SERVER_HOST

Обязательный параметр: реальный адрес сервера (IP-адрес или доменное имя)

ONEGATE_LB[0-9]_SERVER_PORT

Порт реального сервера (требуется указывать, если порт определен для балансировщика нагрузки)

ONEGATE_LB[0-9]_SERVER_WEIGHT

Вес реального сервера

ONEGATE_LB[0-9]_SERVER_ULIMIT

Верхний предел количества подключений к реальному серверу

ONEGATE_LB[0-9]_SERVER_LLIMIT

Нижний предел количества подключений к реальному серверу

Примечание

Можно определить несколько балансировщиков нагрузки на каждой ВМ, для этого необходимо верно определить переменные с распределением их по IP-порту или IP-протоколу.

Индекс [0-9] не обязательно должно совпадать с индексом VNF, но он должно соответствовать набору параметров балансировщика нагрузки (IP, порт и протокол) или просто IP-адресу с балансировкой нагрузки, если для балансировщика не определены ни порт, ни протокол.

Пример настроек ВМ с переменными OneGate:

onegate vm update --data ONEGATE_LB0_IP=192.168.150.100
onegate vm update --data ONEGATE_LB0_PROTOCOL=TCP
onegate vm update --data ONEGATE_LB0_PORT=80
onegate vm update --data ONEGATE_LB0_SERVER_HOST=192.168.101.1
onegate vm update --data ONEGATE_LB0_SERVER_PORT=8080

Примечание

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