Как сайт отдаёт разный IP для РФ и CloudFlare?
Многие вебмастера сталкиваются с задачей: для посетителей из России показывать сервер внутри страны, а для остального мира - использовать CloudFlare. При этом CloudFlare обычно требует, чтобы домен делегировался на его DNS-сервера. Однако существуют обходные решения. Рассмотрим на примере сайта blogs.rufox.ru, который использует ns1.edgedns.ru и ns2.edgedns.world, но при этом для РФ отдаёт локальный IP, а для всех остальных - адреса CloudFlare.
Принцип работы GeoDNS (геозависимого DNS)
GeoDNS (геолокационный DNS) - это технология, которая позволяет возвращать разные IP-адреса в зависимости от географического положения запрашивающего DNS-резолвера. Сервер имён анализирует IP-адрес резолвера и сопоставляет его со страной или регионом. В результате:
- Для резолверов из РФ отдаётся IP-адрес российского сервера (например, 95.163.ккк.ккк).
- Для всех остальных резолверов - IP-адреса CloudFlare (например, 104.21.ккк.ккк).
Это реализуется на уровне DNS-провайдера, поддерживающего GeoDNS. В данном случае используется edgedns.ru - это сервис от Selectel (или аналогичный), который как раз предоставляет геозависимую маршрутизацию.
Как обойти требование CloudFlare о своих DNS?
CloudFlare действительно требует, чтобы домен был делегирован на его DNS-сервера, если вы хотите использовать его CDN и защиту. Но есть два способа обойти это ограничение:
1. Использовать CloudFlare в режиме CNAME (DNS-Only или прокси через CNAME)
Если у вас корневой домен (например, example.com), то CNAME-запись для корня технически невозможна. Но для поддоменов (например, blog.example.com) можно создать CNAME-запись, указывающую на домен CloudFlare. Однако CloudFlare не поддерживает CNAME-флаттенинг для всех тарифов. Вместо этого часто используют сервисы-посредники, которые эмулируют CNAME для корня.
2. Использовать CloudFlare как upstream (обратный прокси) без делегирования DNS
В некоторых конфигурациях CloudFlare позволяет указать ваш реальный сервер как origin, а DNS остаётся у другого провайдера. Для этого нужно:
- Настроить в панели CloudFlare ваш домен (он всё равно должен быть добавлен, но DNS-записи могут быть неактивны).
- Использовать GeoDNS, который для большинства посетителей отдаёт IP-адреса CloudFlare (например, 104.21.x.x), а для РФ - ваш прямой сервер.
- CloudFlare в этом случае работает как обычный обратный прокси, но трафик от российских пользователей идёт напрямую, минуя CloudFlare.
Важно: такой подход может нарушать условия использования CloudFlare (в бесплатном тарифе требуется делегирование DNS), но технически он реализуем.
Настройка на примере edgedns.ru
Сервис edgedns.ru (от Selectel) предоставляет возможность создавать Geo-записи. Выглядит это примерно так:
- Создаёте A-запись для домена с указанием IP российского сервера и страной "RU".
- Создаёте A-запись по умолчанию (Default) с IP-адресами CloudFlare (например, 104.21.16.1 и 172.67.1.1).
- Система автоматически отдаёт российским пользователям первый IP, всем остальным - второй.
Таким образом, DNS не делегируется CloudFlare, но трафик от иностранных пользователей всё равно проходит через его сеть.
Проверка работы схемы
Чтобы убедиться, что схема работает, используйте сервисы проверки DNS из разных стран, например:
- check-host.net (выберите локации: Москва, Лондон, Нью-Йорк).
- dnschecker.org с выбором страны.
- dig @8.8.8.8 blogs.rufox.ru (для США) и dig @77.88.8.8 blogs.rufox.ru (для РФ).
Разные ответы подтвердят, что используется GeoDNS.
Заключение
Сайт blogs.rufox.ru использует комбинацию GeoDNS (edgedns.ru) и CloudFlare как upstream-прокси. Для РФ отдаётся прямой IP, для остального мира - адреса CloudFlare. Это позволяет ускорить загрузку для локальных пользователей и одновременно пользоваться защитой CloudFlare для глобального трафика, не делегируя домен на DNS CloudFlare.