Проследить пакет TPROXY до сокета
Проверьте принимающий сокет, метку пакета и локальный маршрут политики как единый путь доставки прозрачного прокси.
Счётчик TPROXY может расти, а приложение при этом ничего не получает. Правило совпало, но локальная доставка по-прежнему зависит от маршрутизации по политике и подходящего принимающего сокета.
TPROXY в Linux может перехватывать трафик, не переписывая адрес назначения, как это делает DNAT. Поэтому пакеты, адресованные нелокальному получателю, должны доходить до подходящего локального сокета.
Пройдите по пути доставки
- Трафик приходит на узел перехвата через нужный интерфейс и семейство адресов.
- Правило перехвата и метка пакета задают политику локальной доставки.
- Подходящее правило политики выбирает маршрут, доставляющий пакеты локально.
- Прокси использует поддерживаемый прозрачный прослушиватель с нужным параметром сокета.
Пример IPv4 из ядра требует поддержки IP_TRANSPARENT со стороны приложения. Обычный прослушиватель на том же порту или глобальная настройка нелокального связывания такую поддержку не подтверждают.
| Наблюдение | Следующая проверка |
|---|---|
| Нет подходящих входящих пакетов | Путь трафика и входной интерфейс |
| Пакеты приходят, счётчик перехвата стоит | Семейство адресов, цепочка и условия совпадения |
| Правило совпало, локальная доставка не удаётся | Метка и выбор маршрута политики |
| Сокет слушает, приложение ничего не видит | Возможности прозрачного сокета и владелец прослушивателя |
| Запрос начинается, последующие ответы срываются | Совпадение установленного сокета и обратные маршруты |
Сохраняйте загруженную конфигурацию и сетевое пространство имён вместе с каждым наблюдением. Более позднее правило может перезаписать метку или выбрать другой маршрут. Если перехват идёт на узле, а прослушиватель работает в контейнере, действительный локальный маршрут узла не доставляет автоматически в этот контейнер.
Учтите последующие пакеты
Пример из ядра включает совпадение сокета и путь DIVERT, который помечает пакеты прозрачных сокетов. Если его опустить, последующий трафик может остаться на другом пути даже при успешном первом перехвате.
Используйте поддерживаемый приложением прозрачный режим и соответствующую документацию ядра для каждого семейства адресов. Команда локального маршрута для IPv4 не настраивает IPv6, а поддержка в одном семействе не подтверждает поведение сокета в другом.
TPROXY также не создаёт согласование SOCKS. Компонент перехода от прозрачного к SOCKS всё равно должен обнаружить назначение и договориться со своим вышестоящим сервером.
Переход с REDIRECT
Запишите, как существующее приложение получает исходное назначение. REDIRECT меняет назначение и опирается на подходящий механизм восстановления; TPROXY нужен свой прозрачный сокет и схема маршрутизации. Выбирайте по приложению и политике адреса источника.
Сопоставьте счётчики с выбранным маршрутом, возможностями сокета и журналом приложения, прежде чем менять режим перехвата. В дистрибутиве, где есть нужные средства, отсутствующий шаг доставки — лучшая отправная точка, чем пересборка ядра.