Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

GRE と IPsec トンネル

最終更新 Markdown で表示Agent セットアップ

トンネルとカプセル化

Cloudflare のグローバルネットワークとオリジンネットワークの間でトラフィックをルーティングするため、Magic Transit は元のパケットを外側のパケットで包みます。この処理をカプセル化と呼びます。外側のパケットがインターネット経由で宛先まで運び、そこで包みが解かれ(デカプセル化)、配信されます。

Magic Transit が使うカプセル化プロトコルは 2 つです。Generic Routing Encapsulation(GRE)IPsec です。GRE はステートレスで設定が簡単ですが、トラフィックは暗号化しません。IPsec はトラフィックを暗号化し、送信元を認証するため、セキュリティがより強くなります。どちらもトンネル(Cloudflare とネットワークの間の論理的なポイントツーポイント接続)を作ります。Cloudflare はネットワーク名前空間内のグローバルネットワークサーバー上にトンネルエンドポイントを用意し、データセンターのルーター上にトンネルエンドポイントを用意します。

カプセル化で増えるヘッダーデータに対応するため、maximum segment size(MSS) を調整し、標準のインターネット経路で使える maximum transmission unit(MTU)である 1500 バイトに合わせる必要があります。

手順は maximum segment size を設定する を参照してください。

次の図は、Magic Transit でのトラフィックの流れを示します。

sequenceDiagram
accTitle: トンネルとカプセル化
accDescr: Magic Transit でのトラフィックの流れを示します。
participant A as クライアント端末
participant B as Cloudflare Magic Transit
participant C as オリジンルーター
A->>B: ペイロード <br> プロトコル <br> IP ヘッダー
Note left of A: イングレス <br> トラフィック
B->>C: ペイロード <br> プロトコル <br> IP ヘッダー <br> GRE <br> IP ヘッダー
C->>A: IP ヘッダー <br> プロトコル <br> ペイロード
Note right of C: エグレス <br> トラフィック

Anycast

従来のトンネルは、両端が固定された 2 つのエンドポイントを結びます。Magic Transit は別のモデルを使います。Cloudflare 側のトンネルエンドポイントに anycast IP アドレスを使います。anycast モデルでは、どの Cloudflare データセンターのどのサーバーでもトラフィックを受け取れ、どのトンネルでもパケットのカプセル化とデカプセル化ができなければなりません。トンネルは特定の Cloudflare サーバーに固定されません。送信元に最も近いデータセンターがトラフィックを処理します。

これは GRE トンネルで機能します。GRE プロトコルがステートレスだからです。Cloudflare は各パケットを独立して処理し、トンネルエンドポイント間の交渉や調整は不要です。トンネルエンドポイントは IP アドレスにバインドしますが、特定のデバイスにはバインドしません。外側のヘッダーを取り除き、内側のパケットをルーティングできるデバイスなら、トンネル経由で送られたどの GRE パケットでも処理できます。

IPsec トンネルでは、顧客のルーターが Internet Key Exchange(IKE) プロトコルを使って Cloudflare と IPsec トンネルの作成を交渉します。IPsec はステートフル(共有キーとセッションパラメーターが必要)なため、1 台の Cloudflare サーバーが最初の交渉を担当し、トンネルの詳細(トラフィックセレクター、キーなど)をすべての Cloudflare データセンターへ伝播します。その結果、セットアップを交渉したのが 1 台でも、どの Cloudflare サーバーでもその IPsec トンネルのトラフィックを処理できます。

Cloudflare の anycast アーキテクチャは、グローバルネットワーク上のすべてのデータセンターのすべてのサーバーからトンネルへの導線を提供します。次の図はこのアーキテクチャを示します。

flowchart LR
accTitle: Anycast トンネル
accDescr: データセンター内の複数サーバーが anycast トンネル経由でパケットを送ります。

a(ユーザー)

subgraph 1
direction LR
b(Cloudflare グローバル <br> ネットワークサーバー)
c(Cloudflare グローバル <br> ネットワークサーバー)
d(Cloudflare グローバル <br> ネットワークサーバー)
e(Cloudflare グローバル <br> ネットワークサーバー)
f(Cloudflare グローバル <br> ネットワークサーバー)
g(Cloudflare グローバル <br> ネットワークサーバー)
h(Cloudflare グローバル <br> ネットワークサーバー)
end

