IP Router
Hoe het werkt · voor beginners

Websites beoordelen je op je IP. Dit is het schakelbord dat kiest welke IP je agent draagt.

Elk apparaat op internet heeft een adres. Zoekmachines, winkels, advertenties en nieuwssites gebruiken dat adres om te bepalen wat je ziet — valuta, taal, ranglijsten, zelfs of de pagina überhaupt laadt. Een AI-agent in een datacenter heeft één adres: dat datacenter. Zonder gelokaliseerde exit lijkt elke fetch uit één gebouw te komen.

Je noemt een land of een stad. IP Router kiest daar een exit, stuurt het verzoek via die IP naar buiten en geeft de pagina terug. Dezelfde kern voor een JSON-agent en een echte browser.

Het idee

Vier feiten, daarna kun je de rest gebruiken.

De website ziet je laptop nooit

Die ziet de exit-IP. Andere exit, andere pagina — prijzen, SERP, winkelzoeker, betaalmuur, alles.

Land is geen taal

cc-JP zet je op een Japanse IP. lang-ja vertelt de site dat je Japans leest. Meestal wil je allebei.

Sticky betekent “dezelfde persoon”

Logins, winkelwagens en cookies gaan verloren als de IP halverwege wisselt. Een sessid zet je vast op één exit tot hij verloopt.

Twee deuren, één kernel

Agents POSTen JSON naar /api/v1/fetch. Browsers en curl spreken CONNECT op :7777. Allebei roepen selectRoute aan.

Woorden

De twaalf termen die de console gebruikt.

IP / exit
Het adres dat de website ziet. Niet je laptop, niet de agent-host — de laatste hop die IP Router verliet.
cc (land)
ISO-landcode. GB is het Verenigd Koninkrijk, DE is Duitsland, JP is Japan. Hiermee kies je de markt.
stad
Fijner dan land. Londen tegenover Manchester, New York tegenover Austin. Spaties worden underscores in de username: city-new_york.
lang
Accept-Language-header. De vraag van de site: “welke taal lees je?” Onafhankelijk van de IP.
sessid (sticky)
Een naam die je hergebruikt, zodat elke hop in een klus dezelfde exit gebruikt. De standaard-TTL is 10 minuten; sesstime overschrijft die.
type
Wat voor netwerk de exit is: residential, datacenter, mobile of ISP. Sites behandelen ze anders.
pool
Een lijst nodes die je hebt toegevoegd, elk met een land en soms een stad. De router matcht de targeting op een node.
backconnect
Eén vendor-gateway. IP Router voegt -cc-US-city-austin-sessid-job1 toe aan de username van die vendor.
direct
Deze machine. Prima om te leren. De website ziet nog steeds de IP van je host, dus geo-pagina's veranderen niet.
IP farm
Android-telefoons die je in een stad in een rack zet. Agents gaan via die laatste mijl naar buiten, gefactureerd per live verbinding — niet per GB.
Fetch API
POST /api/v1/fetch met JSON. Voor agents en LLM's die geen HTTP CONNECT spreken.
Gateway :7777
Een HTTP-proxy. curl -x, Playwright, browsers. De targeting zit in de username, in Oxylabs-stijl.
Twee deuren

Dezelfde targeting. Andere clients.

Kies de deur die past bij hoe je client praat. De targeting is in beide gevallen hetzelfde.

Fetch API — de deur voor agents

Gebruik dit als je client JSON post: een LLM-tool, een script, een n8n-node, de playground.

POST /api/v1/fetch met een Bearer-sleutel. Zet country, city, language en session in de body. Het antwoord bevat de pagina, de exit-geo en route.reason, zodat je ziet waarom die hop is gekozen.

Het haalt een URL op en geeft de body terug. Het klikt niet, vult geen formulieren in en bewaart geen echte cookie jar van de browser. Voor een checkout in een echte browser gebruik je de gateway.

HTTP-gateway — de deur voor browsers

Gebruik dit als de client al HTTP-proxy spreekt: curl -x, Playwright, Chrome, een scraper die CONNECT verwacht.

