ネットサービス

Telegramの5つあるデータセンターの謎


メッセージングアプリ「Telegram」は5つの データセンター(DC)を保有していることがドキュメントやAPIを通じて知られています。これに対して、5つのDCが並立しているというのはあくまでもTelegramによる主張に過ぎないのでは、と疑問を抱いた中国の開発者Coxxs氏が実際に調査した結果を自身のブログにて公開していました。

Mysteries of Telegram DC - Coxxs
https://dev.moe/en/3025

TelegramのDCはDC1~DC5と呼ばれており、所在地は以下の通りであるとされています。

・DC1:マイアミ(米国)
・DC2:アムステルダム(オランダ)
・DC3:マイアミ(米国)
・DC4:アムステルダム(オランダ)
・DC5:シンガポール

Telegramでアカウントを登録すると自動的に特定のDCにアカウントが関連付けられ、以降はユーザーの電話番号や位置情報が変化したとしてもDCとの関連付けが変更されることはありません。つまりユーザーは自由にDCを選択することはできずアカウントに関連付けられた「正しいDC」に接続する必要があるということです。もし関連付けられたものと異なる「誤ったDC」に接続しようとしてもサーバーはエラーメッセージを返します。

Coxxs氏が所属する中国のTelegramコミュニティでは、5つのDCのうちDC5が特に有名です。中国でTelegramアカウントを作成すると自動的にDC5に関連付けられるのが理由の一つではありますが、それだけではなくDC5が頻繁にダウンすることでも知られています。DC5がダウンすると当然アカウントがDC5に関連付けられているユーザーはTelegramを使用できなくなり、Telegramコミュニティでは「なぜまたDC5はダウンしたの?」といった話題が頻繁に持ち上がることになります。DC5のユーザーはDC5がダウンしている間は「再接続」を延々と繰り返すクライアントが復旧するのを待つしかなく、復旧後はグループチャットでDC5に対する怨嗟の声を上げることになります。


なお、上記のスクリーンショットの会話を意訳すると以下の通りとなります。

・猪頭:北米のアカウントでも画像が読み込めないのですが……
・懸頂之剣:動画をアップロードしたユーザーのアカウントセンターはDC5です。
・猪頭:おおう
・hoi wong:落ちた?
・猪頭:みんなもう寝てるみたいだ。
・嘉:DC5が爆発した?
・猪頭:お風呂入って寝よう。また明日。
・Ming Chao:Telegramのトラブル
・perfect jdjjdk:またDC5か

ある時、グループチャットのメンバーが「ユーザーがどのDCに属しているのか」を照会するボットを作成し、多くのメンバーが自分のDCを確認しました。すると以下の事実が明らかになりました。

・+86で始まる中国の電話番号で登録していたユーザーはDC5(シンガポール)に接続され、度々システム障害に見舞われていた
・+1で始まる北米の電話番号で登録したユーザーはDC1(マイアミ)に接続され、接続速度と安定性の両方を享受できた
・ヨーロッパの電話番号で登録したユーザーはDC4(アムステルダム)に接続され、中国のTelegramコミュニティで最も珍しい存在となった

上記の結果を受けて一つの疑問が浮かび上がります。TelegramのDCは5つ存在するはずなのに3つしか見当たらないのです。DC2とDC3はどうなっているのでしょうか?


まず、上記のボットが正確にDCを検出できているのか確認を行うために、DC2に関連付けたアカウントを新規作成し、アカウントのDCを特定することのできる以下の3つの方法を試してみました。

・方法1:TelegramのMTProtoプロトコルでログインしてみる
・方法2:サードパーティ製クライアントで新しいアカウントのプロフィールを確認する
・方法3:先述のボットを使用して新しいアカウントのドメインコントローラーを照会する

方法1ではTelegramの公式クライアントで使用されているものと同じMTProtoプロトコルを使用してDC1に接続し、auth.sendCodeインターフェースを呼び出してアカウント登録のための認証コードを送信しようとします。するとサーバーはPHONE_MIGRATE_2エラーを返しクライアントがDC2に接続する必要があることを示します。つまり、新規作成したアカウントがDC2アカウントであることが実際には方法1で初めて確認できるというわけです。なお、方法1にはユーザーの電話番号を知っておく必要があるという問題があるため、第三者のDCを照会するような使い方には向いていません。


方法2はユーザーのDCを表示するサードパーティ製クライアントを使用して別のアカウントでログインし、新規アカウントのDCを確認するというものです。ただ、新規アカウントのプロフィール画像をアップロードするまではクライアントはDCを表示できません。プロフィール画像をアップロードすると新規アカウントがDC2に登録されていることが表示されます。


方法2でDCを特定可能な理由は、サードパーティのクライアントがユーザーのプロフィール画像をダウンロードする際に、MTProtoプロトコルのuserProfilePhoto構造体のdc_idフィールドからユーザーのDCを取得できるためです。ユーザーがアップロードしたファイルが保存されているCDに基づいてユーザーのDCを特定できるというわけです。


