Васин Константин
Гайд · GeoDNS

GeoDNS: один сайт для России и всего мира

Один домен, две одинаковые копии сайта — в Петербурге и в Хельсинки — и DNS, который отправляет посетителя из России на российский сервер, а остальных на зарубежный. Сайт открывается в Москве, Нью-Йорке и Сиднее и стоит в поиске и Яндекса, и Google.

2 сервера + Bunny DNS скрипт на 27 строк промпт для нейросети

8–11 октября 2026 года атаки на три дата-центра Яндекса — в Сасово, Калуге и Владимире — перевели Yandex Cloud в аварийный режим, и Яндекс сам посоветовал клиентам включать запасные планы восстановления. Сайты, которые жили только в этом облаке, легли вместе с ним.

Переезд к соседнему российскому облаку этот риск не снимает. Перенос всего за границу отрезает часть посетителей из России. Схема ниже держит две копии сразу: каждая сторона получает ближний сервер, и падение одного провайдера не кладёт сайт целиком.

Откуда схема

Так держат сайты для русскоязычной аудитории, которая живёт и в России, и за рубежом: визы, ВНЖ, переезд — когда одна и та же страница должна открываться в Москве и в Сиднее и ранжироваться в Google. Скрипт и команды сверены с документацией Bunny 15.10.2026. У себя мы ту же задачу пока решаем проще — CDN и входной дверью, сравнение в первом разделе.

01 Когда нужно 02 Схема 03 Что нужно 04 Скрипт 05 Промпт 06 Грабли 07 SEO 08 Проверка Вопросы

01Когда хватит CDN, а когда нужны два сервера

Две копии сайта — это вдвое больше выкладки и проверок. Сначала стоит понять, какую проблему вы решаете.

СитуацияРешениеЧто стоит
Сайт в России; у зарубежных посетителей и у тех, кто с VPN, тяжёлые файлы грузятся долго или обрываютсяCDN для статики: картинки, PDF и видео отдаются из ближайшей страны, страницы остаются на сервереодин вечер, сервер прежний
У части российских абонентов не открывается сам адрес сервераВходная дверь: второй российский сервер с прокси перед основным. У нас так со 2 сентября 2026 года: часть абонентов перестала доставать подсеть главного серверавторой VPS и несколько строк в настройках веб-сервера
Аудитория и в России, и за рубежом; нужны и Яндекс, и Google; падение одного провайдера не должно класть сайтGeoDNS и две копии сайта — этот гайдвторой сервер, синхронизация копий, перенос DNS

Если почти все посетители в России, начните с CDN. Если сайт живёт в одном российском облаке и его падение стоит денег, схема ниже окупается в первый же день аварии.

02Схема: DNS отвечает по стране посетителя

Россия и Беларусь получают адрес Петербурга, остальные страны — Хельсинки
Браузерпосетителя 1 Резолверпровайдера, Googleили Яндекса 2 Bunny DNS скрипт на каждый запрос страна RU или BY? свой сервер лежит —отдаёт второй две одинаковые копии сайта да нет ПетербургSelectel или BegetРоссия и Беларусь ХельсинкиHetzner или другой ЕСвсе остальные страны 4 открывает сайтпо выданному IP 3 Запасной вход: отдельный домен, DNS у российского регистратора → всегда Петербург ссылка для соцсетей и рассылок на случай блокировки Bunny · canonical на страницах — основной домен Браузер посетителя 1 Резолверпровайдера, Google или Яндекса 2 Bunny DNS скрипт на каждый запрос страна RU или BY? свой сервер лежит — отдаёт второй да нет ПетербургSelectel, BegetРоссия, Беларусь ХельсинкиHetznerвсе остальные 3–4 браузер открывает сайт по выданному IP Запасной вход отдельный домен, DNS у российского регистратора → всегда Петербург canonical на страницах — основной домен
  1. Браузер спрашивает адрес сайта у резолвера — DNS-сервера провайдера, Google или Яндекса.
  2. Резолвер идёт к DNS-хостингу домена, то есть к Bunny. На каждый запрос Bunny запускает ваш скрипт.
  3. Скрипт смотрит страну. Россия или Беларусь — отдаёт IP Петербурга, остальные страны — IP Хельсинки. Если выбранный сервер лежит, а второй жив, отдаёт второй.
  4. Браузер открывает сайт по полученному IP. Обе копии одинаковые, посетитель разницы не видит.

