IP Router
Как это работает · для чайников

Сайты судят о тебе по IP. Это коммутатор, который выбирает, какой IP наденет агент.

У каждого устройства в интернете есть адрес. Поиск, магазины, реклама и новости по этому адресу решают, что тебе показать: валюту, язык, позиции и даже откроется ли страница. У ИИ-агента в дата-центре адрес один — этот дата-центр. Без локального выхода каждый запрос выглядит так, будто пришёл из одного здания.

Ты называешь страну или город. IP Router выбирает там выход, отправляет запрос через этот IP и возвращает страницу. Один и тот же мозг для JSON-агента и настоящего браузера.

Идея

Четыре факта, и дальше можно пользоваться.

Сайт никогда не видит твой ноутбук

Он видит выходной IP. Смени выход — сменится страница: цены, SERP, локатор магазинов, пейвол, всё.

Страна — это не язык

cc-JP ставит тебя на японский IP. lang-ja говорит сайту, что ты читаешь по-японски. Обычно нужны оба.

Постоянная сессия значит «тот же человек»

Входы, корзины и cookie умирают, если IP сменится посреди сценария. sessid закрепляет тебя за одним выходом, пока не истечёт.

Две двери, одно ядро

Агенты отправляют JSON методом POST на /api/v1/fetch. Браузеры и curl говорят CONNECT на :7777. Оба вызывают selectRoute.

Слова

Дюжина терминов, которыми говорит консоль.

IP / выход
Адрес, который видит сайт. Не твой ноутбук и не хост агента — последний переход, который вышел из IP Router.
cc (страна)
Код страны ISO. GB — Великобритания, DE — Германия, JP — Япония. Этим ты выбираешь рынок.
город
Точнее страны. Лондон — не Манчестер, Нью-Йорк — не Остин. Пробелы в имени пользователя становятся подчёркиваниями: city-new_york.
язык
Заголовок Accept-Language, токен lang. Вопрос сайта «на каком языке ты читаешь?». От IP не зависит.
sessid (постоянная сессия)
Имя, которое ты повторяешь, чтобы каждый переход задачи шёл через один и тот же выход. TTL по умолчанию — 10 минут; sesstime его перекрывает.
тип
Какая сеть у выхода: резидентская, дата-центр, мобильная или ISP. Сайты относятся к ним по-разному.
пул
Список узлов, которые ты добавил. У каждого страна и, может быть, город. Роутер сопоставляет таргетинг с узлом.
бэкконнект
Один шлюз вендора. IP Router дописывает -cc-US-city-austin-sessid-job1 к имени пользователя этого вендора.
прямой
Режим direct: эта машина. Для обучения сойдёт. Сайт всё равно видит IP твоего хоста, поэтому геостраницы не изменятся.
IP farm
Телефоны Android, которые ты размещаешь в городе. Агенты уходят через эту последнюю милю. Счёт — за живое подключение, не за GB.
Fetch API
POST /api/v1/fetch с JSON. Для агентов и LLM, которые не говорят на HTTP CONNECT.
Шлюз :7777
HTTP-прокси. curl -x, Playwright, браузеры. Таргетинг живёт в имени пользователя, в стиле Oxylabs.
Две двери

Тот же таргетинг. Разные клиенты.

Выбери дверь под то, как говорит твой клиент. Таргетинг в обоих случаях один.

Fetch API — дверь агента

Используй её, когда клиент шлёт JSON: инструмент LLM, скрипт, узел n8n, песочница.

POST /api/v1/fetch с ключом Bearer. В тело клади country, city, language и session. В ответе — страница, гео выхода и route.reason, чтобы было видно, почему выбран этот переход.

Он забирает URL и возвращает тело. Кликать, заполнять формы и хранить cookie как браузер он не умеет. Для оплаты в настоящем браузере используй шлюз.

HTTP-шлюз — дверь браузера

Используй его, когда клиент уже говорит на HTTP-прокси: curl -x, Playwright, Chrome, скрейпер, который ждёт CONNECT.

