要約
- IESG は 2026 年 8 月 24 日、
draft-ietf-masque-connect-udp-listen第 16 版を Proposed Standard として承認した。証拠を固定した時点では RFC Editor の待ち行列にある Internet-Draft であり、発表は Google Quiche と quic-go の相互運用を報告している。 - この方式は、一つの公開 UDP ソケットを保ったまま複数のリモート IP・ポートと通信する。公開タプルは到達可能な資源の割り当てであって、全送信元への許可ではない。機能交渉、コンテキスト登録、宛先方針、実際の配送を個別に立証する必要がある。
正しいポートに届いた、正しくない相手
ブラウザーが WebRTC のために HTTP プロキシへ UDP の公開アドレスを求める。プロキシは IP アドレスとポートを割り当てる。ICE が選んだ相手からパケットが届き、その直後、偶然ポートを見つけたスキャナーからも一つ届く。
ネットワーク上は、どちらも正しいソケットに到着した。権限上は同じではない。
これは公表済み事故ではなく、境界を確認するための例である。「Proxying Bound UDP in HTTP」が解決するのは、公開ソケットを維持しながら、相手ごとの扱いを狭く保つ問題だ。IP とポートを広告しただけでは、リクエスト、相手タプル、Context ID、プロキシ方針、クライアントの受信意思は確定しない。
承認は実装済みという意味ではない
IESG の発表時刻は 8 月 24 日 17:58 UTC。MASQUE ワーキンググループの第 16 版を Proposed Standard として承認した。
出発点の RFC 9298 は、CONNECT-UDP の一つのリクエストに一つの固定ホストとポートを置く。HTTP/3 のようなクライアント・サーバー型の UDP には適している。ところが WebRTC の ICE は複数候補との通信を必要とする。通常の CONNECT-UDP を複数開いても、HTTP の意味論上、それらが同じプロキシ実体や同じ公開 IP を使う保証はない。
新しい拡張は、一つのリクエストに公開ソケットを結び付け、データグラムまたは登録済み対応表で相手を変える。発表が示す二実装の相互運用は実行可能性の証拠だが、普及率、ブラウザーでの有効化、大規模運用、全実装の適合性までは証明しない。
8 月 28 日時点で Datatracker は依然として Active Internet-Draft と表示し、IESG 状態は RFC Ed Queue だった。IANA の作業は進行中で専門家レビューは完了、RFC Editor は参照確認と整形を待っていた。承認というニュースと、番号付き RFC、そして本番採用は区別しなければならない。
合意は往復して初めて成立する
クライアントは Connect-UDP-Bind: ?1 を送り、対応するプロキシは同じ真のブール値を返す。端点がこの機能を有効とみなすのは、その値を送信し、かつ受信した後である。異なる型の値は、フィールドがないものとして扱う。
HTTP の成功応答だけから機能を推測できない。プロキシ側も、固定宛先のリクエストを暗黙に複数相手用へ広げられない。
リクエストには二つの形がある。有効なホストとポートを残せば、バインド非対応時の固定宛先となる。二つの宛先変数をともに * にすれば、固定宛先を持たないバインド専用となる。片方だけが星印なら不正なリクエストである。この選択は Context ID 0 の意味を左右するため、監査記録に残す必要がある。
Proxy-Public-Address は資源台帳である
受理したプロキシは、少なくとも一つの公開 IP と空き UDP ポートを選び、リクエストに結び付けて Proxy-Public-Address で通知する。一つだけを示す場合、そのタプルはトンネルが閉じるまで安定しなければならない。複数なら、アドレスファミリーごとの安定性が推奨される。応答ヘッダーに載るため、後の変更を同じフィールドで伝えることはできない。
この安定性は ICE の候補として価値がある。しかし送信者の身元ではない。選ばれた相手も、未知のスキャナーも、そのソケットまでは到達し得る。
したがって、ログの主張を段階化するべきだ。「公開アドレス割り当て」は資源の確保、「パケット受信」は到達性を示すだけである。登録、方針通過、転送、クライアント配送、アプリケーション受理はまだ残っている。
Context ID が相手関係を状態にする
クライアントは偶数 ID、プロキシは奇数 ID を割り当てる。固定宛先のないバインド専用モードでは 0 は使えない。実際の固定フォールバック先がある場合だけ、0 は RFC 9298 の意味を保つ。
状態遷移には三種類の Capsule がある。COMPRESSION_ASSIGN(0x11)が ID の意味を提案し、COMPRESSION_ACK(0x12)が保存済みであることを返し、COMPRESSION_CLOSE(0x13)が拒否または終了を示す。
IP バージョン 0 は非圧縮コンテキストを作る。各データグラムに IP とポートが入り、クライアントからプロキシでは宛先、逆方向では受信元を示す。4 または 6 なら圧縮コンテキストで、タプルを一度登録し、以後は ID と UDP ペイロードだけを送る。
同じ ID の二重割り当て、同じタプルへの複数 ID、閉じた ID の再利用は禁止される。閉鎖後に並べ替えで遅れて届いたデータは黙って破棄する。古い番号が新しい関係の権限を持つことを防ぐ規則だ。
ACK 前の先行送信は許されるが、割り当てがまだ届いていないか拒否されればデータを失う。送信側が ID を使った事実と、受信側が登録を受け入れた事実を同じイベントにしてはいけない。
未知の送信元を受けるかはクライアントが決める
非圧縮コンテキストを要求できるのはクライアントだけで、同時に一つしか開けない。各受信データグラムが新しい送信元タプルを名乗れるため、その範囲は広い。
クライアントは最初から開かないことも、後で閉じることもできる。その場合、プロキシは未知の送信元に対するファイアウォールとして働く。既存の圧縮対応表は残るが、プロキシは新しい圧縮コンテキストを開けない。閉じた入口を別経路で復活させないためだ。
公開ポートを維持したまま権限だけを狭められる。割り当て、既知の相手、未知の相手は別々の状態として扱われる。
可変宛先には可変宛先の検査が要る
固定 CONNECT-UDP では、トンネル作成時に宛先を拒否できる。バインド型では宛先がデータグラムや登録メッセージへ移るため、検査もそこへ移る。
非圧縮データグラムなら、プロキシは毎回 IP とポートを禁止方針と照合する。圧縮なら、COMPRESSION_ASSIGN で提示されたタプルを調べ、許されない登録を拒否する。ループバック、リンクローカル、私設網、管理用サービスなど、具体的な範囲は運用者が決める。
TURN と比べると理解しやすい。リレーアドレスの割り当て、相手への permission、channel binding は独立した状態である。仕組みは同一ではないが、公開リレーを得ることと相手への許可を分ける点は共通する。
容量制限も安全性の一部である
受理した Context ID はメモリーを使う。フロー制御や輻輳制御で送れない ACK と CLOSE は応答バッファを使う。そのため、開ける ID 数と保留応答数には上限が必要であり、後者が尽きたプロキシはリクエストストリームを中断しなければならない。
上限は、設定値、使用量、拒否数、待ち時間、中断、クライアント版とともに観測する。記録がなければ、資源枯渇防止が原因不明の切断に見え、危険な緩和を招く。
圧縮状態の変更は実効 MTU も変える。非圧縮では毎回アドレスとポートが増え、圧縮では省かれる。途中の変化は DPLPMTUD を妨げ得るため、圧縮を使うなら早期に要求する。それでも、サイズ別損失と経路成功の実測が必要だ。
共有 IP だけでは責任を特定できない
RFC 6269 が扱う通り、IP 共有は評判と利用者の対応を粗くする。一つのプロキシ IP の背後には、多数のポート、トンネル、クライアント、Context ID、リモート相手が存在し得る。
不正利用の調査には、公開ポート、トンネル、認証済みクライアント、コンテキスト状態、相手タプル、方針結果、実際の転送結果が必要だ。境界で捨てたスキャンを、利用者へ届けた通信として扱ってはならない。
一つのデータグラムを説明する証拠
最低限、次の順序を結び付ける。
- 認証済みリクエストとトンネル識別子
- 双方向のバインド交渉
- 固定フォールバックまたは専用モード
- 公開タプルと存続期間
- Context ID の割当側と一意性
- ASSIGN、ACK、CLOSE
- 圧縮・非圧縮の意味
- 正確なリモート送信元または宛先
- 方針版と判定
- ID と応答バッファの余力
- 受理、破棄、一時保留
- 公開ソケットでの送受信
- クライアント配送と ICE またはアプリ結果
正しい登録があってもパケット損失や ICE 失敗は起こる。プロトコル状態は処理を許すが、実行結果だけが利用可能な経路を示す。文書は最小共通規則を定め、運用者はローカルなコードと観測で効果を証明する。これが Running-Code Primacy の実務である。
情報源
- IETF — IESG 承認発表
- IETF Datatracker — Proxying Bound UDP in HTTP
- RFC 9298 — Proxying UDP in HTTP
- RFC 9297 — HTTP Datagrams and the Capsule Protocol
- RFC 9110 — HTTP Semantics
- RFC 9000 — QUIC
- RFC 8445 — Interactive Connectivity Establishment
- RFC 8656 — TURN
- RFC 8835 — Transports for WebRTC
- RFC 8899 — データグラム向け DPLPMTUD
- RFC 6269 — IP アドレス共有の問題
- IANA — HTTP フィールド名レジストリ
- IANA — MASQUE レジストリ
- Lu Heng — Running-Code Primacy
- Lu Heng — Minimum Initial Specification
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
