261 lines
8.9 KiB
Markdown
261 lines
8.9 KiB
Markdown
# 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
|