10.4.2. CLI

Описание

Cервис — это виртуальная сущность, агрегирующая в себе все настройки, которые описывают логику обработки запросов для группы Access points. А именно: Content Switch/Modification Rules, Persistence, Target-группа по умолчанию, SSL сертификаты.

Настройка

Вся настройка выполняется в конфигурационном режиме балансировщика. Чтобы в него перейти из режима enable, необходимо выполнить команду:

trafficsoft# configuration terminal

Для того, чтобы создать Сервис, выполните команду:

vlb service NAME

Создать Сервис.

После создания обязательно нужно добавить к нему Target-группу и Access point

default-target-group NAME

Привязать Target-группу к Сервису.

Опциональным является добавление Persistence и Persistence timeout:

persistence-group NAME

Добавить к Сервису Persistence-группу.

persistence-timeout (30-65535)

Указать timeout (время жизни) persistence-записи после удаления последней сессии, которая к ней относится. По умолчанию 30 секунд. Настройка в Сервисе является более приоретной, чем в Persistence-группе.

Access points

Access point (Точка доступа) — это виртуальная точка доступа, которая описывается уникальным ключом из маски подсети, порта, VRF, типа и используется для предоставления доступа клиентов к сервису.

access-point type <l4-tcp|l4-udp|tcp|ssl|http|https> ip A.B.C.D/M port <(0-65535)|any> [vrf VRFNAME] [dp-access-list ACLNAME] [tcp-profile NAME]

Добавить Access point к Сервису.

Ключ

Параметр

Описание

type

<l4-tcp|l4-udp|tcp|ssl|http|https>

Тип Access point, который определяет, какие именно настройки будут применены для обработки трафика на Access point

ip

A.B.C.D/M

IP-адрес, который будет слушать балансировщик. Можно указать как подсеть, так и единичный адрес с маской /32

port

<(0-65535)|any>

Порт, который будет слушать балансировщик. Можно указать any и тогда балансировщик будет слушать любой порт

[vrf]

[VRFNAME]

По умолчанию на балансировщике создается vrf default

[dp-access-list]

[ACLNAME]

Access-лист

[tcp-profile]

NAME

TCP-профиль

Рассмотрим типы Access point:

Тип Access point

Описание

l4-tcp/udp

L4-балансировка TCP или UDP трафика. В этом режиме балансировщик не терминирует на себе сессии. Для переключения необходимо установить параметр l4_app в настройках платформы в значение 2: vADC# platform set l4_app 2. После этого необходимо выполнить перезагрузку ВМ

tcp

L7-балансировка TCP-трафика. Работает только TCP-стек и балансировка

ssl

L7-балансировка шифрованного трафика. На данный момент поддерживается TLS 1.2. Работает только TCP-стек, SSL Offloading и балансировка. Не работает HTTP-парсер, то есть не будут работать Content Switch/Modification Rules

http

L7-Балансировка HTTP-трафика. Работает TCP-стек, балансировка и HTTP-парсер, поэтому доступны Content Switch/Modification Rules

https

L7-Балансировка https-трафика. Работает TCP-стек, SSL Offloading и балансировка, а также HTTP-парсер, то есть доступны Content Switch/Modification Rules, использование сертификатов и цепочек сертификатов

Content Switch Rules

Это правила, по которым мы можем выбрать группу серверов для балансировки.

http content-switch rule (0-65535) target-group NAME EXPRESSION...

Создать правило Content Switch.

Ключ

Параметр

Описание

(0-65535)

Приоритет правила. Если создано несколько правил, то их обработка остановится, когда будет выполнено одно из них. Например, создано 4 правила: условия в правилах с ID = 1 и ID = 2 не совпали с параметрами запроса от клиента, ID = 3 совпало, проверка прекращается, правило с ID = 4 не проверяется

target-group

NAME

Tartget-группа серверов, на которые будут балансироваться запросы

EXPRESSION

Выражение. Поддерживаются следующие логические операции:

  • == равно

  • != не равно

  • =~ содержит

  • !~ не содержит

  • or или

  • and и

