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