「コンテンツ配信の地域制限」回避方法をググる前に読む記事

秋葉原に出社する度にDevelopers.IO Cafeに通い続け、可愛いスリーブを毎回捨てられずに葛藤の 日々を続けているShirotaです。お久しぶりです。

〜可愛いスリーブの画像を暫しお楽しみ下さい〜

さて、今更ですがre:Inventに行った時の話です。 気になる動画がYoutubeで配信されたのをTwitterで見かけて、いそいそとホテルで動画を見ようとリンクをクリックしたところ、以下のような画面が私を迎えてくれました。

▲ポイント数をひっそり落としての「申し訳ありません。」に若干の申し訳なさを感じる

結局、ラスベガス滞在中は見られないんだなと諦めて帰国後に動画を視聴したのですが、先日SAAの勉強をしていた際に「CloudFrontの地域制限配信」の存在を知りました。 また、これがきっかけで前述のYoutube地域制限配信の事を思い出したので「もしかしてYoutubeもCloudFrontを使っていたりするのかな?」と検索を掛けようとしたところ、こんなサジェストが私の目に飛び込んできました。

 

▲初見の感想は「皆、欲に忠実だなぁ」

「物理的問題、回避出来るんかい!」と思ったのですが回避方法があるという事は何らかの地理に依存するリソースがある筈。気になる。 と言う訳で、今回は地域制限配信の仕組みとその際に利用されているリソースについて調べてみました。

CloudFrontの地理制限配信の仕組みについて

まずは、CloudFrontのAWS公式ドキュメントを見てみましょう。

地域制限を使用するには、次の 2 つの方法があります。

CloudFront の地理制限機能を使用する。ディストリビューションに関連するすべてのファイルへのアクセスを制限し、国レベルでアクセスを制限する場合は、この方法を使用します。

サードパーティの位置情報サービスを使用する。ディストリビューションに関連するファイルのサブセットへのアクセスを制限する場合や、国レベルより詳細なレベルでアクセスを制限する場合は、この方法を使用します。

2つの方法があるようです。次に、CloudFrontの地理制限機能について読んでいきましょう。

注記

CloudFront は、サードパーティーの GeoIP データベースを使用して、ユーザーがいる場所を判別します。IP アドレスと国とのマッピングの正確さは、リージョンによって異なります。最近のテストによれば、全体的な正確性は 99.8% です。CloudFront がユーザーの場所を特定できない場合、CloudFront はユーザーによってリクエストされたコンテンツを供給することに注意してください。

個人的には一番下の一文の方が気になって仕方がないのですが、今回はどのようなリソースを利用して地域を特定し、実際の地域制限配信に利用しているのかが知りたいので触れないでおきます。そうは言っても気になるものは気になりますが。   どうやら、GeoIPでリクエスト元の存在している地域を特定しているようですね。 Youtubeに関しても明示的なソースは調べられなかったのですが、地域制限配信の回避方法を調べてみる限りでは帰納的にGeoIPでリクエスト元の存在している地域を調べているようです。プロキシは別にチートアイテムでもなんでもないよ!とは書いてみたものの、子どもの時分は串を魔法のインターネット上チートアイテムだと思っていました。 ここまでで大体の検討がついた方も多いと思いますが、自分含め初学者の皆様へ「GeoIPとは何ぞや」、と言う事をここからはお話ししていきたいと思います。

GeoIPとは

GeoIPとは、IPアドレスから地理情報を調べる事が出来るライブラリです。maxmind社が提供しています。ライブラリなので、Apacheでインストールして使用する事が可能です。 geographyの略である為、読み方は「ジオ アイピー」です。レンタルビデオ店と発音が違うのでご注意下さい。 グローバルIPアドレスは、IANA(Internet Assigned Numbers Authority,アイアナ)と言う組織によって管理されています。IANAの配下には、地域毎にIPアドレスの管理を行う下部組織「RIR(Regional Internet Registry)」があり、そこから更に国・ローカルエリアと管理組織が細分化されています。

IANAのサイトより引用。そりゃ1組織じゃ2の32乗個ものIPアドレス(IPv4)を管理するのは大変よね

それぞれのローカル組織が管理しているIPアドレスが我々が使う通信機器に付与される訳で、そこから大体の地域を特定する事が可能である、と言った仕組みです。 つまり、そのIPアドレスのライブラリ「GeoIP」を用いる事でリクエスト元がどこから通信を試みているかが分かると言う訳です。 このライブラリのデモがGeoIPのサイトから試せるとの事で、ちょっと試してみました。

GeoIPのお手並み拝見

▲弊社の岩本町オフィスで使用しているグローバルIPアドレスを入力してみます

▲千代田区かつ、上記の緯度・経度の半径20km圏内まで特定できました

ここを用いて描画してみました。デモ版の精度だとこんなもん?

デモの精度はさておき、グローバルIPアドレスから大体の位置を把握する事が可能な事がこれで分かりました。 つまり、タイトルにもある「地域制限を回避する為には何をすれば良いのか」と言うソリューションはここから自ずと導かれますね。ここでは特に言及する予定はございませんが。

より深いGeoIPの話

使ってるのGeoIP2じゃないか!

気付かれましたか?そうです、現在ではGeoIP2が提供されています。元々のGeoIPは現在、GeoIP Legacyと言う名称で呼ばれています。データ形式が変わったりローカライズドデータが追加されたりと言ったアップデートがあったようです。詳細はこちらのリンクに記載されております。

GeoIP2の精度はどれくらい?

CloudFrontのAWS公式ドキュメントにも記載がありましたが、maxmind社が定期的に精度を調査しているそうです。それに依ると

  • 国規模での精度:99.8%
  • アメリカの州規模での精度:90%
  • アメリカの都市規模での精度(半径50km圏内):81%

だそうです。CloudFrontではGeoIPを参考にしているとありましたが、これは国規模で99.8%の精度がある事に依るのではないでしょうか。

他の身近な位置情報を用いたAWSサービス

Route53にも、位置情報ルーティングと言う機能があります。 因みに、この機能で位置情報を特定する為に用いられているのはDNSの拡張プロトコルであるEDNS0を用いたedns-client-subnetです。 よく、DNSサーバに「8.8.8.8」を使用すると通信が速くなる!と言う裏技的Tipsの仕組みでも使われている技術です。

技術の原点・学びの原点

コンテンツの地域制限には様々な国や地域毎の法的理由があり、それを実現する為には様々な技術が用いられています。 「出来ない!」をどうにかしたい事から学べる事もこのようにある訳です。 技術って大概「どうにかしたい!」から発展してきたものだと、私は思います。

と言う綺麗な感じに括りつつ、今回はGeoIPについて話させて頂きました。 コーヒーをノータイムで受け取りたい!を実現しているカフェにも是非行ってみて下さい!(改めて宣伝) 新商品のヘーゼルナッツラテが個人的ヒットを打ち出しております。美味しかった。

▲可愛いイラスト入りスリーブチャレンジ、楽しいですよ