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

ゲームラグ白書 › L5 データセンターのネットワーク機器

ファイアウォールのセッションテーブル飽和 Firewall session table exhaustion

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

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

ファイアウォールは、通過させたすべての接続をセッションテーブルに記録して追跡します。テーブルがいっぱいになると、新しい接続を受け付けられなくなります。

なぜ 接続の殺到や攻撃でセッション数が上限に到達 → すると 新しい接続を記録する空きエントリがなく拒否 → 画面では 新たに入ろうとする人は接続不可・無限ロード、一部の既存の接続も切断

症状
接続不可・無限ロード, 切断
要因
パケットロス
誰に起きるか
サーバー全体
いつ
接続直後・メンテ明け, 人が集中したとき
担当
主担当 インフラチーム・ネットワークインフラ · 副担当 ゲーム開発チーム・サーバー開発, ゲーム開発チーム・クライアント開発
ゲーム開発チームの対応
サーバー:ログイン待機列システムで一斉に押し寄せる接続を調整、短い接続を繰り返さないよう接続を再利用、ハートビートが途切れた接続は先に整理(切れた接続がセッションテーブルを長く占有しないように)。クライアント:最も短いアイドルタイムアウトの半分以下の間隔でハートビートを送る、切れたら自動で再接続し、再試行間隔を延ばしながらランダムに分散(一斉に再び殺到しないように)。
インフラチームの対応
セッションテーブルのサイズを増やす、短時間で終わった接続を早く整理(終了したセッションのタイムアウトを短縮)、アイドルセッションのタイムアウトを短くするときはその値をゲーム開発チームに伝えてハートビート間隔を合わせる、攻撃の遮断、セッション数の使用率にアラート。
グラフでは
上限で頭打ち · ファイアウォールのセッション数、新規接続の失敗数
確認箇所
ファイアウォール機器の同時セッション数をセッション上限と一緒にグラフで確認し、機器のログでセッションを作れずに破棄した記録を探す。Linuxのファイアウォールならnf_conntrack_countをnf_conntrack_maxと比較してdmesgの「nf_conntrack: table full, dropping packet」を、AWSのインスタンスならethtool -Sのconntrack_allowance_exceededを確認
該当する場合
セッション数が上限で平らになった時刻から新規接続の失敗が増え、セッション作成失敗の記録や破棄カウンターも一緒に増える
該当しない場合
セッション数が上限にほど遠いのに接続できなければ「接続待ちキュー(backlog)のあふれ」かログインサーバー側。アイドル接続だけが切れるなら「クラウドのセキュリティグループによる接続追跡の期限切れ」
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. Netfilter Conntrack Sysfs variables Linux kernel
    接続追跡テーブルの最大エントリ数(nf_conntrack_max)、終了処理中の接続の保持時間(TIME_WAIT・FIN_WAITはデフォルト120秒)、確立済みTCPはデフォルト5日、現在のエントリ数(nf_conntrack_count)
  2. Amazon EC2 security group connection tracking AWS
    インスタンスごとに追跡できる接続数を超えると新しい接続のパケットを破棄、アイドル接続が追跡テーブルを枯渇させることがある
  3. Infrastructure layer attacks AWS
    SYNフラッドのような攻撃は、サーバー・ファイアウォール・ロードバランサーのリソースを占有する
  4. net/netfilter/nf_conntrack_core.c (Linux v6.12) Linux kernel
    接続追跡テーブルがいっぱいになると「nf_conntrack: table full, dropping packet」を記録し、新しい接続のパケットを破棄
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    conntrack_allowance_exceeded:インスタンスの接続追跡の上限を超えて破棄されたパケット数、ethtool -Sで確認

あわせて読みたい原因

同じ層:L5 データセンターのネットワーク機器

同じ症状(接続不可・無限ロード)を起こすほかの層の原因

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