Сервіс визначення місцезнаходження за 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.