CLI

Обзор

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

Настройка

Все настройки выполняются в режиме конфигурации ADC. Для перехода в него из режима enable mode выполните команду:

configuration terminal
vlb service NAME

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

default-target-group NAME

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

Необязательные поля включают:

  • [no] ssl-profile ![NAME]

    SSL-профиль. Назначить SSL-профиль всему Сервису.

  • [no] persistence-group ![NAME]

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

  • [no] persistence-timeout ![(1-65535)]

    Установить таймаут для Persistence-группы (таймаут, заданный в Сервисе, имеет приоритет над таймаутом в Persistence-группе).

  • [no] persistence-shared ![<per-service-and-target-group|per-service|per-target-group|global>]

    Настроить опцию совместного использования Persistence. Обеспечивает совместное использование данных о сеансах между несколькими виртуальными сервисами, гарантируя, что клиенты направляются на один и тот же backend даже при доступе к разным портам или сервисам. См. ниже для объяснения и примеров.

  • tcp tcp-profile NAME

    TCP-профиль

  • [no] rate-limit ![(1-4294967295) <bps|Kbps|Mbps|Gbps>]

    Задать ограничение скорости в bps, Kbps, Mbps или Gbps.

  • http content-switch rule (0-1000000000) http-content NAME if EXPRESSION...

    Добавить правило Content Switch, где EXPRESSION — это выражение правила. См. Правила Content Switch для справки. Если условие, описанное в EXPRESSION, истинно, будет показана страница в HTTP-контенте.

    http content-switch rule 4 target-group NAME if EXPRESSION...

    Добавить правило Content Switch, где EXPRESSION — это выражение правила. См. Правила Content Switch для справки. Если условие, описанное в EXPRESSION, истинно, запросы будут перенаправлены в указанную Target-группу.

  • http no-workers-content NAME

    Показать страницу-заглушку, если все Workers в Target-группе становятся недоступными. Для настройки этой страницы используйте Custom HTTP Content.

Persistence Shared

Опция persistence-shared управляет тем, как данные о сеансах хранятся и используются совместно. Она определяет, как сеансовые записи распределяются между сервисами и когда выполняется проверка персистентности, включая имеет ли она приоритет над Content Switch.

Режимы

Режим

Совместное использование

Приоритет

Когда выполняется поиск

Примечания

global

Да (если настройки Persistence совпадают)

Persistence > Content Switch

До Content Switch

Полный обмен сеансами между всеми Сервисами с одинаковыми настройками

per-service

Нет

Persistence > Content Switch

До Content Switch

Данные сессии изолированы для каждого Сервиса

per-target-group

Да (если используется та же Target-группа)

Content Switch > Persistence

После Content Switch

Общий доступ для Сервисов с одинаковой Target-группой

per-service-and-target-group

Нет

Content Switch > Persistence

После Content Switch

Данные сессии изолированы для каждого Сервиса и Target-группы

Примеры применения режимов Persistence

global

Клиент сначала подключается к VIP:80, а затем к VIP:443. При persistence-shared=global оба подключения балансируются на один и тот же Worker, при условии, что настройки Persistence идентичны.

per-service

Сеансовая привязка применяется только к одному и тому же Сервису. Соединения VIP:80 и VIP:443 обрабатываются отдельно.

per-target-group

Сервисы, использующие одну и ту же Target-группу, делятся записями Persistence. Поиск осуществляется после Content Switch.

per-service-and-target-group

Каждый Сервис и Target-группа используют отдельную таблицу Persistence. Поиск осуществляется после Content Switch.

Access Points

Access Point определяется уникальной комбинацией маски подсети, порта, VRF и типа. Используется для предоставления клиентам доступа к Сервису.

access-point type <l4-tcp|l4-udp|l4-dsr-tcp|l4-dsr-udp|tcp|http> 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|l4-dsr-tcp|l4-dsr-udp|tcp|http>

Режим обработки трафика для данной Access Point

ip

A.B.C.D/M

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

port

<(0-65535)|any>

Порт, на котором ADC будет принимать соединения. Используйте any для прослушивания всех портов

[vrf]

[VRFNAME]

По умолчанию на ADC создаётся VRF с именем default

[dp-access-list]

[ACLNAME]

См. Access-лист

[tcp-profile]

NAME

См. TCP-профиль

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

Если используется тип Access Point ssl или https, добавляется параметр ssl-profile.

access-point type <l4-tcp|l4-udp|l4-dsr-tcp|l4-dsr-udp> ipv6 X:X::X:X/M port <(0-65535)|any> [vrf VRFNAME] [dp-access-list ACLNAME] [tcp-profile NAME]

Для IPv6 доступны только типы l4-tcp, l4-udp, l4-dsr-tcp и l4-dsr-udp

Типы Access Point:

Тип

Описание