Пара Петербург — Хельсинки удобна расстоянием: между городами около 300 км, и обновления между копиями доходят быстро.

Почему скрипт, а не готовая гео-запись

У Bunny есть «умные» гео-записи, но они отдают ближайший по расстоянию сервер. Граница «ближе к Петербургу или к Хельсинки» не совпадает с границей России: по прямой Калининград ближе к Хельсинки, а Казахстан — к Петербургу. Правило по стране пишется скриптом, и список стран в нём меняется одной строкой.

03Что нужно и сколько стоит

ЧтоГде взятьЦена
Сервер в РоссииSelectel или Beget, Петербургдля лендинга и блога хватит минимального VPS
Сервер за рубежомHetzner, Хельсинки. У DigitalOcean и Hostinger Хельсинки нет — берите ближайший к России европейский город из их спискаминимальный VPS
DNS с ответом по скриптуBunny DNSзапросы бесплатны, минимальный счёт bunny.net — $1 в месяц
Запасной доменроссийский регистратор, DNS у него жецена домена за год
НейросетьClaude Code или Codexподписка, которая уже есть

Аккаунт у зарубежного хостера

Hetzner, DigitalOcean и другие проверяют страну клиента и карту. Регистрируйте аккаунт на реальное лицо или компанию, у которых есть право им пользоваться. Аккаунт на чужие данные хостер может закрыть вместе с сервером, а с ним пропадёт зарубежная половина сайта.

04Скрипт для Bunny DNS: Россия и Беларусь — в Петербург

Скрипт выполняется на каждый DNS-запрос к домену: берёт страну посетителя, выбирает сервер и проверяет, жив ли он. Впишите свои IP в первые строки.

СкриптBunny Scriptable DNS
/// <reference types="@bunny.net/scriptable-dns-types" />
// GeoDNS: Россия и Беларусь — на сервер в Петербурге, остальные — в Хельсинки.
const RU_IP = "203.0.113.10";      // сервер в Петербурге — впишите свой
const WORLD_IP = "198.51.100.20";  // сервер в Хельсинки — впишите свой
const RU_COUNTRIES = ["RU", "BY"];
const TTL = 60;                    // секунд: столько резолверы помнят ответ

/** @param {DnsRequest} query */
export default function handleQuery(query) {
  const req = query.request;

  // Страна посетителя. Google DNS и часть других резолверов присылают
  // подсеть посетителя (EDNS Client Subnet) — по ней точнее.
  let country = req.geoLocation.country;
  if (req.ednsIP && req.ednsIP !== "0.0.0.0") {
    country = GeoDatabase.resolve(req.ednsIP).country;
  }

  const home = RU_COUNTRIES.indexOf(country) !== -1 ? RU_IP : WORLD_IP;
  const spare = home === RU_IP ? WORLD_IP : RU_IP;

  // Свой сервер лежит, а второй жив — отправляем на второй.
  if (!Monitoring.getStatus(home).isOnline && Monitoring.getStatus(spare).isOnline) {
    return new ARecord(spare, TTL);
  }
  return new ARecord(home, TTL);
}

Как подключить

  1. В панели Bunny: DNS → Scripts → добавить скрипт, вставить код, сохранить и опубликовать.
  2. Создать зону домена и перенести в неё все записи со старого DNS: почту (MX), SPF, DKIM, подтверждения Вебмастера и Search Console. Без них после переезда пропадёт почта.
  3. Добавить запись типа Script (SCR) на корень домена и на www и выбрать в ней скрипт.
  4. Проверить ответы до переезда (раздел 08) и только потом сменить NS у регистратора на kiki.bunny.net и coco.bunny.net.