方法3は先述の通りボットを使用して新しいアカウントのドメインコントローラーを照会します。しかし実際にこの方法を試してみると、DC2アカウントであるはずがボットはDC4と出力します。


なぜボットが実際とは異なるDCを示すのかを調べてみると、このボットがTelegramのWeb CDNを介してユーザーのDCを特定していることに原因がありました。新規作成したDC2アカウントのプロフィール画面を開いてソースコードを確認すると、プロフィール画像のドメインがcdn4で始まっているため、ボットがそれをDC4として識別していることがわかります。つまり、DC2・DC3はWeb CDNサービスを提供するために同じ場所にあるDC4・DC1のドメインを借用しているため、ボットはDC2のユーザーを識別できずすべてDC4のユーザーと誤認してしまうということです。


方法2を用いればユーザーのDCを正しく特定できることを確認したのち、Coxxs氏は実際に多くのアカウントを調査しました。結果として世界的にDC2ユーザーは珍しくない一方で、DC3ユーザーは極めてまれであることを確認しました。最終的にCoxxs氏が見つけたDC3ユーザーは2名だけでした。つまり、ボットがDC2ユーザーを見つけられなかったのはボットの検出ミスによるものであった一方で、DC3ユーザーが見つけられなかったのは実際にレアケースだったからということになります。


さらに、photos.GetUserPhotosを呼び出してDC3ユーザーのプロフィール写真のリストを表示してみると、新しくアップロードされたものはDC3ではなくDC1にあることがわかりました。


DC3ユーザーのメッセージ履歴にある画像についても同様に確認してみたところ、DC3には古い画像がわずかに保存されているだけで、新しい画像はDC1に保存されていることがわかりました。一方、他のDC上のユーザーについても調べてみたところ関連付けられたDCに画像を保存していることがわかりました。加えて、方法3のものとは別のボット(画像やファイルを調査対象ユーザーに送信させて保存先からDCを特定するもの)を使用してみたところ、やはりDC1であることが示されました。


ただし方法2で確認できることはDC3ユーザーのプロフィール画像・添付画像・ファイルがDC3からDC1に転送されたということまでです。彼らの電話番号がわからないためより確実にログイン先を確認できる方法1は使用できません。Coxxs氏は方針を変えてDC3が新規ユーザーを受け付けなくなったことを確認するため、世界各地の電話番号を1万件以上生成し、方法1を使用してTelegramのDC割り当てルールをテストしました。結果は以下のとおりです。


上記の結果を分析する限りにおいて、DC3は新規ユーザーの受け入れを停止しており、既存ユーザーはすべてDC1に移行された可能性が高いものと結論付けられます。DC3のユーザーになる方法は見つけられなかったものの、それ以外の特定にDCのユーザーになりたい場合やDC5のダウンタイムを回避したい場合は、上記の結果より得られた特定の国番号を持つ電話番号を使用してアカウントを登録すればいいということになります。よって、ブログ記事が公開された2022年5月時点においてTelegramがDCを割り当てるルールは以下の通りであると考えられます。

・DC1・DC2・DC4・DC5は登録時に提供された電話番号の国番号に基づいて割り当てられ、多数の既存ユーザーを抱えている
・DC3にはかつてユーザーがいたものの2020年頃には既存のユーザーがDC1に移行された可能性があり、現在ではDC3には事実上ユーザーがおらず、また新規登録も受け付けていない

なおCoxxs氏はTelegramのサーバーや一部の運用メカニズムはオープンソースではない点に言及し、結論は多分に推測に基づいていると締めくくっています。

・関連記事
Telegramの創設者パーヴェル・ドゥーロフ氏がテロ活動幇助の罪でロシア連邦保安庁から訴追される、ウクライナのスパイがロシア国内での攻撃を組織するためにTelegramを使用していたと主張 - GIGAZINE

インドの「Telegram禁止措置」で主要VPNアプリのダウンロード数が増加、インドはTelegramユーザーの最も多い国 - GIGAZINE

人気ノートアプリ「Obsidian」がプラグイン審査を刷新、マルウェア検査や安全性表示を導入へ - GIGAZINE

無料で使えるAndroid用RSSリーダー「Read You」、FreshRSSとの連係も可能 - GIGAZINE

TelegramのCEOがプラットフォームの検閲対策強化に伴いロシア国民にVPNの「備蓄」を促す - GIGAZINE

ロシア当局がメッセージングアプリ「Telegram」へのアクセスを制限、国営アプリの「MAX」へ乗り換えさせるためか - GIGAZINE

Telegramを支える技術インフラはロシアの諜報機関と協力関係にある企業を経営するロシア人によって管理されている - GIGAZINE

Xが暗号化メッセージングサービス「Signal」へのリンクをブロックしているという報告 - GIGAZINE

in ソフトウェア,   ネットサービス, Posted by log1c_sh

You can read the machine translated English article The mystery of Telegram's five data ….