l4-tcp/udp

L4-балансировка трафика TCP или UDP. ADC не терминирует сессии

l4-dsr-tcp/udp

L4-балансировка трафика TCP или UDP в режиме DSR (Direct Server Return). Ответный трафик обходит ADC и напрямую направляется клиентам

tcp

L4-балансировка с терминацией TCP (TCP-прокси). ADC обрабатывает только TCP-стек и балансировку

ssl

L4-балансировка с терминацией TCP (TCP-прокси) и TLS offloading. HTTP-парсер отключен

http

L7-балансировка HTTP-трафика. Включает TCP-стек, балансировку и парсинг HTTP. Поддерживает Content Switch и Modification Rules

https

L7-балансировка HTTPS-трафика. Включает TCP-стек, SSL offloading, балансировку и HTTP-парсинг, включая Content Switch/Modification Rules, сертификаты и цепочки сертификатов

L4 TCP/UDP Content Switch Rules

Эти правила определяют, как L4 TCP/UDP-трафик распределяется между Target-группами.

<l4-tcp|l4-udp> content-switch rule (0-1000000000) target-group NAME if EXPRESSION...

Добавить новое правило и заполнить следующие поля:

Ключ

Аргумент

Описание

rule

(0-1000000000)

Правила выполняются в порядке возрастания. Правило срабатывает только если:

  • Условие правила имеет значение true

  • Все предыдущие правила (с меньшим ID) имеют значение false

target-group

NAME

Target-группа, на которую происходит балансировка. Обязательное поле

if EXPRESSION

Определяет условие, при котором срабатывает правило. Только одна переменная может использоваться в выражении: $client_addr. Адрес клиента можно задать как подсеть (A.B.C.D/M) или Access-лист. В последнем случае Access-лист можно использовать для формирования списка сетей

Примеры

  1. Если IP-адрес клиента 192.168.10.2/32, запросы балансируются на Target-группу tg1:

l4-tcp content-switch rule 1 target-group tg1 if $client_addr == 192.168.10.2/32
  1. Если запросы поступают из подсетей 192.168.10.0/24 или 192.168.11.0/24, они балансируются на Target-группу tg1:

!
ip dp-access-list L4-TCP 10 permit src-ip 192.168.10.0/24
ip dp-access-list L4-TCP 15 permit src-ip 192.168.11.0/24
!
...
!
vlb service s0
l4-tcp content-switch rule 0 target-group tg1 if $client_addr == L4-TCP

Show-команды

show vlb service [NAME]

Показать информацию и статистику обо всех созданных Сервисах или указанном Сервисе. Счётчики такие же, как для Access Points. Если в Сервисе более одной Access Point, счётчики будут суммированы.

clear vlb service [NAME]

Очистить статистику обо всех Сервисах или указанном Сервисе.

show vlb service [NAME] detail

Показать информацию и статистику для Access Point(s) и Сервиса.

show vlb access-point type <l4-tcp|l4-udp|l4-dsr-tcp|l4-dsr-udp|tcp|ssl|http|https> ip A.B.C.D/M port <(0-65535)|any> [vrf VRF] [<dp-access-list|counters>]

Показать статистику для указанной Access Point. Вывод статистики может различаться в зависимости от выбранного типа Access Point

dsr-adc-1# show vlb access-point type https ip 203.0.113.3/32 port 443 vrf in_clients
          Total Connections:             7
          Active Connections:            0
          Dead Connections:              7
          Application Errors:            0
          Framework Errors:              0
          TCP Handshake Errors:          0
          TCP Handshake RST Errors:      0
        HTTP(S) statistics:
          Requests:                      7
          Responses:                     6
          Parser Errors:                 0
          No Resources Errors:           0
          No Responses:                  0
          Request Payload Bytes:         525
          Response Payload Bytes:        2010
        SSL Offload statistics:
          Handshakes OK:                 7
          RX Bytes:                      5215
          TX Bytes:                      18810
          Total Cached Hits:             0
          Handshake Errors:              0
          No Resources Error:            0
          TLS Parser Errors:             0
          SSL Errors:                    0
        Content switch rules:
          default-target-group https-server-1 (0 hits)

Счётчики Access Point

Описание

Total Connections

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

Active Connections

Количество активных соединений в данный момент

Dead Connections

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

Application Errors

Ошибка при инициализации сессии L7 на уровне TCP/HTTP/HTTPS. Этот счётчик обычно увеличивается из-за нехватки памяти

Framework Errors

Не удалось выделить память для сессии L7. Обычно вызывается слишком большим количеством соединений, что приводит к исчерпанию памяти

TCP Handshake Errors

Не удалось установить TCP-сессию из-за таймаута соединения

TCP Handshake RST Errors

Получен пакет TCP RST от клиента на этапе рукопожатия

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

Описание

