# OpenWrt + Podkop — Обход блокировок НИИКН ## Схема работы ``` Клиент → MikroTik (192.168.1.1) ├── обычные сайты → интернет напрямую └── заблокированные → 192.168.1.50 (OpenWrt) → AWG туннель → 78.17.4.225 (Финляндия) ``` **Если OpenWrt упадёт:** заблокированные сайты недоступны, остальной интернет и RDP работают штатно. ## OpenWrt VM (Proxmox НИИКН) | Параметр | Значение | |----------|----------| | VMID | 101 | | IP | 192.168.1.50 | | Версия | OpenWrt 24.10.0 | | Serial console | /var/run/qemu-server/101.serial0 на pve-niikn (192.168.1.201) | | Root пароль | 1qaz!QAZ | | SSH | root@192.168.1.50 (пароль: 1qaz!QAZ) | ## AWG туннель (AmneziaWG) | Параметр | Значение | |----------|----------| | Сервер | 78.17.4.225:39202 (контейнер amnezia-awg2) | | Клиентский IP | **10.8.1.16/32** (обновлено 2026-04-14) | | Интерфейс | awg0 | | Private key | 41XMQFlPlq6FU4EBhqjayPvcDQJU+c+WQjabqs3ILbI= | | Public key (сервер) | cftJxWuBCyz9ZiLDi23ouMQNAky5aTAUZIRHNS6l7mc= | | Preshared key | PiQ3bao3nSxQqJoiJugAG77ZjRXxorBS81YwoRaLzEc= | | Persistent keepalive | 25 секунд | ### Параметры обфускации (сервер и клиент должны совпадать) | Параметр | Значение | |----------|----------| | Jc | 5 | | Jmin | 10 | | Jmax | 50 | | S1 | 148 | | S2 | 21 | | S3 | 0 (клиент не поддерживает S3/S4, сервер тоже выставлен в 0) | | S4 | 0 | | H1 | 1666291593 | | H2 | 2114876545 | | H3 | 2135310789 | | H4 | 2140829733 | > **Важно:** H-значения на сервере должны быть фиксированными числами (не диапазонами). > Файл конфига сервера: `/opt/amnezia/awg/awg0.conf` внутри контейнера `amnezia-awg2` на 78.17.4.225. ### Полная конфигурация клиента (OpenWrt) ```ini [Interface] Address = 10.8.1.16/32 PrivateKey = 41XMQFlPlq6FU4EBhqjayPvcDQJU+c+WQjabqs3ILbI= Jc = 5 Jmin = 10 Jmax = 50 S1 = 148 S2 = 21 S3 = 0 S4 = 0 H1 = 1666291593 H2 = 2114876545 H3 = 2135310789 H4 = 2140829733 [Peer] PublicKey = cftJxWuBCyz9ZiLDi23ouMQNAky5aTAUZIRHNS6l7mc= PresharedKey = PiQ3bao3nSxQqJoiJugAG77ZjRXxorBS81YwoRaLzEc= AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = 78.17.4.225:39202 PersistentKeepalive = 25 ``` ## Podkop + sing-box | Параметр | Значение | |----------|----------| | Версия | podkop v0.7.14 | | Режим | VPN (connection_type=vpn) | | Интерфейс | awg0 | | Списки | russia_inside, telegram, meta | | disable_quic | 1 (блокировка QUIC — браузеры используют TCP) | | LuCI плагин | luci-app-podkop | | DNS (sing-box) | 127.0.0.42:53 (FakeIP 198.18.0.0/15) | | DNS (dnsmasq) | 192.168.1.50:53 → форвардит в 127.0.0.42 | ### UCI конфигурация (/etc/config/podkop) ``` config settings 'settings' option dns_type 'udp' option dns_server '8.8.8.8' option disable_quic '1' list source_network_interfaces 'br-lan' config section 'main' option connection_type 'vpn' option interface 'awg0' list community_lists 'russia_inside' list community_lists 'telegram' list community_lists 'meta' ``` ### Что обходится **Список "meta":** - WhatsApp (whatsapp.com, whatsapp.net, wa.me, web.whatsapp.com) - Instagram - Facebook - Threads - Все сервисы Meta Platforms **Список "telegram":** - Telegram (все домены и IP) **Список "russia_inside":** - Российские сайты, заблокированные за рубежом ## Настройка MikroTik (192.168.1.1) ### Добавленные маршруты ``` /ip route add dst-address=198.18.0.0/15 gateway=192.168.1.50 comment=podkop-fakeip ``` FakeIP диапазон (198.18.0.0/15) направляется через OpenWrt → sing-box перехватывает и пускает через AWG. ### DHCP — DNS для клиентов ``` /ip dhcp-server network set 0 dns-server=192.168.1.50 ``` Клиенты получают DNS 192.168.1.50 (dnsmasq → sing-box FakeIP). ## Как работает FakeIP схема 1. Клиент запрашивает DNS для `instagram.com` → получает FakeIP `198.18.0.239` 2. Клиент открывает соединение на `198.18.0.239` 3. MikroTik смотрит таблицу маршрутов: `198.18.0.0/15 → 192.168.1.50` 4. Пакет приходит на OpenWrt → nftables ставит fwmark → tproxy → sing-box 5. sing-box знает реальный адрес (из FakeIP кэша) → подключается через awg0 → Финляндия ## Firewall конфигурация (КРИТИЧНО!) **awg0 должен быть в WAN зоне:** ```bash # Проверить uci show firewall.@zone[1].network # Если awg0 нет в списке — добавить uci add_list firewall.@zone[1].network='awg0' uci commit firewall /etc/init.d/firewall reload ``` **Проверка:** ```bash nft list chain inet fw4 output | grep awg0 # Должно быть: oifname "awg0" jump output_wan ``` ## Доступные списки podkop Все списки из https://github.com/itdoginfo/allow-domains: `russia_inside`, `russia_outside`, `telegram`, `youtube`, `meta`, `twitter`, `discord`, `tiktok`, `hdrezka`, `news`, `anime` и др. Добавить список: ```sh uci add_list podkop.main.community_lists=youtube uci commit podkop podkop restart ``` ## Диагностика ### Проверка туннеля на OpenWrt ```bash # SSH доступ ssh root@192.168.1.50 # пароль: 1qaz!QAZ # Статус интерфейса ip addr show awg0 # Должно быть: inet 10.8.1.16/32, state UP # Пинг через туннель ping -c 3 -I awg0 8.8.8.8 # Проверка podkop podkop get_status podkop get_sing_box_status # Проверка FakeIP nslookup instagram.com 127.0.0.42 # Должно вернуть: 198.18.x.x ``` ### Проверка handshake на сервере ```bash ssh root@78.17.4.225 # пароль: vb8Se9VMdwh1P692PZ docker exec amnezia-awg2 wg show awg0 | grep -A 5 '10.8.1.16' # latest handshake должен быть < 2 минут ``` ### Проверка с клиента ```bash # DNS запрос nslookup instagram.com 192.168.1.50 # Должен вернуть FakeIP (198.18.x.x) # Маршрут traceroute -n 198.18.0.1 # Первый hop должен быть 192.168.1.50 ``` ## Известные проблемы / Особенности - `proto_amneziawg_check_installed: not found` — баг в `/lib/netifd/proto/amneziawg.sh:298`, нефатальный, интерфейс поднимается - `amneziawg-tools 1.0.20240213-r1` не поддерживает S3/S4 → выставить в 0 на сервере - H-значения сервера должны быть фиксированными (не диапазонами `H1=x-y`) - После перезагрузки: sing-box running, awg0 UP — `podkop status` = "not running" это нормально (podkop не демон) - **КРИТИЧНО:** awg0 ДОЛЖЕН быть в firewall WAN зоне, иначе пакеты не уходят - **КРИТИЧНО для FakeIP-режима:** `disable_quic=1` обязателен, иначе браузеры используют HTTP/3 на UDP:443 мимо обхода (YouTube/Meta/Google) - `podkop restart` может сбрасывать `shutdown_correctly` в 0 — проверять после рестарта - sing-box установщик не всегда включает procd-автозапуск: проверять `/etc/init.d/sing-box enabled` ## История изменений ### 2026-04-14 — Восстановление работы **Проблемы:** 1. Старая конфигурация AWG (IP 10.8.1.4, устаревший приватный ключ) 2. awg0 не был добавлен в firewall WAN зону 3. Handshake не обновлялся 12+ часов **Исправлено:** 1. Обновлен приватный ключ: `41XMQFlPlq6FU4EBhqjayPvcDQJU+c+WQjabqs3ILbI=` 2. Изменен IP на **10.8.1.16/32** 3. Добавлен awg0 в firewall WAN зону: `uci add_list firewall.@zone[1].network='awg0'` 4. Перезапущен firewall и интерфейс awg0 **Результат:** - ✅ Handshake актуален (< 3 минут) - ✅ Пинг через туннель: 0% loss, ~23ms RTT - ✅ FakeIP DNS работает - ✅ WhatsApp, Instagram, Telegram полностью функциональны - ✅ Transfer: 6.80 KiB received, 17.16 KiB sent