Направь прокси на host:7777. Имя пользователя — iprouter-{keyId}-cc-GB-city-london-sessid-job1. Пароль — API-ключ. Те же токены таргетинга, что в теле fetch, только в имени пользователя.

CONNECT не может переписать заголовки HTTPS. Если на сайте с TLS нужен Accept-Language, его должен послать браузер (или Fetch API). lang- в имени пользователя — подсказка для маршрутизации и для HTTP, а не волшебная подстановка в HTTPS.

Если тыИспользуй
JSON-агент / инструмент LLMFetch API
Песочница / проверить URLFetch API
curl, Playwright, настоящий браузерШлюз :7777
Вход, затем обход той же сессииЛюбая дверь, плюс sessid
Выходы

Откуда запрос на самом деле уходит.

Выход — это точка, из которой запрос уходит в интернет, если смотреть глазами сайта. Нужен хотя бы один, который не «эта машина», иначе геостраницы не изменятся.

Direct — эта машина

Стоит на узле с самого начала. Запросы сразу проходят, чтобы песочница работала. route.reason скажет “direct” или “direct fallback (no geo node)”. Сайт всё равно видит IP твоего хоста.

Пул — IP, которые ты добавил

Консоль → Пул прокси. У каждого узла есть страна, необязательный город и тип. Просишь Лондон — побеждает лондонский узел пула. Просишь GB без города — побеждает любой узел GB.

Бэкконнект — один шлюз вендора

Ты добавляешь один шлюз. IP Router подставляет таргетинг в имя пользователя (-cc-DE-city-berlin-sessid-s1). Так делают, когда полосу покупают у провайдера, а не перечисляют каждый IP.

IP farm — телефоны в городе

Размести телефоны Android, пометь площадку страной и городом, задай, сколько подключений живы. Агенты уходят через эту последнюю милю. Счёт — за подключение в месяц. Пробные 14 дней покрывают первый телефон.

Называешь страну — роутер пробует по порядку: city pool match → country pool match → backconnect geo injection → direct fallback. Если включённых прокси нет совсем, это 422, а не тихий промах.

Первая попытка

Пять минут. Платный выход тебе пока не нужен.

Сделай это один раз, чтобы остальное руководство не было абстракцией. Пять минут. Платный выход тебе пока не нужен.

  1. 01

    Лендинг → Открыть консоль. Локально регистрации нет. Ты попадаешь в Обзор.

  2. 02

    В песочнице уже подставлен локальный echo. Выбери страну (US подойдёт). Сессию оставь agent-demo. Отправь. От echo всегда придёт 200 — это доказывает дверь, не гео.

  3. 03
    Прочитай три поля

    ok должно быть true. route.reason говорит, какой выход выбран. geo.exit — IP, который увидел бы внешний мир: пусто или твоя машина, если это direct.

  4. 04

    Добавь узел пула или бэкконнекта в Пуле прокси или IP farm в городе, который тебе важен. Отправь снова. reason больше не должен говорить “direct fallback”.

  5. 05

    API-ключи — для Fetch API. Эндпоинты собирают имя пользователя шлюза. В Агентах — схема инструмента LLM. Тот же таргетинг, три оболочки.

Сценарии

Как это устроено для каждой задачи.

Каждый раз одни и те же ручки: страна, город, язык, постоянная сессия, тип. Меняется только то, какие из них ты крутишь и в какую дверь заходишь. Выбери строку.

город / страна

Смотри поиск так, как его видит человек в этом городе

У Google (и у Bing, и у карт) нет одного интернета. Они показывают интернет с того места, где ты стоишь. Позиции, локальный блок, реклама и даже какое написание они считают твоим — всё это зависит от выходного IP и заголовка языка. Если агент запрашивает страницу из американского дата-центра, ты оцениваешь американскую выдачу, даже когда вопрос — «как это выглядит в Manchester».

Без IP Router

