Podkop на OpenWrt: точечная маршрутизация без шаманства

Podkop на OpenWrt: точечная маршрутизация без шаманства

Тот самый момент, когда простой VPN на роутере уже не спасает. Всё или едет через туннель и ломает банки с играми, или идёт напрямую и внезапно упирается в блокировки. На OpenWrt это особенно болезненно: вариантов много, готовых решений мало, а собирать «велосипед» из iptables, policy based routing и скриптов хочется далеко не всем.

Podkop решает эту боль довольно изящно. Это надстройка над sing-box с удобным веб-интерфейсом, которая превращает роутер в нормальный диспетчер трафика: нужные домены уезжают в VPN или прокси, остальное живёт своей прямой жизнью. При этом не нужно устраивать шаманство с конфигами и вручную выверять правила в firewall — всё крутится в одном месте, наглядно и предсказуемо.

Зачем вообще нужен Podkop

Классическая схема «поднять VPN на OpenWrt и отправить туда весь трафик» перестаёт работать, как только в картине мира появляются банки, госуслуги, игры с региональной привязкой и пара корпоративных VPN от работодателя.
Хочется, чтобы:

  • блокировки и геоограничения исчезли для «человеческих» сервисов вроде мессенджеров, соцсетей, ИИ и стримингов;
  • банки, игры, рабочие ресурсы шли напрямую и не пытались авторизоваться из условной «Исландии»;
  • всё это переключалось в одном месте — на роутере, а не руками на каждом устройстве.

Podkop как раз про такую точечную маршрутизацию: не «всё в VPN» и не «ничего в VPN», а «вот эти домены и сети — туда, остальные — сюда». Внутри за это отвечает sing-box и FakeIP, а на поверхности — аккуратный интерфейс в LuCI, который прячет всю сложность.

Как это устроено в общих чертах

Под капотом Podkop делает три вещи.

Во-первых, управляет выходами. Он не поднимает туннель сам, но умеет использовать уже настроенные:

  • WireGuard / AmneziaWG;
  • OpenVPN или OpenConnect;
  • VLESS и Shadowsocks в виде прокси.

Для него это просто разные «выходы», между которыми можно переключаться и которые можно комбинировать в разных профилях.

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

  • какие домены и подсети должны уходить в туннель;
  • что всегда идёт напрямую и никогда не попадает под проксирование.

Можно опираться на готовые наборы (например, списки запрещённых доменов), а можно вести полностью свои, точечно под свою инфраструктуру.

В-третьих, крутит DNS и FakeIP. Podkop завязан на split-DNS: часть доменов резолвится через особую схему с FakeIP, остальное — как обычно. Это позволяет маршрутизировать по доменам, а не пытаться ловить ускользающие IP руками.

Установка на OpenWrt без шаманства

Ниже — актуальная установка по официальной документации: https://podkop.net/docs/install/

Официальный репозиторий: github.com/itdoginfo/podkop

Релизы (ipk): https://github.com/itdoginfo/podkop/releases

Podkop собирается автоматически; готовые пакеты лежат в релизах. Пакет написан на ash, поэтому podkop_*.ipk и luci-app-podkop_*.ipk подходят для всех архитектур. Тестировался на ванильной OpenWrt 24.10.

Важно: поддержка apk на данный момент отсутствует.

Требования

  • OpenWrt 24.10.
  • Минимум 20MB свободного места на NAND (как зависимость ставится sing-box).

Автоматическая установка и обновление

Официальная команда из документации:

sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/main/install.sh)

Если podkop уже установлен — произойдёт обновление.

Если у вас shell не поддерживает синтаксис <(...), используйте эквивалентный вариант:

wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/main/install.sh | sh

Ручная установка из пакетов

  1. Обновить индексы пакетов, чтобы корректно подтянулись зависимости:
opkg update
  1. Скачать из релиза пакеты podkop_*.ipk и luci-app-podkop_*.ipk.

  2. Установить (порядок важен): сначала podkop, затем luci-app-podkop.

# Install podkop first
opkg install /tmp/podkop_*.ipk

# Then LuCI UI
opkg install /tmp/luci-app-podkop_*.ipk

Установка на 23.05

OpenWrt 23.05 официально не рекомендуется для Podkop: версии 0.5.0+ требуют sing-box 1.12 и jq 1.7.1.

Варианты:

  • Установить вручную релиз v0.4.11 (последний, который работает со старым sing-box/jq): https://github.com/itdoginfo/podkop/releases/tag/v0.4.11
  • Установить вручную sing-box и jq из пакетов для 24.10 и затем вручную поставить Podkop из релизов.

Первый запуск и базовая настройка

