Cloudflare はパケットをサーバーへ転送する前に傍受します。そのため、クライアント IP を調べると、実際のクライアント IP ではなく Cloudflare の IP が見えます。
実行しているサービスによっては、実際のクライアント IP が必要なことがあります。その場合は、プロキシプロトコルを使って Cloudflare からサービスへクライアント IP を渡せます。プロキシ情報の送信方法は、TCP と UDP のどちらを使うかによって異なります。TCP では、Spectrum は Proxy Protocol v1 ↗ の追加に対応しています。これは Amazon ELB と NGINX ↗ がサポートする人間が読める形式です。UDP アプリケーション向けには、Cloudflare が Simple Proxy Protocol という独自のプロキシプロトコルを開発しています。Spectrum から Cloudflare WAN(旧称 Magic WAN)へのエグレスでは、Proxy Protocol はサポートされません。
-
Cloudflare ダッシュボードで、Spectrum ページに移動します。
Spectrum を開く ↗ -
PROXY プロトコルを使うアプリケーションを探し、Configure を選びます。
-
ドロップダウンから PROXY Protocol v1 を選びます。
TCP アプリケーションで PROXY Protocol v1 を使うように設定すると、Cloudflare は着信 TCP 接続ごとに PROXY Protocol のプレーンテキストヘッダーを先頭に付けます。
PROXY Protocol は、すべての接続の先頭に、クライアント IP アドレスとポートを報告するヘッダーを付けます。PROXY Protocol のプレーンテキストヘッダーの形式は次のとおりです。
PROXY_STRING + single space + INET_PROTOCOL + single space + CLIENT_IP + single space + PROXY_IP + single space + CLIENT_PORT + single space + PROXY_PORT + "\r\n"IPv4 アドレスの PROXY Protocol 行の例は次のとおりです。
PROXY TCP4 192.0.2.0 192.0.2.255 42300 443\r\nIPv6 アドレスの PROXY Protocol 行の例は次のとおりです。
PROXY TCP6 2001:db8:: 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff 42300 443\r\n-
Cloudflare ダッシュボードで、Spectrum ページに移動します。
Spectrum を開く ↗ -
PROXY プロトコルを使うアプリケーションを探し、Configure を選びます。
-
ドロップダウンから PROXY Protocol v2 を選びます。
TCP アプリケーションで PROXY Protocol v2 を使うように設定すると、Cloudflare は着信 TCP 接続ごとに PROXY Protocol のバイナリヘッダーを先頭に付けます。
UDP アプリケーションで PROXY Protocol v2 を使うように設定すると、Cloudflare はストリーム上の最初の UDP データグラムの先頭に PROXY Protocol のバイナリヘッダーを付けます。
PROXY Protocol は、すべての接続の先頭に、クライアント IP アドレスとポートを報告するヘッダーを付けます。
IPv4 の着信アドレス向け PROXY Protocol バイナリヘッダーの形式は次のとおりです。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Proxy Protocol v2 Signature |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|Command| AF | Proto.| Address Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+IPv6 の着信アドレス向け PROXY Protocol バイナリヘッダーの形式は次のとおりです。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Proxy Protocol v2 Signature |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|Command| AF | Proto.| Address Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ IPv6 Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ IPv6 Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Spectrum を UDP で使う場合、クライアントの送信元 IP とポート情報は、UDP 向けに開発した軽量プロトコルである Simple Proxy Protocol で取得できます。
有効にするには、Spectrum アプリケーションで Configure を選び、Simple Proxy Protocol の設定を On に切り替えます。
Simple Proxy Protocol では、オリジンもクライアント向けパケットの先頭に、元のクライアント送信元情報を含む同じヘッダーを付ける必要があります。これにより、着信パケットが実際にそのクライアント向けであることを検証します。
Simple Proxy Protocol ヘッダーの詳細は、Simple Proxy Protocol ヘッダー を参照してください。