IP Router
Comment ça marche · pour débutants

Les sites vous jugent à votre IP. C’est le tableau qui choisit quelle IP porte votre agent.

Chaque appareil sur internet a une adresse. Recherche, boutiques, pubs et médias s’en servent pour décider ce que vous voyez — devise, langue, classements, parfois si la page charge. Un agent IA dans un datacenter n’a qu’une adresse : ce datacenter. Sans sortie localisée, chaque fetch semble sortir du même immeuble.

Vous demandez un pays ou une ville. IP Router choisit une sortie là-bas, envoie la requête par cette IP et rend la page. Le même cerveau pour un agent JSON et un vrai navigateur.

L’idée

Quatre faits, ensuite vous pouvez utiliser le reste.

Le site ne voit pas votre laptop

Il voit l’IP de sortie. Changez la sortie, la page change — prix, SERP, locator, paywall.

Le pays n’est pas la langue

cc-JP vous met sur une IP japonaise. lang-ja dit au site que vous lisez le japonais. En général, les deux.

Sticky veut dire « la même personne »

Logins, paniers et cookies meurent si l’IP change en cours de route. Un sessid vous cloue à une sortie jusqu’à expiration.

Deux portes, un kernel

Les agents POST JSON vers /api/v1/fetch. Navigateurs et curl parlent CONNECT sur :7777. Les deux appellent selectRoute.

Mots

Les douze termes de la console.

IP / sortie
L’adresse que le site voit. Pas votre ordinateur, pas l’hôte de l’agent — le dernier saut sorti d’IP Router.
cc (pays)
Code pays ISO. GB est le Royaume-Uni, DE l’Allemagne, JP le Japon. C’est ce qui choisit le marché.
ville
Plus fin que le pays. Londres ou Manchester, New York ou Austin. Les espaces deviennent des traits de soulignement dans le nom d’utilisateur : city-new_york.
lang
En-tête Accept-Language. La question du site : « quelle langue lisez-vous ? ». Indépendant de l’IP.
sessid (sticky)
Un nom que vous réutilisez pour que chaque saut d’une tâche passe par la même sortie. Le TTL par défaut est de 10 minutes ; sesstime le remplace.
type
Le genre de réseau de la sortie : résidentiel, datacenter, mobile ou ISP. Les sites ne les traitent pas de la même façon.
pool
Une liste de nœuds que vous avez ajoutés, chacun marqué d’un pays et parfois d’une ville. Le routeur fait correspondre le ciblage à un nœud.
backconnect
Une seule passerelle fournisseur. IP Router ajoute -cc-US-city-austin-sessid-job1 au nom d’utilisateur de ce fournisseur.
direct
Cette machine. Très bien pour apprendre. Le site voit encore l’IP de votre hôte, donc les pages geo ne changeront pas.
IP farm
Des téléphones Android que vous mettez en rack dans une ville. Les agents sortent par ce dernier kilomètre, facturés à la connexion active — pas au GB.
Fetch API
POST /api/v1/fetch avec du JSON. Pour les agents et les LLM qui ne parlent pas HTTP CONNECT.
Passerelle :7777
Un proxy HTTP. curl -x, Playwright, navigateurs. Le ciblage est dans le nom d’utilisateur, style Oxylabs.
Deux portes

Même ciblage. Des clients différents.

Choisissez la porte qui correspond à la façon dont parle votre client. Le ciblage est le même des deux côtés.

Fetch API — la porte des agents

Utilisez-la quand votre client envoie du JSON : un outil LLM, un script, un nœud n8n, le playground.

POST /api/v1/fetch avec une clé Bearer. Mettez le pays, la ville, la langue et la session dans le corps. La réponse inclut la page, le geo de sortie et route.reason, pour voir pourquoi ce saut a été choisi.

Elle récupère une URL et renvoie le corps. Elle ne clique pas, ne remplit pas les formulaires et ne garde pas les cookies d’un vrai navigateur. Pour un checkout dans un vrai navigateur, utilisez la passerelle.

Passerelle HTTP — la porte navigateur