subgraph 2
i("Acme ルーター <br> 198.51.100.1")
j("FTP サーバー <br> (203.0.113.100)")
end

subgraph 3
x("Acme ルーター <br> 198.51.100.1")
z("FTP サーバー <br> (203.0.113.100)")
end

a --> 1== Cloudflare anycast GRE <br> 単一エンドポイント ==>i --> j

1== Cloudflare anycast IPsec <br> 単一エンドポイント ==>x --> z

IPsec トンネル

IPsec は、機器間の暗号化接続を確立するために連携するプロトコル群です。公開ネットワーク経由で送るデータを安全に保つのに役立ちます。組織は Virtual Private Network(VPN)の構築に IPsec を使うことが多く、IP パケットを暗号化し、パケットの送信元を認証することで動作します。

IPsec トンネルの設定方法は トンネルエンドポイントを設定する を参照してください。Magic Transit が IPsec トンネルを作るときに使う設定パラメーターの詳細は、この先を読み進めてください。

IKEv2 が IPsec トンネルを確立する流れ

Magic Transit は、次の段階で IPsec トンネルを確立します。

  • Initial ExchangeIKE_SA_INIT): IKE ピアが IKE Security Association(SA)のパラメーターを交渉し、鍵導出用の共有秘密を確立します。該当する場合は RFC 9370 でポスト量子鍵交換の対応を通知します。ダウングレード保護 が有効なときは、Cloudflare はこの交換中に IKE_SA_INIT_FULL_TRANSCRIPT_AUTH 通知も送り、完全なトランスクリプト認証への対応を示します。この交換のあと、ピア間には安全な通信チャネルがありますが、まだ相互認証はしていません。
  • Intermediate ExchangeIKE_INTERMEDIATE): 両方のピアが RFC 9370 に対応している場合、draft-ietf-ipsecme-ikev2-mlkem で規定されたポスト量子鍵交換である ML-KEM(Module-Lattice-based Key-Encapsulation Mechanism)で追加の鍵交換を行います。IKE_SA_INIT で確立した古典的な Diffie-Hellman 由来の秘密とポスト量子の ML-KEM を組み合わせてハイブリッド共有秘密を作り、harvest-now, decrypt-later 攻撃から守ります。
  • Auth ExchangeIKE_AUTH): IKE_SA_INITIKE_INTERMEDIATE の両方で確立した鍵を使い、IKE ピアが相互に認証します。認証後、IKE security association(SA)を確立します。次に、ピアは IPsec トンネル(Child SA)を交渉して確立します。
  • Rekeying: 定期的に、または手動操作で、IKE SA を再鍵化し、セッション用の新しい SA と新しい鍵を生成できます。この再鍵操作は、IKE SA(コントロールプレーンの更新)と Child SA(データプレーンの更新)の両方に対して行います。ハイブリッド交換(RFC 9370)を使っている場合、IKE SA の再鍵でも古典的な(DH)交換とポスト量子(ML-KEM)交換を並行して行い、耐量子性を維持します。

まとめると、IKEv2 は特定の暗号変換を使う IKE SA を作り、その IKE SA を使って特定の暗号変換を使う Child SA を作ります。次の設定セクションでは、Magic Transit が現在 IKE SA と Child SA でサポートする変換を説明します。

サポートする設定パラメーター

機器がサポートする内容に合わせて、Magic Transit がサポートする次の設定パラメーターから選びます。

IKE SA(Phase 1 とも呼ばれます)

ドキュメントでは、IKEv1 の用語に合わせて IKE SA を Phase 1 と呼ぶことがあります。

  • Encryption

    • AES-GCM-16(128 ビットまたは 256 ビットの鍵長)
    • AES-CBC(256 ビットの鍵長)
  • Integrity(Authentication と呼ばれることもあります)

    • SHA2-256
  • Key Exchange Method(旧 Diffie-Hellman group): Cloudflare は IKE SA 向けに次の鍵交換方式をサポートします。RFC 9370 は、DH 以外のアルゴリズムに対応するため「DH Group」を「Key Exchange Method」に改称しています。

    • ポスト量子ハイブリッド(推奨): DH Group 20 への追加 Key Exchange としての ML-KEM-768(RFC 9370 および draft-ietf-ipsecme-ikev2-mlkem に準拠)

    • ポスト量子ハイブリッド: DH Group 20 への追加 Key Exchange としての ML-KEM-1024(RFC 9370 および draft-ietf-ipsecme-ikev2-mlkem に準拠)

    • 古典的な DH group 20(384 ビットのランダム ECP グループ)

    • 古典的な DH group 14(2048 ビットの MODP グループ)

    • 古典的な DH group 5(1536 ビットの MODP グループ)

  • Pseudorandom function(PRF)

    Perfect Forward Secrecy(PFS)と混同しないでください。PRF は設定できないことがよくあります。

    • SHA2-256
    • SHA2-384
    • SHA2-512

