한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L4 インターネット回線

通信事業者の共有IP(CGNAT) Carrier-grade NAT

原因ID isp-cgnat · 主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発, インフラチーム・ネットワークインフラ

図と実験のあるメインページでこのカードを開く →

モバイル回線や一部の通信事業者では、複数の契約者が1つのIPを共有し、アイドル接続のマッピングを短時間で削除します。

なぜ 通信事業者の機器が膨大な数の契約者のセッションテーブルを管理 → すると セッションテーブルの上限、短いアイドルタイムアウト → 画面では しばらく放置した後に切断、同じIPを使う人たちがまとめてブロックされる誤検知

症状
切断, 接続不可・無限ロード
要因
パケットロス
誰に起きるか
特定の地域・ISP
いつ
しばらく放置した後
担当
主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発, インフラチーム・ネットワークインフラ
ゲーム開発チームの対応
クライアント:最も短いアイドルタイムアウト(モバイル回線では30秒前後の場合もある)の半分以下の間隔でハートビートを送る(通信事業者のCGNATのマッピングは内側から出ていくパケットでしか確実に更新されないため、クライアントから送る)、切れたら自動で再接続。サーバー:ハートビートに応答し、一定時間受け取れなければ先に接続を整理、マッピングが変わってアドレス・ポートが変わってもセッショントークンで同じプレイヤーとして引き継ぐ、1つのIPを複数の人が共有していることがあるのでIP単位のブロックポリシーは慎重に(アカウント・端末単位と合わせて判断)。
インフラチームの対応
ファイアウォール・DDoS対策機器のIPあたりの接続数・毎秒の新規接続数の制限を、通信事業者の共有IPに合わせて調整(モバイル通信事業者のアドレス帯は基準を上げるか例外にする)。
数値の目安
モバイル回線のUDPのアイドルタイムアウトは、30秒前後の場合もあります。
グラフでは
接続が一斉に切れる · 切断数(ハートビートのタイムアウト)、切断前のアイドル時間(通信事業者別)
確認箇所
接続ログで1つのIPに同時に接続しているアカウント数と通信事業者(ASN)を確認し、アイドル後に切れた接続のアイドル時間を通信事業者別に集計。ユーザー側ではルーターの管理画面でインターネット(WAN)のアドレスを確認
該当する場合
モバイル通信事業者のアドレス帯で1つのIPに複数のアカウントが接続し、切断前のアイドル時間が30〜60秒前後の短い値に集中。ルーターのWANアドレスが100.64.0.0/10(通信事業者のNAT用の共有アドレス)か、サーバーから見えるアドレスと異なる
該当しない場合
通信事業者に関係なく家庭用ルーターのユーザーに集中していれば「NATマッピングの期限切れ」
確認手段
ゲームサーバー・クライアントのログ・メトリクスが必要

出典

  1. A Multi-perspective Analysis of Carrier-Grade NAT Deployment (IMC 2016) ACM
    測定したNATのUDPマッピング保持時間は10〜200秒、74%が1分以下、CGNの中央値はモバイル回線で65秒・固定回線で35秒
  2. RFC 6888: Common Requirements for Carrier-Grade NATs (CGNs) IETF
    CGNは契約者あたりの外部ポート数の制限と、新規マッピングの作成速度の制限をサポートしなければならない
  3. RFC 6269: Issues with IP Address Sharing IETF
    アドレスを複数人で共有すると、IP単位のブロック(penalty box)が同じアドレスの別の契約者までブロックする
  4. RFC 6598: IANA-Reserved IPv4 Prefix for Shared Address Space IETF
    100.64.0.0/10は、通信事業者のNAT(CGN)機器と契約者のルーターの間で使う共有アドレス帯

あわせて読みたい原因

同じ層:L4 インターネット回線

同じ症状(切断)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る