Назад к блогу

Прозрачный прокси на роутере OpenWrt через TPROXY: полная настройка для всей сети

Настройка прозрачного прокси через TPROXY на OpenWrt позволяет пустить весь трафик сети через прокси-сервер без ручной настройки на каждом устройстве.

📅6 июня 2026 г.

Если вы хотите, чтобы весь трафик вашей сети проходил через прокси — без ручной настройки на каждом ноутбуке, смартфоне или сервере — прозрачный прокси на роутере OpenWrt через механизм TPROXY именно то, что нужно. В этом руководстве разберём полную конфигурацию: от установки необходимых пакетов до правил iptables и проверки работы.

Что такое TPROXY и зачем он нужен

TPROXY (Transparent Proxy) — это механизм ядра Linux, позволяющий перехватывать TCP и UDP-трафик без изменения IP-адреса назначения в пакете. В отличие от классического NAT-редиректа (REDIRECT), TPROXY сохраняет оригинальный адрес получателя, что критически важно для корректной работы прокси-клиента: он «видит», куда именно пытается подключиться устройство в сети.

Зачем это нужно на практике? Представьте: у вас офис или домашняя лаборатория с десятками устройств — компьютеры, смартфоны, IoT-устройства, тестовые виртуальные машины. Настраивать прокси вручную на каждом из них — это часы работы и постоянная головная боль при смене прокси-сервера. Прозрачный прокси на роутере решает задачу централизованно: весь трафик сети автоматически уходит через прокси, а устройства об этом даже не подозревают.

Типичные сценарии применения TPROXY на OpenWrt:

  • Маршрутизация всего трафика через резидентные или мобильные прокси для обхода гео-блокировок
  • Централизованный мониторинг и фильтрация трафика в корпоративной сети
  • Тестирование приложений через прокси из разных регионов без изменения настроек на клиентских машинах
  • Автоматическая подмена IP для всех устройств, подключённых к роутеру
  • Работа с антидетект-браузерами (Dolphin Anty, AdsPower, GoLogin) через единый шлюз

Ключевое преимущество TPROXY перед обычным REDIRECT: поддержка UDP. Это важно для современных протоколов (QUIC, DNS over UDP, игровой трафик), которые REDIRECT просто не умеет обрабатывать корректно.

Как работает прозрачный прокси в OpenWrt

Схема работы TPROXY на OpenWrt выглядит следующим образом:

  1. Устройство в сети отправляет пакет на внешний IP-адрес (например, 93.184.216.34:443).
  2. Роутер перехватывает пакет правилом iptables TPROXY ещё в цепочке PREROUTING — до принятия решения о маршрутизации.
  3. Пакет помечается специальным fwmark и перенаправляется в локальный сокет прокси-клиента (например, на порт 7893).
  4. Прокси-клиент (redsocks, Xray, sing-box) «видит» оригинальный адрес назначения через механизм IP_TRANSPARENT и устанавливает соединение через удалённый прокси-сервер.
  5. Ответ возвращается обратно устройству — прозрачно, без каких-либо изменений на стороне клиента.

💡 Важный момент

TPROXY работает только в цепочке PREROUTING таблицы mangle. Это означает, что перехватывается только транзитный трафик (от устройств сети), но не трафик самого роутера. Для перехвата трафика роутера потребуется дополнительная настройка через OUTPUT и маршрутизацию через loopback.

Требования: роутер, прошивка, пакеты

Прежде чем приступать к настройке, убедитесь, что ваша конфигурация соответствует минимальным требованиям.

Требования к роутеру

Параметр Минимум Рекомендуется
RAM 64 МБ 256 МБ и более
Flash / Storage 16 МБ 128 МБ и более
Архитектура CPU MIPS, ARM ARM Cortex-A7/A53 и выше
Версия OpenWrt 21.02 23.05 или snapshot
Ядро Linux 5.4 с TPROXY 5.15 / 6.1

Хорошо зарекомендовавшие себя модели для этой задачи: GL.iNet GL-MT6000 (Flint 2), Xiaomi AX3000T, Banana Pi BPi-R3, Raspberry Pi 4 с OpenWrt, а также любой x86-роутер с достаточным объёмом RAM.

Проверка поддержки TPROXY в ядре

Подключитесь к роутеру по SSH и выполните:

zcat /proc/config.gz | grep TPROXY