После установки в веб-интерфейсе OpenWrt появляется раздел Podkop (Services → Podkop). Дальше последовательность примерно такая:

  1. Добавить конфигурацию прокси. В настройках вставить строку конфига VLESS:
vless://your-uuid@server.example.com:443?encryption=none&security=tls&type=tcp&host=server.example.com#MyVLESS
  1. Включить сервис и дождаться, пока он поднимет sing-box.
  2. Проверить логи: убедиться, что лог не сыплется ошибками по DNS, интерфейсам и конфигурации.
  3. Выбрать выход — туннель или прокси, который уже настроен на роутере.

После этого можно переходить к сути — настройке, что именно нужно отправлять через этот выход.

Маршрутизация по доменам и сетям

Сердце Podkop — списки. На практике их удобно делить на три группы.

Первая — то, что обязательно должно идти через туннель. Сюда попадают:

  • заблокированные домены и сервисы;
  • платформы с жёсткой геопривязкой контента;
  • зарубежные ИИ, dev-сервисы и прочие штуки, которые любят «нормальный мир» снаружи.

Вторая — то, что принципиально не должно трогаться.

Это:

  • банки и платёжки;
  • госуслуги и похожие государственные порталы;
  • игры и игровые лаунчеры, которые орют, увидев страну не из списка.

Третья — сетевые исключения.

Иногда проще указать подсеть или конкретный IP, чем пытаться поддерживать десятки доменов. Особенно это касается внутренней инфраструктуры (NAS, VPN от работодателя, собственные сервисы) и странноведущих себя сторонних решений.

Комбинация этих списков и даёт тот самый «эффект незаметности»: пользователь просто живёт в интернете, а роутер сам решает, что куда вести, не ломая то, что и так нормально работает напрямую.

DNS, FakeIP и подводные камни

Раз уж Podkop во многом держится на DNS, тут важно не стрелять себе в ногу. Основных правил всего несколько:

  • не ставить поверх него агрессивные DNS-демоны, которые переписывают запросы по-своему;
  • аккуратно относиться к AdGuard Home и похожим решениям — либо интегрировать, либо развести зоны ответственности;
  • не смешивать кучу разных DoH/DoT-клиентов, если нет чёткого плана, что кто делает.

Что такое FakeIP

FakeIP — технология, которая присваивает доменам «фиктивные» IP-адреса из специального диапазона (обычно 198.18.0.0/15). Когда приложение обращается к домену, DNS возвращает такой фейковый адрес, а sing-box перехватывает запросы к нему и маршрутизирует на основе доменного имени, а не реального IP.

Это решает проблему сервисов с постоянно меняющимися IP (CDN, облачные платформы) и позволяет точно контролировать маршрутизацию. Снаружи это практически не видно: всё просто работает, если не вмешиваться в процесс лишними «улучшайзерами».

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

После базовой настройки всегда полезно пройтись по чек-листу.

Что имеет смысл проверить:

  • открываются ли заблокированные или геозависимые сайты так, как задумано;
  • не сломались ли банки, платёжки и рабочие сервисы;
  • не полезли ли странные предупреждения в играх и клиентах, чувствительных к региону.

Если что-то ведёт себя не так:

  • заглянуть в логи sing-box и системный лог OpenWrt;
  • проверить, жив ли туннель и не упал ли он в момент теста;
  • убедиться, что никакой сторонний DNS-клиент не перепиливает запросы мимо Podkop.

В большинстве случаев проблема оказывается довольно приземлённой: старый мусор в конфигурации роутера, забытый «экспериментальный» пакет или не до конца настроенный VPN.

На чём всё это жить будет

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

На современных роутерах и небольших ARM-платах он ведёт себя вполне спокойно:

  • CPU почти не напрягается на типичной домашней нагрузке;
  • память не раздувается из-за какой-то экзотики в реализации;
  • обновления ставятся штатно и не пытаются сломать остальную систему.

Главное условие — не превращать OpenWrt в свалку.

Если за плечами десятки экспериментов, старые репозитории и полусломанные конфиги, есть смысл однажды остановиться, сделать бэкап, пересобрать систему в чистом виде и уже поверх неё поставить Podkop.

В итоге

Podkop — это по сути недостающий слой здравого смысла между OpenWrt и вашим VPN/прокси. Он не пытается стать ещё одной «чёрной коробкой», а просто аккуратно решает конкретную задачу: развести трафик по разным выходам так, чтобы обойти блокировки и не сломать то, что критично работает только напрямую.

Если есть роутер на OpenWrt, нормальный туннель и немного желания потратить вечер на наводку порядка, Podkop позволяет в итоге забыть о том, куда именно ходит какой домен. Всё это остаётся заботой роутера, а пользователю возвращается нормальный, предсказуемый интернет — без плясок с настройками на каждом устройстве и без «всё в VPN, а там будь что будет».