и следующие переменные:

  • @url URL-адрес сайта

  • @method GET/POST/HEAD

  • @body Тело запроса

  • HTTP Cookie

  • HTTP-заголовки

no http content-switch rule (0-65535)

Удалить правило Content Switch с определенным ID.

Пример

Создадим правило:

Если заголовок Host содержит домен trafficsoft.ru И в URL-адресе не содержится /images/ ИЛИ заголовок NFWare равен test, то отправить запрос на Target-группу tg1.

Тогда Expression будет следующим:

http content-switch rule 0 target-group tg1 ((Host =~ trafficsoft.ru) and (@url !~ /images/)) or (NFWare == test)

Content Modification Rules

Правила изменения контента позволяют вставлять/удалять/изменять различную информацию в заголовки запросов пользователей к серверу и заголовки ответов от сервера.

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

Value

Описание

$remote_addr

Соответствует IP-адресу клиента

$remote_port

Соответствует номеру порта клиента

$server_addr

Соответствует IP-адресу Access point в запросе

$server_port

Соответствует номеру порта Access point

$scheme

Протокол, например, HTTP или HTTPS

$http_host

Значение заголовка Host в HTTP-запросе

$uri

Значение URI в HTTP-запросе

$x_forwarded_for

Добавляет $remote_addr к заголовку X-Forwarded-For, если этот заголовок уже содержится в HTTP-запросе. В противном случае вставляет новый заголовок

$forwarded

Добавляет $remote_addr к заголовку Forwarded, если этот заголовок уже содержится в HTTP-запросе. В противном случае вставляет новый заголовок

$transition_forwarded_for

Добавляет $remote_addr к заголовку X-Forwarded-For и преобразует этот заголовок в Forwarded

Создать правило модификации со следующими параметрами:

Параметр

Описание

(0-65535)

Идентификационный номер правила. Выполняется по порядку. В отличии от ID в Content Switch Rules обработка останавливается, когда будут применены все правила

<request|response>

Запрос от клиента к Worker или ответ от Worker клиенту

<header|cookie>

Применить правило к заголовку или куки

NAME

Название заголовка, куки или значение URL

VALUE

Значение, которое будет вставляться в поле Name

Удалить определенное значение заголовка или куки из запроса или ответа.

http content-modification rule (0-65535) request uri change VALUE...

Создать правило по изменению значения URL в запросе.

no http content-modification rule (0-65535)

Удалить правило Content Modification с определенным ID.

Примеры

http content-modification rule 1 request header set X-Real-IP $remote_addr

Создать заголовок X-Real-IP с IP-адресом клиента.

http content-modification rule 2 request header set X-Real-IP $remote_addr:$remote_port

Создать заголовок X-Real-IP с IP-адресом и номером порта клиента.

http content-modification rule 3 request header set X-Forwarded-Host $http_host

Создать заголовок X-Forwarded-Host.

http content-modification rule 4 request header set X-Forwarded-Proto $scheme

Создать заголовок X-Forwarded-Proto.

http content-modification rule 5 request header set X-Forwarded-For $x_forwarded_for

Создать заголовок X-Forwarded-For.

http content-modification rule 6 request header set X-Forwarded-For $x_forwarded_for:$remote_port

Создать заголовок X-Forwarded-For с номером порта.

http content-modification rule 7 request header set Forwarded $forwarded

Создать заголовок Forwarded.

http content-modification rule 7 request header set Forwarded $forwarded;proto=$scheme

Создать заголовок Forwarded с дополнительной информацией. Данная команда создаст заголовок for=192.168.1.4;proto=http (где 192.168.1.4 - source IP-адрес) и добавит его к существующему заголовку, если такой уже существует.

http content-modification rule 5 request header set Forwarded $transition_forwarded_for:$remote_port

Преобразовать заголовок X-Forwarded-For в Forwarded.

