IP Router
작동 방식 · 초보자용

웹사이트는 IP로 방문자를 판단합니다. 이것은 에이전트가 쓸 IP를 고르는 교환대입니다.

인터넷의 모든 기기에는 주소가 있습니다. 검색, 상점, 광고, 뉴스 사이트는 그 주소로 보이는 것을 정합니다. 통화, 언어, 순위, 심지어 페이지가 열리는지까지. 데이터센터 안의 AI 에이전트에게 주소는 하나, 그 데이터센터뿐입니다. 지역에 맞는 출구가 없으면 모든 요청이 한 건물에서 온 것처럼 보입니다.

국가나 도시를 요청합니다. IP Router가 그곳의 출구를 고르고, 그 IP로 요청을 내보낸 뒤, 페이지를 돌려줍니다. JSON 에이전트와 실제 브라우저가 같은 두뇌를 씁니다.

핵심

사실 네 가지를 알면, 나머지를 쓸 수 있습니다.

웹사이트는 노트북을 보지 않습니다

출구 IP를 봅니다. 출구를 바꾸면 페이지가 바뀝니다. 가격, 검색 결과, 매장 찾기, 유료 장벽, 전부.

국가는 언어가 아닙니다

cc-JP는 일본 IP에 올립니다. lang-ja는 일본어를 읽는다고 사이트에 알립니다. 보통 둘 다 필요합니다.

고정은 「같은 사람」이라는 뜻입니다

로그인, 장바구니, 쿠키는 도중에 IP가 바뀌면 죽습니다. sessid는 만료될 때까지 하나의 출구에 고정합니다.

문 두 개, 커널 하나

에이전트는 /api/v1/fetch로 JSON을 POST합니다. 브라우저와 curl은 :7777에서 CONNECT로 말합니다. 둘 다 selectRoute를 부릅니다.

단어

콘솔이 쓰는 열두 가지 용어.

IP / 출구
웹사이트가 보는 주소입니다. 노트북도 아니고, 에이전트 호스트도 아닙니다. IP Router를 떠난 마지막 홉입니다.
cc (국가)
ISO 국가 코드입니다. GB는 영국, DE는 독일, JP는 일본입니다. 이것으로 시장을 고릅니다.
도시
국가보다 더 촘촘합니다. 런던과 맨체스터, 뉴욕과 오스틴. username에서 공백은 밑줄이 됩니다. city-new_york.
언어
Accept-Language 헤더입니다. 사이트가 묻는 「어떤 언어로 읽나요?」입니다. IP와는 별개입니다.
sessid (고정)
작업의 모든 홉이 같은 출구를 쓰도록 다시 쓰는 이름입니다. 기본 TTL은 10분이고, sesstime이 그것을 덮어씁니다.
유형
출구가 속한 네트워크의 종류입니다. 레지덴셜, 데이터센터, 모바일, 또는 ISP. 사이트는 이들을 다르게 취급합니다.
풀
직접 추가한 노드의 목록입니다. 각 노드에는 국가가 붙고, 도시가 있을 수도 있습니다. 라우터가 타기팅을 노드에 맞춥니다.
백커넥트
벤더 게이트웨이 하나입니다. IP Router가 그 벤더의 username 뒤에 -cc-US-city-austin-sessid-job1을 붙입니다.
다이렉트
이 머신입니다. 익히기에는 충분합니다. 웹사이트는 여전히 호스트 IP를 보므로, 지역 페이지는 바뀌지 않습니다.
IP farm
한 도시에 세워 둔 Android 휴대폰입니다. 에이전트는 그 라스트마일을 통해 나갑니다. 청구는 GB가 아니라 라이브 연결 단위입니다.
Fetch API
JSON으로 POST /api/v1/fetch합니다. HTTP CONNECT를 말하지 않는 에이전트와 LLM을 위한 것입니다.
게이트웨이 :7777
HTTP 프록시입니다. curl -x, Playwright, 브라우저. 타기팅은 username에 있고, Oxylabs 방식입니다.
문 두 개

타기팅은 같고, 클라이언트만 다릅니다.

클라이언트가 말하는 방식에 맞는 문을 고르세요. 어느 쪽이든 타기팅은 같습니다.

Fetch API — 에이전트 문

클라이언트가 JSON을 POST할 때 쓰세요. LLM 도구, 스크립트, n8n 노드, 플레이그라운드.

Bearer 키로 POST /api/v1/fetch를 보냅니다. 본문에 국가, 도시, 언어, 세션을 넣으세요. 응답에는 페이지, 출구 지역, 그리고 그 홉이 선택된 이유를 보여주는 route.reason이 들어 있습니다.