Richt de proxy op host:7777. De username is iprouter-{keyId}-cc-GB-city-london-sessid-job1. Het wachtwoord is de API-sleutel. Dezelfde targetingtokens als in de fetch-body, alleen in de username.

CONNECT kan HTTPS-headers niet herschrijven. Heb je Accept-Language nodig op een TLS-site, dan moet de browser (of de Fetch API) die sturen. lang- in de username is een hint voor de routing en voor HTTP, geen magische HTTPS-injectie.

Als jeGebruik
JSON-agent / LLM-toolFetch API
Playground / een URL proberenFetch API
curl, Playwright, een echte browserGateway :7777
Inloggen en daarna dezelfde sessie crawlenBeide deuren, plus een sessid
Exits

Waar het verzoek echt naar buiten gaat.

Een exit is waar het verzoek het internet verlaat, voor zover de website dat ziet. Je hebt minstens één exit nodig die niet “deze machine” is, voordat geo-pagina's veranderen.

Direct — deze machine

Wordt meegeleverd met de node. Verzoeken slagen meteen, zodat de playground werkt. route.reason zegt “direct” of “direct fallback (no geo node)”. De website ziet nog steeds de IP van je host.

Pool — IP's die jij hebt toegevoegd

Console → Proxypool. Elke node heeft een land, een optionele stad en een type. Vraag je Londen, dan wint een poolnode in Londen. Vraag je GB zonder stad, dan wint elke GB-node.

Backconnect — één vendor-gateway

Je voegt één gateway toe. IP Router injecteert de targeting in de username (-cc-DE-city-berlin-sessid-s1). Gebruik dit als je bandbreedte bij een provider koopt in plaats van elke IP apart te zetten.

IP farm — telefoons in een stad

Zet Android-telefoons in een rack, tag de site met een land en een stad, en stel in hoeveel verbindingen live zijn. Agents gaan via die laatste mijl naar buiten. Gefactureerd per verbinding per maand. Een proef van 14 dagen dekt de eerste telefoon.

Noem je een land, dan probeert de router in deze volgorde: city pool match → country pool match → backconnect geo injection → direct fallback. Helemaal geen ingeschakelde proxies is een 422, geen stille misser.

Eerste poging

Vijf minuten. Je hebt nog geen betaalde exit nodig.

Doe dit één keer, zodat de rest van de gids niet abstract is. Vijf minuten. Je hebt nog geen betaalde exit nodig.

  1. 01

    Landing → Console openen. Lokaal is er geen aanmelding. Je komt op Overzicht.

  2. 02

    De playground is voorgevuld met de lokale echo. Kies een land (US is prima). Laat de sessie op agent-demo staan. Verstuur. Je krijgt altijd een 200 van echo — dit bewijst de deur, niet de geo.

  3. 03
    Lees drie velden

    ok hoort true te zijn. route.reason zegt welke exit is gekozen. geo.exit is de IP die de buitenwereld zou zien — leeg, of je machine bij direct.

  4. 04

    Voeg een pool- of backconnect-node toe onder Proxypool, of een IP farm in een stad die je belangrijk vindt. Verstuur opnieuw. reason hoort niet meer “direct fallback” te zeggen.

  5. 05

    API-sleutels voor de Fetch API. Eindpunten bouwt de gateway-username. Onder Agents staat het schema van de LLM-tool. Dezelfde targeting, drie vormen.

Toepassingen

Hoe het werkt per klus.

Elke keer dezelfde knoppen: land, stad, taal, sticky, type. De klus verandert alleen aan welke je draait en door welke deur je loopt. Kies een rij.

stad / land

Zoek zoals iemand in die stad het ziet

Google (en Bing, en Maps) tonen niet één internet. Ze tonen het internet vanaf de plek waar je staat. Ranglijsten, de local pack, advertenties, zelfs welke spelling ze denken dat je bedoelde — dat hangt allemaal af van de exit-IP en de taalheader. Als je agent fetcht vanuit een Amerikaans datacenter, beoordeel je een Amerikaanse resultatenpagina, ook als de vraag is “hoe ziet dit eruit in Manchester.”

