IP Router
Cómo funciona · para novatos

Los sitios te juzgan por tu IP. Esto es el conmutador que elige qué IP lleva tu agente.

Cada dispositivo en internet tiene una dirección. Buscadores, tiendas, anuncios y medios la usan para decidir qué ves — moneda, idioma, rankings, incluso si la página carga. Un agente en un datacenter tiene una sola dirección: ese datacenter. Sin una salida local, cada fetch parece salir del mismo edificio.

Pides un país o una ciudad. IP Router elige una salida ahí, manda la petición por esa IP y te devuelve la página. El mismo cerebro para un agente JSON y un browser de verdad.

La idea

Cuatro hechos, y ya puedes usar el resto.

El sitio no ve tu portátil

Ve la IP de salida. Cambias la salida, cambia la página — precios, SERP, locator, paywall.

País no es idioma

cc-JP te pone en una IP japonesa. lang-ja le dice al sitio que lees japonés. Casi siempre quieres ambos.

Sticky significa “la misma persona”

Logins, carritos y cookies mueren si la IP cambia a mitad. Un sessid te clava a una salida hasta que caduca.

Dos puertas, un kernel

Los agentes hacen POST JSON a /api/v1/fetch. Browsers y curl hablan CONNECT en :7777. Ambos llaman selectRoute.

Palabras

Los doce términos que usa la consola.

IP / salida
La dirección que ve el sitio. Ni tu portátil, ni el host del agente — el último hop que salió de IP Router.
cc (país)
Código de país ISO. GB es Reino Unido, DE es Alemania, JP es Japón. Esto elige el mercado.
ciudad
Más fino que el país. Londres frente a Mánchester, Nueva York frente a Austin. Los espacios se vuelven guiones bajos en los usernames: city-new_york.
lang
Header Accept-Language. La pregunta del sitio: “¿en qué idioma lees?”. Independiente de la IP.
sessid (sticky)
Un nombre que reutilizas para que cada hop de un trabajo use la misma salida. El TTL por defecto es 10 minutos; sesstime lo sustituye.
tipo
Qué tipo de red es la salida: residencial, datacenter, móvil o ISP. Los sitios no las tratan igual.
pool
Una lista de nodos que añadiste, cada uno etiquetado con un país y quizá una ciudad. El router empareja el targeting con un nodo.
backconnect
Un gateway de un vendor. IP Router añade -cc-US-city-austin-sessid-job1 al username de ese vendor.
directo
Esta máquina. Vale para aprender. El sitio sigue viendo la IP de tu host, así que las páginas geo no cambian.
IP farm
Teléfonos Android que montas en una ciudad. Los agentes salen por esa última milla, y se factura por conexión en vivo — no por GB.
Fetch API
POST /api/v1/fetch con JSON. Para agentes y LLM que no hablan HTTP CONNECT.
Gateway :7777
Un proxy HTTP. curl -x, Playwright, navegadores. El targeting va en el username, al estilo Oxylabs.
Dos puertas

El mismo targeting. Distintos clientes.

Elige la puerta según cómo habla tu cliente. El targeting es el mismo en las dos.

Fetch API — la puerta del agente

Úsala cuando tu cliente envía JSON: una tool de LLM, un script, un nodo de n8n, el playground.

POST /api/v1/fetch con una clave Bearer. Pon el país, la ciudad, el idioma y la sesión en el body. La respuesta incluye la página, el geo de la salida y route.reason, para que veas por qué se eligió ese hop.

Pide una URL y devuelve el body. No hace clic, no rellena formularios ni guarda el cookie jar de un navegador de verdad. Para un checkout en un navegador real, usa el gateway.

Gateway HTTP — la puerta del navegador

Úsala cuando el cliente ya habla proxy HTTP: curl -x, Playwright, Chrome, un scraper que espera CONNECT.

Apunta el proxy a host:7777. El username es iprouter-{keyId}-cc-GB-city-london-sessid-job1. La contraseña es la clave API. Los mismos tokens de targeting que el body del fetch, solo que en el username.

CONNECT no puede reescribir headers HTTPS. Si necesitas Accept-Language en un sitio TLS, tiene que enviarlo el navegador (o la Fetch API). lang- en el username es una pista para el enrutado y para HTTP, no una inyección mágica de HTTPS.

Si eresUsa
Agente JSON / tool de LLMFetch API
Playground / probar una URLFetch API
curl, Playwright, un navegador de verdadGateway :7777
Login y luego rastrear la misma sesiónCualquiera de las dos, más un sessid
Salidas

Por dónde sale de verdad la petición.

Una salida es el punto por donde la petición sale a internet, tal como lo ve el sitio. Necesitas al menos una que no sea “esta máquina” para que las páginas geo cambien.

Directo — esta máquina

Viene con el nodo. Las peticiones responden al momento para que el playground funcione. route.reason dirá “direct” o “direct fallback (no geo node)”. El sitio sigue viendo la IP de tu host.

Pool — IPs que añadiste

Consola → Pool de proxies. Cada nodo tiene un país, una ciudad opcional y un tipo. Pides Londres; gana un nodo de pool de Londres. Pides GB sin ciudad; gana cualquier nodo de GB.

Backconnect — un gateway de vendor

Añades un solo gateway. IP Router inyecta el targeting en el username (-cc-DE-city-berlin-sessid-s1). Úsalo cuando compras ancho de banda a un proveedor en vez de listar cada IP.

IP farm — teléfonos en una ciudad

