私たちの関与はその後半部分にあります。私たちはGeonodeであり、プロキシを販売しています。率直に言えば、サブネットの多様性は真の品質指標であるのに対し、プールサイズは主にマーケティング上の数字に過ぎません — これは、私たちを含む業界全体に逆行するものです。なぜなら、「1億5000万のIPアドレス」と記載する方が、「お客様が必要とする国々でN個の異なる/24サブネットにまたがるアドレスを提供しています」と記載するよりも、ランディングページに掲載するのがはるかに簡単だからです。 この記事から一つだけ覚えておくべきことがあるとすれば、それはプロバイダーに尋ねるべき質問です。それは「IPアドレスの数はいくつですか」ではなく、「それらはどのように分散されていますか」ということです。これは答えるのが難しい質問ですが、より有益な質問なのです。
基本的な考え方
すべてのIPアドレスは、2つの役割を同時に果たしています。その一部は、そのマシンがどのネットワークに属しているかを示し、残りの部分は、そのネットワーク上のどのマシンであるかを示します。
192.168.10.42
└──────┘ └─┘
network host
どこで区切られるかは決まっていません。これはサブネットマスク、あるいは同等のCIDR表記におけるプレフィックス長によって定義されます。 ネットワーク部分はサブネットID(ネットワークアドレスやネットワークプレフィックスと呼ばれることもあります)であり、そのサブネット上のすべてのマシンで共通です。
ルーターがこの情報を重視するのは、これにより一括して処理の判断を下せるからです。ルーターにはアドレスごとのルールではなく、ネットワークごとのルールが必要です。この集約こそが、インターネットのルーティングテーブルが管理可能なサイズに収まっている唯一の理由です。
CIDR表記:実際の表記方法
現在では、区切りを明示的に記述するのが一般的です。RFC 4632では、その形式が次のように定義されています。
プレフィックスは、従来のIPv4アドレスやネットワーク番号と同様に4オクテットの数値として表され、その後に「/」(スラッシュ)文字、さらに有効ビット数を表す0から32までの10進数が続きます。
したがって、192.168.99.0/24 は、最初の 24 ビットがネットワークを表し、残りの 8 ビットがホストを識別することを意味します。 RFCでは、従来のクラス体系からの対応関係が示されています。レガシーの「クラスB」ネットワークである172.16.0.0(マスク255.255.0.0)は172.16.0.0/16となり、レガシーの「クラスC」である192.168.99.0は192.168.99.0/24となります。
従来の固定クラス方式に対する利点について、RFCでは次のように述べられています。「明示的なプレフィックス長を持つクラスレスプレフィックスを使用することで、実際のニーズに応じてアドレス空間ブロックをはるかに柔軟に割り当てることが可能になります。 以前は 3 種類のネットワークサイズしか利用できませんでしたが、プレフィックスを定義することで、1 から 2^32 までのエンドシステムアドレスを含む、2 の累乗サイズの任意のブロックを記述できるようになります。」
| プレフィックス | マスク | アドレス数 | 使用可能なホスト数 |
|---|---|---|---|
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /26 | 255.255.255.192 | 64 | 62 |
| /27 | 255.255.255.224 | 32 | 30 |
| /28 | 255.255.255.240 | 16 | 14 |
| /30 | 255.255.255.252 | 4 | 2 |
| /32 | 255.255.255.255 | 1 | 1 |
通常のサブネットでは、ホストとして使用できないアドレスが2つあります。1つ目はサブネットIDそのものであり、最後の一つはブロードキャストアドレスです。そのため、/24のサブネットでは256ではなく254となります。
プレフィックス番号が小さいほど、ブロックは大きくなります。/8は膨大な規模です。RFCによると、IANAは地域インターネットレジストリ(RIR)に対して「2^24個のアドレスからなる連続したビットアラインされたブロック(別名:/8プレフィックス)」を割り当てており、RIRはこれをさらに細分化します。
サブネットIDの計算方法
技術的な答え:アドレスとマスクのビット単位のAND演算。
192.168.10.42/24
の場合:
address 11000000.10101000.00001010.00101010
mask 11111111.11111111.11111111.00000000
AND 11000000.10101000.00001010.00000000
= 192.168.10.0
サブネットIDは 192.168.10.0
、ブロードキャストアドレスは 192.168.10.255
、利用可能なホストは .1
から .254
までとなります。
オクテットの境界に一致しないプレフィックスの場合、計算はそれほど直感的ではありません。192.168.10.42/26
の場合、マスクは 255.255.255.192
であるため、最後のオクテットは 2 ビットのネットワークビットと 6 ビットのホストビットに分割されます。これにより、境界が 0、64、128、192 となる、それぞれ 64 個のアドレスを持つ 4 つのサブネットが得られます。 42は最初のブロックに含まれるため、サブネットIDは192.168.10.0
、ブロードキャストアドレスは192.168.10.63
となります。
実際には、ツールに処理を任せましょう:
ipcalc 192.168.10.42/26
あるいはPythonでは:
import ipaddress
net = ipaddress.ip_network('192.168.10.42/26', strict=False)
print(net.network_address) # 192.168.10.0
print(net.broadcast_address) # 192.168.10.63
print(net.num_addresses) # 64
strict=False
は重要です。これは、そのアドレスがネットワークそのものであると断定するのではなく、ホストアドレスを指定し、そのアドレスを含むネットワークを取得したいことをライブラリに伝えるためのものです。
プライベート範囲と、それらが至る所で見られる理由
3つの範囲は、パブリックインターネット上には決して現れません。RFC 1918 では、これらを予約しています:
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
RFCでは、これらを「24ビットブロック」、「20ビットブロック」、「16ビットブロック」と記述しており、これらを使用する企業は「IANAやインターネットレジストリとの調整なしに利用可能」であると記されています。
知っておくべき実用上の影響:
これらはインターネット上でルーティングできません。 世界中のすべての家庭用ルーターは 192.168.x.x のアドレスを割り当てていますが、それらは建物外に出ることはないため、アドレスが衝突することはありません。
プロキシがこれらのアドレスを「外部IP」として返す場合は、設定ミスです。 検索サービスが10.xや192.168.xのアドレスを報告する場合、経路上のどこかでパブリックアドレスではなく内部アドレスが報告されていることになります。
これらはNO_PROXYの設定において重要です。 プライベートアドレス範囲をプロキシの対象から除外することは標準的な慣行であり、これを誤ると、内部サービスが不可解な理由で外部プロキシを経由してしまう原因となることがよくあります。
プロキシにとってサブネットが重要な理由
ここで、ネットワークの概念が購入の判断材料となります。
ブロックはサブネットレベルで行われます。 あるサイトが特定のアドレスを問題視した場合、その単一のアドレスだけをブロックしても意味がないことがよくあります。なぜなら、その運営者は同じブロック内にさらに253個のアドレスを保有しているからです。 したがって、現実的な対応策は、その範囲(通常は/24、場合によってはそれ以上)をブロックすることです。これは標準的な防御策であり、サイトの立場からすれば極めて合理的な対応です。
ユーザーにとっての結果: プロキシプールが、数個のサブネット内の多数のアドレスで構成されている場合、そのプールはごく小規模なプールのように振る舞います。 203.0.113.0/24の50個のアドレスは、ブロックという観点から見れば、50個というより1個に近いものです。判断を誤ったリクエストレートを1回行うだけで、それらすべてを無効にしてしまう可能性があります。
だからこそ、プールサイズは不適切な指標なのです。 「1,000万個のIP」という数字だけでは、その分布状況については何もわかりません。 4,000の異なる/24サブネットに分散した1万個のアドレスからなるプールは、数百のサブネットに集中した100万個のアドレスからなるプールよりも耐障害性が高い。連続したアドレスはプロバイダーにとって取得コストが安く、重要な点においてまさに相関関係にある。
この点において、データセンターと住宅用IPは構造的に異なる。 データセンターのアドレスは、ホスティングプロバイダーに連続したブロックとして割り当てられるため、安価であるだけでなく、一括して特定・ブロックすることも容易です。サイト側では、わずか数個のルールでホスティングプロバイダーに割り当てられたアドレス全体をブロックできます。一方、一般家庭向けアドレスは消費者向けISPから提供され、多くのブロックに分散し、動的に割り当てられ、一般ユーザーと混在しています。 この分散状況こそが、追加料金の大部分を占める要因です。
サブネットの多様性も、ローテーションの方法に影響を与えます。 1つの/24内のアドレスを順番にローテーションしても、実質的なローテーションとは言えません。プロバイダーからブロックの情報を把握できる場合は、順番にリクエストを送信するのではなく、各ブロックにリクエストを分散させてください。
プール内のサブネットの多様性を確認する
正式導入前に、試用期間中に実施しておく価値があります。
出口アドレスのサンプルを収集し、異なる /24 ネットワークの数を確認します:
for i in $(seq 1 200); do
curl -s -x "$PROXY" https://api.ipify.org
echo
done | sort -u > ips.txt
wc -l < ips.txt # distinct addresses
cut -d. -f1-3 ips.txt | sort -u | wc -l # distinct /24 blocks
この比率が重要な指標となります。180個の /24 ネットワークにまたがる200個のユニークなアドレスは、分散が良好なプールと言えます。一方、6個の /24 ネットワークにまたがる200個のアドレスは、見た目よりもはるかに規模の小さいプールです。
より大まかな概要を把握するには、/16単位で拡張して確認します:
cut -d. -f1-2 ips.txt | sort -u | wc -l
また、可能であれば自律システム(AS)番号も確認してください。なぜなら、多くの/24にまたがっていても、それらがすべて1つの事業者に属している場合、サブネットの数から推測されるよりも多様性が低いからです。アドレスのサンプルに対して whois
を実行すれば確認できます。
この確認は、国ごとに個別に行うようにしてください。集計値として行わないでください。世界的に見れば多様性に優れたアドレスプールであっても、実際に必要とする特定の場所に集中している可能性があります。集計値ではその事実が完全に隠されてしまい、これはプロキシのテストが重要な理由で説明した「サイレント・フェイル」の問題と同じです。
サブネットの上位:ASN、WHOIS、およびGeofeeds
サブネットは階層構造の一つのレベルに過ぎず、アドレスの評価においては、その上位のレベルも同様に重要です。
地域レジストリは下位へ割り当てを行います。 RFC 4632 には、その連鎖が次のように記述されています。IANA は /8 ブロックを地域インターネットレジストリ(RIR)に割り当て、RIR は「さらに、より小さなアドレスブロックを割り当てまたは指定」します。したがって、すべてのパブリックアドレスは入れ子状の割り当て構造の中に位置しており、各レベルの情報は公開記録として残されています。
WHOISは、どの組織がブロックを保有しているかを示します。 アドレスを照会すると、そのアドレスが属する割り当て、組織、国、そして通常は連絡先情報が返されます。 これにより、アドレスがホスティングプロバイダに属するか、一般消費者向けISPに属するかを誰でも判断できます。これは推測ではなく、検索によるものです:
whois 203.0.113.10 | grep -iE 'netname|orgname|country|cidr'
自律システム番号(ASN)は、ブロックをオペレーターごとにグループ化します。 ASとは、単一のルーティングポリシー下にあるプレフィックスの集合であり、1つのASNの下で、単一のオペレーターが数百もの個別のブロックをアナウンスする場合もあります。 データセンターのトラフィックに対して、通常、卸売的なブロックが行われるのはこのレベルです。サイト側はホスティングプロバイダーの /24 ブロックを個別に列挙するのではなく、ASN 全体をブロックします。
プール評価における実用的な意味合いとしては、/24 の多様性は必要条件ではあるものの、十分条件ではないということです。 1つのホスティングASNの下にある400個の異なる/24ブロックは、1つのルールでブロックされてしまいます。サンプルにおけるASNの分散状況を確認することは、サブネット数の確認と並行して実施する価値のある、2つ目の(より大まかな)テストです:
for ip in $(head -50 ips.txt); do
whois "$ip" | grep -iom1 'AS[0-9]\+'
done | sort | uniq -c | sort -rn
ジオフィードは、位置情報を補正するための手段です。 ネットワーク事業者は、RFC 8805で標準化された、プレフィックスと位置情報を関連付ける機械可読ファイルを公開でき、ジオロケーションベンダーはそれらを取り込みます。 これにより、一見するとベンダーの不手際のように見える現象が説明できます。つまり、あるジオロケーションデータベースが最新のジオフィード更新を取り込んだのに対し、もう一方が取り込んでいないために、同じアドレスについて両者の情報が一致しないという現象です。ジオロケーションはアドレス単位ではなくプレフィックス単位で行われるため、修正が反映されるとサブネット全体が一斉に位置を変更することになります。
レピュテーションは双方向で継承される。 あるアドレスは、その親となる /24 ブロック、より大きな割り当て、および ASN からレピュテーションを継承します。また、それらは逆方向にも影響を与えます。これが、共有の住宅用プールを利用する模範的なユーザーが、数時間前に他者が行った行動の影響を受ける理由であり、「プロキシが動作しなくなった」という現象が、多くの場合、ユーザー自身の行動とは無関係である理由でもあります。
プールを評価する者にとって、必要なチェックリストは簡潔です。サンプル内の異なる /24 ネットワークを数え、異なる ASN を数え、住宅用プールを購入している場合は WHOIS エントリがホスティング会社ではなく一般消費者向け ISP のように見えるかを確認し、これらすべてを総計ではなく国ごとに繰り返して確認します。
IPv6がもたらす計算方法の変化
簡単に説明すると、その重要性がますます高まっているためです。
IPv6では、プレフィックス長が最大128までの同じCIDR表記が使用されます。従来の割り当てははるかに大規模で、単一のエンドサイトには通常/48または/56が割り当てられ、単一のネットワークセグメントは慣例的に/64となります。これは、IPv4のインターネット全体よりも多くのアドレスを含んでいます。
レピュテーションに関わるあらゆる事柄において、これには2つの帰結があります:
意味のある単位は単一のアドレスではなく、/64です。 1人の加入者が/64全体を管理しているため、単一のIPv6アドレスをブロックしても何の効果もありません。IPv6を適切に扱うサイトは、/64単位、あるいはそれより粗い単位でレピュテーションを追跡しています。
膨大なアドレス数自体は、それだけでは何の意味も持ちません。 膨大な数のIPv6アドレスを広告しているプロバイダーであっても、実際には単一の/64を広告しているだけかもしれません。重要なのは、そのアドレスプールがいくつの異なる/64、あるいはさらに望ましいのは/48を網羅しているかということです。
よくある質問
サブネットIDとは何ですか?
IPアドレスのうち、個々のホストではなくネットワークを識別する部分のことです。これは、アドレスにサブネットマスクを適用することで得られ、そのサブネット上のすべてのマシンで共有されます。CIDR表記では、192.168.10.0/24のようにプレフィックス長とともに記述されます。
IPアドレスからサブネットIDを計算するにはどうすればよいですか?
IPアドレスとサブネットマスクをビット単位でAND演算します。192.168.10.42/24の場合、マスクは255.255.255.0となるため、192.168.10.0となります。オクテットに揃っていないプレフィックスの場合は、ツール(ipcalc や Pythonの ipaddress.ip_network(addr, strict=False))を使用してください。
IPアドレスにおける「/24」とはどういう意味ですか?
最初の24ビットがネットワークプレフィックスであり、ホスト用に8ビットが残されていることを意味します。「/24」には256個のアドレスが含まれていますが、最初の1つはサブネットID、最後の1つはブロードキャストアドレスであるため、実際に使用できるのは254個です。これはマスク「255.255.255.0」に対応します。
なぜウェブサイトはサブネット全体をブロックするのですか?
運営者が同じブロック内の他の253個のアドレスを管理している場合、単一のアドレスをブロックしてもほとんど効果がないからです。範囲全体をブロックすることが効果的な対策であり、これは標準的な慣行です。まさにこの理由により、集中したプロキシプールは、そのアドレス数から予想されるよりもはるかに小さなプールのように振る舞うのです。
プロキシプールはいくつのサブネットをカバーすべきか?
明確な数値はありませんが、重要なのは比率です。数百個の出口アドレスを抽出し、異なる /24 サブネットの数を数えてみてください。アドレスに対するブロックの比率が高いほど、真の多様性が確保されていることを示しています。 集計値ではなく国ごとに測定してください。プールは世界的には多様であっても、必要な場所では集中している可能性があるからです。
サブネットの多様性はプールの規模よりも重要ですか?
ブロックに対する耐性の観点からは、そうです。同じ /24 内のアドレスは相関関係にあります。1つのブロックがブロックされれば、それらすべてが利用できなくなる可能性があります。 また、連続したアドレスはプロバイダーにとって最も安価に取得できるため、多様性の乏しい大規模なプールは、広告出しは容易ですが、見た目ほど有用ではありません。
プライベートIP範囲とは何ですか?
10.0.0.0/8、172.16.0.0/12、および192.168.0.0/16です。これらはRFC 1918によって内部使用のために予約されており、パブリックインターネット上では決してルーティングされません。 どの組織でも、調整なしにこれらを使用できます。プロキシがこれらのいずれかを外部アドレスとして報告する場合は、設定に誤りがあります。
IPv6ではサブネット分割の仕組みが異なりますか?
表記は同じですが、規模は異なります。 エンドサイトには通常 /48 または /56 が割り当てられ、単一のセグメントは /64 となります。これは IPv4 インターネット全体よりも大きな規模です。1 つの加入者が /64 全体を管理するため、レピュテーションやブロッキングは /64 単位、あるいはそれより粗い単位で行われます。そのため、IPv6 アドレスの単純な個数だけを見ても、ほとんど意味をなしません。
まとめ
サブネットIDとは、IPアドレスのネットワーク部分であり、マスクまたはCIDRプレフィックスの長さによって決定されます。これは単純な概念であり、その背後にある演算はビット単位のAND演算で、1行のスクリプトで実行可能です。
ネットワークの講義以外でもこれを理解する価値がある理由は、インターネットがサブネットを単位として扱っているからです。ルーターはサブネット単位で集約し、レジストリはサブネット単位で割り当てを行い、そして——商業的に重要な点として——サイトはサブネット単位でブロックします。アドレスがそれ自体の価値だけで判断されることはめったになく、近隣のアドレスの評判を受け継ぐことになるのです。
したがって、購入するアドレスを評価する際、良質なアドレスプールと水増しされたアドレスプールを区別する鍵となるのは、数ではなく分布です。 数百のエグジットをサンプリングし、固有の /24 ネットワークを数え、国ごとに集計し、プロバイダー間でその比率を比較してみてください。所要時間は10分程度ですが、これはベンダーがランディングページには掲載しない数値であり、見出しの数字よりもはるかに正確に、そのアドレスプールの挙動を予測することができます。
