サービスバインディング を使うと、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 アドレスのサービスは中断される可能性が高いです。
- Cloudflare アカウントにログインし、アカウント ID と 認証キーまたはトークン を取得します。API トークン を使う場合、権限に
Account-IP Prefixes-Editを含めてください。 - List Services エンドポイントへ
GETリクエストを送り、Spectrum サービスに紐づくidを控えます。 - List Prefixes エンドポイントを使い、設定するプレフィックス(
cidr)に紐づくidを控えます。
この時点で、例 を続けると、次のような対応表になります。
| 変数 | 説明 |
|---|---|
{service_id} |
Cloudflare 内の Spectrum サービスの ID です。 例: 969xxxxxxxx000xxx0000000x00001bf |
{prefix_id} |
設定対象の CDN プレフィックス(203.0.113.0/24)の ID です。例: 6b25xxxxxxx000xxx0000000x0000cfc |
- 現在 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: WriteIP Prefixes: Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- 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
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 エンドポイントで定期的に確認できます。
伝播時間(4〜6 時間)のあと、List Service Bindings エンドポイントは、そのプレフィックスに含まれるすべてのサービスバインディングを返す必要があります。この例では CDN と Spectrum です。
Required API token permissions
At least one of the following token permissions is required:IP Prefixes: WriteIP Prefixes: Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"すでに CDN で BYOIP を使っている場合は、この手順を飛ばせる場合があります。ただし、このガイドで Spectrum プレフィックスの一部 IP を CDN にアップグレードする場合は、次の Address maps と DNS レコード のセクションを確認してください。
Address maps を使い、レコードが プロキシされている ときに、DNS レスポンスで Cloudflare が使う IP を指定します。
次の 2 つのスコープから選べます。
- アカウントレベル: アカウント内のすべてのゾーンの、プロキシされた DNS レコードすべてに Address map を使います。
- ゾーンレベル: ゾーン内の、プロキシされた DNS レコードすべてに Address map を使います。
-
Cloudflare ダッシュボードで、Address Maps ページを開きます。
Address maps を開く ↗ -
Create an address map を選択します。
-
Address map のスコープを選びます。
-
割り当てたいゾーンと IP アドレスを追加します。
-
Address map に名前を付けます。
-
内容を確認し、Save and Deploy を選択します。
Create Address Map エンドポイントを使います。
正しい Key/Token と権限があることを確認してください。
DNS レコードのプロキシ状態と Address map は、ホスト名へのリクエストに対する Cloudflare 権威 DNS の応答方法を決めます。一方、A/AAAA レコードに指定した IP アドレスは、Cloudflare が設定済みオリジンへ到達する方法 を決めます。
ダッシュボードで DNS レコードを作成するには、次の手順を行います。
-
Cloudflare ダッシュボードで、DNS Records ページを開きます。
Records を開く ↗ -
Add record を選択します。
-
アドレス(
A/AAAA)の レコードタイプ を選びます。 -
必須項目を入力し、Proxy status を proxied にします。
-
Save を選択します。
API でレコードを作成するには、POST リクエスト を使います。フィールドの定義は、リクエストボディ仕様のレコードタイプを選んで確認してください。
例
| タイプ | 名前 | IP アドレス | プロキシ状態 | TTL |
|---|---|---|---|---|
A |
www |
203.0.113.150 |
Proxied |
Auto |
この時点で、ゾーン example.com の Address map がプロキシされたレコードに 203.0.113.100 を使うよう指定し、かつ上記のレコードが同じゾーンにある場合、次のようになります。
- Cloudflare は
www.example.comへの DNS リクエストに203.0.113.100で応答します。 - Cloudflare は CDN 経由でリクエストをプロキシし、オリジンサーバー
203.0.113.150へルーティングします。 - 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 で自身の 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
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"
}
]'必要に応じて、ほかの機能も活用してください。たとえば次のとおりです。