Свёл разрозненные знания о 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>
8.5 KiB
date, type, tags
| date | type | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-05-12 | snippet |
|
Диагностика подкоп-роутера (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. Базовое — что вообще стоит
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 туннель живой?
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 процесс живой?
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.
3. nft маркировка и tproxy
podkop check_nft | grep -E "tproxy|@podkop_subnets|198\.18"
nft list table inet podkop 2>&1 | head -80
Смотреть счётчики (counter packets <N>):
- Если 0 пакетов в
proxychain черезtproxy ip to 127.0.0.1:1602— клиенты не идут через FakeIP вообще (см. шаг 5). - Если есть пакеты — заворот работает, проблема ниже.
4. AmneziaWG реально маршрутизирует?
# Базовый 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.
ip rule | grep -E "podkop|fwmark"
jq '.outbounds[] | select(.tag=="main-out")' /etc/sing-box/config.json
5. FakeIP реально подменяет?
# Через локальный 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 обходится).
Что подключено сейчас:
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-цепочка целая?
# Кто слушает 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.leasesMAC с рандомизированным первым октетом02,06,0a,0e(приватный Wi-Fi на iOS/Android) - Curl с роутера работает, у клиента — нет
Что сказать клиенту (iPhone):
- iCloud Private Relay → ВЫКЛ
- Wi-Fi → DNS → Автоматически
- Safari → Скрывать IP → ВЫКЛ
- Chrome → DNS over HTTPS → ВЫКЛ
Если клиент-сайд не подействовал — сделать на роутере:
# 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 уже стоит