要約

  • PCP によってホストは NAT マッピングやファイアウォールの通過口を明示的に要求できるようになったが、外向きのアドレスとポート、方針、存続期間を決めるのはサーバーである。
  • Nonce、有限のライフタイム、Epoch Time は状態の照合と再作成を助けるが、恒久的な所有や到達可能性までは保証しない。

PCP クライアントは、マッピングごとに Mapping Nonce を選び、MAP 要求に載せる。応答には同じ値が戻り、その後の更新でも照合される。単純脅威モデルでは、異なる nonce を持つ要求が既存の動的マッピングを安易に引き継ぐことを防ぐ。ここで確認できるのは「同じ状態の系譜か」という点に限られる。人の認証、端末の永続的な識別、経路上の攻撃者に対する万能な防御ではない。

では、その状態を作る権限は誰にあるのか。MAP では、ホストがトランスポートプロトコルと内部ポートを示し、外向きのアドレスとポートを提案できる。だが提案値は命令ではない。サーバーは利用可能な別の組み合わせを割り当て、成功応答に実際のアドレス、ポート、ライフタイムを記すことができる。

提案どおりでなければ意味がない場合、クライアントは PREFER_FAILURE を付ける。そのときサーバーは代替値を返さず、提供不能として失敗させる。通常の MAP が「条件を満たす別の割り当て」を許すのに対し、このオプションは「提案値か失敗か」を選ぶ仕組みである。それでも最終判断はサーバー側に残る。

結果コードには、その判断理由が表れる。未対応の操作やオプション、権限不足、資源不足、利用者ごとの上限、指定された外部エンドポイントを用意できない場合などだ。成功は、ある時点でそのサーバーがその状態を受け入れた証拠にすぎない。世界中の経路から接続できることや、同じポートが永久に残ることは意味しない。

ライフタイムもサーバーが設定する。必要な間はクライアントが更新し、更新が止まれば状態は失効へ向かう。MAP で要求ライフタイムをゼロにする操作には、プロトコルと内部ポートの組み合わせに応じた削除の意味がある。Nonce や脅威モデルの規則を無視して、任意のマッピングを消す命令にはならない。

状態を保持していた機器が再起動した場合はどうか。応答の Epoch Time は、サーバーの継続性を判断する材料になる。時間の巻き戻りや不自然なずれを検知したクライアントは、失われた可能性のあるマッピングを速やかに作り直す。これは消失の兆候であり、途切れず通信できたという証明ではない。

PEER は、特定の相手アドレスとポートへ向かう明示的な送信マッピングを作るか、既存状態を延長する。相手先を含むため、一般的な MAP とは役割が異なる。THIRD_PARTY では別のホストのための要求も表現できるが、サーバーが許可し、要求元が適切に認可されている場合だけである。家庭向け機器では既定で禁止することが推奨されている。

RFC 7488 は、一つのサーバーが複数のアドレスを持つ場合と、複数の独立したサーバーが存在する場合を分けた。同じサーバーの各アドレスには同じ nonce を使い、別のサーバーには別の nonce を使う。あるアドレスで最大四回の再送を終えると次を試し、すべて失敗すれば一定間隔で再開する。

複数サーバーへの要求は互いに独立している。結果として別々の機器が複数のマッピングを維持することがある。状態を共有しないファイアウォールが複数経路にあるなら、すべてに通過口が必要になる場合もある。一台の成功応答を、別の一台の状態の証拠にはできない。

事実、解釈、分からないこと

二つの RFC が定めるのは、要求と応答の形式、nonce、ライフタイム、結果コード、Epoch Time、再送とサーバー選択である。そこから、PCP を「境界状態の管理を交渉する仕組み」と読むことはできる。一方、普及率、製品ごとの適合性、個別の拒否理由、あらゆるネットワークからの到達性は分からない。正当な PCP サーバーのアドレスをどう安全に入手するかも、RFC 7488 は供給方式側の責任として残している。

出典