Как мне отправить весь TCP и UDP трафик через tproxy, не создавая петлю?

Вопрос или проблема

Я запускаю свой прокси-клиент на том же компьютере с Linux, на котором я использую соединение. В настройках я могу указать, чтобы он использовал tproxy для порта 2500. Прокси работает на порту 443, используя TLS (хотя эту часть прокси берет на себя).

Поэтому мне нужно использовать iptables или nftables, чтобы направить все пакеты к прокси. Но мне также нужно их пометить, чтобы не создать петлю.

Мои первоначальные попытки не увенчались успехом, похоже, что мои UDP-пакеты не проходят (я за NAT, но не знаю, является ли это проблемой, так как я все равно использую прокси). Я хотел бы понять, как это работает лучше, чтобы смочь отладить это сам.

(Мне также может понадобиться включить ip_forwarding)

Ответ или решение

Для организации проксирования всех TCP и UDP-трафиков через TProxy на одном и том же сервере, необходимо правильно настроить iptables или nftables и управлять метками для предотвращения зацикливания трафика. Давайте подробнее рассмотрим шаги, которые вам следует предпринять, и возможные проблемы.

1. Настройка iptables или nftables

Для начала, убедитесь, что у вас есть необходимые права (root) для выполнения данных команд.

Шаг 1: Установка TPROXY

Прежде чем продолжить, убедитесь, что у вас установлен TProxy. Для этого может потребоваться установить или скомпилировать соответствующее ядро Linux с поддержкой TProxy.

Шаг 2: Конфигурация iptables

Если вы используете iptables, настройка будет выглядеть следующим образом:

# Отключаем натирование для трафика, который мы будем проксировать.
iptables -t mangle -N DIVERT

# Если пакет имеет метку (то есть уже был обработан нашим прокси), отправляем его на TPROXY.
iptables -t mangle -A DIVERT -m mark --mark 0x1 -j TPROXY --on-port 2500 --tproxy-mark 0x1/0x1

# Если это не метка, отправляем его в DIVERT.
iptables -t mangle -A OUTPUT -p tcp -j DIVERT
iptables -t mangle -A OUTPUT -p udp -j DIVERT

# Устанавливаем метку для трафика.
iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -p udp -j MARK --set-mark 0x1

Шаг 3: Включение ip_forwarding

Если ваш прокси-клиент работает на одной машине, возможно, IP-маршрутизация (ip forwarding) вам не требуется, но для проверки вы можете включить IP-forwarding для тестирования:

echo 1 > /proc/sys/net/ipv4/ip_forward

2. Проверка трафика

Шаг 1: Использование tcpdump

Для диагностики проблемы, вы можете использовать tcpdump для отслеживания пакетов, и убедиться, что они проходят через ваш прокси:

tcpdump -i lo -n port 2500

Шаг 2: Проверка конфигурации NAT

Если вы находитесь за NAT, убедитесь, что проброшены нужные порты на ваш прокси-сервер. Это может повлиять на UDP-трафик. Возможно, вам нужно будет протестировать проксирование, отключив NAT.

3. Основные моменты

  • Важно: Не забудьте правильно объяснить вашему прокси-серверу, что он работает через TProxy. Это можно сделать в конфигурации прокси.

  • Логи: Проверьте логи вашего прокси-сервера и iptables на наличие ошибок, которые могут указать на проблемы в конфигурации.

  • Тестирование: После того как настройки будут выполнены, протестируйте, использовав различные утилиты (например, curl, ping, traceroute).

Заключение

Настройка проксирования через TProxy требует тщательной конфигурации iptables и правильного управления метками, чтобы избежать зацикления пакетов. Следуя описанным шагам, вы сможете настроить проксирование для TCP и UDP трафика, а также провести диагностику для выявления возможных проблем. Убедитесь, что у вас есть необходимые права доступа и ваш сервер имеет соответствующую настройку оборудования и программного обеспечения.

Оцените материал
Добавить комментарий

Капча загружается...