--- date: 2026-06-02 type: runbook status: active tags: [openwrt, podkop, amneziawg, canal-plus, france, pbr, netbird, client, runbook] aliases: [OpenWrt_4 Canal+, canal-plus-runbook, француз обход] --- # OpenWrt_4 (француз, Москва) — обход + Canal+: рунбук выезда > **Контекст.** Клиент-француз в Москве. Cudy TR3000 (`OpenWrt_4`, NetBird `100.70.235.2`), podkop + AmneziaWG + NetBird. Завтра — **смена провайдера** + первичная настройка **Canal+**. > **Главная зависимость:** Canal+ / myCanal гео-блочит по IP → нужен **французский IP**. У Олега франц-выхода не было (только Финляндия/Сингапур) → поднимаем **FR VPS + AmneziaWG**. > **Устройство Canal+:** Apple TV / Smart TV / приставка (гео по IP) → **роутим устройство целиком** через FR-туннель (`pbr`), без гонки за доменами Canal+. > Модель/грабли подкопа: [[../../snippets/podkop-reference]]. Диагностика: [[../../snippets/podkop-fakeip-diagnostics]]. --- ## Архитектура (после настройки) ``` LAN ├─ дом (телефоны/ПК) ── podkop FakeIP ─ meta/youtube/telegram → awg0 → ФРАНЦИЯ │ РФ-сайты (gosuslugi/ozon/банки) ───────→ WAN напрямую └─ Apple TV (Canal+) ── pbr: ВЕСЬ трафик источника ───────────→ awg0 → ФРАНЦИЯ awg0 = AmneziaWG до нового FR VPS. EXIT один — Франция (она дотягивается и до YouTube/Meta, и до Canal+). ``` **Почему один французский выход, а не финский+отдельно Canal+:** Франция открывает и заблокированное РКН (YT/Meta/TG), и Canal+. Два туннеля городить не нужно. ⛔ `russia_outside` НЕ ставить — клиент в РФ, сломает РФ-сайты. --- ## Фаза 0 — СЕГОДНЯ: поднять FR VPS + AmneziaWG-сервер ### 0.1 VPS — выбор провайдера **Требования:** KVM (не OpenVZ — нужен `/dev/net/tun`), Ubuntu 22.04/24.04, 2 vCPU / 2 GB / 20–40 GB NVMe, порт ≥100 Mbps, **безлимит или ≥2 TB трафика** (HD-стрим ~6 Mbps ≈ 8 ГБ/час). IP именно французский. | Провайдер | Локация | Оплата из РФ | Почему | |---|---|---|---| | **HOSTKEY Paris** ⭐ рекоменд. | Paris PAR3 (Vélizy) | ✅ твой аккаунт (Финляндия там же), карта/крипта | instant, панель знакома, 1–10 Gbps. Минус: датацентр-IP — Canal+ может забанить → ротация/фолбэк ниже | | **Aeza Paris** — резерв/тест | Paris | ✅ RU-карты/SBP/Tinkoff/крипта, €0.02/час | instant, **другой ASN** для проверки гео. Минус: под санкциями OFAC-2025 + жалобы на стабильность — не как постоянный | | OVH / Scaleway | Roubaix / Paris | ⚠️ нужна НЕ-российская карта | лучшая инфра: Scaleway — безлимит исходящего; OVH — докупка до 16 IP (удобная ротация при бане). Брать если есть зарубежная карта | **Если IP во франц-бане Canal+** («недоступно в регионе»): (1) запросить другой IP у хостера / докупить (OVH +16 IP), (2) поднять Aeza Paris почасово и проверить другой ASN, (3) гарантированный фолбэк — IPRoyal `country-fr` residential ([[../../snippets/iproyal-gost-relay]]). Hetzner/Contabo **не годятся** — нет Франции. ### 0.2 AmneziaWG-сервер — **разворачивает Олег через приложение AmneziaVPN** (Claude не ставит вручную) > Договорённость: сервер поднимает Олег сам приложением, Claude работает с уже готовым сервером (конвертация конфига, проверка, podkop+pbr, диагностика). Никаких самосборных amneziawg-go от Claude. Олег в приложении **AmneziaVPN**: 1. Добавить сервер по SSH: `151.243.217.139`, root + пароль (приложение само развернёт Docker-стек). 2. Протокол — именно **AmneziaWG** (не OpenVPN/обычный WireGuard): DPI-устойчив для связки РФ→Франция. Обфускацию (Jc/S1/S2/H1–H4) и ключи приложение генерит само. 3. Сделать **отдельное подключение/клиент для роутера** («Cudy») и **экспортировать** его конфиг: «Настройки соединения → AmneziaWG/WireGuard» → текст `[Interface]/[Peer]` (или `.conf`). 4. Скинуть этот экспорт Claude. **Claude дальше:** из экспорта берёт `PrivateKey`/`Address`/`PublicKey`/`PresharedKey`/`Endpoint` + **точные** Jc/Jmin/Jmax/S1/S2/H1–H4 (как сгенерил app) и собирает OpenWrt-блок `awg0` (Фаза 3). Затем по SSH на ноду проверяет, что контейнер слушает и egress = FR. Проверка ноды (Claude, после деплоя): `ss -ulpn | grep -i awg` (порт слушает), `curl -s ipinfo.io/country` → `FR`, в Docker — контейнер amnezia-awg. > На выезд возьми из приложения: экспорт **AmneziaWG-конфига для роутера** (в нём `Endpoint :<порт>` и все ключи). Этого достаточно — Claude конвертнёт в UCI. --- ## Фаза 1 — на месте: новый провайдер (WAN) ```sh # подключить WAN нового провайдера, поднять линк (DHCP / PPPoE / static — по провайдеру) uci show network.wan; ifstatus wan | grep -E 'up|address' ping -c3 1.1.1.1 # есть ли интернет вообще ``` - **CGNAT/двойной NAT — не проблема:** туннель и NetBird исходящие, проброс портов не нужен. - **MTU:** PPPoE → 1492. Если позже awg0 будет «грузить сайты наполовину» — см. Фазу 3 (MTU 1420→1380). - Убедиться, что провайдер **не режет UDP/39202** (редко): `nc -zu 39202` или просто проверить handshake в Фазе 3. --- ## Фаза 2 — на месте: вернуть NetBird (для управления и моих диагностик) ```sh netbird status # должен сам переподключиться (конфиг на месте), IP 100.70.235.2 ``` - Если не поднялся / агент битый — **переэнроллить** (диаг-ключ ИСТЁК 2026-05-21, сперва перевыпустить): ```bash # перевыпуск ключа Claude-Diag (с любого хоста с интернетом): curl -s -X POST -H "Authorization: Token nbp_YTEmAVpS0hLhnTeJ09q3wYaC0AAXjN21NPvM" \ -H "Content-Type: application/json" \ -d '{"name":"Claude Diagnostic","type":"reusable","expires_in":2592000,"auto_groups":["d7jra32fadhs73dmqv5g"],"usage_limit":0,"ephemeral":false}' \ https://api.netbird.io/api/setup-keys # на роутере: netbird up --setup-key <НОВЫЙ_КЛЮЧ> ``` - Агент старый (`0.50.2`). Обновлять **только если** не подключается (не чинить рабочее). Как поднимется — пинг мне `ssh root@100.70.235.2`, дальше помогу вживую. --- ## Фаза 3 — на месте: клиент awg0 → французский VPS **Сначала проверь, что proto умеет AWG 1.5** (сервер на 1.5: H-диапазоны/S3/S4/I1): ```sh grep -oE 'awg_(s[1-4]|h[1-4]|i[1-5])' /lib/netifd/proto/amneziawg.sh | sort -u opkg list-installed | grep amneziawg ``` - Видишь `awg_s3 awg_s4 awg_i1` → ставь блок ниже целиком. - НЕТ их → handshake не встанет (H заданы диапазонами). Тогда: `opkg update && opkg install kmod-amneziawg amneziawg-tools luci-proto-amneziawg` → повтори. Если свежего пакета нет → Олег перегенерит сервер в приложении проще (одиночные H, без S3/S4/I) и пришлёт новый экспорт. ```sh # === Готовый клиент Оливье (10.8.1.3) → FR-нода 151.243.217.139:44221 === uci set network.awg0=interface uci set network.awg0.proto='amneziawg' uci set network.awg0.private_key='3JMaqHzXmGjKRoRSpSluPu6N9hPO/PssjCH4rp6Q+lw=' uci -q delete network.awg0.addresses uci add_list network.awg0.addresses='10.8.1.3/32' uci set network.awg0.mtu='1420' # classic-обфускация (есть в любой версии proto): uci set network.awg0.awg_jc='5' uci set network.awg0.awg_jmin='10' uci set network.awg0.awg_jmax='50' uci set network.awg0.awg_s1='97' uci set network.awg0.awg_s2='99' uci set network.awg0.awg_h1='525652870-1032659689' uci set network.awg0.awg_h2='2143742042-2146202402' uci set network.awg0.awg_h3='2146939599-2147410002' uci set network.awg0.awg_h4='2147455965-2147472644' # AWG 1.5 (ставить ТОЛЬКО если proto поддерживает — см. проверку выше): uci set network.awg0.awg_s3='63' uci set network.awg0.awg_s4='7' uci set network.awg0.awg_i1='' uci set network.awg0_peer=amneziawg_awg0 uci set network.awg0_peer.public_key='wyN+ob6bWvDsBHw6gVBO11YmpG1kYVO6OqnGtwJx5zs=' uci set network.awg0_peer.preshared_key='eRtyuG6UdQqKxKK/lmWkosR3n0PUNUH9u45CXVNnsS8=' uci set network.awg0_peer.endpoint_host='151.243.217.139' uci set network.awg0_peer.endpoint_port='44221' uci add_list network.awg0_peer.allowed_ips='0.0.0.0/0' uci set network.awg0_peer.route_allowed_ips='0' # ВАЖНО: awg0 НЕ глобальный дефолт — рулят podkop и pbr uci set network.awg0_peer.persistent_keepalive='25' uci commit network # awg0 в WAN-зону (иначе трафик не уходит и нет SNAT) — найди индекс wan-зоны: uci show firewall | grep -E "zone\[.*\].name" uci add_list firewall.@zone[1].network='awg0' # подставь правильный индекс wan! uci commit firewall /etc/init.d/network restart && /etc/init.d/firewall reload ``` **Проверка туннеля + что выход именно французский:** ```sh awg show awg0 # handshake < 2 мин, rx/tx растут curl -4 -s --max-time 5 --interface awg0 https://ipinfo.io/country # → FR (ключевой тест!) curl -4 -s --max-time 5 https://ifconfig.me; echo # WAN = РФ-IP (для сравнения) ``` - Нет handshake → порт/UDP режется DPI нового провайдера или опечатка в ключах/H-параметрах. H1–H4 — точные числа, не диапазоны. - Сайты грузятся наполовину → `ping -M do -s 1380 8.8.8.8 -I awg0`; если фрагментация — MTU awg0 1420→1380. --- ## Фаза 4 — на месте: podkop (обход РКН для дома) ```sh uci set podkop.main.connection_type='vpn' uci set podkop.main.interface='awg0' uci set podkop.settings.disable_quic='1' # ОБЯЗАТЕЛЬНО # списки — точечные; ⛔ НИКОГДА russia_outside (клиент в РФ): for L in meta youtube telegram; do uci add_list podkop.main.community_lists="$L"; done uci -q del_list podkop.main.community_lists='russia_outside' uci commit podkop && /etc/init.d/podkop restart ``` Проверка FakeIP: `nslookup www.instagram.com 192.168.1.1` → `198.18.x.x`; `nslookup gosuslugi.ru 192.168.1.1` → **реальный** IP (РФ-сайт мимо туннеля). DNS-цепочка: `LAN→dnsmasq:53→127.0.0.42`, `noresolv=1`. --- ## Фаза 5 — на месте: Canal+ устройство → Франция целиком (pbr) **5.1 Статический лиз для приставки** ```sh uci add dhcp host uci set dhcp.@host[-1].name='canaltv' uci set dhcp.@host[-1].mac='' # Settings → Network → посмотреть MAC uci set dhcp.@host[-1].ip='192.168.1.50' uci commit dhcp && /etc/init.d/dnsmasq restart ``` **5.2 pbr: весь трафик 192.168.1.50 → awg0** ```sh opkg update && opkg install pbr luci-app-pbr uci set pbr.config.enabled='1' uci add pbr policy uci set pbr.@policy[-1].name='CanalTV_FR' uci set pbr.@policy[-1].src_addr='192.168.1.50' uci set pbr.@policy[-1].interface='awg0' uci commit pbr && /etc/init.d/pbr restart /etc/init.d/pbr status # политика должна зарезолвиться (awg0 online) ``` **5.3 Приставку увести с FakeIP (иначе FakeIP-домены уедут в awg0 и сломаются на ней).** Самое надёжное и быстрое — задать DNS прямо на приставке: > Apple TV: Настройки → Сеть → (Wi-Fi/Ethernet) → Конфигурация DNS → **Вручную → 1.1.1.1**. DNS-запрос тоже уйдёт через Францию (pbr) → вернутся реальные IP, маршрутизируемые в awg0. На приставке выключи любой DoH/VPN-профиль. *(Альтернатива «всё на роутере» — tagged dhcp-option DNS для этого хоста; делать только если не хочешь трогать приставку.)* **Если НЕ хочешь pbr** (Plan B, по доменам): добавь домены Canal+ в `user_domains` подкопа (поймав их вживую): ```sh tcpdump -i br-lan -n 'udp port 53 and host 192.168.1.50' & # запусти приложение Canal+ — собери хосты uci set podkop.main.user_domain_list_type='dynamic' for d in mycanal.fr canalplus.com canal-plus.com <добавить пойманные>; do uci add_list podkop.main.user_domains="$d"; done uci commit podkop && /etc/init.d/podkop restart ``` Минус Plan B — легко пропустить CDN/DRM-хост → плеер падает. Для приставки pbr надёжнее. --- ## Фаза 6 — на месте: проверка Canal+ 1. На приставке (или `curl` с роутера от её таблицы) публичный IP = **французский**. 2. Запусти myCanal → должно определить Францию → live + VOD играют. 3. **«Недоступно в вашем регионе»** → IP VPS во франц-бане: - сменить франц-сервер/пересоздать VPS-IP, **или** временно завернуть приставку через IPRoyal `country-fr` ([[../../snippets/iproyal-gost-relay]]). 4. Тормозит/буферит → MTU (Фаза 3) или маловат VPS — проверить `iperf3` до VPS. --- ## Фаза 7 — после: задокументировать - [ ] Заполнить [[README]]: доступы Cudy, ``, ключи, MAC приставки. - [ ] Дописать строку в инвентарь [[../../snippets/podkop-reference#9-инвентарь-podkop-по-объектам]] (объект `OpenWrt_4`, EXIT=Франция, Canal+ через pbr). - [ ] Переименовать пир в NetBird `OpenWrt_4` → осмысленно. - [ ] Решение в `decisions/2026-06-02-openwrt4-canal-plus-france.md`. ## Чек-лист «взять с собой» `` · `server.pub` · `client.key` · `psk` · перевыпущенный NetBird-ключ (если понадобится) · MAC приставки.