# Бесшовный 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: `.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.