Настройка IP Transparency
Введение
В обычном режиме работы балансировщик открывает соединение к бэкенду от своего имени: бэкенд видит IP‑адрес балансировщика, а не реального клиента. Это может быть проблемой, если бэкенду необходима информация об источнике запроса – для аутентификации, geo‑фильтрации, логирования, аналитики, A/B-тестирования или whitelist/blacklist по IP.
IP Transparency (прозрачный режим) решает эту задачу: балансировщик подменяет исходный IP‑адрес (source IP) в пакетах, идущих к бэкенду, на адрес реального клиента. С точки зрения прикладного ПО на бэкенде соединение выглядит как прямое – становятся доступны реальные IP клиентов.
Режим IP Transparency работает для протоколов TCP и UDP как на уровне L4 (балансировка по портам), так и на уровне L7 (HTTP/HTTPS/gRPC).
Как это работает
Технически балансировщик системы 5А выполняет три задачи:
-
Подмена source IP – в IP-заголовке исходящего пакета, направляемого на бэкенд, вместо своего адреса подставляется IP-адрес реального клиента. Для этого в конфигурацию NGINX автоматически добавляется директива
proxy_bind $remote_addr transparent. -
Обеспечение возврата трафика – бэкенд отвечает на IP клиента. Чтобы ответные пакеты попали обратно на балансировщик, на каждом бэкенде администратор инфраструктуры должен вручную настроить default gateway, указывающий на балансировщик (или на VIP кластера). Балансировщик не может автоматизировать эту настройку, так как бэкенды находятся вне его зоны управления.
-
Приём «чужих» пакетов на балансировщике – по умолчанию ядро ОС отбрасывает пакеты, адрес получателя которых не принадлежит самому балансировщику. Для корректной обработки возвратного трафика на каждом сетевом агенте автоматически создаются:
- таблица
nftablesс именемtransparency, содержащая наборы адресов бэкендов и правила маркировки; - правило маршрутизации (
ip rule) для пакетов с меткойfwmark 1, направляющее их в таблицу маршрутизации 100; - маршрут в таблице 100:
local default dev lo.
- таблица
Всё это создаётся при старте агента и существует постоянно; при включении/выключении IP Transparency для конкретного сервиса обновляются только наборы transparent_endpoints в nftables.
Включение IP Transparency
Включение прозрачного режима выполняется в настройках конфигурации балансировки:
- Откройте нужный кластер балансировки.
- Перейдите в раздел Конфигурации балансировки.
- Создайте новую или отредактируйте существующую конфигурацию.
- На вкладке Сервисы найдите блок Исходящий трафик.
- В поле Режим трансляции адресов выберите значение Прозрачный IP.
- Прозрачный IP (IP Transparency) – при выборе этого режима балансировщик автоматически настраивает подмену source IP на адрес реального клиента.
Включение IP Transparency не изменяет настройки маршрутизации на самих бэкендах – это действие остаётся за администратором инфраструктуры. Без правильно настроенного default gateway прозрачный режим работать не будет.
Настройка на бэкендах
Обязательное действие, выполняемое вне продукта – обеспечить, чтобы ответный трафик от бэкендов достигал балансировщика.
- Default gateway – на каждом бэкенде, обслуживающем трафик с включённой IP Transparency, пропишите
default gateway, указывающий на IP‑адрес балансировщика (или на VIP кластера).
# Пример для одного бэкенда:
ip route del default
ip route add default via 10.0.0.10 # IP балансировщика или VIPЕсли бэкенды и балансировщик находятся в разных L2-сегментах, убедитесь, что все промежуточные маршрутизаторы также направляют ответные пакеты к балансировщику (например, с помощью статических маршрутов). Бэкенд не должен иметь прямого L3-пути к клиенту в обход балансировщика.
Особенности при отказоустойчивости
VRRP (Active-Passive) – Рекомендуемая схема
При использовании VRRP для отказоустойчивости GSLB-кластера схема работы IP Transparency надёжна и проста:
- Клиенты обращаются на общий VIP (виртуальный IP).
- Бэкенды используют этот же VIP как
default gateway. - Весь трафик – и входящий от клиентов, и ответный с бэкендов – проходит через один и тот же физический узел, который в данный момент является MASTER.
- Балансировщик видит оба направления сессии, таблица соединений (
conntrack) работает корректно, IP клиента сохраняется.
BGP (Active-Active) – Не рекомендуется
При использовании BGP в режиме Active-Active возникает проблема асимметричного роутинга:
- Входящий трафик от клиента распределяется между балансировщиками (LB-A и LB-B) на основе хеша от параметров соединения (например, по src IP, dst IP, src port, dst port).
- Запрос попадает на LB-A. Балансировщик фиксирует сессию у себя и передаёт пакет на бэкенд.
- Бэкенд формирует ответ и отправляет его в сеть. Маршрутизатор вычисляет хеш для обратного пакета – но src и dst поменялись местами, поэтому хеш может получиться другим.
- Ответный пакет уходит на LB-B, у которого нет информации об этой сессии, и пакет отбрасывается. Соединение разрывается непредсказуемо.
Рекомендация: Не используйте IP Transparency совместно с BGP в режиме Active-Active. Стабильная работа не гарантирована. Если такая конфигурация необходима, требуется настройка симметричного хеширования на всех upstream-маршрутизаторах (fib_multipath_hash_policy=0 для IPv4), что не всегда возможно и не решает проблему полностью.
Мониторинг и проверка
После включения опции и настройки маршрутизации на бэкендах выполните проверки.
На балансировщике
-
Убедитесь, что таблица
nftablestransparencyсуществует и содержит правила:sudo nft list table ip transparencyДолжны быть видны цепочки
output,preroutingи наборtransparent_endpoints. -
Проверьте, что набор
transparent_endpointsне пуст (в нём перечислены IP и порты бэкендов, для которых включён прозрачный режим):sudo nft list set ip transparency transparent_endpoints -
Проверьте наличие правила маршрутизации
fwmark 1:ip rule show | grep "fwmark 0x1"Ожидаемый вывод:
999: from all fwmark 0x1 lookup 100 -
Проверьте таблицу маршрутизации 100:
ip route show table 100Ожидаемый вывод:
local default dev lo scope host -
При наличии активных соединений проверьте, что они помечены (
mark=1):sudo conntrack -L -m 1 -p tcp 2>/dev/null | head
На бэкенде
- Проверьте логи доступа приложения (например, access.log NGINX): в них должен отображаться реальный IP клиента.
- Если приложение не логирует IP, используйте
tcpdump:В выводе должны присутствовать пакеты с source IP реального клиента.sudo tcpdump -i any -n 'tcp port <порт_бэкенда>' | head -5
Отключение IP Transparency
Чтобы выключить прозрачный режим:
- Откройте конфигурацию балансировки в кластере.
- На вкладке Сервисы в блоке Исходящий трафик выберите другой режим трансляции адресов (например, «Автоматически» или «SNAT группы»).
- Сохраните изменения.
Система удалит из набора transparent_endpoints в nftables соответствующие пары (IP бэкенда, порт). Однако сама таблица transparency, правила маршрутизации (ip rule fwmark 1) и таблица 100 останутся на агентах – они создаются при запуске агента и существуют постоянно. Это не влияет на работу других сервисов.
Параметры прозрачного трафика
Агент создаёт таблицу nftables, правило ip rule и маршрут в отдельной таблице маршрутизации при старте — до того, как прозрачный режим включён в конфигурации балансировки. Значения по умолчанию рассчитаны на хост, где эти механизмы больше никто не использует.
Если на хосте уже есть свои правила с меткой fwmark 1 или своя таблица маршрутизации 100, задайте другие значения в файле конфигурации агента /etc/5a/agent.yml, см. Файл конфигурации агента.
net.transparency.table-name— имя таблицыnftables, по умолчаниюtransparency. Должно отличаться от имён таблиц, созданных другими компонентами.net.transparency.mark— меткаfwmark, которой помечается возвращаемый трафик, по умолчанию1. Значение0недопустимо.net.transparency.routing-table— номер таблицы маршрутизации, по умолчанию100. Нельзя использовать номера0,253,254и255.net.transparency.rule-priority— приоритет правилаip rule, по умолчанию999. Допустимый диапазон — от1до32765.
net:
transparency:
table-name: my-transparency
mark: 2
routing-table: 150
rule-priority: 950Важно: агент не запустится, если значение параметра выходит за допустимый диапазон. Перед перезапуском проверьте значения: ошибка загрузки файла будет записана в журнал службы.
После перезапуска службы повторите проверки из раздела Мониторинг и проверка. В выводе ip rule show должны быть указаны новая метка и новый приоритет, а в выводе ip route show table <номер таблицы> — local default dev lo scope host. Название таблицы nftables в командах проверки замените на заданное вами.
Ограничения и рекомендации
- Требование к бэкендам – каждый бэкенд обязательно должен иметь default gateway, указывающий на балансировщик или VIP кластера. Без этого ответные пакеты не вернутся, и соединение разорвётся. Эта настройка выполняется администратором вручную.
- Альтернативные методы передачи IP – Для протокола HTTP/HTTPS существуют заголовок
X-Forwarded-For. Для TCP (без HTTP) – PROXY protocol. IP Transparency применяется для случаев, когда эти методы недоступны или требуется полная прозрачность на уровне IP. - Совместимость с Proxy Protocol – Не рекомендуется включать IP Transparency и PROXY protocol одновременно на одном сервисе.
- Отказоустойчивость – IP Transparency стабильно работает с VRRP (Active-Passive). Совместное использование с BGP (Active-Active) приводит к асимметричному роутингу и разрывам соединений.
- Сетевые требования – Бэкенды должны находиться в отдельной L2-сети/VLAN от клиентов, а балансировщик должен иметь интерфейс в этой сети. Бэкенды не должны иметь прямого L3-пути к клиентам в обход балансировщика.
- Производительность – Подмена source IP и обработка возвратных пакетов добавляет небольшую дополнительную нагрузку. При очень высоких нагрузках рекомендуется тестирование.
- Облачные среды – В облачных платформах перед включением IP Transparency проконсультируйтесь со службой поддержки, так как могут быть ограничения на приём «чужих» IP и на маршрутизацию.
Краткий чек-лист для администратора
Перед включением IP Transparency
- На всех бэкендах настроен default gateway - IP балансировщика или VIP кластера.
- На балансировщике для интерфейса в бэкенд-сети установлен
rp_filter=2(loose mode). - Бэкенды находятся в отдельной сети/VLAN, не имеют прямого маршрута к клиентам.
- При использовании VRRP бэкенды используют в качестве шлюза тот же VIP, что и клиенты.
- При использовании BGP (не рекомендуется) – администратор сам отвечает за настройку симметричного хеширования на роутерах.
После включения
- На балансировщике:
nft list table ip transparencyпоказывает правила. - На балансировщике:
conntrack -L -m 1показывает помеченные соединения (при активной нагрузке). - На бэкенде: логи или
tcpdumpпоказывают реальный IP клиента.