Вы должны увидеть строку CONFIG_NETFILTER_XT_TARGET_TPROXY=y или =m. Если вывод пустой — ядро не поддерживает TPROXY и потребуется перекомпиляция или смена прошивки.

Установка необходимых пакетов

Для работы TPROXY на OpenWrt потребуется несколько пакетов. Подключитесь по SSH и обновите список пакетов:

opkg update

Установите необходимые компоненты:

# Модуль ядра для TPROXY
opkg install kmod-nft-tproxy

# Если используете iptables (старый стек)
opkg install iptables-mod-tproxy

# ip rule / ip route утилиты
opkg install ip-full

# Дополнительно для работы с fwmark
opkg install kmod-ipt-tproxy

В зависимости от выбранного прокси-клиента установите один из следующих пакетов:

Прокси-клиент Пакет OpenWrt Поддержка TPROXY
redsocks redsocks TCP (UDP через redsocks2)
Xray-core xray-core TCP + UDP (нативно)
sing-box sing-box TCP + UDP (нативно)
mihomo (Clash Meta) mihomo TCP + UDP (нативно)

Для большинства задач рекомендуем sing-box или mihomo — они поддерживают TPROXY нативно, включая UDP, и имеют удобный формат конфигурации.

Настройка правил iptables и ip rule

Это ключевой этап. Нам нужно сделать три вещи: пометить нужные пакеты fwmark, настроить специальную таблицу маршрутизации, и добавить правило TPROXY в iptables.

Шаг 1: Создаём таблицу маршрутизации

# Добавляем специальный маршрут: помеченные пакеты идут на loopback
ip rule add fwmark 1 table 100
ip route add local default dev lo table 100

Это говорит ядру: «все пакеты с меткой fwmark=1 считай локальными и доставляй на loopback». Именно так прокси-клиент получит возможность принять их через свой сокет.

Шаг 2: Правила iptables (mangle/PREROUTING)

# Создаём цепочку для TPROXY
iptables -t mangle -N TPROXY_RULES

# Исключаем локальные адреса (не проксируем их)
iptables -t mangle -A TPROXY_RULES -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A TPROXY_RULES -d 240.0.0.0/4 -j RETURN

# Перенаправляем TCP на порт прокси-клиента (7893)
iptables -t mangle -A TPROXY_RULES -p tcp \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

# Перенаправляем UDP на порт прокси-клиента (7893)
iptables -t mangle -A TPROXY_RULES -p udp \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

# Применяем цепочку к транзитному трафику
iptables -t mangle -A PREROUTING -j TPROXY_RULES

📌 Порт 7893

Порт 7893 — это порт, на котором прокси-клиент (sing-box, mihomo, Xray) слушает в режиме tproxy. Убедитесь, что он совпадает с настройками вашего клиента.

Шаг 3: Сохранение правил при перезагрузке

Создайте скрипт автозапуска в /etc/init.d/tproxy или добавьте команды в /etc/rc.local. Для OpenWrt 23.05 с nftables вместо iptables используйте аналогичные правила в синтаксисе nft:

nft add table ip tproxy_table
nft add chain ip tproxy_table prerouting \
  '{ type filter hook prerouting priority mangle; policy accept; }'
nft add rule ip tproxy_table prerouting \
  ip daddr { 10.0.0.0/8, 127.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } return
nft add rule ip tproxy_table prerouting \
  tcp tproxy to 127.0.0.1:7893 meta mark set 1
nft add rule ip tproxy_table prerouting \
  udp tproxy to 127.0.0.1:7893 meta mark set 1

Конфигурация прокси-клиента: redsocks, Xray, sing-box

Прокси-клиент на роутере — это программа, которая принимает перехваченный трафик и отправляет его через удалённый прокси-сервер. Рассмотрим конфигурацию для наиболее популярных вариантов.

Вариант 1: redsocks (простой, только TCP)

Подходит для базовых задач с SOCKS5-прокси. Конфигурационный файл /etc/redsocks.conf:

base {
    log_debug = off;
    log_info = on;
    log = "file:/var/log/redsocks.log";
    daemon = on;
    redirector = tproxy;
}

redsocks {
    local_ip = 127.0.0.1;
    local_port = 7893;

    // Адрес вашего SOCKS5-прокси
    ip = 185.220.101.50;
    port = 1080;
    type = socks5;

    // Если прокси требует авторизацию:
    login = "your_login";
    password = "your_password";
}

