プロビジョニング パッケージは IKEv2 接続を作成しますが、その結果生成されるプロファイルは、意図したスイートとは別のものをネゴシエートします。パッケージは自分の仕事を果たしたのであり、想定していた仕事のためのフィールドを最初から持っていなかったのです。暗号スイートは、独立して検証できるプロビジョニング手順として扱ってください。

以下の五項目を順番に進め、受け入れ結果はそれぞれ分けて記録します。

似た名前の裏にある二種類のポリシー

Windows は、鍵交換を保護するポリシーと、トラフィックを保護するポリシーを分けています。IKE 側は暗号化方式と整合性方式で構成します。データ側は暗号方式と認証変換の定数で構成し、これらの定数は独自の名前を使います。一つの AES ラベルを誤ったフィールドにコピーすると、誰も承認していないポリシーの下で確立される接続ができあがります。

鍵交換グループと完全前方秘匿性は同じネゴシエーションに属し、ゲートウェイにとって受け入れ可能でなければなりません。遠端を確認せずに設定すると、編集していた段階より後の段階で失敗します。そのため、こうした誤りはゲートウェイの問題のように見えるのです。

アルゴリズム名を二つ並べるのではなく、完全なポリシーを組み立てる

既定値だと思っているフィールドも含め、すべてのフィールドを明示的に記述します。強制フラグ付きで部分的なポリシーを適用すると、それが保存される構成になり、省略した値はその時点でプラットフォームが持っていた値になります。同じ接頭辞で始まる値はフィールド間で交換できず、よく知られた変換名の一つは認証変換としてのみ有効です。

$policy = @{
    ConnectionName = 'Corp IKEv2'
    AllUserConnection = $true
    EncryptionMethod = 'AES256'
    IntegrityCheckMethod = 'SHA384'
    CipherTransformConstants = 'AES256'
    AuthenticationTransformConstants = 'SHA384128'
    DHGroup = 'Group19'
    PfsGroup = 'PFS2048'
    Force = $true
}
Set-VpnConnectionIPsecConfiguration @policy

そのブロックは、両方のピアが対応している必要がある例示的なスイートとして扱い、推奨とはみなしません。強制スイッチはプロンプトを抑止するだけで、確認していないパッケージを承認するものではありません。

まず作成し、次に適用する — 単一のスコープで

ポリシーを設定する前に接続が存在している必要があり、スコープは各手順で一致していなければなりません。マシン コンテキストの手順は、表示名が同じというだけでは任意のユーザーのプライベート プロファイルを見つけられません。全ユーザー接続、ユーザー接続、およびそれらの状態ディレクトリは、それぞれ別の名前を持つ別のオブジェクトです。

順序はプロビジョニング パッケージで見た目以上に重要です。二つのコマンドは、接続の作成にかかる時間より近い間隔で実行される可能性があるからです。構成後の作業は、実行コンテキストを宣言した承認済みのプロビジョニング コマンドとしてパッケージ化し、推測した遅延を挿入するのではなく、プロビジョニング エンジンに順序付けさせます。テスト用ハードウェアで十分に長いスリープは、遅延を添えた競合状態です。期間ではなく依存関係を記録します。

文書化されている Configuration Designer のフィールドは一つの VPN 設定を記述するもので、ネイティブの IPsec 制御をすべて公開しているわけではありません。要件が管理された配信であれば、VPNv2 構成サービス プロバイダーにはまさにこの目的のための暗号スイートのセクションがあります。

ポリシーの所有者を一人に定める

後から管理プロファイルを更新すると接続が再作成され、スクリプトが適用した内容が置き換わる可能性があり、その置き換えは後退のように見えます。スイートをプロファイル、スクリプト、管理チャネルのどれが所有するかを決め、通常の更新が初回インストールと同じ経路をたどるようにします。

二人の所有者は、両者が食い違えば所有者がいないのと同じです。所有者の名前をプロファイルの変更記録に書き込みます。次回の更新はその記録に従います。

パッケージではなく、ネゴシエートされた結果を検証する

保存されたプロファイルとそのスコープを読み、新しい接続を確立して、ゲートウェイで選択された提案を比較します。鍵の再生成の挙動も確認します。最初のハンドシェイクは、後の段階が拒否するスイートでも成功することがあるからです。

Get-VpnConnection -Name 'Corp IKEv2' -AllUserConnection | Format-List
Get-ChildItem 'C:\ProgramData\Microsoft\Network\Connections\Pbk' | Select-Object Name, LastWriteTime

三つの受け入れ結果は同じ出来事ではありません。パッケージがインストールされたこと、意図したポリシーでプロファイルが存在すること、ピアがそれをネゴシエートしたことです。これらを分けておき、欠けたフィールドが認証を弱めたり、誰も選んでいないフォールバックを有効にしたりして修復されないようにします。

関連記事