Zonder IP Router

Je krijgt de SERP van het land van de host. Een zoekopdracht voor Londen vanaf een VM in Virginia is nog steeds een Virginia-pagina met een querystring die op Londen lijkt.

Ermee

cc-GB + city-london + lang-en_GB. De hop gaat via een Britse exit naar buiten, Accept-Language is Brits Engels, en de pagina is degene die een bezoeker in Londen zou krijgen.

Hoe het werkt

  1. 01Noem de markt: land GB, stad London, taal en-GB. De stad telt — Manchester en London hebben een andere local pack.
  2. 02Gebruik de Fetch API als je HTML of JSON terug wilt die de agent kan lezen. Gebruik de gateway als een headless browser de SERP aanstuurt.
  3. 03Stuur een stabiele sessid als je pagineert of doorklikt. Een nieuwe sessie halverwege het scrollen lijkt een nieuwe bezoeker.
  4. 04Lees route.reason. Je wilt city pool match (of backconnect geo injection). Direct fallback betekent dat je nog op de host zit.
  5. 05Vergelijk twee runs: dezelfde zoekopdracht, US tegenover GB. De local pack en de advertenties moeten verschuiven. Doen ze dat niet, dan zit je nog niet op een geo-exit.
Deur

Beide deuren. Fetch als de agent JSON post; de gateway als de client CONNECT spreekt.

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
Je weet dat het werkte als

route.reason is een geo-hit, geo.exit is niet je host, en de local pack noemt bedrijven in Londen — niet die naast je server.

Veelgemaakte fouten

  • Alleen het land. GB zonder stad brengt je vaak op een landelijke pagina, zonder de local pack die je wilde.
  • Geen lang. Een Britse IP met en-US neigt nog steeds naar Amerikaanse spelling en US-properties in de mix.
route.reason

De zin die zegt of geo echt is gebeurd.

city pool match
Je vroeg om een stad, en een poolnode in die stad stond aan. De beste geo-hit.
country pool match
Geen stadsnode (of je vroeg geen stad), maar een poolnode in dat land stond aan.
backconnect geo injection
Geen poolnode in dat land. Een backconnect-gateway staat aan, dus de targeting is in de username geschreven.
direct fallback (no geo node)
Niets in dat land. Het verzoek ging toch naar buiten — via deze machine. Geo-pagina's veranderen niet. Voeg een node of een farm toe.
sticky session
Je hergebruikte een sessid en de oude exit staat nog aan. Dezelfde IP als de vorige keer. De TTL is ververst.
backconnect rotate / pool rotate / direct
Je noemde geen land. De router koos een passende exit en, als je een sessie meestuurde, hashte de keuze zodat die blijft staan.
Fouten

Die eruitzien als productbugs.

Land zonder taal

Een Japanse IP met een Engelse Accept-Language serveert vaak nog steeds Engels. Zet ook lang (of language in de fetch-body), naast cc.

Elk verzoek een nieuwe sessid

Verandert de sessiestring, dan ben je een nieuw persoon. Logins vallen weg. Hergebruik dezelfde sessid voor de hele klus.

Vertrouwen op direct fallback

Een 200 van echo op deze machine is geen bewijs van geo. Lees route.reason. Staat daar direct fallback, dan zag de website nog steeds je host.

Datacenter tegenover residential

Sommige origins herkennen de ASN. Is de pagina een captcha-muur of een lege pagina met “datacenter detected”, zet dan type-residential of gebruik een IP farm.

HTTPS + gateway + lang

De gateway kan Accept-Language niet in een HTTPS CONNECT-tunnel injecteren. Stuur de header vanaf de client, of gebruik de Fetch API.

Lege pool

Staat elke node uit, dan krijg je 422 “No enabled proxies in the pool.” Zet de direct-node aan, of voeg er een toe die aan staat.