Вариант 2: sing-box (рекомендуется — TCP + UDP)

sing-box поддерживает TPROXY нативно и работает с большинством типов прокси: SOCKS5, HTTP, Shadowsocks, VLESS, Trojan. Пример конфигурации /etc/sing-box/config.json:

{
  "inbounds": [
    {
      "type": "tproxy",
      "listen": "127.0.0.1",
      "listen_port": 7893,
      "tcp_fast_open": false,
      "udp_fragment": true,
      "sniff": true
    }
  ],
  "outbounds": [
    {
      "type": "socks",
      "tag": "proxy-out",
      "server": "185.220.101.50",
      "server_port": 1080,
      "version": "5",
      "username": "your_login",
      "password": "your_password"
    },
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "rules": [
      {
        "geoip": ["private"],
        "outbound": "direct"
      }
    ],
    "final": "proxy-out"
  }
}

Запустите sing-box и добавьте в автозагрузку:

/etc/init.d/sing-box enable
/etc/init.d/sing-box start

Вариант 3: mihomo / Clash Meta

mihomo — форк Clash с расширенными возможностями. В секции tproxy-port укажите порт для перехвата:

mixed-port: 7890
tproxy-port: 7893
allow-lan: false
mode: rule
log-level: info

proxies:
  - name: "my-socks5"
    type: socks5
    server: 185.220.101.50
    port: 1080
    username: your_login
    password: your_password
    udp: true

proxy-groups:
  - name: "PROXY"
    type: select
    proxies:
      - my-socks5

rules:
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - MATCH,PROXY

Защита от DNS-утечек

Прозрачный прокси без правильной настройки DNS — это серьёзная уязвимость. Если DNS-запросы уходят напрямую через провайдера, а не через прокси, реальное местоположение раскрывается, несмотря на подмену IP. Это критично для задач, где важна анонимность или гео-подмена.

Способ 1: Перехват DNS через TPROXY

Добавьте правило для перехвата UDP-трафика на порт 53:

# Перехватываем DNS-запросы от устройств сети
iptables -t mangle -A TPROXY_RULES -p udp --dport 53 \
  -j TPROXY --on-port 7893 --on-ip 127.0.0.1 --tproxy-mark 1

Способ 2: DNS через sing-box / mihomo

sing-box и mihomo умеют самостоятельно обрабатывать DNS-запросы и отправлять их через прокси. В конфиге sing-box добавьте секцию DNS:

"dns": {
  "servers": [
    {
      "tag": "remote",
      "address": "8.8.8.8",
      "detour": "proxy-out"
    },
    {
      "tag": "local",
      "address": "192.168.1.1",
      "detour": "direct"
    }
  ],
  "rules": [
    {
      "geoip": ["private"],
      "server": "local"
    }
  ],
  "final": "remote",
  "independent_cache": true
}

Способ 3: dnsmasq с upstream через прокси

Если вы не используете sing-box/mihomo, настройте dnsmasq (стандартный DNS-сервер OpenWrt) так, чтобы он форвардил запросы на зашифрованный DNS-сервер. В файле /etc/dnsmasq.conf:

# Отключаем использование DNS от провайдера
no-resolv

# Используем DoH/DoT через локальный резолвер
server=127.0.0.1#5335

# Запрещаем устройствам использовать внешний DNS напрямую
# (правило iptables для блокировки прямых DNS-запросов)
# iptables -t nat -A PREROUTING -p udp --dport 53 ! -d 192.168.1.1 -j DNAT --to 192.168.1.1

Проверка и отладка

После настройки обязательно проверьте корректность работы прозрачного прокси. Вот пошаговый чек-лист.

Шаг 1: Проверка правил iptables

# Смотрим цепочку TPROXY_RULES
iptables -t mangle -L TPROXY_RULES -v -n

# Проверяем таблицу маршрутизации 100
ip rule show
ip route show table 100

Шаг 2: Проверка, что прокси-клиент слушает порт

ss -tlnp | grep 7893
# или
netstat -tlnp | grep 7893

Вы должны увидеть процесс sing-box, mihomo или redsocks, слушающий на 127.0.0.1:7893.

Шаг 3: Проверка IP с клиентского устройства

