MTA.LAB.mtalab.cc Поддержка →
Релиз

AltDNS 1.2.0: гео-маршрутизация и failover для доменов

DNS-платформа MTA.LAB получила гео-маршрутизацию и отказоустойчивость: теперь домен может отдавать разные IP по странам и континентам и переключаться на backup при падении узла. Разбираем четыре режима правил, Lua-строки, API и установку.

До сих пор маршрутизацию в AltDNS решали обычные A-записи: просто, предсказуемо, но один IP на всех. Если узел ложился, трафик по кампании останавливался до правки записи, а мульти-ГЕО лендинги приходилось разводить разными доменами. В 1.2.0 это меняется: платформа научилась отвечать на DNS-запрос по гео и по состоянию узла.

Обе возможности работают на уровне DNS — до HTTP, до трекера и до приложения. Это значит, что ссылки в источниках остаются неизменными, а логика маршрутизации живёт в одном месте и меняется одной записью.

Что нового в 1.2.0

Ядро релиза — четыре типа правил. Они покрывают и гео-сценарии, и отказоустойчивость, и их комбинацию.

РежимЧто делаетКогда выбирать
geoОтдаёт IP по стране или континенту резолвера, с обязательной дефолтной веткойМульти-ГЕО лендинги, раздача ближайших узлов, разделение потоков
closestВозвращает ближайший по сети IP из пулаОдин лендинг на нескольких PoP; узлы равнозначны
failoverHealth-check primary и автоматическая выдача backup при паденииОтказоустойчивость трекера, лендингов и API
geo_failoverГео-ветки, внутри каждой — свой health-checkМульти-ГЕО и высокая доступность одновременно
  • Условия country и continent. Ветки задаются по стране или континенту резолвера — без ручных таблиц IP.
  • Health-check порта или URL. Проверяется TCP-порт или HTTP-эндпоинт с настраиваемыми timeout и retries.
  • Комбинация гео и failover. Режим geo_failover держит backup внутри каждой гео-ветки и общий дефолт снаружи.
  • Управление из UI. Секция «Гео-маршрутизация и отказоустойчивость» на странице зоны: сборка правила и предпросмотр сгенерированной Lua-строки до сохранения.
  • Управление через API. Создание, правка, удаление и предпросмотр правил плюс справочник стран для автоматизации.
  • Installers 1.2.0. Установщик уже содержит новый модуль — отдельные зависимости ставить не нужно.
  • DB-IP Lite с автообновлением. База гео-данных обновляется автоматически раз в месяц.

Как это работает

Правило — это Lua-запись PowerDNS. Она выполняется в момент ответа на DNS-запрос и решает, какой IP вернуть. Никакого отдельного процесса между клиентом и сервером нет: всё происходит внутри авторитативного DNS-сервера.

Гео определяется по IP резолвера, который обратился к серверу. Функции country() и continent() смотрят на источник запроса:

ECS не учитывается. EDNS Client Subnet в платформе сознательно игнорируется: не все резолверы его пробрасывают, и ответ на его основе получился бы нестабильным. Пользователи одного публичного резолвера получают один и тот же ответ — это предсказуемо и удобно для тестирования.

Второй механизм — health-check. Проверки primary идут в фоне: платформа периодически стучится в порт или URL и держит актуальный статус узла. DNS-запрос не ждёт проверки — он получает уже готовый результат, поэтому задержка ответа не растёт. При неудаче правило возвращает backup IP, при восстановлении — снова primary.

Скорость переключения складывается из интервала проверки и TTL ответа. Рабочие значения: 60–120 секунд для failover-веток и 300 секунд для стабильных гео-веток.

Примеры сгенерированных правил

Писать Lua руками не нужно: вы заполняете ветки в UI, а строку платформа собирает сама и показывает в предпросмотре. Вот что уходит в запись.

geo — страна резолвера решает, какой IP вернуть, дефолт обязателен:

if country() == "RU" then
  return "1.1.1.1"
end
-- дефолтная ветка: обязательна
return "9.9.9.9"

failover — health-check порта 443, при неудаче отдаётся backup:

if ifportup(443, {"10.0.0.10"}, {timeout=1000, retries=2}) then
  return "10.0.0.10"
end
return "10.0.0.20"

geo_failover — комбинация: гео-ветка, внутри неё primary/backup, снаружи общий дефолт:

if country() == "RU" then
  if ifportup(443, {"10.0.0.10"}) then return "10.0.0.10" end
  return "10.0.0.20"
end
return "9.9.9.9"

Полный разбор всех четырёх режимов, пошаговая настройка и чек-лист — в отдельном материале: гео-маршрутизация и failover для трекера.

API: создание и предпросмотр

Всё, что доступно в UI, доступно и по REST. Создание гео-правила:

TOKEN=...; ZONE=go.example.com

curl -s -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"geo","ttl":300,
       "rules":[{"country":"RU","answer":"1.1.1.1"}],
       "default":"9.9.9.9"}' \
  https://dns.mtalab.cc/api/v1/zones/$ZONE/lua

Предпросмотр без сохранения — удобно, чтобы проверить итоговую Lua-строку перед записью:

curl -s -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"failover","default":"10.0.0.20"}' \
  https://dns.mtalab.cc/api/v1/zones/$ZONE/lua/preview

Справочник стран для условий:

curl -s -H "Authorization: Bearer $TOKEN" \
  https://dns.mtalab.cc/api/v1/lua/countries

Установка и обновление

Отдельного модуля нет: installer 1.2.0 уже ставит всё — Lua-записи, фоновый health-check и набор гео-данных. После установки секция гео-маршрутизации появляется на странице зоны сразу, дополнительная настройка не требуется.

База DB-IP Lite обновляется автоматически раз в месяц, так что списки стран и континентов не нужно тянуть руками. Правила совместимы с уже существующими зонами: обычные A-записи продолжают работать, а Lua-правила добавляются поверх них точечно.

  • Обновите инсталляцию до 1.2.0 — installer проведёт миграцию и поднимет модуль правил.
  • Проверьте, что в гео-правиле есть дефолтная ветка с живым IP: страна без правила не должна получать пустой ответ.
  • Задайте TTL под задачу: 60–120 секунд для failover, 300 — для стабильных гео-веток.
  • После сохранения проверьте ответ через dig из разных гео и убедитесь, что health-check видит primary.
  • Включите алерты на недоступность узла в Telegram и следите за логами зоны.

Что дальше

Гео-маршрутизация и failover — базовые строительные блоки: на них удобно собирать мульти-ГЕО лендинги, прятать рабочие узлы за дефолтной веткой и держать сервис живым без ручных переключений. Продукт целиком — на странице DNS-платформы, а релиз-заметки и другие материалы — в блоге.

← Все статьи блога Гео-маршрутизация и failover для трекера: как настроить → DNS-платформа →
AltDNS 1.2.0 — гео и failover из коробки

Зоны, Lua-правила, health-check и логи запросов — в одном кабинете. Демо без регистрации, данные вымышленные.

DNS-платформа подробнее → Проверить домены
Уже обновились до 1.2.0?

Пришлите схему потоков и гео — поможем собрать первые правила и проверить ответы из нужных стран.

Написать в поддержку