Строка с ednsIP решает главный нюанс схемы: Bunny видит резолвер посетителя — сервер, который спрашивает адрес от его имени. Резолвер провайдера стоит рядом с посетителем, Google DNS передаёт его подсеть, и в обоих случаях страна определяется верно. TTL 60 секунд значит, что после падения сервера посетители переедут на второй за пару минут.

05Промпт: нейросеть собирает схему сама

Вставьте текст в Claude Code или Codex на своём компьютере и заполните первые строки. Нейросеть сама зайдёт на серверы по SSH, соберёт копии и DNS и остановится перед необратимыми шагами — сменой NS у регистратора и отключением старого хостинга.

ПромптGeoDNS на двух серверах
Домен: <site.ru>. Сайт сейчас: <где лежит и на чём собран: статика / Next.js / WordPress / другое>.
Серверы: Россия <IP_RU> (ssh <алиас или user@IP>), за рубежом <IP_WORLD> (ssh <алиас или user@IP>).
Запасной домен: <site-ru.ru>, DNS у регистратора <название>. Ключ API Bunny лежит в <путь к .env> — в чат его не выводи.

Ты — администратор Linux. Собери GeoDNS: один домен, две одинаковые копии сайта; посетители из России и Беларуси — на российский сервер, остальные — на зарубежный. Делай сам, спрашивай меня только то, без чего не обойтись. Перед необратимыми шагами (смена NS у регистратора, отключение старого хостинга) остановись и спроси.

ШАГИ
1. Разведка. Опиши, как устроен сайт: статика или CMS с базой, где формы и куда уходят заявки. Сними снимок текущей зоны DNS: A, AAAA, CNAME, MX, TXT, CAA, NS — для корня, www и всех известных поддоменов, каждый тип отдельным запросом (ANY не используй). Сохрани снимок в файл. Покажи мне план до того, как что-то менять.
2. Копии сайта. На обоих серверах — одинаковая ОС и веб-сервер (Caddy или nginx). Файрвол пускает SSH, 80, 443 и ping.
   - Статика: сборка один раз, выкладка на оба сервера одним скриптом deploy-both.sh; в конце скрипт сравнивает хэши файлов на обоих серверах, расхождение — ошибка выкладки.
   - CMS с базой: основная база и админка — только на российском сервере, на зарубежном — копия только для чтения (репликация базы или выгрузка по расписанию, загрузки — rsync). Вариант предложи мне до того, как делать.