Ты получаешь SERP страны хоста. Запрос про Лондон с виртуальной машины в Виргинии — всё ещё страница Виргинии со строкой запроса про Лондон.

С ним

cc-GB + city-london + lang-en_GB. Переход уходит через британский выход, Accept-Language — британский английский, и страница та, которую увидел бы человек в Лондоне.

Как это работает

  1. 01Назови рынок: страна GB, город London, язык en-GB. Город важен — у Manchester и London разные локальные блоки.
  2. 02Используй Fetch API, если агенту нужен HTML/JSON. Используй шлюз, если SERP ведёт браузер без интерфейса.
  3. 03Шли стабильный sessid, если будешь листать страницы или кликать дальше. Новая сессия посреди прокрутки выглядит как новый посетитель.
  4. 04Читай route.reason. Нужен city pool match (или backconnect geo injection). Direct fallback значит, что ты всё ещё на хосте.
  5. 05Сравни два прогона: один запрос, US против GB. Локальный блок и реклама должны сдвинуться. Если нет — ты ещё не на геовыходе.
Дверь

Любая дверь. Fetch API, когда агент шлёт JSON; шлюз, когда клиент говорит CONNECT.

cc-GBcity-londonlang-en_GB
Fetch API
{
  "url": "https://www.google.com/search?q=best+coffee+near+me",
  "geo": { "country": "GB", "city": "London", "language": "en-GB" },
  "session": "serp-london"
}
Шлюз :7777
curl -x http://iprouter-key_dev-cc-GB-city-london-lang-en_GB-sessid-serp-london:ipr_live_dev_key@127.0.0.1:7777 https://www.google.com/search?q=best+coffee+near+me
Поймёшь, что сработало, когда

route.reason — геопопадание, geo.exit — не твой хост, а локальный блок называет лондонские бизнесы, не те, что рядом с твоим сервером.

Частые ошибки

  • Только страна. GB без города часто сажает тебя на национальную страницу без локального блока, который тебе нужен.
  • Нет lang. Британский IP с en-US всё равно тянет американское написание и американские результаты.
route.reason

Фраза, по которой видно, сработало ли гео.

city pool match
Ты запросил город, и в пуле был включён узел этого города. Лучшее геопопадание.
country pool match
Узла города нет (или ты город не просил), но узел пула в этой стране включён.
backconnect geo injection
В этой стране нет узла пула. Шлюз бэкконнекта включён, поэтому таргетинг записан в его имя пользователя.
direct fallback (no geo node)
В этой стране ничего нет. Запрос всё равно ушёл — через эту машину. Геостраницы не изменятся. Добавь узел или ферму.
sticky session
Ты снова использовал sessid, и старый выход всё ещё включён. Тот же IP, что в прошлый раз. TTL обновлён.
backconnect rotate / pool rotate / direct
Ты не назвал страну. Роутер выбрал любой подходящий выход и, если ты прислал сессию, захешировал выбор, чтобы он держался.
Ошибки

Те, что выглядят как баги продукта.

Страна без языка

Японский IP с английским Accept-Language часто всё равно отдаёт английский. Задай lang (или language в теле fetch) вместе с cc.

Новый sessid на каждый запрос

Если строка сессии меняется, ты уже другой человек. Входы слетают. Повторяй один и тот же sessid на всю задачу.

Доверие к direct fallback

200 от echo на этой машине — не доказательство гео. Читай route.reason. Если там direct fallback, сайт всё равно видел твой хост.

Дата-центр против резидентского

Некоторые источники узнают ASN. Если страница — стена с капчей или пустая “datacenter detected”, задай type-residential или используй IP farm.

HTTPS + шлюз + lang

Шлюз не может подставить Accept-Language в туннель HTTPS CONNECT. Отправь заголовок с клиента или используй Fetch API.

Пустой пул

Если все узлы выключены, получишь 422 “No enabled proxies in the pool.” Включи узел direct или добавь тот, который включён.