Monta teléfonos Android, etiqueta el sitio con un país y una ciudad, y fija cuántas conexiones están en vivo. Los agentes salen por esa última milla. Se factura por conexión al mes. Una prueba de 14 días cubre el primer teléfono.

Cuando nombras un país, el router prueba en este orden: city pool match → country pool match → backconnect geo injection → direct fallback. Si no hay ningún proxy activado, es un 422, no un fallo en silencio.

Primer intento

Cinco minutos. Aún no necesitas una salida de pago.

Hazlo una vez para que el resto de la guía no sea abstracto. Cinco minutos. Aún no necesitas una salida de pago.

  1. 01

    Landing → Abrir consola. En local no hay registro. Caes en Resumen.

  2. 02

    El playground viene rellenado con el echo local. Elige un país (US vale). Deja la sesión en agent-demo. Envía. Echo siempre te devuelve un 200 — esto prueba la puerta, no el geo.

  3. 03
    Lee tres campos

    ok debería ser true. route.reason te dice qué salida se eligió. geo.exit es la IP que vería el exterior — vacía, o la de tu máquina si es direct.

  4. 04

    Añade un nodo de pool o de backconnect en Pool de proxies, o una IP farm en una ciudad que te importe. Envía otra vez. reason ya no debería decir “direct fallback”.

  5. 05

    Claves API para la Fetch API. Endpoints monta el username del gateway. Agentes tiene el schema de la tool de LLM. El mismo targeting, tres pieles.

Casos de uso

Cómo funciona en cada trabajo.

Los mismos mandos cada vez: país, ciudad, idioma, sticky, type. El trabajo solo cambia cuáles giras y por qué puerta entras. Elige una fila.

ciudad / país

Ver la búsqueda como alguien en esa ciudad

Google (y Bing, y maps) no muestran un solo internet. Muestran el internet desde donde estás. Rankings, local pack, anuncios, hasta la ortografía — todo depende de la IP de salida y del idioma. Si tu agente fetcha desde un datacenter US, estás midiendo una página US aunque preguntes “¿cómo se ve en Manchester?”

Sin IP Router

Te sale el SERP del país del host. Una consulta de Londres desde una VM de Virginia sigue siendo una página de Virginia con un query string con forma de Londres.

Con él

cc-GB + city-london + lang-en_GB. El hop sale por una salida del Reino Unido, Accept-Language es inglés británico, y la página es la que vería un visitante de Londres.

Cómo funciona

  1. 01Nombra el mercado: país GB, ciudad London, idioma en-GB. La ciudad importa — Manchester y Londres no son el mismo local pack.
  2. 02Fetch API si quieres HTML/JSON para el agente. Gateway si un browser headless conduce el SERP.
  3. 03Manda un sessid estable si vas a paginar. Una sesión nueva a mitad parece otro visitante.
  4. 04Lee route.reason. Quieres city pool match (o backconnect geo injection). Direct fallback es que sigues en el host.
  5. 05Compara dos pasadas: la misma consulta, US frente a GB. El pack local y los anuncios deberían moverse. Si no se mueven, aún no estás en una salida geo.
Puerta

Cualquier puerta. Fetch si el agente manda JSON; gateway si el cliente habla 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"
}
Gateway :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
Sabes que funcionó cuando

route.reason es un acierto geo, geo.exit no es tu host, y el pack local nombra negocios de Londres — no los de al lado de tu servidor.

Errores habituales

  • Solo el país. GB sin ciudad a menudo te deja en una página nacional a la que le falta el pack local que te importaba.
  • Sin lang. Una IP del Reino Unido con en-US sigue tirando a ortografía americana y a propiedades de US en la mezcla.
route.reason

La frase que te dice si el geo ocurrió de verdad.

city pool match
Pediste una ciudad y había un nodo de pool de esa ciudad activado. El mejor acierto geo.
country pool match
No hay nodo de ciudad (o no pediste ciudad), pero había un nodo de pool de ese país activado.
backconnect geo injection
No hay nodo de pool en ese país. Hay un gateway backconnect encendido, así que el targeting se escribió en su username.
direct fallback (no geo node)
Nada en ese país. La petición igual salió — por esta máquina. Las páginas geo no van a cambiar. Añade un nodo o una farm.
sticky session
Reutilizaste un sessid y la salida anterior sigue activada. La misma IP que la última vez. El TTL se ha refrescado.
backconnect rotate / pool rotate / direct
No nombraste un país. El router eligió cualquier salida que encajaba y, si enviaste una sesión, hizo hash de la elección para que se quede.
Errores

Los que parecen fallos del producto.

País sin idioma

Una IP de Japón con un Accept-Language en inglés a menudo sigue sirviendo inglés. Pon lang (o language en el body del fetch) además de cc.

Un sessid nuevo en cada petición

Si la cadena de sesión cambia, eres otra persona. Los logins se caen. Reutiliza el mismo sessid en todo el trabajo.

Fiarte del direct fallback

Un 200 del echo en esta máquina no demuestra el geo. Lee route.reason. Si dice direct fallback, el sitio siguió viendo tu host.

Datacenter frente a residencial

Algunos orígenes hacen fingerprint del ASN. Si la página es un muro de captcha o una página en blanco de “datacenter detected”, pon type-residential o usa una IP farm.

HTTPS + gateway + lang

El gateway no puede inyectar Accept-Language en un túnel CONNECT de HTTPS. Envía el header desde el cliente, o usa la Fetch API.

Pool vacío

Si todos los nodos están desactivados, recibes un 422 “No enabled proxies in the pool.” Activa el nodo direct o añade uno que esté encendido.