В этом случае, если на vADC поступит HTTP-запрос, уже содержащий заголовок X-Forwarded-For, то к нему будет добален IP-адрес клиента, а также будет создан заголовок Forwarded, содержащий все узлы из заголовка X-Forwarded-For.

Например, в HTTP-запросе содержится заголовок X-Forwarded-For: 12.34.56.78, 23.45.67.89. Тогда к пакету будет добавлен заголовок Forwarded: for= 12.34.56.78, for=3.45.67.89, for=12.34.56.78:8000.

Следует отметить, что в этом случае, в заголовок Forwarded нельзя добавить значения из других заголовков X-Forwarded-By/Proto/Host и т.д., т.к. нельзя точно определить на каких узлах эти заголовки были добавлены в запрос.

  1. По умолчанию, vADC заменяет значение заголовка, если он уже находится в поступившем HTTP-запросе. Если нужно добавить заголовок к существующему, то поле значения заголовка должно начинаться с префикса “$add:”, например:

http content-modification rule 0 request header set X-Real-IP $add:$remote_addr
http content-modification rule 1 request header set X-Forwarded-For $add:$x_forwarded_for

Важно

Если в vADC будет добавлено несколько правил на модификацию одного и того же заголовка с переменными $x_forwarded_for, $forwarded, $transition_forwarded_for, то будут применены следующие правила:

  • Для добавления к существующем заголовку (если таковой имеется) будет использоваться первое добавленное правило.

  • Остальные правила создадут дополнительные заголовки, как если бы к ним был добавлен префикс $add:.

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

и т.д.

Важно

Если в одном и том же заголовке будет добавлено сразу несколько переменных $x_forwarded_for, $forwarded и $transition_forwarded_for, то использоваться будет только первая переменная. Остальные переменные будут удалены.

Show-команды

show vlb service

Посмотреть информацию по всем сервисам, созданным балансировщике.

show vlb service NAME

Посмотреть информацию о конкретном сервисе.

Команда показывает подробную информацию по Сервисам, которая включает в себя название Сервиса; Target-группу; тип, IP-адрес и порт по всем Access point, добавленным в данный Сервис; VRF; счетчики; какие правила Content Switch и Content Modification созданы и сколько раз они сработали.

Пример вывода:

