Лічильник TPROXY може зростати, а застосунок при цьому нічого не отримує. Правило збіглося, але локальна доставка досі залежить від маршрутизації за політикою та придатного приймального сокета.

TPROXY у Linux може перехоплювати трафік, не переписуючи адресу призначення, як це робить DNAT. Тому пакети, адресовані нелокальному призначенню, мають доходити до відповідного локального сокета.

Пройдіть шляхом доставки

  1. Трафік надходить на вузол перехоплення через потрібний інтерфейс і родину адрес.
  2. Правило перехоплення й мітка пакета визначають політику локальної доставки.
  3. Відповідне правило політики обирає маршрут, що доставляє пакети локально.
  4. Проксі використовує підтримуваний прозорий слухач із потрібним параметром сокета.

Приклад IPv4 у ядрі потребує підтримки IP_TRANSPARENT з боку застосунку. Звичайний слухач на тому ж порту або глобальне налаштування нелокального зв'язування такої підтримки не доводять.

СпостереженняНаступна перевірка
Немає доречних вхідних пакетівШлях трафіку й вхідний інтерфейс
Пакети надходять; лічильник перехоплення стоїтьРодина адрес, ланцюжок і умови збігу
Правило збігається; локальна доставка не вдаєтьсяМітка й вибір маршруту політики
Сокет слухає; застосунок нічого не бачитьМожливості прозорого сокета й власник слухача
Запит починається; подальші відповіді зриваютьсяЗбіг встановленого сокета й зворотні маршрути

Зберігайте завантажену конфігурацію й мережевий простір імен разом із кожним спостереженням. Пізніше правило може перезаписати мітку або вибрати інший маршрут. Якщо перехоплення відбувається на вузлі, а слухач працює в контейнері, чинний локальний маршрут вузла не доставляє автоматично в цей контейнер.

Врахуйте подальші пакети

Приклад ядра містить збіг сокета й шлях DIVERT, що позначає пакети прозорих сокетів. Якщо його пропустити, подальший трафік може залишитися на іншому шляху навіть за успішного першого перехоплення.

Використовуйте підтримуваний застосунком прозорий режим і відповідну документацію ядра для кожної родини адрес. Команда локального маршруту для IPv4 не налаштовує IPv6, а підтримка в одній родині не доводить поведінку сокета в іншій.

TPROXY також не створює узгодження SOCKS. Компонент переходу від прозорого до SOCKS усе одно має виявити призначення й домовитися зі своїм вищим сервером.

Перехід із REDIRECT

Запишіть, як наявний застосунок отримує початкове призначення. REDIRECT змінює призначення й покладається на відповідний механізм відновлення; TPROXY потребує власного прозорого сокета й схеми маршрутизації. Обирайте за застосунком і політикою адреси джерела.

Зіставте лічильники з обраним маршрутом, можливостями сокета й журналом застосунку, перш ніж змінювати режим перехоплення. У дистрибутиві, де є потрібні засоби, відсутній крок доставки — краща відправна точка, ніж перезбирання ядра.

Схожі статті