11.4. DSR¶
Обзор¶
DSR (Direct Server Return) — это режим L4-балансировки, в котором ADC задействован только на пути трафика от клиента к Worker:
Клиент -> Worker: трафик передается через ADC.
Worker -> Клиент: ответный трафик отправляется напрямую от Worker к клиенту, минуя ADC.
При пересылке трафика ADC использует IP-in-IP инкапсуляцию. Внутренний (первоначальный) IP-заголовок остается неизменным, поэтому Worker видит реальный IP-адрес клиента и может отправлять ответы напрямую клиенту. ADC добавляет внешний IP-заголовок для доставки пакета выбранному Worker:
Внешний IP-адрес назначения: адрес Worker.
Внешний IP-адрес источника: адрес из настроенного пула источников или IP-адрес клиента, если пул не используется.
Настройка¶
Все команды выполняются внутри Сервиса.
- access-point type <l4-dsr-tcp|l4-dsr-udp> ip A.B.C.D/M port <(0-65535)|any> [vrf VRFNAME] [dp-access-list ACLNAME] [tcp-profile NAME]¶
Создать Access Point с типом
l4-dsr-tcpилиl4-dsr-udpдля IPv4.
- access-point type <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]¶
Создать Access Point с типом
l4-dsr-tcpилиl4-dsr-udpдля IPv6.
В режиме DSR, TCP использует другой набор состояний сессий, чем L4 TCP. Используются следующие состояния:
established|syn-sent|syn-recv|fin-wait|time-wait|close|close-wait|last-ack|listen|syn-ack
Каждое состояние имеет свой таймаут. Если сессия находится в данном состоянии и новые пакеты не поступают через ADC до истечения таймаута, то сессия завершается.
Таймауты настраиваются глобально с помощью следующих команд:
- <vlb|vlb6> timeout dsr-tcp <established|syn-sent|syn-recv|fin-wait|time-wait|close|close-wait|last-ack|listen|syn-ack> (1-604800) [vrf NAME]¶
Задать таймаут для состояния сессии в
dsr-tcp.
- <vlb|vlb6> timeout dsr-udp (1-604800) [vrf NAME]¶
Задать таймаут для состояния сессии в
dsr-udp.
В режиме DSR функциональность drop-entry может использоваться для удаления залипших сессий, чтобы освободить место для новых. Это поведение определяется тремя параметрами: mode, keepalive и threshold.
- <vlb|vlb6> drop-entry mode <disabled|threshold|enabled> [vrf NAME]¶
Параметр
modeимеет следующие значения:disabled:drop-entryотключен.threshold:drop-entryприменяется только к тем бакетам хэш-таблицы сеансов, где количество сеансов, соответствующих условиямdrop-entry, больше или равно установленному значениюthreshold.enabled:drop-entryприменяется ко всем бакетам.
- <vlb|vlb6> drop-entry keepalive (0-60) [vrf NAME]¶
Параметр
keepaliveопределяет таймаут для залипшей сессии, после которого она может быть удалена. Сессия удаляется только тогда, когда в том же бакете появляется новая сессия; удаление происходит с определённой вероятностью. Только сессии в состоянияхsyn-recvиsyn-ackдоступны для удаления, и только если не более 8 пакетов были отправлены в сторону Worker, пока сессия находилась в этих состояниях.
- <vlb|vlb6> drop-entry threshold (0-8) [vrf NAME]¶
Установить порог для режима
drop-entry.
Настройка IP-in-IP туннеля на Worker¶
Приведённые ниже примеры показывают, как настроить туннель IP-in-IP на Worker под управлением Linux для IPv4 и IPv6.
IPv4¶
Чтобы настроить туннель IP-in-IP для IPv4 на Worker, выполните следующие команды в Linux:
sudo ip link add name ipip0 type ipip local 192.168.11.200 remote 100.64.0.1
sudo ip link set ipip0 up
sudo ip addr add 172.16.0.1/24 dev ipip0
Где:
192.168.11.200— это адрес Worker.100.64.0.1— это адрес из пула источников на ADC.172.16.0.1— это адрес Access Point на ADC.
Примечание
Убедитесь, что сетевой путь и любые межсетевые экраны на хостах разрешают инкапсулированный трафик, иначе пакеты туннеля могут быть отброшены, не дойдя до Worker.
IPv6¶
Для настройки IPv6-туннеля (ip6tnl) на Worker, выполните следующие команды:
sudo ip link add name ipip1 type ip6tnl local fd07:10:10:11::1 remote fd07:10:10:10::1
sudo ip link set ipip1 up
sudo ip -6 addr add fd07:10:10:12::3/128 dev ipip1
Где:
fd07:10:10:11::1— это адрес Worker.fd07:10:10:10::1— это адрес клиента. В режиме IPv6 пул источников не используется.fd07:10:10:12::3— это адрес Access Point на ADC.
Примечание
Если ADC использует адрес клиента в качестве внешнего исходного адреса (без пула источников), то адрес источника туннеля может различаться для каждого клиента. В этом случае настройте туннель без указания конкретного remote-адреса (например, не указывайте ключ remote или используйте remote any), чтобы Worker мог принимать инкапсулированные пакеты от нескольких клиентов.
Show-команды¶
- show vlb access-point type <l4-dsr-tcp|l4-dsr-udp> ip A.B.C.D/M port <(0-65535)|any> [vrf VRF] [<dp-access-list|counters>]¶
Показать статистику для указанного Access Point.
ADC# show vlb access-point type l4-dsr-tcp ip 172.16.0.1/32 port 443 counters Total Connections: 0 Active Connections: 0 Dead Connections: 0 Application Errors: 0 Framework Errors: 0 TCP Handshake Errors: 0 TCP Handshake RST Errors: 0 Content switch rules: default-target-group tg1 (0 hits)
Счётчики
Описание
Total ConnectionsОбщее количество соединений между клиентом и ADC за всё время
Active ConnectionsКоличество текущих активных соединений
Dead ConnectionsОбщее число закрытых соединений за всё время
Application ErrorsПроизошла ошибка при инициализации сессии L7 на уровне TCP/HTTP/HTTPS. Этот счётчик обычно увеличивается из-за нехватки памяти. Для DSR этот счётчик всегда равен 0
Framework ErrorsНе удалось выделить память для сессии L7. Обычно вызывается большим количеством соединений, приводящих к исчерпанию памяти. Для DSR этот счётчик всегда равен 0
TCP Handshake ErrorsНе удалось установить TCP-сессию из-за таймаута соединения
TCP Handshake RST ErrorsПолучен пакет TCP RST от клиента на этапе рукопожатия