「ローテーティングレジデンシャルプロキシ」という言葉はこの業界の誰もが使うが、その背後にある仕組みが説明されることはめったにない。IPはどこから来るのか。なぜ求めてもいないのに出口IPが変わることがあるのか。「ローテーション」は実際には何を制御しているのか、そしてなぜ「スティッキー」なIPは決して完全に固定的ではないのか。この仕組みを理解すれば、これらすべての答えが見えてくる。それはプロキシの挙動と戦うことと、意図的にそれを使いこなすことの違いを生む。
これはスティッキーとローテーティングの比較の選択やレジデンシャルIPの構造の根底にあるメカニズムだ。実際に何が起きているのかを見ていこう。
あなたが接続するのはIPではなくゲートウェイ
最初に理解すべきことは、個々のレジデンシャルIPに直接接続することは決してなく、それらのリストを管理することもないという点だ。あなたが接続するのは単一のゲートウェイエンドポイントp.shifter.io:443であり、ゲートウェイがあなたのリクエストをプール内の数百万のレジデンシャルIPのいずれかを通してルーティングする。どのIPを取得するかはすべて、認証時に使うユーザー名で表現される。
customer-USERNAME-country-us-sid-abc123-ttl-600ゲートウェイはそのユーザー名を読み取り、プールをあなたのターゲティング条件(ここでは米国)に一致するIPに絞り込み、1つを選び、そのIPを通してあなたのリクエストを送出する。あなたは1つのアドレスと通信しているだけで、その背後にプールが存在している。これがローテーションが手間なく感じられる理由だ。割り当てを行うのはゲートウェイであり、あなたはただ欲しいものを指定するだけでよい。
プールは生きている、だからローテーションがデフォルトになる
レジデンシャルプールは固定リストではない。それは一日中デバイスがオンラインになったりオフラインになったりすることで出入りする実際の家庭用接続で構成されており、使用可能な出口IPの集合は常に変化している。特定のセッションを要求せずに接続を開くと、ゲートウェイはその時点で利用可能なものの中から新しい出口IPを単に割り当てる。これが最も基本的な意味での「ローテーティング」だ。つまり、新しい接続は新しいIPを得る。
したがってローテーションは切り替えるような特別なモードではない。それは、ゲートウェイに対してIPを保持するよう指示しなかった場合の、生きたプールの自然な挙動なのだ。セッション制御を省略すれば、すべての新しい接続がローテーションする。
セッショントークンとTTLでローテーションを制御する
ユーザー名内の2つの設定項目が、ローテーションするか固定されたままにするかを決定する。話はそれがすべてだ。
- セッションID(
sid) はゲートウェイに対して「このトークンを提示するたびに、同じ出口IPを通して送出し続けてほしい」と伝える。これがスティッキーセッションだ。 - TTL(
ttl) は、そのIPをどれだけの時間保持するかを指定する。例えば600秒だ。
両方を設定すればその期間内で安定したIPを得られる。省略すれば接続のたびにローテーションする。重要なのは、これはユーザー名を変更することでリクエストごとに行う選択であり、別の製品やエンドポイントではないという点だ。同じゲートウェイが両方をこなす。だからこそスティッキーとローテーティングの比較は、購入するプランではなく、作業単位ごとに下す決定なのだ。
なぜスティッキーIPは決して真に永続的ではないのか: CGNATとデバイスの入れ替わり
ここがデータセンタープロキシが向き合う必要のない、正直な部分だ。レジデンシャルの出口IPは、あなたが制御できない実際の家庭用接続に属しており、家庭用接続はレンタルサーバーのように安定してはいない。特に2つの力がそれらを動かし続けている。
現在、ほとんどの家庭用接続はCGNAT、すなわちキャリアグレードNATの背後にあり、ISPは1つのパブリックIPv4アドレスを多数の加入者間で共有し、それを再割り当てできる。加入者のパブリックIPは、リース更新やNATの再割り当てによって、あなたやゲートウェイが何もしなくても変わり得る。そしてデバイス自体が単純にオフラインになることもある。誰かがノートパソコンを閉じたり、スマートフォンがWi-Fiから切断されたりすれば、その出口経路は失われる。
これがスティッキーセッションがベストエフォートであり、保証ではない理由だ。ゲートウェイはTTLの範囲内で可能な限りあなたのIPを保持するが、根底にある家庭用接続が変わったり切断されたりすれば、TTLが尽きる前に新しいIPが割り当てられる。つまりローテーションは、一部は機能であり、一部はネットワークの現実の反映なのだ。レジデンシャルIPは実際の家庭が動くから動く。そしてそれに基づいて構築されたどのシステムも、そのことを見込んでおく必要がある。
なぜ求めていないのにIPが変わったのか
これらの要素をまとめると、実行途中の謎めいたIP変更は謎ではなくなる。それはほぼ次のいずれかだ。
- セッショントークンがないため、すべての接続が設計上ローテーションする。これは1回の実行につき1つのIPを想定していた人にとって最もよくある驚きだ。
- スティッキーセッションのTTLが期限切れになったため、ゲートウェイがIPを解放し新しいIPを割り当てた。
- スティッキーセッションの背後にある家庭用IPがTTL前に切断された(デバイスがオフラインになったかCGNATの再割り当て)ため、早期の変更が強制された。
- クライアントが既存の接続を再利用せず、新しい接続を開いた。HTTPクライアントが接続を再利用しない場合、
sidがそれを固定していない限り、各リクエストは新規のローテーションイベントのように見えることがある。これが言語別ガイドがクライアントの再利用を強調するもう一つの理由だ。
スクレイピングの方法にとっての意味
実践的な教訓はこの仕組みから直接導かれる。
ローテーションをタスクに合わせる。 匿名性が欲しく、多くのIPに負荷を分散させたい場合は、セッションを省略してローテーションさせる。1つの首尾一貫した訪問者に見える必要がある処理、例えば複数ページにわたるページネーションのシーケンス、ログイン済みセッション、あるいは複数ステップのフローには、sidとttlを使ってスティッキーにする。この方法で作業をアイデンティティに対応付けることがロードバランシングのパターンだ。
変わる可能性のあるスティッキーIPを前提に設計する。 スティッキーはベストエフォートであるため、長時間のセッションは、途中で出口IPが変わっても耐えられる必要がある。IPがその実行全体で固定されていると想定するのではなく、変化が起きた場合はクッキーや状態を再確立できるようにすべきだ。
ジオターゲティングはサブセット内でローテーションする。 国、都市、またはASNをターゲットにすると、ゲートウェイはプールをそのサブセットに絞り込み、その中でローテーションする。「ローテーティング米国レジデンシャル」は接続ごとに新しい米国IPを意味する。ASNや都市レベルのターゲティングは、ローテーションするサブセットを絞り込むだけだ。
プールの品質がローテーションから得られるものを決める。 ローテーションはその背後にあるプールの質次第でしかない。大規模でクリーンなプールなら、新しいIPはそれぞれ良質なものになる。小規模またはダーティなプールなら、ローテーションは単にフラグ付けされたアドレスを巡回させるだけで、成功率にそれが表れる。だからこそIPレピュテーションとプールサイズは、ローテーションの仕組み自体よりも重要なのだ。
結論
レジデンシャルプロキシのローテーションは魔法でもなければ謎でもない。ゲートウェイは実際の家庭用接続からなる生きたプールから出口IPを割り当て、あなたはユーザー名内のセッショントークンとTTLによってローテーションするかスティッキーのままにするかを制御し、そしてこの仕組み全体は、CGNATとデバイスの入れ替わりによって家庭用IPが出入りするという現実によって制約されている。セッションを省略してローテーションさせ、sidとttlを設定してスティッキーを保つ。しかしスティッキーはベストエフォートとして扱い、IPが変わる可能性を見込んで構築すること。選択をタスクに合わせれば、その後のすべて、セッション、ログイン、ページネーション、ジオが楽になる。
ローテーションを本当に有用にするのは、その背後にあるプールだ。当社のレジデンシャルプロキシは大規模でクリーンなプール上で稼働しているため、ゲートウェイがあなたに渡す出口IPは、ローテーティングであれスティッキーであれ、使う価値のあるものだ。そしてGB単位の料金体系により、支払うのは行ったリクエストの分だけであり、巡回したIPの数ではない。