Задать вопрос

Google public DNS и определение страны пользователя. Как?

Для сайта с разнесенными серверами настроили GeoDNS на своем ДНС-сервере. Определяем на Bind-е страну по IP-адресу клиента, используя GeoIP базу от Maxmind.

Для домена emuzo.net на нс-сервере ns1.emuzo.net и ns2.emuzo.net отдаем ip (IP-адреса 127.х.х.х прописаны на ДНС-серверах в наглядных целях.):
127.0.1.1 для США
127.0.1.2 для Германии
127.0.1.3 для Украины
127.0.1.4 для России
127.0.1.100 для всех остальных стран

Всё работает, но вместе с тем обнаружили недостоверность определения страны пользователя при использовании им ДНС-серверов от Google (8.8.8.8).
Так, например, при использовании Google Public DNS в Украине, рекурсивный днс-сервер гугла 8.8.8.8 обращается к нашему Bind-у с IP-адресов, которые определяются по базе Maxmind либо как DE, либо как US, т.к. входят в блоки гугловских IP.
Соотвественно и пользователь направляется на 127.0.1.1 (США) или 127.0.1.2 (Германия) вместо 127.0.1.3 (Украина).

Запрос из Украины с использованием ДНС-ов провайдера:
nslookup emuzo.net
╤хЁтхЁ: ns3.farlep.net
Address: 213.130.4.1
Не заслуживающий доверия ответ:
╚ь : emuzo.net
Address: 127.0.1.3 — Украина

Запрос из Украины с использованием ДНС-ов Google Public DNS:
nslookup emuzo.net 8.8.8.8
╤хЁтхЁ: google-public-dns-a.google.com
Address: 8.8.8.8
Не заслуживающий доверия ответ:
╚ь : emuzo.net
Address: 127.0.1.2 — Германия

Попробовали платный сервис. При использовании функции GeoDNS от ведущего сервиса ДНС-хостинга Zerigo.net ситуация аналогичная.
В настройках сервиса прописал нижеследующие IN A записи для домена emuzo.info:
127.0.0.1 для США
127.0.0.2 для Германии
127.0.0.3 для Украины
127.0.0.4 для России
127.0.0.5 для остальной европы
127.0.0.100 для всех остальных стран

Запрос из Украины с использованием ДНС-ов провайдера:
nslookup emuzo.info
╤хЁтхЁ: ns3.farlep.net
Address: 213.130.4.1
Не заслуживающий доверия ответ:
╚ь : emuzo.info
Address: 127.0.0.3 — Украина

Запрос из Украины с использованием ДНС-ов Google Public DNS:
nslookup emuzo.info 8.8.8.8
╤хЁтхЁ: google-public-dns-a.google.com
Address: 8.8.8.8
Не заслуживающий доверия ответ:
╚ь : emuzo.info
Address: 127.0.0.1 — США

Мы уже было смирились с этой проблемой как с издержками GeoDNS, НО случайно попался в поле зрения сервис CDN (сеть доставки контента, состоящая из разнесенных по миру серверов), который эту задачу решает.

Эта CDN сеть для наших задач предоставила субдомен 493511490.r.cdnua.net
записи для него хранятся на ns1.worldcdn.net (69.168.228.1), ns2.worldcdn.net (69.168.229.1)

И эти DNS-сервера, в отличие от наших и Zerigo.net, корректно направляют пользователя на сервера в нужной стране даже при использовании юзером Днс-ов от Гугла.

Запрос из Украины с использованием ДНС-ов провайдера:
nslookup 493511490.r.cdnua.net
╤хЁтхЁ: ns3.farlep.net
Address: 213.130.4.1
Не заслуживающий доверия ответ:
╚ь : 493511490.r.cdnua.net
Address: 82.118.16.222 — Украина

Запрос из Украины с использованием ДНС-ов Google Public DNS:
nslookup 493511490.r.cdnua.net 8.8.8.8
╤хЁтхЁ: google-public-dns-a.google.com
Address: 8.8.8.8
Не заслуживающий доверия ответ:
╚ь : 493511490.r.cdnua.net
Address: 82.118.16.222 — Украина

направляет на 82.118.16.222, расположенный в Харькове. Иногда бросает на Киевский сервер 77.222.131.2.

А теперь внимание вопрос: КАК это работает?

была идея, что Google использует под каждую страну несколько IP, с которых рекурсивно обращается к авторитативному серверу. А CDN сеть знает эти адреса.
Но глубокий анализ ДНС-запросов другого крупного сайта показал, что, например гугловский ip 74.125.189.18, фактически находящийся предположительно в германии используется в рекурсивных ДНС-запросах от пользователей не только Украины, но и Алжира, Египта, Пакистана и др. стран.

Помогите, пожалуйста, разобраться.

Спасибо всем, кто дочитал до конца! )
  • Вопрос задан
  • 8401 просмотр
Подписаться 7 Оценить Комментировать
Решения вопроса 1
@DRUN Автор вопроса
спасибо, разобрались
На сайте developers.google.com
In addition, Google Public DNS engineers have proposed a technical solution to the issue in an IETF draft, Client subnet information in DNS requests. This proposal defines an EDNS0 extension which allows resolvers to pass in part of the client's IP address as the source IP in the DNS message, so that nameservers can return optimized results based on the user's location rather than that of the resolver.
всё передается в расшренном заголовке ДНС-запроса. Вот как!


всем спасибо, вопрос закрыт
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mastini
@mastini
Не ответ, но все же отпишусь.

Мы в своей CDN с этим смирились.
Переробовав все мы просто перепроверяем еще раз IP на CDN стораджах и делаем редирект, если IP из другой зоны.

Надо будет глянуть этот cdnua.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы