Skip to content

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

CDN と Spectrum で BYOIP を使う

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

サービスバインディング を使うと、BYOIP を使っている CDN1 のお客様は、Cloudflare にオンボーディング済みの同じプレフィックスを、IP アドレス単位で選択的に Spectrum2 へルーティングできます。逆方向も同様です。つまり、次ができます。

  • CDN プレフィックス内の個別 IP を Spectrum IP にアップグレードできます。たとえば、CDN プレフィックス 203.0.113.0/24 がある場合、203.0.113.1 を Spectrum にアップグレードできます。

  • Spectrum プレフィックス内の個別 IP を CDN IP にアップグレードできます。たとえば、Spectrum プレフィックス 203.0.113.0/24 がある場合、203.0.113.1 を CDN にアップグレードできます。

このガイドでは、1 つ目の例を使い、CDN にオンボーディングしたプレフィックスのうち、一部の IP を Spectrum にアップグレードする流れを説明します。

始める前に

Cloudflare は、サービスバインディングを 集約した CIDR ブロックで実装することを 強く 推奨します。連続していない CIDR ブロックに個別のバインディングを足すより効率的です。

CDN で保護されているプレフィックス: 203.0.113.0/24

Spectrum へアップグレードする IP:

203.0.113.16
203.0.113.17
203.0.113.18
203.0.113.19
203.0.113.20
203.0.113.21
203.0.113.22
203.0.113.23

203.0.113.16 に対して、ネットマスク /29 の Spectrum サービスバインディングを 1 つ追加します。

サービスバインディングを作成(または削除)すると、Cloudflare のグローバルネットワークへ反映されるまで 4〜6 時間 かかります。このあいだ、対象 IP アドレスのサービスは中断される可能性が高いです。


IP を準備する

1. アカウント情報を取得する

  1. Cloudflare アカウントにログインし、アカウント ID認証キーまたはトークン を取得します。API トークン を使う場合、権限に Account - IP Prefixes - Edit を含めてください。
  2. List Services エンドポイントへ GET リクエストを送り、Spectrum サービスに紐づく id を控えます。
  3. List Prefixes エンドポイントを使い、設定するプレフィックス(cidr)に紐づく id を控えます。

この時点で、 を続けると、次のような対応表になります。

変数 説明
{service_id} Cloudflare 内の Spectrum サービスの ID です。

例: 969xxxxxxxx000xxx0000000x00001bf
{prefix_id} 設定対象の CDN プレフィックス(203.0.113.0/24)の ID です。

例: 6b25xxxxxxx000xxx0000000x0000cfc
  1. 現在 CDN のサービスバインディングがあり、プレフィックス全体を覆っていることを確認するには、List Service Bindings エンドポイントへ GET リクエストを送ります。URI パスの {prefix_id} は、前の手順で取得した実際のプレフィックス ID に置き換えます。

Required API token permissions

At least one of the following token permissions is required:
  • IP Prefixes: Write
  • IP Prefixes: Read
List Service Bindingsbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

2. サービスバインディングを作成する

  1. Create service binding エンドポイントに POST リクエストを送り、Spectrum にバインドする IP アドレスを指定します。必要に応じて 対応するネットワークマスク を指定します。

例の続きです。203.0.113.100/32 は、CDN のプレフィックス 203.0.113.0/24 に含まれる IP アドレスです。

URI の {prefix_id} を、前の手順で取得したプレフィックス ID に置き換えます。リクエスト本文の cidr 値は、Spectrum で使う IP アドレスまたはサブネットに対応させます。

Required API token permissions

At least one of the following token permissions is required:
  • IP Prefixes: Write
Create Service Bindingbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"cidr": "203.0.113.100/32",
		"service_id": "<SERVICE_ID>"
	}'

レスポンス本文では、初期のプロビジョニング状態が provisioning になっている必要があります。

{
  "errors": [],
  "messages": [],
  "success": true,
  "result": {
    "cidr": "203.0.113.100/32",
    "id": "<SERVICE_BINDING_ID>",
    "provisioning": {
      "state": "provisioning"
      },
    "service_id": "<SERVICE_ID>",
    "service_name": "<SERVICE_NAME>"
  }
}

サービスバインディングの状態は、List Service Bindings エンドポイントで定期的に確認できます。

3. すべてのサービスバインディングを確認する

伝播時間(4〜6 時間)のあと、List Service Bindings エンドポイントは、そのプレフィックスに含まれるすべてのサービスバインディングを返す必要があります。この例では CDN と Spectrum です。

Required API token permissions

At least one of the following token permissions is required:
  • IP Prefixes: Write
  • IP Prefixes: Read
List Service Bindingsbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

Cloudflare サービスを設定する

CDN

すでに CDN で BYOIP を使っている場合は、この手順を飛ばせる場合があります。ただし、このガイドで Spectrum プレフィックスの一部 IP を CDN にアップグレードする場合は、次の Address mapsDNS レコード のセクションを確認してください。

Address maps

Address maps を使い、レコードが プロキシされている ときに、DNS レスポンスで Cloudflare が使う IP を指定します。

次の 2 つのスコープから選べます。

  • アカウントレベル: アカウント内のすべてのゾーンの、プロキシされた DNS レコードすべてに Address map を使います。
  • ゾーンレベル: ゾーン内の、プロキシされた DNS レコードすべてに Address map を使います。
  1. Cloudflare ダッシュボードで、Address Maps ページを開きます。

    Address maps を開く ↗
  2. Create an address map を選択します。

  3. Address map のスコープを選びます。

  4. 割り当てたいゾーンと IP アドレスを追加します。

  5. Address map に名前を付けます。

  6. 内容を確認し、Save and Deploy を選択します。

Create Address Map エンドポイントを使います。

正しい Key/Token と権限があることを確認してください。

DNS レコード

DNS レコードのプロキシ状態と Address map は、ホスト名へのリクエストに対する Cloudflare 権威 DNS の応答方法を決めます。一方、A/AAAA レコードに指定した IP アドレスは、Cloudflare が設定済みオリジンへ到達する方法 を決めます。

ダッシュボードで DNS レコードを作成するには、次の手順を行います。

  1. Cloudflare ダッシュボードで、DNS Records ページを開きます。

    Records を開く ↗
  2. Add record を選択します。

  3. アドレス(A/AAAA)の レコードタイプ を選びます。

  4. 必須項目を入力し、Proxy statusproxied にします。

  5. Save を選択します。

API でレコードを作成するには、POST リクエスト を使います。フィールドの定義は、リクエストボディ仕様のレコードタイプを選んで確認してください。

タイプ 名前 IP アドレス プロキシ状態 TTL
A www 203.0.113.150 Proxied Auto

この時点で、ゾーン example.com の Address map がプロキシされたレコードに 203.0.113.100 を使うよう指定し、かつ上記のレコードが同じゾーンにある場合、次のようになります。

  1. Cloudflare は www.example.com への DNS リクエストに 203.0.113.100 で応答します。
  2. Cloudflare は CDN 経由でリクエストをプロキシし、オリジンサーバー 203.0.113.150 へルーティングします。
  3. HTTP レスポンスが Cloudflare ネットワークからクライアント側へ出ていくとき、レスポンスの送信元 IP アドレスは 203.0.113.100 になります(HTTP リクエストが最初に到着した IP アドレスです)。

203.0.113.100 がオリジン IP でもある場合、DNS レコードは次のようになります。

タイプ 名前 IP アドレス プロキシ状態 TTL
A www 203.0.113.100 Proxied Auto

Spectrum

Spectrum で自身の IP アドレスを使う設定は、Cloudflare API からのみ行えます。

origin_direct フィールドにはオリジン IP アドレスを指定します。edge_ips では、Spectrum アプリケーションへのリクエスト処理に Cloudflare が使う、BYOIP プレフィックス内の IP アドレスを定義できます。

Required API token permissions

At least one of the following token permissions is required:
  • Zone Settings Write
Create Spectrum application using a name for the originbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/spectrum/apps" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '[
		{
				"protocol": "tcp/22",
				"dns": {
						"type": "CNAME",
						"name": "ssh.example.com"
				},
				"origin_direct": [
						"tcp://192.0.2.1:22"
				],
				"proxy_protocol": "off",
				"ip_firewall": true,
				"tls": "full",
				"edge_ips": {
						"type": "static",
						"ips": [
								"203.0.113.18"
						]
				},
				"traffic_type": "direct"
		}
	]'

(任意)レイヤー 7 の機能を追加する

必要に応じて、ほかの機能も活用してください。たとえば次のとおりです。

Footnotes

  1. レイヤー 7 の HTTP ベース

  2. レイヤー 4、またはカスタムポート付きのレイヤー 7 HTTP

役に立ちましたか?