URL을 가져와 본문을 돌려줍니다. 클릭하거나, 양식을 채우거나, 실제 브라우저의 쿠키 저장소를 유지하지는 않습니다. 실제 브라우저에서 결제하려면 게이트웨이를 쓰세요.

HTTP 게이트웨이 — 브라우저 문

클라이언트가 이미 HTTP 프록시를 말할 때 쓰세요. curl -x, Playwright, Chrome, CONNECT를 기대하는 스크레이퍼.

프록시를 host:7777로 향하게 하세요. username은 iprouter-{keyId}-cc-GB-city-london-sessid-job1입니다. 비밀번호는 API 키입니다. fetch 본문과 같은 타기팅 토큰이 username 안에 있습니다.

CONNECT는 HTTPS 헤더를 다시 쓸 수 없습니다. TLS 사이트에 Accept-Language가 필요하면 브라우저(또는 Fetch API)가 보내야 합니다. username의 lang-은 라우팅과 HTTP를 위한 힌트이며, HTTPS에 마법처럼 주입되지는 않습니다.

이런 경우사용
JSON 에이전트 / LLM 도구Fetch API
플레이그라운드 / URL 시험Fetch API
curl, Playwright, 실제 브라우저게이트웨이 :7777
로그인한 뒤 같은 세션을 크롤어느 문이든, sessid와 함께
출구

요청이 실제로 나가는 곳.

출구는 웹사이트가 보기에 요청이 인터넷으로 나가는 지점입니다. 지역 페이지가 바뀌려면 「이 머신」이 아닌 출구가 적어도 하나는 있어야 합니다.

다이렉트 — 이 머신

노드에 기본으로 들어 있습니다. 요청이 바로 성공해서 플레이그라운드가 동작합니다. route.reason은 「direct」 또는 「direct fallback (no geo node)」라고 합니다. 웹사이트는 여전히 호스트 IP를 봅니다.

풀 — 추가한 IP

콘솔 → 프록시 풀. 각 노드에는 국가, 선택적인 도시, 유형이 있습니다. 런던을 요청하면 런던 풀 노드가 이깁니다. 도시 없이 GB를 요청하면 아무 GB 노드나 이깁니다.

백커넥트 — 벤더 게이트웨이 하나

게이트웨이를 하나 추가합니다. IP Router가 username에 타기팅을 주입합니다 (-cc-DE-city-berlin-sessid-s1). IP를 하나씩 나열하는 대신 제공자에게 대역폭을 살 때 쓰세요.

IP farm — 한 도시의 휴대폰

Android 휴대폰을 세워 두고, 사이트에 국가와 도시를 붙이고, 라이브 연결 수를 정합니다. 에이전트는 그 라스트마일을 통해 나갑니다. 연결당 월 요금입니다. 첫 휴대폰은 14일 체험입니다.

국가를 지정하면 라우터는 이 순서로 시도합니다. city pool match → country pool match → backconnect geo injection → direct fallback. 켜진 프록시가 하나도 없으면 조용히 놓치는 것이 아니라 422입니다.

첫 시도

5분이면 됩니다. 유료 출구는 아직 필요 없습니다.

나머지가 추상적으로 남지 않도록, 이것을 한 번 해 보세요. 5분입니다. 유료 출구는 아직 필요 없습니다.

  1. 01

    랜딩 → 콘솔 열기. 로컬에는 가입이 없습니다. 개요로 들어옵니다.

  2. 02

    플레이그라운드에는 로컬 에코가 미리 채워져 있습니다. 국가를 고르세요. US면 충분합니다. 세션은 agent-demo로 두고 보내세요. 에코는 항상 200을 돌려줍니다. 이것은 문을 확인하는 것이며, 지역을 확인하는 것은 아닙니다.

  3. 03
    세 필드 읽기

    ok는 true여야 합니다. route.reason이 어느 출구를 골랐는지 알려 줍니다. geo.exit는 바깥에서 보게 될 IP입니다. 다이렉트이면 비어 있거나 이 머신입니다.

  4. 04

    프록시 풀에 풀 노드나 백커넥트 노드를 추가하거나, 필요한 도시의 IP farm을 추가하세요. 다시 보내세요. reason은 더 이상 「direct fallback」이라고 하면 안 됩니다.

  5. 05

    Fetch API에는 API 키가 있습니다. 엔드포인트는 게이트웨이 username을 만듭니다. 에이전트에는 LLM 도구 스키마가 있습니다. 타기팅은 같고, 겉모습만 세 가지입니다.

사용 사례

작업마다 어떻게 동작하는지.

손잡이는 매번 같습니다. 국가, 도시, 언어, 고정, 유형. 바뀌는 것은 어느 것을 돌리고 어느 문으로 들어가느냐뿐입니다. 한 줄을 고르세요.

