Простежити пакет TPROXY до сокета
Перевірте приймальний сокет, мітку пакета й локальний маршрут політики як єдиний шлях доставки прозорого проксі.
Лічильник TPROXY може зростати, а застосунок при цьому нічого не отримує. Правило збіглося, але локальна доставка досі залежить від маршрутизації за політикою та придатного приймального сокета.
TPROXY у Linux може перехоплювати трафік, не переписуючи адресу призначення, як це робить DNAT. Тому пакети, адресовані нелокальному призначенню, мають доходити до відповідного локального сокета.
Пройдіть шляхом доставки
- Трафік надходить на вузол перехоплення через потрібний інтерфейс і родину адрес.
- Правило перехоплення й мітка пакета визначають політику локальної доставки.
- Відповідне правило політики обирає маршрут, що доставляє пакети локально.
- Проксі використовує підтримуваний прозорий слухач із потрібним параметром сокета.
Приклад IPv4 у ядрі потребує підтримки IP_TRANSPARENT з боку застосунку. Звичайний слухач на тому ж порту або глобальне налаштування нелокального зв'язування такої підтримки не доводять.
| Спостереження | Наступна перевірка |
|---|---|
| Немає доречних вхідних пакетів | Шлях трафіку й вхідний інтерфейс |
| Пакети надходять; лічильник перехоплення стоїть | Родина адрес, ланцюжок і умови збігу |
| Правило збігається; локальна доставка не вдається | Мітка й вибір маршруту політики |
| Сокет слухає; застосунок нічого не бачить | Можливості прозорого сокета й власник слухача |
| Запит починається; подальші відповіді зриваються | Збіг встановленого сокета й зворотні маршрути |
Зберігайте завантажену конфігурацію й мережевий простір імен разом із кожним спостереженням. Пізніше правило може перезаписати мітку або вибрати інший маршрут. Якщо перехоплення відбувається на вузлі, а слухач працює в контейнері, чинний локальний маршрут вузла не доставляє автоматично в цей контейнер.
Врахуйте подальші пакети
Приклад ядра містить збіг сокета й шлях DIVERT, що позначає пакети прозорих сокетів. Якщо його пропустити, подальший трафік може залишитися на іншому шляху навіть за успішного першого перехоплення.
Використовуйте підтримуваний застосунком прозорий режим і відповідну документацію ядра для кожної родини адрес. Команда локального маршруту для IPv4 не налаштовує IPv6, а підтримка в одній родині не доводить поведінку сокета в іншій.
TPROXY також не створює узгодження SOCKS. Компонент переходу від прозорого до SOCKS усе одно має виявити призначення й домовитися зі своїм вищим сервером.
Перехід із REDIRECT
Запишіть, як наявний застосунок отримує початкове призначення. REDIRECT змінює призначення й покладається на відповідний механізм відновлення; TPROXY потребує власного прозорого сокета й схеми маршрутизації. Обирайте за застосунком і політикою адреси джерела.
Зіставте лічильники з обраним маршрутом, можливостями сокета й журналом застосунку, перш ніж змінювати режим перехоплення. У дистрибутиві, де є потрібні засоби, відсутній крок доставки — краща відправна точка, ніж перезбирання ядра.