montana/Node/External-Audit/SEAMLESS-FAILOVER.md
2026-05-21 03:44:38 +03:00

3.6 KiB
Raw Blame History

Бесшовный failover при падении узла

Версия: 2026-05-20

Проблема

Хостинг VPN-узла (например THE.Hosting для Helsinki) может упасть в любой момент. Пользователи на этом узле получают разрыв и таймаут.

Решение — DNS-failover на уровне per-city hostname

fi.montana.quest, de.montana.quest, us.montana.quest — A-записи Cloudflare, TTL=120s.

В нормальном режиме каждая указывает на «свой» узел.

При падении orchestrator watchdog (Moscow) автоматически:

  1. Детектит offline за ≤60 секунд (2 fails подряд × 30s).
  2. PATCH-ит A-запись через Cloudflare API: <dead-host>.montana.quest → IP fallback узла.
  3. Клиент при reconnect перерезолвит hostname → попадёт на живой узел.
  4. Ключ универсальный — Reality auth проходит на любом узле тем же UUID/pbk/sid.
  5. Когда узел восстанавливается → A-запись возвращается на родной IP.

Fallback таблица

Hostname Native Fallback (по приоритету)
fi.montana.quest 91.132.142.42 (FI) de → us
de.montana.quest 89.19.208.158 (FRA) fi → us
us.montana.quest 86.104.72.12 (US) de → fi

Endpoints

URL Что
/vpn/node/failover Текущее соответствие hostname → IP и причина
/vpn/node/uptime Статус каждого узла (online/offline + 24h uptime)

Гарантии

Свойство Как достигается
Detection ≤ 60s Watchdog probe каждые 30s, threshold 2 fails
DNS update ≤ 5s Cloudflare API PATCH, propagation мгновенная на CF NS
Клиент перейдёт ≤ 120s TTL=120s + reconnect клиента
End-to-end seamless ~60-120s от момента падения до бесшовной работы

E2E доказательство (2026-05-20)

00:00:10 — ssh montana-us 'systemctl stop xray'
00:00:45 — us.montana.quest перепрыгнул на 89.19.208.158 (Frankfurt) за 35 секунд
00:00:45 — ssh montana-us 'systemctl start xray'
00:01:?? — us.montana.quest вернулся на 86.104.72.12 (native US)

Что НЕ маскируется

  • Geo-location пользователя: клиент думает что подключён к Хельсинки, реально на Frankfurt. На сайте /vpn/node/failover это видно публично.
  • Latency: failover-узел может быть географически дальше, latency возрастёт. Это лучше чем «нет VPN».

Что показано пользователю

На сайте montana.quest/vpn/:

  • 🇫🇮 Хельсинки Монтана: 🟢 Онлайн | 🔴 Офлайн (по /vpn/node/uptime)
  • Можно добавить badge «⚠ временно через FRA» когда failover активен (P1).

Roadmap

  • P1: Бейдж на сайте «обслуживается через X» когда узел в failover.
  • P2: Per-region fallback policy — европейцы получают европейский fallback, NA — американский.
  • P3: Multi-A для каждого per-city hostname с health-based weighting.