Child SA(Phase 2 または IPsec SA とも呼ばれます)

Child SA です。ドキュメントでは、IKEv1 の用語に合わせてこれを Phase 2 と呼ぶことがあります。

  • Encryption:

    • AES-GCM-16(128 ビットまたは 256 ビットの鍵長)
    • AES-CBC(128 ビットまたは 256 ビットの鍵長)
  • Integrity(Authentication と呼ばれることもあります。)

    • SHA2-256
    • SHA-1
  • Perfect Forward Secrecy(PFS)group

    ドキュメントではこれを Phase 2 Diffie-Hellman Group と呼ぶことがあります。PRF と混同しないでください。Cloudflare は次の Diffie-Hellman(DH)グループをサポートします。

    • DH group 20(384 ビットのランダム ECP グループ)

    • DH group 14(2048 ビットの MODP グループ)

    • DH group 5(1536 ビットの MODP グループ)

必須の設定パラメーター

  • IKE バージョンは IKEv2 である必要があります。
  • IKE 認証方式は Pre-Shared Key(PSK)である必要があります。
  • Cloudflare は NAT traversal(NAT-T)をサポートします。ポート 4500 から始まる NAT-T もサポートします。
  • (まれ)Extended Sequence Numbers(ESN)を無効にする必要があります。
  • トンネルにリプレイ保護が必要な場合は、ルーターで Dead Peer Detection(DPD)を有効にし、DPD タイムアウト時に IKE セッションを再起動するオプションを選んでください。この「再起動」オプションにより、Cloudflare サーバーがオフラインになっても接続を回復できます。ルーターにこの設定がない場合は、ドキュメントで dead peer detection の動作を確認してください。
  • Multiple Key Exchange(RFC 9370: ポスト量子セキュリティを使うには、ルーターが RFC 9370 と draft-ietf-ipsecme-ikev2-mlkem で定義された IKE_INTERMEDIATE および IKE_FOLLOWUP_KE 交換に対応している必要があります。ポスト量子の公開鍵と暗号文(ML-KEM-768 など)は古典的な鍵より大きいため、パケットが 1,500 バイトの MTU を超えないよう、ルーターで IKEv2 fragmentation を有効にしてください。最初の Additional Key Exchange を設定するときは、ML-KEM-768 には IANA 割り当て Transform ID 36、ML-KEM-1024 には Transform ID 37 を使います。

任意の設定パラメーター

  • anti-replay protection を無効にします。
  • IPsec の NULL 暗号化(推奨しません): 必要な場合以外は使わないでください。IPsec トラフィックが暗号化されず、セキュリティが低下します。このオプションを使うには明示的にオプトインする必要があります。このオプションを使うと、ポスト量子保護もなくなります。

検証済みのサードパーティベンダー相互運用

次のサードパーティベンダーは、ポスト量子鍵合意向けに Cloudflare IPsec との相互運用がテストおよび検証済みです。

ベンダー 製品 / バージョン ML-KEM バリアント DH group 備考
Cisco Cisco 8000 Series Secure Routers with IOS XR Release 26.1.1 ML-KEM-1024 Group 20 RFC 9370 と draft-ietf-ipsecme-ikev2-mlkem のサポートが必要です。
Fortinet FortiOS 7.6.6+ ML-KEM-768 Group 20 RFC 9370 と draft-ietf-ipsecme-ikev2-mlkem のサポートが必要です。
Fortinet FortiOS 7.6.6+ ML-KEM-1024 Group 20 RFC 9370 と draft-ietf-ipsecme-ikev2-mlkem のサポートが必要です。

Cloudflare はほかのサードパーティ機器のテストと検証を続けています。ここにないベンダーでポスト量子 IPsec を設定できた場合は、アカウントチームに連絡してください。

サポートする IKE ID 形式

Magic Transit は IPsec 向けに次の IKE ID タイプをサポートします。

Request for Comments (RFC) 名 ID_RFC822_ADDR

  • 形式: ipsec@<TUNNEL_ID>.<ACCOUNT_ID>.ipsec.cloudflare.com
  • : ipsec@f5407d8db1a542b196c59f6d04ba8bd1.123456789.ipsec.cloudflare.com

RFC 名 ID_FQDN

  • 形式: <TUNNEL_ID>.<ACCOUNT_ID>.ipsec.cloudflare.com
  • : f5407d8db1a542b196c59f6d04ba8bd1.123456789.ipsec.cloudflare.com

RFC 名 ID_KEY_ID

  • 形式: <ACCOUNT_ID>_<TUNNEL_ID>
  • : 123456789_f5407d8db1a542b196c59f6d04ba8bd1

さらに、次の 2 つの条件を満たす場合、Cloudflare は IKE ID タイプ ID_IPV4_ADDR もサポートします。

  1. IPsec トンネルの customer_endpoint 値を設定している。
  2. cloudflare_endpointcustomer_endpoint の組み合わせが、その顧客の IPsec トンネル間で一意である。

ルートベース VPN とポリシーベース VPN

Cloudflare はルートベース VPN とポリシーベース VPN の両方をサポートしますが、ルートベース VPN を推奨します。

ルートベース VPN が使えず、ポリシーベース VPN を使う必要がある場合は、次の制限に注意してください。

  • Cloudflare がサポートする traffic selector のセットは、Child SA あたり 1 組のみです。
  • ポリシーは応答型のヘルスチェックをカバーする必要があります。つまり traffic selector に一致する必要があります。一致しないと、ポリシーに一致しない IPsec トンネルからのほかのトラフィックと同様に、Cloudflare はドロップします。
  • 1 つの IPsec トンネルに含められる Child SA は約 100 個までです。そのため、トンネルあたりの異なるポリシー数には実質的な上限があります。

強化されたダウングレード保護(ベータ)

IKEv2 の当初の認証設計では、各エンドポイントは自分の送信メッセージだけに署名し、ハンドシェイク全体のトランスクリプトには署名しません。量子耐性のある on-path 攻撃者 はこれを悪用し、ハンドシェイクの「分割ビュー」を作って、両方の側がポスト量子鍵交換に対応していても、ポスト量子接続を古典暗号へダウングレードさせることができます。

これに対処するため、Cloudflare は IKE_SA_INIT_FULL_TRANSCRIPT_AUTH IKEv2 拡張をサポートします。有効にすると、両方の IKEv2 ピアは認証交換中に自分のメッセージだけでなく、ハンドシェイク全体のトランスクリプトに署名します。攻撃者が検知されずに接続をダウングレードするのを防ぎます。

動作:

  • 機能フラグが有効なとき、Cloudflare(IKE responder として動作)は IKE_SA_INIT 応答に無条件で IKE_SA_INIT_FULL_TRANSCRIPT_AUTH 通知を含めます。
  • initiator もこの拡張に対応している場合、双方が完全なトランスクリプト認証を使い、ダウングレード攻撃に対する保護が強化されます。
  • initiator がこの拡張に対応していない場合、ハンドシェイクは標準の IKEv2 認証で進みます。ダウングレード保護が有効になるには、双方がこの拡張に対応している必要があります。

要件:

トラブルシューティング

トンネルの問題を解決するには、次を参照してください。

Network Analytics

Cloudflare の Network Analytics は、ネットワーク層とトランスポート層のトラフィックパターンと Distributed Denial of Service(DDoS)攻撃をほぼリアルタイムで可視化し、IP トラフィックの問題の切り分けに役立ちます。特定の期間のイングレスおよびエグレスのトンネルトラフィックを確認して、Cloudflare のグローバルネットワークから出ていくトラフィックの情報も見られます。

詳細は Analytics を参照してください。

トラブルシューティング

トンネルの問題を解決するには、次を参照してください。

役に立ちましたか?