Requests

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

Responses

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

Parser Errors

Ошибка при парсинге HTTP/HTTPS (например, некорректные заголовки, недопустимые символы, повреждённые данные и т.д.)

No Resources Errors

Не удалось выделить новый mbuf пакета при модификации HTTP-контента при добавлении заголовков или cookies

Request Payload Bytes

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

Response Payload Bytes

Общее количество байт, полученных клиентом от ADC

Счётчики SSL Offload

Описание

Handshakes OK

Количество успешных TLS-рукопожатий между клиентом и ADC

RX Bytes

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

TX Bytes

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

Total Cached Hits

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

Framework Errors

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

Handshake Errors

Ошибка при выполнении TLS-рукопожатия

No Resources Error

Ошибка выделения памяти при обработке TLS-потока (например, дешифрование)

clear vlb access-point type <l4-tcp|l4-udp|l4-dsr-tcp|l4-dsr-udp|tcp|ssl|http|https> ip A.B.C.D/M port <(0-65535)|any> [vrf VRF] [<dp-access-list|counters>]

Очистить статистику Access Point.

Show-команды для L4

show <vlb|vlb6> sessions [FILTER]

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

Фильтр

Ключи

proto:

  • tcp:

    • syn-received

    • established

    • fin-received

    • closing

    • transitory

  • udp

int-ip

  • Для IPv4 — внутренний IP-адрес A.B.C.D

  • Для IPv6 — внутренний IP-адрес X:X::X:X

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

Пример

trafficsoft# show vlb sessions
------------------------------------------------------------------------------------------------------
Protocol  Internal               External               Remote                 Pool
------------------------------------------------------------------------------------------------------
tcp (o)   203.0.113.2:80         203.0.113.2:80         192.168.0.11:49708     -
tcp (o)   203.0.113.2:80         203.0.113.2:80         192.168.0.11:41382     -
tcp (o)   203.0.113.2:80         203.0.113.2:80         192.168.0.11:33306     -
tcp (o)   203.0.113.2:80         203.0.113.2:80         192.168.0.11:33288     -
tcp (o)   203.0.113.2:80         203.0.113.2:80         192.168.0.11:33304     -
------------------------------------------------------------------------------------------------------

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

show <vlb|vlb6> 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}]

Показать все L4-сессии или те, которые соответствуют указанному фильтру.

clear vlb sessions [{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}]

Очистить L4-сессии, соответствующие указанному фильтру.

show <vlb|vlb6> sessions [vrf NAME] STRING...

Показать подробную информацию о L4-сессии по её полному ключу. Ключ можно скопировать из вывода команды show <vlb|vlb6> sessions.

clear <vlb|vlb6> sessions [vrf NAME] STRING...

Очистить указанную L4-сессию по её полному ключу.

show <vlb|vlb6> counters

Показать текущую нагрузку по сессиям и IP-фрагментам.

show <vlb|vlb6> counters protocols

Вывести количество трансляций по протоколам (ICMP, TCP и UDP):

trafficsoft# show vlb6 counters protocols
------------------------------------------------------------------------------------
Counter                 ICMP                TCP                 UDP
------------------------------------------------------------------------------------
Translations Outbound   0                   0                   0
Translations Inbound    0                   0                   0
------------------------------------------------------------------------------------

Где:

  • Translations Outbound — количество трансляций от Worker к клиенту

  • Translations Inbound — количество трансляций от клиента к Worker

Трансляция — это замена IP-адреса и порта Сервиса на IP-адрес и порт Worker для входящих пакетов и наоборот для исходящего трафика.

show <vlb|vlb6> counters [vrf NAME] rate

Показать скорость трансляций (tps — трансляции в секунду), пропускную способность (bps) и создание сессий (sps — сессии в секунду).

show <vlb|vlb6> counters [vrf NAME] overall

Показать все L4-счётчики для IPv4 или IPv6. Эти счётчики накопительные и не показывают текущую нагрузку системы. Ниже приведены некоторые счётчики и их краткое описание:

Счётчик

Описание

Inbound and Outbound Translations

Количество трансляций от Worker к клиенту (outbound) и от клиента к Worker (inbound)

Inbound and Outbound Bytes

Весь трафик через ADC без учёта заголовков Ethernet и VLAN

Inbound and Outbound Fragment Translations

Все IP-фрагменты, полученные из внутренней сети (исходящие) или внешней (входящие)

Inbound and Outbound Fragment Bytes

То же самое, но в байтах

Session Creations

Накопительный счётчик созданных сессий

Unsupported L4 Protocol Drops

Пакет с неподдерживаемым L4-протоколом

No RSS Drops

RSS не учитывался сетевой картой/драйвером

Balance Drops

Нет Worker, на который можно балансировать запросы

TTL Drops