3. Заявки. Формы с обоих серверов пишут в одну базу на российском сервере или в российскую CRM: по 152-ФЗ персональные данные граждан России записываются в базу на территории России. Зарубежный сервер пересылает заявку на российский; если тот недоступен — держит её в очереди и досылает.
4. Сертификаты. Let's Encrypt проверяет домен со своих точек за рубежом и по GeoDNS попадёт на зарубежный сервер, поэтому HTTP-проверка на российском не пройдёт. На ОБОИХ серверах выпускай сертификат через DNS-проверку по API Bunny: Caddy с модулем caddy-dns/bunny или acme.sh с dns_bunny. Ключ — в .env с правами 600.
5. Зона в Bunny. Создай зону и перенеси ВСЕ записи из снимка шага 1. Скрипт GeoDNS возьми с vasinki.ru/guides/geodns/, впиши мои IP, опубликуй и привяжи записью Script к корню и www.
6. Проверка до смены NS. Спрашивай Bunny напрямую с подсетью: dig +short @kiki.bunny.net <домен> A +subnet=77.88.8.0/24 должен вернуть IP_RU, с +subnet=8.8.8.0/24 — IP_WORLD. Проверь AAAA: ответ пустой или правильный IPv6; если на AAAA-запрос приходит A-запись — заведи IPv6 на обоих серверах и отвечай AaaaRecord по request.queryType. Сверь почтовые и TXT-записи со снимком.
7. Смена NS. Скажи мне, что поставить у регистратора: kiki.bunny.net и coco.bunny.net. Дождись, пока dig NS покажет Bunny с нескольких публичных резолверов.
8. Запасной вход. Запасной домен — с DNS у российского регистратора, НЕ в Bunny и НЕ поддоменом основного: поддомен резолвится через те же NS. A-запись — на российский сервер, сертификат — обычной HTTP-проверкой. На всех страницах canonical — абсолютный адрес основного домена; если сейчас он относительный, исправь. В sitemap — только адреса основного домена.
9. Проверка по-настоящему. Через Globalping (api.globalping.io, без токена) из России, Беларуси, Германии и США: DNS-ответ (кто какой IP получил) и HTTP 200 главной и одной глубокой страницы. Сравни HTML с обоих серверов: curl -s --resolve <домен>:443:<IP> https://<домен>/ | sha256sum — запускай с сервера, не с моего компьютера: под VPN --resolve может показать не тот сервер. Проверь сертификаты на обоих IP.
10. Отказ. Останови веб-сервер на зарубежном, подожди 2 минуты, повтори dig с +subnet=8.8.8.0/24 — должен прийти IP_RU. Верни сервер. То же для российского.
11. Отчёт мне: схема, где что лежит, одна команда выкладки на оба сервера, как проверить, что копии не разъехались, что делать, если заблокируют Bunny.

ПРАВИЛА
- Ключи, пароли и токены в чат не выводи — только пути к файлам.
- Выкладка всегда на оба сервера сразу. Копия, отставшая на одну статью, — ошибка: Яндекс и Google увидят разные сайты.
- До шага 7 работающий сайт не трогай без моего согласия.
- Всё, что запускал для проверки, за собой гаси.

Когда схема заработает, обновления выкладывайте той же нейросети одной фразой: «Выложи изменения на оба сервера через deploy-both.sh и сверь хэши».

06Грабли: сертификаты, почта, зеркало

СимптомПричинаЧто делать
Сертификат на российском сервере не выпускаетсяLet's Encrypt проверяет домен со своих точек за рубежом и по GeoDNS попадает на зарубежный серверDNS-проверка через API Bunny на обоих серверах (шаг 4 промпта)
После переноса DNS перестала приходить почтаВ Bunny перенесли A-записи, а MX, SPF и DKIM остались у старого DNSСнимок зоны до переноса и сверка после (шаги 1 и 6)
Слетело подтверждение в Вебмастере или Search ConsoleTXT-запись подтверждения не переехалаТо же: сверка зоны со снимком
Яндекс видит новую статью, а Google получает 404Статью выложили только на один серверОдна команда выкладки на оба сервера и сверка хэшей
Заявка от посетителя из-за рубежа потеряласьФорма писала в базу зарубежного сервера, а заявки смотрят в российскойВсе формы — в одну базу на российском сервере, с очередью на случай обрыва
Запасной адрес лёг вместе с основнымЗеркало сделали поддоменом вроде ru.site.ru: он резолвится через те же NS BunnyЗапасной вход — отдельный домен с DNS у российского регистратора
После падения сервера сайт полчаса не открываетсяВысокий TTL: резолверы помнят старый ответTTL 60 секунд в скрипте
Посетитель из России попал на зарубежный серверЕго резолвер не передаёт подсеть — так работает Cloudflare 1.1.1.1, — и Bunny видит страну резолвераСайт от этого не ломается: копии одинаковые. Убедитесь, что зарубежный сервер открывается из России (шаг 9)
Проверка показывает «всё работает», а у людей не открываетсяМерили с дата-центров или с компьютера под VPN: у нас на этом уже ошибались, «Россия открывает» было измерено не с абонентских линийGlobalping из нужных стран; curl --resolve — с сервера
Сайт за прокси Cloudflare у посетителей из России грузится обрывкамиУ нас в сентябре 2026 года заголовки приходили с кодом 200, а страницы тяжелее 20–30 КБ рвались на серединеПрокси Cloudflare перед российским сервером не ставить

