Инфраструктурная дисциплина для тех, кто устал настраивать прокси на каждом устройстве
ВМЕСТО ВСТУПЛЕНИЯ
Вы когда-нибудь задумывались, почему в 2026 году, чтобы зайти на заблокированный сайт, нужно:
Купить VPS
Настроить VPN
Включить VPN на каждом устройстве
Выключать VPN для российских сервисов
Повторить для всех членов семьи
Это не архитектура. Это бардак.
GOLDENROUTE — это одно решение, которое работает на уровне сети. Вы настраиваете его один раз на шлюзе, и всё. LAN-клиенты не знают, что такое прокси. Они просто выходят в интернет. Шлюз решает, что направить в Tor, а что — напрямую.
ПРОБЛЕМА: ПОЧЕМУ СУЩЕСТВУЮЩИЕ РЕШЕНИЯ НЕСОСТОЯТЕЛЬНЫ
Вариант 1: VPN на каждом устройстве
Работает ровно до тех пор, пока:
Не закончится место на телефоне от 5 (пяти) VPN-приложений
Член семьи не спросит: «А почему у меня Яндекс не открывается?»
Ребёнок не найдёт способ отключить VPN
Вариант 2: Роутер с OpenWrt + VPN
Требует:
Поддержки роутера
Прошивки
Настройки
Перепрошивки после неудачной настройки
Покупки нового роутера после того, как старый превратился в кирпич
Вариант 3: Docker-контейнер с прокси
Почти то, что нужно. Почти. Но каждый раз, когда вы пытаетесь объяснить жене, как настроить DNS на ноутбуке, вы понимаете: что-то пошло не так.
РЕШЕНИЕ: GOLDENROUTE
GOLDENROUTE — это 3 (три) Docker-контейнера, которые превращают любой Linux-хост в прозрачный шлюз для обхода блокировок.
Что он делает:
Перехватывает весь TCP-трафик с LAN и хоста
Проверяет destination: российский? → пропускает напрямую. В списке исключений? → пропускает напрямую. Всё остальное? → в Tor.
Перехватывает все DNS-запросы и направляет их через DoT (DNS-over-TLS)
Что он НЕ делает:
Не анонимизирует (Tor здесь — средство обхода блокировок, не более)
Не требует настройки на каждом устройстве
Не требует VPN-клиентов
Не требует покупки VPS
КАК ЭТО РАБОТАЕТ (БЕЗ АСКЕТИЧНЫХ ASCII-СХЕМ)
Система принимает 3 (три) решения о каждом пакете:
Destination в russian-ips → RETURN. Трафик идёт напрямую. Российские адреса не требуют посредников. Список диапазонов загружается с RIPE API и автоматически обновляется.
Destination в tor-exclude → RETURN. Ваш персональный список исключений. Вы сами решаете, что не должно касаться Tor.
Всё остальное → REDIRECT → Tor. Без обсуждений.
Цепочки iptables
Их 3 (три). И каждая делает ровно то, для чего предназначена.
1. FW_REDIRECT (PREROUTING)
Встречает трафик от LAN-клиентов. Порядок проверки критичен — нарушение фатально:
dst-type LOCAL → RETURN # пакеты самому хосту src 172.16.0.0/12 → RETURN # Docker bridge (анти-петля) 10/8, 172.16/12, → RETURN # приватные диапазоны 192.168/16 russian-ips → RETURN # домашняя территория tor-exclude → RETURN # ваши исключения dport 12346/9050 → RETURN # не перехватывать свой трафик dport 53 → REDIRECT # DNS → unbound всё остальное TCP → REDIRECT # → :12346 → Tor
2. FW_OUTPUT (OUTPUT)
Абсолютно та же логика для трафика, рождённого на хосте. Хост не является исключением.
3. DOCKER-USER (FORWARD)
Разрешает транзитный трафик из LAN и MASQUERADE для SNAT.
QUIC — ПРОТОКОЛ, КОТОРЫЙ ДУМАЕТ, ЧТО ОН ВЫШЕ TCP
QUIC (UDP/443) — протокол, который браузеры предпочитают TCP при любой возможности.
Прокси-серверы не поддерживают перехват UDP. Если QUIC не заблокировать, браузер устанавливает прямое соединение с иностранным сервером, минуя Tor. Весь смысл системы теряется.
Решение — блокировка QUIC для всего, что не в russian-ips и не в tor-exclude:
FORWARD: UDP/443 !russian-ips !tor-exclude → DROP OUTPUT: UDP/443 !127.0.0.1 !russian-ips !tor-exclude → DROP
Браузер, не получив ответа по UDP, откатывается на TCP/443. TCP/443 перехватывается правилами PREROUTING/OUTPUT и направляется в Tor.
QUIC к российским сайтам и к адресам из вашего списка исключений работает штатно — без задержек, без потери производительности.
КОМПОНЕНТЫ
fw (Firewall)
Центральный компонент. network_mode: host, права NET_ADMIN + NET_RAW. Управляет iptables на хосте напрямую.
При старте:
Очищает старые цепочки через while-цикл (идемпотентность — обязательное требование)
Загружает ipset russian-ips из файла + фоновое обновление с RIPE (4 попытки)
Загружает ipset tor-exclude из файла
Запускает redsocks на порту 12346, апстрим — Tor SOCKS5 :9050
Применяет правила к OUTPUT и PREROUTING
Блокирует QUIC для не-российских и не-исключённых адресов
При остановке: trap cleanup убивает redsocks и убирает за собой.
tor
Единственный бэкенд. SOCKS5 на порту 9050. Мосты obfs4 для обхода блокировок. Никакой балансировки, никаких альтернатив.
unbound
DNS-over-TLS форвардер. Все DNS-запросы с LAN и хоста перехватываются на порту 53 и направляются сюда. .ru — через Яндекс DNS (DoT), всё остальное — через Cloudflare и Google (DoT).
ОДИН ДЕНЬ ИЗ ЖИЗНИ ПОЛЬЗОВАТЕЛЯ GOLDENROUTE
Утро. Вы открываете ноутбук. Он подключается к Wi-Fi. Вы получаете IP по DHCP. Шлюз по умолчанию — хост с GOLDENROUTE. DNS — хост с GOLDENROUTE. Вы открываете Яндекс — он открывается напрямую, без Tor. Быстро.
День. Вы открываете заблокированный сайт. Браузер сначала пробует QUIC (UDP/443) — пакет тихо дропается. Браузер откатывается на TCP/443. Пакет попадает в PREROUTING, destination не российский, не в исключениях. REDIRECT :12346. redsocks → Tor. Сайт открывается.
Вечер. Ребёнок открывает YouTube на планшете. Никаких настроек. Никаких вопросов. Просто работает.
ТРЕБОВАНИЯ К СИСТЕМЕ
GOLDENROUTE устанавливается НА ХОСТ, а не в нём. Он становится шлюзом. Это не приложение — это сетевая инфраструктура.
Железо:
Любой x86-64 Linux‑хост. Raspberry Pi — да. Старый ноутбук — да. Сервер в стойке — да.
1 (один) сетевой интерфейс для LAN. Хост должен быть шлюзом по умолчанию для вашей сети.
512 MB RAM — достаточно. 1 GB — комфортно.
Софт:
Linux с ядром, собранным с поддержкой:
ip_tables,iptable_nat,ip_set,ip_set_hash_netDocker Engine + Docker Compose
net.ipv4.ip_forward = 1(без этого LAN-клиенты не выйдут в интернет)Порт 53 должен быть свободен на хосте (unbound занимает его)
Модуль
nf_conntrack(включён в ядро по умолчанию)
Сеть:
Хост должен быть шлюзом по умолчанию для LAN-клиентов
Клиенты должны использовать хост как DNS-сервер
Если хост не является шлюзом — настройте DHCP соответствующим образом
Где установить:
На отдельном Linux-хосте в вашей LAN (рекомендуется)
На той же машине, где вы работаете (работает, но требует
network_mode: host)На виртуальной машине с bridge-сетью (если гипервизор позволяет пробросить LAN)
На Raspberry Pi с Ethernet (классический сценарий «шлюз за 2000 рублей»)
Не пытайтесь установить это на роутер с OpenWrt через opkg. Это не OpenWrt-пакет. Это Docker Compose-проект.
Не пытайтесь установить это на macOS или Windows. GOLDENROUTE требует нативного Linux со всеми модулями iptables. Docker Desktop на Mac — не Linux.
---
БЫСТРЫЙ СТАРТ
# 1. Клонировать git clone https://github.com/lshnls/goldenroute.git cd goldenroute cp .env.example .env # 2. Получить свежие мосты Tor # https://bridges.torproject.org → tor/bridges.txt # 3. Добавить исключения (опционально) # fw/tor-exclude-ips.txt # 4. Запустить docker compose up -d
Настройка клиентов: указать IP хоста как шлюз по умолчанию и DNS-сервер. Всё.
КОНФИГУРАЦИЯ
env:
Переменная | По умолчанию | Описание |
|---|---|---|
UNBOUND_PORT | 53 | Порт DNS |
TOR_SOCKS_PORT | 9050 | SOCKS5 порт Tor |
TOR_CONTROL_PORT | 9051 | Control-порт Tor |
TOR_REDSOCKS_PORT | 12346 | Порт redsocks |
LAN_CIDR | 192.168.1.0/24 | Подсеть LAN |
ДИАГНОСТИКА
Tor не забутстрапился:
docker compose logs tor | grep "Bootstrapped"
Ожидается Bootstrapped 100% (done). Если нет — обновить мосты на https://bridges.torproject.org.
Трафик не идёт через Tor:
docker compose exec fw iptables -t nat -L FW_REDIRECT -n -v
Счётчик REDIRECT tcp --dport 12346 должен расти.
QUIC не блокируется:
docker compose exec fw iptables -L FORWARD -n -v | grep "udp dpt:443"
Счётчик DROP должен расти на иностранных сайтах.
Мосты заблокированы:
docker compose up -d --force-recreate tor
ОГРАНИЧЕНИЯ (ЧЕСТНОСТЬ — ЛУЧШАЯ ПОЛИТИКА)
Только TCP уходит через Tor. UDP (кроме DNS и заблокированного QUIC) — напрямую.
Snowflake не работает через Docker NAT. Только obfs4-мосты.
network_mode: host обязателен для fw.
Только IPv4.
ПОЧЕМУ НЕ WSPROXY? ПОЧЕМУ НЕ БАЛАНСИРОВКА?
В проекте может быть два бэкенда: wstunnel (WebSocket-туннель до вышестоящего SOCKS5-прокси) и Tor. Между ними — вероятностная балансировка через nginx.
Практика показала: балансировка между платным прокси и Tor — это компромисс, который не нужен никому. Tor справляется с обходом блокировок. Если вам нужна производительность — используйте Tor с правильными мостами. Если вам нужна анонимность — используйте Tor. Два бэкенда — это не гибкость. Это лишняя сложность.
GOLDENROUTE — это один бэкенд. Одно направление. Tor.
ЗАКЛЮЧЕНИЕ
GOLDENROUTE — это не прокси. Это инфраструктурная дисциплина.
Система, которую вы настраиваете один раз. Которая не требует объяснений членам семьи. Которая работает на уровне сети, потому что только так и должен работать шлюз.
Никаких VPN-клиентов. Никаких настроек на каждом устройстве. Никаких вопросов «а почему у меня не открывается».
Один хост. Три контейнера. Tor.