trafficsoft# show vlb service s0
    Service s0
      default-target-group tg0
      Access-point type https
        IP: 11.0.0.2/32
        Port: 443
        VRF: default
        Access point statistics:
          Total Connections:             8
          Active Connections:            0
          Dead Connections:              8
          Application Errors:            0
          Framework Errors:              0
          TCP Handshake Errors:          0
          TCP Handshake RST Errors:      0
        SSL Offload statistics:
          Handshakes OK:                 8
          RX Bytes:                      6008
          TX Bytes:                      14515
          Total Cached Hits:             8
          Handshake Errors:              0
          No Resources Error:            0
          TLS Parser Errors:             0
          SSL Errors:                    0
        HTTP(S) statistics:
          Requests:                      8
          Reponses:                      8
          Parser Errors:                 0
          No Resources Errors:           0
          No Reponses:                   0
          Request Payload Bytes:         648
          Response Payload Bytes:        2296
          Content switch rules:
            default-target-group tg0 (1 hits)
            http content-switch rule 0 target-group tg1 ((Host =~ trafficsoft.ru) an... (7 hits)
          Content modification rules:
            http content-modification rule 1 request header set X-Real-IP $add:$remote_addr (0 hits)
            http content-modification rule 2 request header set X-Forwarded-For $add:$x_forwarded_for (0 hits)
      Access-point type http
        IP: 11.0.0.1/32
        Port: 80
        VRF: default
        Access point statistics:
          Total Connections:             11
          Active Connections:            0
          Dead Connections:              11
          Application Errors:            0
          Framework Errors:              0
          TCP Handshake Errors:          0
          TCP Handshake RST Errors:      0
        HTTP(S) statistics:
          Requests:                      11
          Reponses:                      11
          Parser Errors:                 0
          No Resources Errors:           0
          No Reponses:                   0
          Request Payload Bytes:         890
          Response Payload Bytes:        3157
          Content switch rules:
            default-target-group tg0 (4 hits)
            http content-switch rule 0 target-group tg1 ((Host =~ trafficsoft.ru) an... (7 hits)
          Content modification rules:
            http content-modification rule 1 request header set X-Real-IP $add:$remote_addr (0 hits)
            http content-modification rule 2 request header set X-Forwarded-For $add:$x_forwarded_for (0 hits)

Счетчики Access point

Описание

Total Connections

Суммарное количество соединений между клиентом и балансировщиком за все время

Active Connections

Активные соединения на данный момент

Dead Connections

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

Application Errors

При попытке инициализировать L7-сессию возникла ошибка на уровне L7 application (tcp/http/https). Срабатывание счетчика в большинстве случаях связано с нехваткой памяти

Framework Errors

Не удалось выделить память для создания L7-сессии. Возникает при открытии большого количества соединений к балансировщику, которые приводят к нехватке памяти

TCP Handshake Errors

Не удалось установить TCP сессию, потому что истек таймаут на установку (opening timeout)

TCP Handshake RST Errors

В момент установки TCP-соединения от клиента получили пакет с флагом RST

Счетчики SSL Offload

Описание

Handshakes OK

Количество успешных «рукопожатий» между клиентом и балансировщиком

RX Bytes

Количество принятых байт от клиента

TX Bytes

Количество отправленных байт балансировщиком

Total Cached Hits

Количество закэшированных TLS сессий

Framework Errors

Не удалось выделить память для создания L7-сессии

Handshake Errors

Ошибка в процессе TLS handshake

No Resources Error

Не хватило памяти в процессе обработки TLS Stream (расшифровки)

Счетчики HTTP(s)

Описание

Requests

Количество успешных запросов от клиента к балансировщику

Reponses

Количество успешных ответов от балансировщика к клиенту

Parser Errors

Возникла ошибка при парсинге HTTP и HTTPS (например, некорректные заголовки, неправильные символы, битые данные и т.д.)

No Resources Errors

В процессе HTTP Content Modification не удалось выделить новый packet mbuf во время добавления заголовков/cookies

Request Payload Bytes

Количество переданных данных от клиента к балансировщику (в байтах)

Response Payload Bytes

Количество полученных клиентом данных от балансировщика (в байтах)

show vlb sessions [FILTER]
clear vlb sessions [FILTER]

Показать вывод всей таблицы подключений с возможностью фильтрации этого вывода по следующим полям: внутренние/внешние/удаленные IP-адреса, протоколы, порты, пул или VRF

Filter

Keys

proto

  • tcp:

    • syn-received

    • established

    • fin-received

    • closing

    • transitory

  • udp

int-ip

IP-адрес клиента A.B.C.D

int-port

Порт клиента в диапазоне 1-65535

ext-ip

IP-адрес Worker A.B.C.D

ext-port

Порт Worker в диапазоне 1-65535

rem-ip

IP-адрес Сервиса A.B.C.D

rem-port

Порт Сервиса в диапазоне 1-65535

pool

Название NAT-пула NAME

vrf

Название vrf NAME

Полный формат команды:

show vlb sessions proto <tcp [{syn-received|established|fin-received|closing|transitory}]|udp> [{int-ip A.B.C.D|int-port (1-65535)|ext-ip A.B.C.D|ext-port (1-65535)|rem-ip A.B.C.D|rem-port (1-65535)|pool NAME|vrf NAME}]
clear vlb sessions proto <tcp [{syn-received|established|fin-received|closing|transitory}]|udp> [{int-ip A.B.C.D|int-port (1-65535)|ext-ip A.B.C.D|ext-port (1-65535)|rem-ip A.B.C.D|rem-port (1-65535)|pool NAME|vrf NAME}]
show vlb sessions [vrf NAME] STRING...
clear vlb sessions [vrf NAME] STRING...

Показать подробную информацию о подключении, указанной полным ключом. Ключ может быть взят из вывода команды show vlb sessions.