Сервис определения местоположения по IP показывает город, который не совпадает с реальным адресом пользователя или сервера, — одна из самых частых жалоб на поддержку хостинга и один из самых безобидных по сути поводов для беспокойства. База geoIP работает не напрямую по адресу улицы, а по диапазону адресов, которым владеет провайдер или дата-центр.
Как работает определение города по IP-адресу
IPv4-адрес сам по себе не содержит координат — это число, которое идентифицирует узел в сети, устройство его разбора описано в статье про IPv4-адреса. Сервисы геолокации сопоставляют адрес с базой, в которой диапазоны адресов привязаны к регистрационным данным провайдера — юридическому адресу компании, а не к физическому расположению конкретного пользователя.
Эти базы собираются из открытых реестров регистраторов и из статистики самих сервисов геолокации, поэтому точность зависит от того, насколько провайдер держит адреса привязанными к одному региону.
Почему база geoIP ошибается по городу чаще, чем по стране
Крупные провайдеры и дата-центры часто регистрируют диапазон адресов на один юридический адрес — например, головной офис в столице, — и раздают его клиентам по всей стране. База видит только точку регистрации, поэтому страна определяется почти всегда верно, а город может указывать на офис провайдера, а не на физическое расположение сервера или пользователя.
Аналогичная картина у мобильных операторов: весь трафик абонентов одного региона может идти через один узел, зарегистрированный в другом городе.
NAT и провайдерские пулы адресов
Операторы с ограниченным числом внешних адресов используют NAT с общим пулом на много абонентов — устройство механизма разобрано в статье про NAT. В таком случае внешний адрес, который видит сайт, принадлежит не конкретному пользователю, а узлу оператора, который может физически стоять в другом городе.
То же относится к серверу: если он работает за NAT внутри облачной инфраструктуры, внешний адрес закреплён за узлом выхода, а не за стойкой, где физически размещено оборудование.
VPN, прокси и CDN перед сервером
Если перед сайтом стоит CDN или туннель — например, Cloudflare Tunnel, — внешний IP-адрес, который видят посетители и сервисы геолокации, принадлежит узлу CDN, а не серверу хостинга. Это нормальная часть схемы, а не ошибка настройки.
У пользователя похожая причина — включённый VPN или прокси подменяет видимый адрес на адрес сервера VPN-провайдера, который может находиться в другой стране, не говоря уже о городе.
Сравнение типичных причин
| Причина | Кто видит «чужой» город | Можно ли исправить со стороны сайта |
|---|---|---|
| Регистрация диапазона на офис провайдера | и посетитель, и сервер | нет, зависит от провайдера |
| Общий пул адресов у мобильного оператора | посетитель | нет |
| VPN или прокси у пользователя | посетитель | нет, это выбор пользователя |
| CDN или туннель перед сервером | сервер | частично, через заголовок реального IP |
| Устаревшая база geoIP у сервиса | и посетитель, и сервер | нет, зависит от сервиса геолокации |
Как проверить и уточнить реальный город
Если расхождение мешает — например, геозависимый сервис блокирует доступ, — порядок проверки такой:
- узнать, какой именно адрес видит внешний сервис — свой публичный IP можно получить запросом наружу;
- сверить этот адрес минимум в двух независимых сервисах геолокации — расхождение между ними подскажет, что база устарела, а не конкретный сайт ошибается;
- проверить, не включён ли VPN или прокси на стороне клиента;
- если перед сервером стоит CDN, посмотреть заголовок с реальным IP посетителя вместо адреса узла CDN;
- при юридически значимой необходимости точного адреса запросить данные у провайдера напрямую, а не полагаться на geoIP.
curl ifconfig.me
curl ipinfo.io/json
dig +short myip.opendns.com @resolver1.opendns.com
Частые вопросы
Почему мой IP-адрес показывает другой город, хотя я никуда не переезжал?
Чаще всего дело не в переезде, а в том, что провайдер зарегистрировал диапазон адресов на свой головной офис, который физически находится в другом городе. База геолокации видит только точку регистрации адреса, а не место, где стоит ваше оборудование.
Может ли VPN быть причиной неверного города?
Да, и это самая частая причина на стороне пользователя: включённый VPN заменяет видимый сайтам адрес на адрес сервера VPN-провайдера, который обычно находится в другом регионе или даже другой стране.
Почему сервер на хостинге показывает город дата-центра, а не свой регион?
Потому что адрес сервера зарегистрирован на дата-центр или облачного провайдера, и база geoIP привязывает его к юридическому адресу этой компании, а не к физической стойке с оборудованием — это нормальное поведение, а не ошибка хостинга.
Как узнать настоящий IP-адрес посетителя, если сайт работает через CDN?
Нужно смотреть заголовок X-Forwarded-For или аналогичный, который CDN добавляет к запросу — там передаётся адрес реального посетителя, а не узла CDN, принявшего соединение. Настройка чтения этого заголовка зависит от веб-сервера и используемого CDN.