Skip to content

Кейс №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 мс. Интернет отвечает быстрее, чем собственный роутер — физически невозможно.

Диагностика ​

  1. ip route get 1.1.1.1 → обычный путь через Wi-Fi/шлюз. Маршрут «чист».
  2. 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 от публичного адреса = ответил хост в нулевых хопах — то есть сама машина.

  1. Механизм: nft list ruleset → правила icmp type echo-request queue to 100 — ICMP echo-requests уходят в NFQUEUE, где их отвечает userspace-процесс (ThroneCore, клиент сплит-VPN). Соседней ARP-записи для 1.1.1.1 нет — L2-обмена вообще не было.

Выводы ​

  1. VPN-клиенты с TUN/NFQUEUE-архитектурой часто подменяют ping, чтобы «интернет выглядел живым» и чтобы обходить блокировки ICMP. Диагностический вывод: на машине с таким клиентом шаг «ping внешнего IP» недостоверен.
  2. TTL — быстрый детектор подделки: публичный IP с ttl≥64 = локальный ответ. Добавлено в netdiag.sh как предупреждение [WARN].
  3. Каскадная проверка «мир жив?» должна опираться на TCP/HTTP к известному ресурсу, а не только на ICMP.
  4. Правило эпохи VPN: «сначала спроси, кто на этой машине отвечает за пакеты» (nftables-правила, NFQUEUE, TUN-интерфейсы) — прежде чем верить любым сетевым измерениям.

Патч инструмента ​

netdiag.sh, секция 5: после успешного ping извлекается ttl; если ttl ≥ 64 для публичного адреса — вывод предупреждения о недостоверности проверки и подсказка смотреть TCP-проверки. Проверено на проблемной машине — детект срабатывает.