Персональные данные

По 152-ФЗ (ст. 18, ч. 5) персональные данные граждан России при сборе записываются в базу на территории России. Поэтому заявки с обеих копий сайта уходят в одну базу на российском сервере или в российскую CRM.

07SEO: что видят Яндекс и Google

Поисковики видят один сайт на разных IP. Это нормально, пока копии совпадают.

КтоКак спрашивает адресКакой сервер получит
Посетитель в России, DNS провайдерарезолвер стоит в РоссииПетербург
Посетитель в России, Google DNS 8.8.8.8Google передаёт подсеть посетителяПетербург
Посетитель в России, Cloudflare 1.1.1.1подсеть не передаётся, Bunny видит узел Cloudflareпо стране узла
Посетитель с VPNDNS обычно идёт через VPNпо стране выхода VPN; за рубежом — Хельсинки
Посетитель в США, Европе, Австралииместный резолверХельсинки
Робот Яндексаходит с российских адресовПетербург
Googlebotпо умолчанию ходит с адресов в СШАХельсинки

Каждый поисковик обходит свою копию, поэтому копии обязаны совпадать до последней статьи. Что проверить перед переездом:

Запасной домен ставьте в соцсетях и рассылках для российской аудитории: он откроется, даже если основной домен в России перестанет резолвиться.

08Проверка: страна → IP → страница

Bunny можно спросить напрямую, подставив подсеть нужной страны. Так ответы проверяются до смены NS.

Проверкаdig и curl
# Россия → должен прийти IP Петербурга
dig +short @kiki.bunny.net site.ru A +subnet=77.88.8.0/24
# США → должен прийти IP Хельсинки
dig +short @kiki.bunny.net site.ru A +subnet=8.8.8.0/24

# Копии одинаковые: хэши главной с обоих серверов совпадают
curl -s --resolve site.ru:443:<IP_RU> https://site.ru/ | sha256sum
curl -s --resolve site.ru:443:<IP_WORLD> https://site.ru/ | sha256sum
  1. Ответы dig с подсетью России и США — разные IP, как в комментариях.
  2. Хэши совпадают. У сайта на CMS в HTML бывают разовые метки — тогда сравнивайте текст статьи. curl --resolve запускайте с сервера: под VPN на компьютере он может показать не тот сервер.
  3. На Globalping — DNS-проверка и HTTP-проверка из России, Беларуси, Германии и США. Везде код 200, а IP — по схеме.
  4. Отказ: остановите веб-сервер на одной стороне. Через 2 минуты dig с подсетью этой стороны должен вернуть второй IP.

Частые вопросы

Что такое GeoDNS

DNS, который на один и тот же домен отвечает разными IP-адресами в зависимости от того, откуда пришёл запрос. Посетитель из России получает адрес российского сервера, остальные — зарубежного. Обе копии сайта одинаковые, поэтому разницы посетитель не видит.

Как сделать, чтобы сайт открывался и в России, и за границей

Держать две одинаковые копии сайта — в России и за рубежом — и отдавать каждому посетителю адрес сервера его стороны через GeoDNS. Если сайт уже стоит в России и плохо грузится только у части зарубежных посетителей и у тех, кто с VPN, обычно хватает CDN для картинок, PDF и видео.

Не накажут ли Яндекс и Google за сайт на двух серверах

Нет, если обе копии отдают одинаковые страницы: для поисковика это один сайт на разных IP. Робот Яндекса ходит с российских адресов и попадает в Петербург, Googlebot по умолчанию ходит с адресов в США и попадает в Хельсинки. Опасно расхождение копий — например, статья выложена на один сервер и не выложена на другой.

Почему сайт не открывается из-за границы или с VPN

У посетителя за границей или с VPN выход в интернет находится за рубежом, и для российского сервера он иностранец: запрос идёт через полмира, и часть пути может резаться или перегружаться. Зарубежная копия сайта или CDN дают такому посетителю короткий путь.

