Внешний вид
Кейс №9: «Интернет пингуется за 0.3 мс» — ICMP-прокси VPN обманывает диагностику
Дата: 2026-10-05 Среда: домашний хост обучающегося (Omarchy), два VPN-клиента (OpenVPN site-to-site + Throne split-tunnel с nftables/NFQUEUE). Статус: ✅ разгадано; netdiag.sh улучшен детектором
Симптом
Проверка качества сети: ping 1.1.1.1 — 0.3 мс стабильно, 0% loss. Одновременно ping до шлюза (D-Link в той же комнате) — 6.5 мс. Пинг до VPS в интернете — 39 мс. Интернет отвечает быстрее, чем собственный роутер — физически невозможно.
Диагностика
ip route get 1.1.1.1→ обычный путь через Wi-Fi/шлюз. Маршрут «чист».- TTL-анализ ответов (ключевой шаг):
text
ping 1.1.1.1 → ttl=64 ← у публичного IP быть не может!
ping 9.9.9.9 → ttl=64 ← локальный ответ
ping ya.ru → ttl=53 ← настоящий интернет (64 минус ~11 хопов)
ping 192.168.1.1 → ttl=64 (норма для локального шлюза)У IP-пакета TTL уменьшается на каждом маршрутизаторе. Ответ от настоящего интернет-хоста всегда приходит с ttl < 64 (типично 45–60). ttl=64 от публичного адреса = ответил хост в нулевых хопах — то есть сама машина.
- Механизм:
nft list ruleset→ правилаicmp type echo-request queue to 100— ICMP echo-requests уходят в NFQUEUE, где их отвечает userspace-процесс (ThroneCore, клиент сплит-VPN). Соседней ARP-записи для 1.1.1.1 нет — L2-обмена вообще не было.
Выводы
- VPN-клиенты с TUN/NFQUEUE-архитектурой часто подменяют ping, чтобы «интернет выглядел живым» и чтобы обходить блокировки ICMP. Диагностический вывод: на машине с таким клиентом шаг «ping внешнего IP» недостоверен.
- TTL — быстрый детектор подделки: публичный IP с ttl≥64 = локальный ответ. Добавлено в netdiag.sh как предупреждение
[WARN]. - Каскадная проверка «мир жив?» должна опираться на TCP/HTTP к известному ресурсу, а не только на ICMP.
- Правило эпохи VPN: «сначала спроси, кто на этой машине отвечает за пакеты» (nftables-правила, NFQUEUE, TUN-интерфейсы) — прежде чем верить любым сетевым измерениям.
Патч инструмента
netdiag.sh, секция 5: после успешного ping извлекается ttl; если ttl ≥ 64 для публичного адреса — вывод предупреждения о недостоверности проверки и подсказка смотреть TCP-проверки. Проверено на проблемной машине — детект срабатывает.