Время жизни пакета истекло, что указывает на петлю в сети или на слишком низкое значение TTL IP-пакета

ACL Drops

Отброс пакета (deny) согласно правилам Access-листа

Fragment Timeout Drops

До прибытия первого фрагмента трансляция невозможна. Фрагменты хранятся в цепочках. Цепочка существует определённое время. Если первый пакет не прибудет в течение указанного интервала, цепочка будет удалена. Интервал по умолчанию — 15 секунд

Fragment Duplicated Drops

Фрагмент дублирует фрагмент, который уже был обработан

Fragment Overlap Drops

Фрагмент пересекается с другим, который уже был обработан

Fragment With Zero Size Drops

IP-фрагмент с нулевой полезной нагрузкой (без данных). Если после разбора IP-заголовка размер полезной нагрузки L4 в пакете составляет 0 байт, пакет будет отброшен, так как это сетевая атака

Fragment Control Queue Too Short Drops

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

TCP No SYN Drops

TCP-пакеты без флага SYN, для которых сессия не была найдена

TCP NULL Flags Drops

TCP-пакеты без каких-либо TCP-флагов

TCP SYN & FIN Drops

Пакеты с установленными флагами TCP SYN и FIN одновременно

TCP XMAS Drops

TCP-пакеты с установленными флагами FIN, URG, PSH одновременно. Такие пакеты являются недопустимыми согласно RFC 793

TCP SYN Fragments Drops

TCP-пакеты SYN, которые являются IP-фрагментами

Счётчики лимитов означают, что была попытка превысить установленный лимит. В этом случае запись/пакет отбрасывается, и счётчик увеличивается на 1. Лимиты:

Счётчик

Описание

Session Entry Limit Drops

Сессии vLB. Глобальное ограничение, задаётся командой <vlb|vlb6> limits sessions (1-536870911) [vrf NAME]

Pending Fragments Limit Drops

Фрагменты, обрабатываемые в данный момент для vLB. Глобальный лимит, задаётся командой <vlb|vlb6> limits pending-fragments (1-536870911) [vrf NAME]

Fragment Chain Limit Drops

Превышено ограничение для цепочки фрагментов

clear <vlb|vlb6> counters [vrf NAME] overall

Очистить все L4-счётчики для IPv4 или IPv6.

Show-команды для L7

show vlb l7 sessions

Показать таблицу L7-сессий.

clear vlb l7 sessions [{ext-ip A.B.C.D/M|ext-port (1-65535)|rem-ip A.B.C.D/M|rem-port (1-65535)}]

Очистить L7-сессии или те, которые соответствуют указанному фильтру.

show vlb tcp sessions [{int-ip A.B.C.D|int-ip A.B.C.D/M|int-port (1-65535)|ext-ip A.B.C.D|ext-ip A.B.C.D/M|ext-port (1-65535)|rem-ip A.B.C.D|rem-ip A.B.C.D/M|rem-port (1-65535)|vrf NAME}]

Показать полную таблицу L7-сессий с необязательной фильтрацией по полям: внутренние/внешние/удалённые IP-адреса, протоколы, порты, пул или VRF. Вывод покажет сессию от клиента до Access Point и сессию от ADC до Worker.

trafficsoft# show vlb tcp sessions
--- global ---
tcp sessions in-use:    4
tcp sessions allocated: cumulative counter of all sessions        7545
tcp sessions released:  cumulative counter of closed sessions 7541
tcp sessions put:       0
--- socket 0 ---
--- tcp task 0 ---
[2173:3] 172.16.2.2:80 -> 100.64.1.41:55797 [CLOSED] [VRF out_servers] left 104.969s
[4270:0] 192.168.0.11:48172 -> 203.0.113.3:443 [ESTABLISHED] [VRF in_clients] left 899.842s
[5107:3] 172.16.2.2:80 -> 100.64.1.41:9170 [ESTABLISHED] [VRF out_servers] left 899.851s
[12840:0] 192.168.0.11:48270 -> 203.0.113.3:80 [CLOSED] [VRF in_clients] left 104.958s

Фильтр

Ключи

tcp sessions in-use

Текущие используемые сессии

tcp sessions allocated

Суммарный счётчик всех открытых сессий

tcp sessions released

Суммарный счётчик всех закрытых сессий

socket 0

На каком сокете происходит обработка сессии

tcp task 0

Какое ядро, предназначенное для обработки сессий, используется для этих сессий

clear vlb tcp sessions [{int-ip A.B.C.D|int-ip A.B.C.D/M|int-port (1-65535)|ext-ip A.B.C.D|ext-ip A.B.C.D/M|ext-port (1-65535)|rem-ip A.B.C.D|rem-ip A.B.C.D/M|rem-port (1-65535)|vrf NAME}]

Очистить все L7-сессии или те, которые соответствуют указанному фильтру.