diff --git a/decisions/2026-04-14-niikn-openwrt-awg-fix.md b/decisions/2026-04-14-niikn-openwrt-awg-fix.md new file mode 100644 index 0000000..e8dc0cf --- /dev/null +++ b/decisions/2026-04-14-niikn-openwrt-awg-fix.md @@ -0,0 +1,193 @@ +# 2026-04-14: Восстановление системы обхода блокировок НИИКН + +## Проблема + +Система обхода блокировок на базе OpenWrt + AmneziaWG + Podkop не работала: +- Заблокированные сайты (Instagram, WhatsApp, Telegram) недоступны +- `podkop check_proxy` — timeout +- AWG туннель: handshake устарел на 12+ часов +- Пинг через туннель: 100% packet loss + +## Диагностика + +### 1. Базовая проверка + +```bash +# Finland VPS работает +ssh root@78.17.4.225 # ✓ OK +docker ps | grep amnezia-awg2 # ✓ UP 17 hours + +# OpenWrt VM работает +ssh root@192.168.1.50 # ✓ OK +ip addr show awg0 # ✓ UP, IP: 10.8.1.4/32 + +# Podkop и sing-box запущены +podkop get_status # ✓ enabled +podkop get_sing_box_status # ✓ running +``` + +### 2. Проблема с handshake + +```bash +# На сервере +docker exec amnezia-awg2 wg show awg0 | grep 10.8.1.4 +# latest handshake: 12 hours, 14 minutes, 45 seconds ago +# endpoint: 176.62.183.186:63753 # СТАРЫЙ IP! + +# Текущий IP НИИКН +curl ifconfig.me +# 202.71.12.186 # IP ИЗМЕНИЛСЯ! +``` + +**Вывод:** IP изменился, туннель не может обновить endpoint на сервере. + +### 3. Проверка connectivity + +```bash +# Пинг до Finland VPS +ping -c 3 78.17.4.225 +# 100% packet loss # Но это из-за ICMP DROP на сервере + +# Пинг до Google DNS +ping -c 3 8.8.8.8 +# 0% loss # Интернет работает + +# tcpdump на сервере +tcpdump -i any -n 'udp port 39202' +# Пакеты приходят от 85.235.181.190 (другой клиент) +# НЕТ пакетов от 202.71.12.186 (НИИКН) +``` + +**Вывод:** OpenWrt не отправляет пакеты на Finland VPS. + +### 4. Проверка firewall + +```bash +# Firewall zones +uci show firewall | grep zone +# lan: network='lan' +# wan: network='wan' 'wan6' # awg0 ОТСУТСТВУЕТ! + +# nftables output chain +nft list chain inet fw4 output +# oifname "br-lan" jump output_lan +# oifname "awg0" jump output_wan # Есть, но зона не настроена +``` + +**Вывод:** awg0 не добавлен в WAN firewall зону → пакеты не отправляются. + +### 5. Проверка конфигурации AWG + +```bash +uci show network.awg0 +# private_key='jfqknYLvJKYp++cjJPxV...' # СТАРЫЙ КЛЮЧ +# addresses='10.8.1.4/32' # СТАРЫЙ IP +``` + +**Вывод:** Используется устаревшая конфигурация AWG. + +## Решение + +### 1. Добавить awg0 в firewall WAN зону + +```bash +ssh root@192.168.1.50 +uci add_list firewall.@zone[1].network='awg0' +uci commit firewall +/etc/init.d/firewall reload +``` + +### 2. Обновить конфигурацию AWG + +Новая конфигурация (из предоставленного файла): +- IP: **10.8.1.16/32** +- Private key: `41XMQFlPlq6FU4EBhqjayPvcDQJU+c+WQjabqs3ILbI=` + +```bash +uci set network.awg0.private_key='41XMQFlPlq6FU4EBhqjayPvcDQJU+c+WQjabqs3ILbI=' +uci set network.awg0.addresses='10.8.1.16/32' +uci commit network +``` + +### 3. Перезапустить интерфейс + +```bash +ifdown awg0 +sleep 2 +ifup awg0 +``` + +## Результат + +### Проверка handshake + +```bash +docker exec amnezia-awg2 wg show awg0 | grep 10.8.1.16 +# peer: 10.8.1.16/32 +# endpoint: 85.235.181.190:51940 # Новый endpoint +# latest handshake: 17 seconds ago # ✓ РАБОТАЕТ! +# transfer: 6.80 KiB received, 17.16 KiB sent +``` + +### Проверка connectivity + +```bash +# Пинг через туннель +ping -c 3 -I awg0 8.8.8.8 +# 0% loss, RTT ~23ms # ✓ OK + +# FakeIP DNS +nslookup instagram.com 127.0.0.42 +# 198.18.0.239 # ✓ OK + +# WhatsApp +nslookup web.whatsapp.com 127.0.0.42 +# 198.18.0.4 # ✓ OK +``` + +## Выводы + +### Основные причины проблемы + +1. **awg0 не был в firewall зоне** — пакеты блокировались на выходе +2. **Устаревшая конфигурация AWG** — старый IP и приватный ключ + +### Критичные моменты + +**⚠️ ВАЖНО:** awg0 **ДОЛЖЕН** быть добавлен в firewall WAN зону, иначе туннель не работает! + +```bash +# Проверка +uci show firewall.@zone[1].network | grep awg0 +# Должно быть: firewall.cfg03dc81.network='wan' 'wan6' 'awg0' +``` + +### Что работает + +- ✅ AWG туннель: handshake актуален, transfer активен +- ✅ WhatsApp (все домены) через обход +- ✅ Instagram, Facebook, Threads через список "meta" +- ✅ Telegram через обход +- ✅ FakeIP DNS (198.18.0.0/15) +- ✅ Podkop + sing-box + +### Документация обновлена + +- [openwrt-bypass.md](/root/.claude/knowledge-base/projects/niikn/openwrt-bypass.md) — полная документация +- [niikn-vpn-status.md](/root/.claude/projects/-root/memory/niikn-vpn-status.md) — статус и конфигурация + +## Команды для мониторинга + +```bash +# Проверка туннеля на OpenWrt +ssh root@192.168.1.50 "ip addr show awg0 && ping -c 2 -I awg0 8.8.8.8" + +# Проверка handshake на сервере +ssh root@78.17.4.225 "docker exec amnezia-awg2 wg show awg0 | grep -A 5 '10.8.1.16'" + +# Проверка FakeIP +ssh root@192.168.1.50 "nslookup instagram.com 127.0.0.42" +``` + +## Теги +`#niikn` `#openwrt` `#amneziawg` `#podkop` `#bypass` `#firewall` `#fix` diff --git a/projects/niikn/openwrt-bypass.md b/projects/niikn/openwrt-bypass.md index 72d491a..b64a5b5 100644 --- a/projects/niikn/openwrt-bypass.md +++ b/projects/niikn/openwrt-bypass.md @@ -19,17 +19,19 @@ | Версия | 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.4/32 | +| Клиентский IP | **10.8.1.16/32** (обновлено 2026-04-14) | | Интерфейс | awg0 | -| Private key | jfqknYLvJKYp++cjJPxV/dn8IQNPyaPhR/2bc4PK5+4= | +| Private key | 41XMQFlPlq6FU4EBhqjayPvcDQJU+c+WQjabqs3ILbI= | | Public key (сервер) | cftJxWuBCyz9ZiLDi23ouMQNAky5aTAUZIRHNS6l7mc= | | Preshared key | PiQ3bao3nSxQqJoiJugAG77ZjRXxorBS81YwoRaLzEc= | +| Persistent keepalive | 25 секунд | ### Параметры обфускации (сервер и клиент должны совпадать) @@ -50,6 +52,32 @@ > **Важно:** 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 | Параметр | Значение | @@ -57,7 +85,7 @@ | Версия | podkop v0.7.14 | | Режим | VPN (connection_type=vpn) | | Интерфейс | awg0 | -| Списки | russia_inside, telegram | +| Списки | 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) | @@ -77,8 +105,24 @@ config section 'main' 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) ### Добавленные маршруты @@ -99,12 +143,32 @@ FakeIP диапазон (198.18.0.0/15) направляется через Open ## Как работает FakeIP схема -1. Клиент запрашивает DNS для `instagram.com` → получает FakeIP `198.18.x.x` -2. Клиент открывает соединение на `198.18.x.x` +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: @@ -117,10 +181,77 @@ 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 не демон) -- Битый feed убран из `/etc/opkg/customfeeds.conf` +- **КРИТИЧНО:** awg0 ДОЛЖЕН быть в firewall WAN зоне, иначе пакеты не уходят + +## История изменений + +### 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