Utilisez-la quand le client parle déjà proxy HTTP : curl -x, Playwright, Chrome, un scraper qui attend CONNECT.

Pointez le proxy sur host:7777. Le nom d’utilisateur est iprouter-{keyId}-cc-GB-city-london-sessid-job1. Le mot de passe est la clé API. Les mêmes jetons de ciblage que dans le corps du fetch, simplement dans le nom d’utilisateur.

CONNECT ne peut pas réécrire les en-têtes HTTPS. S’il vous faut Accept-Language sur un site TLS, le navigateur (ou la Fetch API) doit l’envoyer. lang- dans le nom d’utilisateur est un indice pour le routage et pour HTTP, pas une injection HTTPS magique.

Si vous êtesUtilisez
Agent JSON / outil LLMFetch API
Playground / essayer une URLFetch API
curl, Playwright, un vrai navigateurPasserelle :7777
Connexion, puis crawl de la même sessionL’une ou l’autre porte, plus un sessid
Sorties

D’où la requête sort vraiment.

Une sortie, c’est l’endroit d’où la requête quitte internet, du point de vue du site. Il vous en faut au moins une qui ne soit pas « cette machine » avant que les pages geo changent.

Direct — cette machine

Livré avec le nœud. Les requêtes réussissent tout de suite, pour que le playground fonctionne. route.reason dira « direct » ou « direct fallback (no geo node) ». Le site voit encore l’IP de votre hôte.

Pool — IP que vous avez ajoutées

Console → Proxy pool. Chaque nœud a un pays, une ville facultative et un type. Demandez Londres : un nœud de pool à Londres l’emporte. Demandez GB sans ville : n’importe quel nœud GB l’emporte.

Backconnect — une passerelle fournisseur

Vous ajoutez une passerelle. IP Router injecte le ciblage dans le nom d’utilisateur (-cc-DE-city-berlin-sessid-s1). À utiliser quand vous achetez de la bande passante chez un fournisseur au lieu de lister chaque IP.

IP farm — des téléphones dans une ville

Mettez des téléphones Android en rack, marquez le site d’un pays et d’une ville, fixez combien de connexions sont actives. Les agents sortent par ce dernier kilomètre. Facturé par connexion et par mois. Un essai de 14 jours couvre le premier téléphone.

Quand vous nommez un pays, le routeur essaie dans cet ordre : city pool match → country pool match → backconnect geo injection → direct fallback. Aucun proxy activé du tout, c’est un 422, pas un échec silencieux.

Premier essai

Cinq minutes. Vous n’avez pas encore besoin d’une sortie payante.

Faites ceci une fois, pour que le reste du guide ne reste pas abstrait. Cinq minutes. Vous n’avez pas encore besoin d’une sortie payante.

  1. 01

    Landing → Ouvrir la console. En local, il n’y a pas d’inscription. Vous arrivez sur Overview.

  2. 02

    Le playground est prérempli avec l’echo local. Choisissez un pays (US convient). Laissez la session à agent-demo. Envoyez. Vous obtenez toujours un 200 de l’echo — cela prouve la porte, pas le geo.

  3. 03
    Lisez trois champs

    ok doit valoir true. route.reason vous dit quelle sortie a été choisie. geo.exit est l’IP que l’extérieur verrait — vide, ou votre machine en direct.

  4. 04

    Ajoutez un nœud de pool ou backconnect sous Proxy pool, ou un IP farm dans une ville qui compte pour vous. Renvoyez. reason ne doit plus dire « direct fallback ».

  5. 05

    API keys pour la Fetch API. Endpoints construit le nom d’utilisateur de la passerelle. Agents contient le schéma d’outil LLM. Même ciblage, trois présentations.

Cas d’usage

Comment ça marche pour chaque job.

Les mêmes réglages à chaque fois : pays, ville, langue, sticky, type. Seuls changent ceux que vous tournez et la porte que vous empruntez. Choisissez une ligne.

ville / pays

Voir la recherche comme quelqu’un dans cette ville

Google (et Bing, et maps) ne montrent pas un seul internet. Ils montrent l’internet d’où vous êtes. Classements, local pack, pubs, même l’orthographe — tout dépend de l’IP de sortie et de l’en-tête de langue. Si votre agent fetch depuis un datacenter US, vous notez une page US, même si la question est « à quoi ça ressemble à Manchester ».