Подключитесь к роутеру с любого устройства в сети и откройте в браузере ifconfig.me или 2ip.ru. Отображаемый IP должен совпадать с IP вашего прокси-сервера, а не с реальным IP провайдера.

Шаг 4: Проверка DNS-утечек

Перейдите на dnsleaktest.com и выполните расширенный тест. DNS-серверы в результатах должны принадлежать вашему прокси-провайдеру или выбранному DoH-серверу, но не вашему интернет-провайдеру.

Типичные проблемы и их решения

Симптом Причина Решение
Интернет не работает совсем Прокси-клиент не запущен Проверьте статус службы, логи клиента
IP не меняется Правила iptables не применились Проверьте iptables -t mangle -L -v
UDP не работает redsocks не поддерживает UDP Переключитесь на sing-box или mihomo
Петля маршрутизации Трафик прокси-клиента тоже перехватывается Исключите UID или cgroup прокси-клиента из правил
Ошибка TPROXY target Модуль ядра не загружен modprobe xt_TPROXY

Какой тип прокси подходит для TPROXY на OpenWrt

Выбор типа прокси критически влияет на результат. Для прозрачного прокси на роутере подходят не все варианты — важно учитывать протокол, стабильность соединения и задачу.

SOCKS5-прокси

Наиболее универсальный вариант для TPROXY. Поддерживает TCP и UDP (при использовании sing-box/mihomo). Подходит для большинства задач: обход гео-блокировок, подмена IP для всей сети, работа с маркетплейсами. Прокси дата-центров в формате SOCKS5 обеспечивают высокую скорость и стабильность — оптимальный выбор, если приоритет скорость, а не маскировка под реального пользователя.

Резидентные прокси

Резидентные прокси используют IP-адреса реальных домашних пользователей. При маршрутизации через TPROXY на роутере это означает, что весь трафик вашей сети будет выглядеть как трафик обычного домашнего интернет-пользователя из нужной страны. Идеально для:

  • Мониторинга цен на зарубежных маркетплейсах (Amazon, eBay, Zalando)
  • Тестирования рекламных объявлений из разных регионов
  • Работы с платформами, которые активно блокируют дата-центровые IP
  • Задач, где требуется максимальная маскировка под реального пользователя

Мобильные прокси

Мобильные прокси работают через IP операторов мобильной связи (4G/5G). Они имеют самый высокий уровень доверия со стороны платформ — Facebook, Instagram, TikTok крайне редко блокируют мобильные IP, поскольку за одним адресом могут стоять тысячи реальных пользователей. При использовании через TPROXY на роутере весь трафик вашей сети получает мобильный IP, что критически важно для:

  • Арбитража трафика через Facebook Ads и TikTok Ads
  • Фарма аккаунтов социальных сетей
  • Работы с антидетект-браузерами (Dolphin Anty, AdsPower, GoLogin) через единый шлюз
Тип прокси Скорость Доверие платформ Лучший сценарий
Дата-центр ⚡ Высокая ★★☆☆☆ Парсинг, мониторинг цен
Резидентные ⚡⚡ Средняя ★★★★☆ Гео-тестирование, e-commerce
Мобильные ⚡ Средняя ★★★★★ Соцсети, арбитраж трафика

Заключение

Прозрачный прокси через TPROXY на OpenWrt — мощный инструмент для централизованного управления трафиком всей сети. Главные преимущества подхода: не нужно настраивать прокси на каждом устройстве отдельно, поддерживается как TCP, так и UDP-трафик, а конфигурация гибко масштабируется под любые задачи — от домашнего использования до корпоративной инфраструктуры.

Ключевые шаги, которые мы разобрали: проверка поддержки TPROXY в ядре OpenWrt, установка необходимых пакетов, настройка правил iptables/nftables с правильным fwmark, конфигурация прокси-клиента (redsocks, sing-box или mihomo) и защита от DNS-утечек. Каждый из этих этапов важен — пропуск любого приведёт к некорректной работе или утечке реального IP.

Если ваша задача — маршрутизировать через прокси трафик всей сети с максимальным уровнем доверия со стороны платформ (Facebook, Instagram, TikTok, зарубежные маркетплейсы), рекомендуем использовать резидентные прокси — они обеспечивают реальные домашние IP из нужной страны и минимальный риск блокировок при работе через прозрачный прокси на роутере.