Что будет, если Bunny заблокируют в России

Российские резолверы не получат адрес ни основного домена, ни его поддоменов: поддомен резолвится через те же NS-серверы. Поэтому запасной вход — отдельный домен с DNS у российского регистратора, направленный на российский сервер. Его и ставят в соцсетях и рассылках.

Сколько стоит GeoDNS на Bunny

Запросы Bunny DNS, включая скриптовые записи, на октябрь 2026 года бесплатны, но у bunny.net минимальный счёт — $1 в месяц. Основные расходы — два сервера.

Источники

Что дальше

Нейросеть собирает инфраструктуру — вы проверяете результат

Такие же рабочие схемы — сайты, боты, контент-конвейеры на Claude Code — разбираю в канале. Там же выходят новые гайды и грабли, на которые я наступил первым.

Открыть канал →

Читать дальше

Все гайды рабочие: каждый — то, что реально крутится у меня, а не пересказ документации.

Claude Code и агенты

Хуки в Claude CodeАгент сам запускает твой скрипт: память на старте, сохранение контекста между сессиями, стоп-кран на опасные команды. Экономия токеновСтартовый вес сессии пересылается каждый ход. Как срезать его в разы: 48 400 → 15 200 токенов, готовые правила. Панель анализа расходаГотовый промпт: собирает локальную панель — сколько токенов и денег ушло по дням, проектам и моделям. Разбор инструментаСкилл: кидаешь ссылку на Reels, пост или репозиторий — получаешь вердикт, брать или мимо, и первый тест. Безопасная разработка с AIКак поручать код Claude Code или Codex и не терять рабочую версию: роли, три режима агента, 31 правило, промпт и чек-лист. Свой VPN-сервер за $3Готовый промпт: нейросеть сама поднимает VPN на зарубежном сервере. Хостинг, схема и грабли, на которых «подключено», а интернета нет.

SEO и сайты

SEO-машинаКарта из десяти систем, из которых собран сайт на ИИ-агентах: что делает каждая и как собрать такую же. GEO-оптимизация сайтаКак попадать в ответы ChatGPT, AI Overviews и Яндекс Нейро: механика, чеклист по четырём уровням и промпт для аудита и правок. Разведка нишиСкилл: go/no-go по нише до сборки сайта — спрос через Wordstat, деньги-страницы, контент-план. Сайт с нуля с ИИ-агентомЧто решить до первого промпта, зачем два раздельных ТЗ и как сразу заложить блог с категориями. SAYT.md: сайт по одному файлуПромпт-файл: нейронка расспрашивает о бизнесе, разбирает топ-10, отзывы и спрос, строит структуру и только потом собирает сайт. Самоаудит сайта20 проверок за 30 секунд и сравнение с медианой по 83 сайтам малого бизнеса. Скрипт бесплатный. CDN для сайтаЧтобы сайт открывался у всех — с VPN и из других стран — и грузился быстро. Три правила для российского сервера, порядок действий и проверка. Wordstat APIПодключение через Yandex Cloud за 15 минут: API-ключ, Folder ID, роль, проверка, лимиты и деньги. API поисковиковТокен Яндекс.Вебмастера и доступ к Google Search Console. Включая ловушку с семью днями.

Видео и контент

6 проектов в Claude CodeКонтент-пайплайн целиком: карусели, Reels, озвучка клон-голосом, авто-монтаж, второй мозг. Монтаж «голова + экран»Обучающий ролик с лицом поверх записи экрана: синхронизация, резка тишины, поиск фальстартов, вставки. Индекс видеотекиГотовый промпт: ИИ режет все видео на диске на смысловые куски с таймкодами — что происходит, что говорится, подо что годится. Блог с нуля: промпты и сетапМатериалы к ролику: стратегия, что продавать, бот с дожимом, сайт с оплатой, автовыдача доступа и разбор воронки.