Files
knowledge-base/snippets/podkop-fakeip-diagnostics.md
dttb d97e7a4a03 podkop: канонический справочник (модель/списки/грабли/инвентарь)
Свёл разрозненные знания о podkop в один single-source-of-truth: snippets/podkop-reference.md.
Главное — семантика inside/outside (причина НИИКН-косяка), каталог листов + decision guide,
правильный конфиг, каталог граблей (busybox ip -br, слетающие overrides, fwmark vs NetBird,
cache.db lock, disable_quic, MTU), инвентарь podkop по объектам. Линки из runbook + CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:31:58 +03:00

156 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-05-12
type: snippet
tags: [openwrt, podkop, fakeip, amneziawg, sing-box, diagnostics, playbook]
---
# Диагностика подкоп-роутера (podkop + sing-box + AmneziaWG + FakeIP)
Универсальный playbook когда клиент жалуется «обход не работает» на типовом домашнем сетапе Олега. Идти **строго по порядку** — каждый шаг отсекает класс причин.
> SSH-доступ ко всем роутерам Олега: `ssh root@<netbird-ip>` пароль `1qaz!QAZ`.
> На Сергее проверено 2026-05-12 — см. [[../decisions/2026-05-12-sergey-instagram-iphone-fakeip]].
> 📖 **Модель / списки / правильный конфиг / грабли / инвентарь → [[podkop-reference]]** (это — только пошаговая диагностика).
## 0. Базовое — что вообще стоит
```sh
cat /etc/openwrt_release
opkg list-installed | grep -iE "podkop|sing-box|amneziawg|adguard|netbird|dnsmasq"
ps w | grep -iE "sing-box|podkop|adguard" | grep -v grep
```
## 1. AmneziaWG туннель живой?
```sh
ip -br a | grep -iE "awg|wg"
awg show awg0 # latest handshake должен быть <2 мин
ip route | grep awg0 # должен быть default или markroute
```
- **Handshake > 5 мин** → endpoint недоступен или порт зарезан DPI. Проверить с другого хоста `curl <endpoint>:<port>` (если TCP-VLESS) или ребутнуть peer.
- **Нет интерфейса awg0** → kmod-amneziawg не загружен или конфиг побит: `dmesg | grep -i amnezia`, `uci show network | grep awg`.
## 2. Sing-box процесс живой?
```sh
ps w | grep -v grep | grep sing-box
ls -la /etc/sing-box/cache.db # дата = когда последний раз был апдейт fakeip
podkop check_logs 2>&1 | tail -40
```
- Если sing-box crash-loop'ит — обычно **залочен `/etc/sing-box/cache.db`** (две копии sing-box после ребута). Фикс: `killall sing-box; sleep 2; /etc/init.d/podkop restart`.
- См. также [[../../.claude/projects/-Users-ai-knowledge-base/memory/feedback_openclaw_crash_loop|памятку про sing-box crash-loop]].
## 3. nft маркировка и tproxy
```sh
podkop check_nft | grep -E "tproxy|@podkop_subnets|198\.18"
nft list table inet podkop 2>&1 | head -80
```
Смотреть счётчики (`counter packets <N>`):
- Если **0 пакетов** в `proxy` chain через `tproxy ip to 127.0.0.1:1602` — клиенты не идут через FakeIP вообще (см. шаг 5).
- Если **есть пакеты** — заворот работает, проблема ниже.
## 4. AmneziaWG реально маршрутизирует?
```sh
# Базовый WAN exit
curl -4 -s --max-time 5 https://ifconfig.me; echo
# Через туннель
curl -4 -s --max-time 5 --interface awg0 https://ifconfig.me; echo
```
Должны вернуться **разные IP**. Если оба = WAN — `ip rule` / fwmark сломан, либо `main-out` в sing-box без `bind_interface: awg0`.
```sh
ip rule | grep -E "podkop|fwmark"
jq '.outbounds[] | select(.tag=="main-out")' /etc/sing-box/config.json
```
## 5. FakeIP реально подменяет?
```sh
# Через локальный dnsmasq
for d in www.instagram.com chatgpt.com discord.com www.youtube.com; do
printf "%-25s -> " "$d"
nslookup $d 192.168.1.1 2>/dev/null | awk '/^Name:/{getline; print $2}'
done
```
- Ответы `198.18.x.x` → FakeIP работает ✅
- Реальные IP типа `157.240.x.x` → домен **не в community-list**, либо `domain_resolver_enabled=1` (тогда sing-box резолвит сам, fakeip обходится).
Что подключено сейчас:
```sh
uci get podkop.main.community_lists # сейчас: russia_inside, telegram, meta
podkop list_update # обновить вручную
```
Доступные community-листы podkop: `russia_inside`, `russia_outside`, `telegram`, `meta`, `discord`, `cloudflare`, `oai` (OpenAI/ChatGPT), `twitter`, `hdrezka` и др.
> ⚠️ **inside ≠ outside!** Объект в РФ (обход РКН, зарубежный выход) → `russia_inside` или точечные `meta`/`youtube`/`telegram`. **НИКОГДА `russia_outside`** — он гонит РФ-сайты (gosuslugi/ozon/ЕИС) в зарубежный выход → гео-блок. Полная семантика: [[podkop-reference#2-списки-insideoutside-главные-грабли]].
Добавить — `uci add_list podkop.main.community_lists='discord'; uci commit podkop; /etc/init.d/podkop restart`.
## 6. DNS-цепочка целая?
```sh
# Кто слушает 53?
ss -ulnp 2>&1 | grep ":53"
# Через что dnsmasq форвардит
uci show dhcp.@dnsmasq[0] | grep -E "server|noresolv"
# Прямой 8.8.8.8 / 1.1.1.1 не режется провайдером?
nslookup chatgpt.com 8.8.8.8
nslookup chatgpt.com 1.1.1.1
```
Корректная цепочка для типового стэка: `LAN → dnsmasq:53 → 127.0.0.42 (sing-box DNS) → upstream` (с `noresolv=1`).
Цепочка с AGH (как у Олега в HomeLab): `LAN → dnsmasq:53 → AGH:5353 → 127.0.0.42 (sing-box) → upstream`.
## 7. Клиент сам обходит роутерный DNS? (iPhone-проблема)
Это **самая частая причина**, когда роутер исправен. См. полный фикс [[../decisions/2026-05-12-sergey-instagram-iphone-fakeip]].
Признаки:
- В `/tmp/dhcp.leases` MAC с рандомизированным первым октетом `02`, `06`, `0a`, `0e` (приватный Wi-Fi на iOS/Android)
- Curl с **роутера** работает, у клиента — нет
Что сказать клиенту (iPhone):
1. iCloud Private Relay → ВЫКЛ
2. Wi-Fi → DNS → Автоматически
3. Safari → Скрывать IP → ВЫКЛ
4. Chrome → DNS over HTTPS → ВЫКЛ
Если клиент-сайд не подействовал — сделать на роутере:
```sh
# DNAT всего LAN-DNS:53 → роутер
nft 'add rule inet fw4 dstnat iifname "br-lan" meta l4proto { tcp, udp } th dport 53 dnat ip to 192.168.1.1:53'
# Reject DoH/DoT к публичным резолверам
nft 'add set inet fw4 doh_servers { type ipv4_addr; flags interval; elements = { 1.1.1.1, 1.0.0.1, 8.8.8.8, 8.8.4.4, 9.9.9.9, 149.112.112.112 } }'
nft 'add rule inet fw4 forward iifname "br-lan" ip daddr @doh_servers tcp dport { 443, 853 } reject with tcp reset'
```
## 8. Что является НОРМОЙ (не баг)
- **Meta NetSeer probes** в логе sing-box: `ERROR ... {GUID}-netseer-ipaddr-assoc.xy.fbcdn.net: empty result` — anti-CDN-detection Meta, штатное поведение, игнорировать.
- **`podkop check_fakeip` показывает российский IP** — тестовый домен `ip.podkop.fyi` не в community-list, идёт direct через WAN. Это проверка что *fakeip-сервис* работает, а не *обход* работает.
- **`ash: ^[0-9]+...: unknown operand`** в выводе `podkop check_proxy`баг regex'а в `/usr/bin/podkop`, не влияет.
## 9. Когда уже всё проверено и не помогло
- Поменять `dns_type` с `udp` на `doh` (если провайдер режет UDP/53 — редко, но бывает): `option dns_type 'doh'; option dns_server 'https://dns.google/dns-query'`.
- Перейти с `connection_type=vpn` (AWG) на `connection_type=proxy` (VLESS) — секция `vlees` уже настроена как резерв.
- Проверить MTU: `ping -M do -s 1380 8.8.8.8` через awg0 — если фрагментация, MTU 1420 на awg0 уменьшить до 1380.
## Ссылки
- [[../projects/sergey/README]] — пример полностью разобранного объекта
- [[../decisions/2026-05-12-sergey-instagram-iphone-fakeip]] — кейс iPhone + Private Relay
- [[../decisions/2026-04-30-openwrt-homelab-agh-podkop-chain]] — стэк AGH+podkop у Олега дома (как добавить AGH к роутеру клиента)
- [[../projects/dttb/openwrt-router]] — домашний OpenWrt, DNS hijack уже стоит