IP-геолокация — определение географического положения устройства по его IP-адресу. Технология используется в безопасности, аналитике, персонализации контента и борьбе с мошенничеством. В статье разберём принципы работы и практическое применение.
Проверить информацию по любому IP можно через IP Info на rechecker.ru.
Как работает IP-геолокация
Распределение IP-адресов
IP-адреса распределяются региональными интернет-регистраторами (RIR): ARIN, RIPE NCC, APNIC и другими. Каждому провайдеру выделяются блоки адресов с привязкой к региону.
IP: 95.165.xxx.xxx
RIR: RIPE NCC (Европа)
Провайдер: Ростелеком
Регион: Москва
Источники данных
| Источник | Точность | Обновление | Применение |
|---|---|---|---|
| RIR/WHOIS | Страна, регион | Редко | Базовая геолокация |
| BGP-таблицы | ASN, провайдер | Часто | Маршрутизация |
| Геобазы (MaxMind, IP2Location) | Город, координаты | Еженедельно | Коммерческое использование |
| CDN/провайдеры | Локация по PoP | Реальное время | Доставка контента |
Уровни точности
| Уровень | Точность | Пример |
|---|---|---|
| Страна | 95–99% | Россия |
| Регион/область | 85–95% | Московская область |
| Город | 70–90% | Москва |
| Координаты | 50–80% | Широта, долгота |
| Улица/здание | Ненадёжно | Не рекомендуется |
Применение
Безопасность
- Блокировка по гео — ограничение доступа из определённых стран
- Обнаружение аномалий — вход с необычной локации
- Защита от ботов — проверка соответствия IP и заявленного местоположения
- Rate limiting — разные лимиты по регионам
Аналитика
- География посетителей — отчёты по странам и городам
- A/B-тесты по регионам — разный контент для разных рынков
- Оптимизация CDN — выбор ближайшего PoP
Персонализация
- Локализация — язык, валюта, единицы измерения
- Контент по региону — локальные новости, предложения
- Соответствие регуляциям — GDPR, локальные ограничения
Типы IP-адресов
Публичные vs приватные
| Тип | Диапазон | Геолокация |
|---|---|---|
| Публичный | Глобальная маршрутизация | Да |
| Приватный (10.x, 192.168.x, 172.16–31.x) | Локальная сеть | Нет |
| localhost (127.0.0.1) | Локальный хост | Нет |
Статические vs динамические
- Статические — не меняются, привязаны к организации
- Динамические — меняются при переподключении (домашний интернет, мобильный)
VPN и прокси
При использовании VPN или прокси геолокация указывает на выходной узел, а не на реальное местоположение пользователя.
Формат ответа GeoIP API
Типичная структура ответа:
{
"ip": "95.165.123.45",
"country": "RU",
"country_name": "Russia",
"region": "MOW",
"region_name": "Moscow",
"city": "Moscow",
"latitude": 55.7558,
"longitude": 37.6173,
"timezone": "Europe/Moscow",
"isp": "Rostelecom",
"asn": "AS12389",
"asn_org": "Rostelecom"
}
Ограничения и погрешности
Причины неточностей
- Мобильные сети — IP может указывать на центр коммутации, а не на устройство
- Корпоративные сети — централизованный выход в интернет
- VPN и прокси — маскировка реальной локации
- Спутниковый интернет — привязка к наземной станции
- Устаревшие базы — задержка обновления данных
Юридические аспекты
- Геолокация по IP — косвенные данные, не персональные по GDPR (в большинстве случаев)
- Для персонализации и рекламы может требоваться согласие
- Блокировка по гео должна соответствовать локальному законодательству
Практическая проверка
Через сервис
IP Info на rechecker.ru возвращает страну, регион, город, провайдера, ASN и координаты для любого IP. Удобно для проверки собственного IP, IP посетителей и отладки геозависимой логики.
Через API
# Пример запроса к сервису геолокации
curl "https://api.example.com/ip/95.165.123.45"
Локальные базы (MaxMind GeoLite2)
import geoip2.database
reader = geoip2.database.Reader('/path/to/GeoLite2-City.mmdb')
response = reader.city('95.165.123.45')
print(response.country.iso_code, response.city.name)
Типы GeoIP-баз
| База | Размер | Точность | Лицензия |
|---|---|---|---|
| MaxMind GeoLite2 | ~70 MB | Город | Бесплатная, CC BY-SA |
| MaxMind GeoIP2 | ~90 MB | Выше | Платная |
| IP2Location | Различные | Высокая | Платная |
| DB-IP | ~50 MB | Средняя | Бесплатная Lite |
Заголовок X-Forwarded-For
При использовании прокси реальный IP клиента может передаваться в заголовках:
X-Forwarded-For: client, proxy1, proxy2
X-Real-IP: client
Берётся первый IP из X-Forwarded-For (или X-Real-IP), если доверяете прокси. Иначе возможна подмена IP.
Интеграция в приложение
Node.js (maxmind)
const maxmind = require('maxmind');
const lookup = await maxmind.open('/path/to/GeoLite2-City.mmdb');
const result = lookup.get('95.165.123.45');
console.log(result?.country?.iso_code, result?.city?.names?.ru);
PHP (geoip2)
<?php
require_once 'vendor/autoload.php';
$reader = new GeoIp2\Database\Reader('/path/to/GeoLite2-City.mmdb');
$record = $reader->city('95.165.123.45');
echo $record->country->isoCode . ' ' . $record->city->name;
Рекомендации
- Не полагайтесь на город для критичных решений — точность ограничена
- Используйте страну и регион — достаточная надёжность для большинства задач
- Учитывайте VPN — часть трафика будет с неожиданных локаций
- Обновляйте базы — GeoIP-данные устаревают
- Кэшируйте результаты — снижение нагрузки на API и базы
- Проверяйте X-Forwarded-For — при работе за прокси берите доверенный источник IP
- Не используйте для аутентификации — IP легко подменить, это лишь вспомогательный сигнал
- Учитывайте IPv6 — всё больше трафика идёт по IPv6, базы по нему менее точны
- Тестируйте на реальных IP — проверьте несколько адресов из целевых регионов перед запуском геозависимой логики
- Документируйте источник данных — при принятии решений по гео фиксируйте, какая база использовалась
IP Info — быстрый способ проверить геолокацию любого IP без установки баз и API-ключей.