Sans IP Router

Vous obtenez le SERP du pays de l’hôte. Une requête Londres depuis une VM de Virginie reste une page Virginie, avec une requête qui a la forme de Londres.

Avec

cc-GB + city-london + lang-en_GB. Le saut sort par une sortie britannique, Accept-Language est l’anglais britannique, et la page est celle qu’un visiteur londonien obtiendrait.

Comment ça marche

  1. 01Nommez le marché : pays GB, ville London, langue en-GB. La ville compte — Manchester et London n’ont pas le même local pack.
  2. 02Fetch API si vous voulez du HTML/JSON pour l’agent. Gateway si un navigateur headless conduit le SERP.
  3. 03Envoyez un sessid stable si vous paginez ou cliquez. Une nouvelle session en cours ressemble à un nouveau visiteur.
  4. 04Lisez route.reason. Vous voulez city pool match (ou backconnect geo injection). Direct fallback = vous êtes encore sur l’hôte.
  5. 05Comparez deux runs : même requête, US contre GB. Le local pack et les pubs doivent bouger. Sinon, vous n’êtes pas encore sur une sortie geo.
Porte

N’importe quelle porte. Fetch si l’agent poste du JSON ; gateway si le client parle 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"
}
Passerelle :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
Vous savez que ça a marché quand

route.reason est une correspondance geo, geo.exit n’est pas votre hôte, et le local pack cite des commerces de Londres — pas ceux d’à côté de votre serveur.

Erreurs fréquentes

  • Le pays seul. GB sans ville vous pose souvent sur une page nationale, sans le local pack qui vous intéressait.
  • Pas de lang. Une IP britannique avec en-US penche encore vers l’orthographe américaine et des fiches US dans le mélange.
route.reason

La phrase qui dit si le geo a vraiment eu lieu.

city pool match
Vous avez demandé une ville et un nœud de pool dans cette ville était activé. Meilleure correspondance geo.
country pool match
Pas de nœud ville (ou vous n’avez pas demandé de ville), mais un nœud de pool dans ce pays était activé.
backconnect geo injection
Pas de nœud de pool dans ce pays. Une passerelle backconnect est active, donc le ciblage a été écrit dans son nom d’utilisateur.
direct fallback (no geo node)
Rien dans ce pays. La requête est quand même partie — par cette machine. Les pages geo ne changeront pas. Ajoutez un nœud ou un IP farm.
sticky session
Vous avez réutilisé un sessid et l’ancienne sortie est encore activée. Même IP que la dernière fois. TTL rafraîchi.
backconnect rotate / pool rotate / direct
Vous n’avez pas nommé de pays. Le routeur a choisi une sortie correspondante et, si vous avez envoyé une session, a haché le choix pour qu’il reste en place.
Erreurs

Celles qui ressemblent à des bugs produit.

Pays sans langue

Une IP japonaise avec un Accept-Language anglais sert encore souvent l’anglais. Réglez lang (ou language dans le corps du fetch) en plus de cc.

Un nouveau sessid à chaque requête

Si la chaîne de session change, vous êtes une nouvelle personne. Les connexions tombent. Réutilisez le même sessid pour toute la tâche.

Faire confiance au direct fallback

Un 200 de l’echo sur cette machine ne prouve pas le geo. Lisez route.reason. S’il dit direct fallback, le site a encore vu votre hôte.

Datacenter ou résidentiel

Certaines origines relèvent l’empreinte de l’ASN. Si la page est un mur captcha ou un blanc « datacenter detected », réglez type-residential ou utilisez un IP farm.

HTTPS + passerelle + lang

La passerelle ne peut pas injecter Accept-Language dans un tunnel HTTPS CONNECT. Envoyez l’en-tête depuis le client, ou utilisez la Fetch API.

Pool vide

Si tous les nœuds sont désactivés, vous obtenez 422 « No enabled proxies in the pool. » Activez le nœud direct ou ajoutez-en un qui est allumé.