Files
knowledge-base/projects/niikn/openwrt-bypass.md

8.9 KiB
Raw Blame History

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)

[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 зоне:

# Проверить
uci show firewall.@zone[1].network

# Если awg0 нет в списке — добавить
uci add_list firewall.@zone[1].network='awg0'
uci commit firewall
/etc/init.d/firewall reload

Проверка:

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 и др.

Добавить список:

uci add_list podkop.main.community_lists=youtube
uci commit podkop
podkop restart

Диагностика

Проверка туннеля на OpenWrt

# 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 на сервере

ssh root@78.17.4.225  # пароль: vb8Se9VMdwh1P692PZ
docker exec amnezia-awg2 wg show awg0 | grep -A 5 '10.8.1.16'

# latest handshake должен быть < 2 минут

Проверка с клиента

# 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