도시 / 국가

그 도시에 있는 사람이 보는 검색을 보세요

Google(그리고 Bing, 지도)은 인터넷을 하나로 보여 주지 않습니다. 서 있는 곳에서 본 인터넷을 보여 줍니다. 순위, 로컬 팩, 광고, 심지어 어떤 철자를 의도했다고 보는가까지, 전부 출구 IP와 언어 헤더에 달렸습니다. 에이전트가 미국 데이터센터에서 가져오면, 질문이 「맨체스터에서는 어떻게 보이나」여도 미국 결과 페이지를 채점하는 것입니다.

IP Router 없이

호스트 국가의 검색 결과가 나옵니다. 버지니아 VM에서 보낸 런던 쿼리도, 쿼리 문자열만 런던 모양인 버지니아 페이지입니다.

있으면

cc-GB + city-london + lang-en_GB. 홉은 영국 출구로 나가고, Accept-Language는 영국 영어이며, 페이지는 런던 방문자가 받을 그 페이지입니다.

작동 방식

  1. 01시장을 지정하세요. 국가 GB, 도시 London, 언어 en-GB. 여기서는 도시가 중요합니다. Manchester와 London의 로컬 팩은 다릅니다.
  2. 02에이전트가 읽을 HTML/JSON이 필요하면 Fetch API를 쓰세요. 헤드리스 브라우저가 검색 결과를 돌리면 게이트웨이를 쓰세요.
  3. 03페이지를 넘기거나 클릭해 들어갈 거면 안정된 sessid를 보내세요. 스크롤 중간에 새 세션은 새 방문자처럼 보입니다.
  4. 04route.reason을 읽으세요. city pool match(또는 backconnect geo injection)가 나와야 합니다. direct fallback이면 아직 호스트에 있는 것입니다.
  5. 05같은 쿼리로 두 번을 비교하세요. US와 GB. 로컬 팩과 광고가 움직여야 합니다. 움직이지 않으면 아직 지역 출구가 아닙니다.
문

어느 문이든. 에이전트가 JSON을 POST하면 Fetch API, 클라이언트가 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이 없는 경우. en-US인 영국 IP는 여전히 미국식 철자와 US 쪽 결과로 기울어집니다.
route.reason

지역이 실제로 적용됐는지 알려 주는 문장.

city pool match
도시를 요청했고, 그 도시의 풀 노드가 켜져 있었습니다. 가장 정확한 지역 적중입니다.
country pool match
도시 노드가 없거나 도시를 요청하지 않았지만, 그 국가의 풀 노드가 켜져 있었습니다.
backconnect geo injection
그 국가의 풀 노드가 없습니다. 백커넥트 게이트웨이가 켜져 있어, 타기팅이 그 username에 기록되었습니다.
direct fallback (no geo node)
그 국가에는 아무것도 없습니다. 요청은 이 머신을 통해 그래도 나갔습니다. 지역 페이지는 바뀌지 않습니다. 노드나 팜을 추가하세요.
sticky session
sessid를 다시 썼고, 이전 출구가 아직 켜져 있습니다. 지난번과 같은 IP입니다. TTL이 갱신되었습니다.
backconnect rotate / pool rotate / direct
국가를 지정하지 않았습니다. 라우터가 맞는 출구를 골랐고, 세션을 보냈다면 그 선택이 유지되도록 해시했습니다.
실수

제품 버그처럼 보이는 것들.

언어 없는 국가

일본 IP에 영어 Accept-Language가 있으면, 여전히 영어를 주는 일이 많습니다. cc와 함께 lang(또는 fetch 본문의 language)도 설정하세요.

요청마다 새 sessid

세션 문자열이 바뀌면 새로운 사람입니다. 로그인이 떨어집니다. 작업 전체에 같은 sessid를 다시 쓰세요.

direct fallback을 믿음

이 머신의 에코가 200을 준 것은 지역의 증거가 아닙니다. route.reason을 읽으세요. direct fallback이라고 하면, 웹사이트는 여전히 호스트를 본 것입니다.

데이터센터와 레지덴셜

일부 오리진은 ASN을 핑거프린트합니다. 페이지가 캡차 벽이거나 「데이터센터가 감지됨」 빈 화면이면, type-residential을 설정하거나 IP farm을 쓰세요.

HTTPS + 게이트웨이 + lang

게이트웨이는 HTTPS CONNECT 터널에 Accept-Language를 주입할 수 없습니다. 클라이언트에서 헤더를 보내거나, Fetch API를 쓰세요.

빈 풀

모든 노드가 꺼져 있으면 422 「No enabled proxies in the pool.」이 옵니다. 다이렉트 노드를 켜거나, 켜진 노드를 하나 추가하세요.