Skip to content

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

GRE と IPsec トンネル

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

トンネルとカプセル化

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

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

カプセル化で増えるヘッダーデータに対応するため、最大セグメントサイズ(MSS) を調整し、インターネットでルーティング可能な標準の最大伝送ユニット(MTU)である 1500 バイトに合わせます。

手順は 最大セグメントサイズを設定する を参照してください。

次の図は、Cloudflare WAN でのトラフィックの流れです。

sequenceDiagram
accTitle: トンネルとカプセル化
accDescr: Cloudflare WAN でのトラフィックの流れを示します。
participant A as クライアント
participant B as Cloudflare WAN
participant C as オリジンルーター
A->>B: Payload <br> Protocol <br> IP header
Note left of A: イングレス <br> トラフィック
B->>C: Payload <br> Protocol <br> IP header <br> GRE <br> IP header
C->>A: IP header <br> Protocol <br> Payload
Note right of C: エグレス <br> トラフィック

Anycast

従来のトンネルは、両端が固定された 2 つのエンドポイントを接続します。Cloudflare WAN は別のモデルです。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 router <br> 198.51.100.1")
j("FTP server <br> (203.0.113.100)")
end

subgraph 3
x("Acme router <br> 198.51.100.1")
z("FTP server <br> (203.0.113.100)")
end

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

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

IPsec トンネル

IPsec は、機器間の暗号化接続を確立するために連携する一連のプロトコルです。公開ネットワーク上で送るデータを保護します。組織は IPsec を Virtual Private Network(VPN)の構築によく使い、IP パケットを暗号化してパケットの送信元を認証します。

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

IKEv2 が IPsec トンネルを確立する仕組み

Cloudflare WAN は、次の段階で 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 セキュリティアソシエーション(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 を作ります。次の設定節では、Cloudflare WAN が現在 IKE SA と Child SA でサポートする変換を示します。

対応している設定パラメーター

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

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 ビットの random ECP group)

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

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

  • 疑似乱数関数(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 ビットの random ECP group)

    • DH group 14(2048 ビットの MODP group)

    • DH group 5(1536 ビットの MODP group)

必須の設定パラメーター

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

任意の設定パラメーター

  • アンチリプレイ保護 を無効にします。
  • IPsec の NULL 暗号化(非推奨): 必要でない限り使わないでください。IPsec トラフィックが暗号化されず、セキュリティが低下します。このオプションを使うには明示的にオプトインします。このオプションを使うと、耐量子保護もなくなります。

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

次のサードパーティベンダーは、耐量子鍵合意の Cloudflare IPsec との相互運用が検証済みです。

ベンダー 製品 / バージョン ML-KEM の種類 DH グループ 備考
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 形式

Cloudflare WAN は、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 は Child SA あたり 1 組のトラフィックセレクターのみをサポートします。
  • ポリシーは応答形式のヘルスチェックをカバーする必要があります。つまりトラフィックセレクターに一致する必要があります。一致しないと、ポリシーに一致しない IPsec トンネルからの他のトラフィックと同様に、Cloudflare がドロップします。
  • 1 つの IPsec トンネルに含められる Child SA はおよそ 100 個です。そのため、トンネルあたりの異なるポリシー数にも実質的な上限があります。

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

IKEv2 の当初の認証設計では、各エンドポイントは自分の送信メッセージだけに署名し、ハンドシェイク全体のトランスクリプトには署名しません。量子能力を持つ 経路上の攻撃者 は、これを突いてハンドシェイクの「分割ビュー」を作り、双方が耐量子鍵交換をサポートしていても、耐量子接続を古典暗号へダウングレードさせることができます。

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

仕組み:

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

要件:

トラブルシューティング

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

トラブルシューティング

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

役に立ちましたか?