機能の提供状況
| Client modes | Zero Trust plans ↗ |
|---|---|
|
すべてのプラン |
| System | Availability | Minimum client version |
|---|---|---|
| Windows | ✅ | 2025.10.186.0 |
| macOS | ✅ | 2025.10.186.0 |
| Linux | ✅ | 2025.10.186.0 |
| iOS | ❌ | |
| Android | ❌ | |
| ChromeOS | ❌ |
デバイス IP は、Zero Trust 組織内の特定デバイスを識別し、そのデバイスへトラフィックをルーティングします。ユーザーが Cloudflare One Client(旧 WARP)を登録すると、Cloudflare は デバイス登録 に仮想 IPv4 と IPv6 アドレスを割り当てます。Cloudflare One Client はこれらの IP アドレスを使って、デバイス上に 仮想ネットワークインターフェース を作成します。これにより、プライベートネットワークは Cloudflare Mesh または Cloudflare WAN のオンランプ経由でデバイスに到達できます。
デバイス IP を確認できます。既存の内部リソースと IP が重なる場合は、アドレスプールを再設定できます。
デフォルトでは、Cloudflare は次のアドレス空間からデバイス IP を割り当てます。
- デフォルト IPv4:
100.96.0.0/12 - デフォルト IPv6:
2606:4700:0cf1:1000::/64
組織が内部ネットワークでデフォルトの IPv4 範囲をすでに使っている場合、またはファイアウォールポリシー管理のために細かい IP 割り当てが必要な場合は、カスタムのデバイス IPv4 サブネットを設定できます。ユーザーの ID に基づいて、デバイスごとに異なる IPv4 サブネットを割り当てられます。
デフォルトの IPv6 範囲は Cloudflare が所有しているため、プライベートネットワーク上のサービスと衝突しにくいです。デバイス IPv6 範囲は設定できません。
デフォルトの IPv4 範囲 がプライベートネットワーク上のサービスと衝突する場合は、カスタム IP サブネットを作成します。
デバイス IP 用のカスタム IPv4 サブネットを定義する手順は次のとおりです。
-
Cloudflare dashboard ↗ で Zero Trust > Team & Resources > Devices > Device profiles を開きます。
-
Device IP subnets で Add new IP subnet を選びます。
-
サブネットに任意の名前を入力します。
-
CIDR に、サポート対象のプライベート範囲から有効な IPv4 CIDR ブロックを入力します。
10.0.0.0/8172.16.0.0/12192.168.0.0/16100.64.0.0/10
設定する CIDR ブロックは、少なくとも
/24の大きさである必要があります。 -
Add subnet を選んで保存します。
次に、このサブネットをデバイスグループに 割り当てます。
特定のユーザー ID 条件に基づき、予測可能なアドレス空間でデバイスがプロビジョニングされるように、カスタム IP サブネット を割り当てます。
デバイスに IP サブネットを割り当てる手順は次のとおりです。
- Cloudflare dashboard ↗ で Zero Trust > Team & Resources > Devices > Device profiles を開きます。
- Device IP profiles で Add new IP profile を選びます。
- このデバイスグループの名前を入力します(例:
IT department)。 - これらの IP を受け取るユーザーまたはデバイスを定義するルールを作成します。利用できる Selectors、Operators、Values の詳細を確認します。
- ドロップダウンメニューから既存の IPv4 サブネットを選ぶか、新しいサブネットを作成 します。
- Assign IP address を選びます。
- (任意)Device IP profiles テーブルで、IP プロファイルの 優先順位 を変更します。
ルールに一致するデバイスは、登録時にこのアドレス空間からランダムな IP を割り当てられます。新しい IP を受け取るのは新規登録デバイスだけです。既存デバイスの接続には影響しません。既存デバイスに新しい IP を割り当てるには、登録を削除 してから、Zero Trust 組織に デバイスを再登録 します。
組織あたりのカスタムデバイス IP プロファイルは、現在アカウントごとに 30 個まで 制限 されています。
IP プロファイルは、次のセレクター(条件)に一致させるよう設定できます。ID ベースのセレクターは、ユーザーが ID プロバイダー (IdP) にログインして デバイスを登録 した場合にだけ使えます。
ユーザーのメールに基づいてデバイスプロファイルを適用します。
| UI 名 | API の例 |
|---|---|
| User email | identity.email == "[email protected]" |
ユーザーが IdP でメンバーとして設定されている IdP グループ のメールアドレスに基づいて、デバイス IP プロファイルを適用します。
| UI 名 | API の例 |
|---|---|
| User group emails | identity.groups.email == "[email protected]" |
ユーザーが IdP でメンバーとして設定されている IdP グループ の ID に基づいて、デバイス IP プロファイルを適用します。
| UI 名 | API の例 |
|---|---|
| User group IDs | identity.groups.id == "12jf495bhjd7893ml09o" |
ユーザーが IdP でメンバーとして設定されている IdP グループ の名前に基づいて、デバイス IP プロファイルを適用します。
| UI 名 | API の例 |
|---|---|
| User group names | identity.groups.name == "\"finance\"" |
| UI 名 | API の例 |
|---|---|
| User Name | identity.name == "user-name" |
SAML IdP の属性名と値に基づいて、デバイス IP プロファイルを適用します。
| UI 名 | API の例 |
|---|---|
| SAML Attributes | identity.saml_attributes == "\"group=finance\"" |
比較演算子は、デバイス IP プロファイルがセレクターとどう一致するかを決めます。
| Operator | Meaning |
|---|---|
| in | 定義した値のうち少なくとも 1 つに一致します |
| not in | 定義した値のいずれにも一致しません |
| is | 定義した値と等しいです |
| matches | 正規表現 (regex) が true と評価されます |
Value には、等価比較演算子(is など)を使う場合は単一の値を、包含比較演算子(in など)を使う場合は複数の値を入力できます。対応するセレクターでは、正規表現(regex)で値の範囲を指定することもできます。
正規表現は Rust で評価されます。Rust の実装は、ほかで使われる正規表現ライブラリと少し異なります。詳細は ワイルドカード のガイドを参照してください。正規表現が一致するか確認するには、Rustexp ↗ を使えます。
複数の値に一致させたい場合は、パイプ記号(|)を OR 演算子として使えます。パイプ記号の前にエスケープ文字(\)は不要です。たとえば、次の式は user's email domain が @acme.com または @widgets.com のいずれかに一致すると true になります。
| セレクター | 演算子 | 値 |
|---|---|---|
| User email | matches | @acme.com|@widgets.com |
正規表現に加えて、論理演算子 で複数の値に一致させることもできます。
式内の複数の条件を評価するには、論理演算子を選びます。
| Operator | Meaning |
|---|---|
| And | 式内のすべての条件に一致します |
| Or | 式内のいずれかの条件に一致します |
Cloudflare One Client は、Cloudflare One dashboard に表示される上から下の順で IP プロファイルを確認します(優先順位の数値が小さいものから先に確認します)。クライアントは最初に一致したものを採用します。デバイスが IP プロファイルに一致すると評価を止め、以降の IP プロファイルはその決定を上書きできません。希望する優先順位に合わせて、Cloudflare One dashboard で IP プロファイルを並べ替えられます。
特定のデバイス登録に割り当てられた仮想 IP アドレスを確認する手順は次のとおりです。
- Cloudflare dashboard ↗ で Zero Trust > Team & Resources > Devices を開きます。
- 対象デバイスを選び、View details を選びます。
- Users までスクロールします。このデバイスに関連する登録と、割り当てられた IPv4 および IPv6 アドレスが表示されます。
デバイスクライアントの仮想ネットワークインターフェースが使うデバイス IP を確認するには、次を実行します。
Windows では ipconfig を実行します。Cloudflare One Client がオンのとき、デバイス IP が付いた CloudflareWARP アダプターが表示されます。
ipconfigWindows IP Configuration
Unknown adapter CloudflareWARP:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Cloudflare WARP Interface Tunnel
Physical Address. . . . . . . . . :
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IPv6 Address. . . . . . . . . . . : 2606:4700:110:8f79:145:f180:fc4:8106(Preferred)
Link-local IPv6 Address . . . . . : fe80::83b:d647:4bed:d388%49(Preferred)
IPv4 Address. . . . . . . . . . . : 172.16.0.2(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 127.0.2.2
127.0.2.3
NetBIOS over Tcpip. . . . . . . . : EnabledmacOS では ifconfig を実行します。Cloudflare One Client がオンのとき、デバイス IP が付いた utun インターフェイスが表示されます。
ifconfig<redacted>
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
inet 172.16.0.2 --> 172.16.0.2 netmask 0xffffffff
inet6 fe80::f6d4:88ff:fe82:6d9e%utun3 prefixlen 64 scopeid 0x17
inet6 2606:4700:110:8c7d:7369:7526:a59b:5636 prefixlen 128
nd6 options=201<PERFORMNUD,DAD>Linux では ifconfig または ip addr を実行します。Cloudflare One Client がオンのとき、デバイス IP が付いた utun インターフェイスが表示されます。
ip addr<redacted>
3: CloudflareWARP: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc mq state UNKNOWN group default qlen 500
link/none
inet 172.16.0.2/32 scope global CloudflareWARP
valid_lft forever preferred_lft forever
inet6 2606:4700:110:8a2e:a5f7:a8de:a1f9:919/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::117e:276b:8a79:c498/64 scope link stable-privacy
valid_lft forever preferred_lft forever上の例では、デバイスの IPv4 アドレスは 172.16.0.2 です。
新規デバイス登録に十分なアドレスがあるか確認するため、IPv4 サブネットの消費状況を監視します。空き IP がないサブネットに一致するデバイスは登録できません。
Cloudflare One dashboard で、割り当て済み IP と空き IP の概要を確認します。
- Cloudflare dashboard ↗ で Zero Trust > Team & Resources > Devices > Device profiles を開きます。
- Device IP subnets テーブルを探します。
- IPs assigned 列には、アクティブなデバイス登録に現在割り当てられている IP の総数と、CIDR ブロックの総容量が表示されます。
サブネットが容量に近づいている場合は、サブネットを拡張 して空き IP を増やせます。または、既存のデバイス登録を削除 して IP を解放できます。特に、デバイスが使われていなくても IP 空間を消費している失効済み登録に注意します。
サブネット内のすべてのデバイス登録(失効済みを含む)の一覧を取得するには、Cloudflare API を使います。たとえば、次のスクリプトはすべてのデバイス登録とそのデバイス IP を取得し、指定した CIDR ブロック内の登録を出力します。
IP で登録を絞り込むスクリプトの例
-
次のコードを含む
filter-device-ips.pyという新しいファイルを作成します。import requests import ipaddress import json # --- Configuration --- AUTH_EMAIL = "<CLOUDFLARE_ACCOUNT_EMAIL>" AUTH_KEY = "<CLOUDFLARE_API_KEY>" # Refer to https://developers.cloudflare.com/fundamentals/api/get-started/keys/. API token authentication is not currently supported for fetching device IPs. ACCOUNT_ID = "<CLOUDLFARE_ACCOUNT_ID" # Refer to https://developers.cloudflare.com/fundamentals/account/find-account-and-zone-ids/. TARGET_CIDR = "100.64.0.0/10" # --- API request headers --- headers = { "X-Auth-Email": AUTH_EMAIL, "X-Auth-Key": AUTH_KEY, "Content-Type": "application/json" } def get_all_registrations(): """Fetches all device registrations including revoked registrations. """ devices = {} url = f"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/devices/registrations" params = {"per_page": 50, "status": "all"} while True: response = requests.get(url, headers=headers, params=params).json() if not response.get('success'): print(f"Error fetching registrations: {response.get('errors')}") break for d in response.get('result', []): # We use the ID as the key to link with IP data later devices[d['id']] = d cursor = response.get('result_info', {}).get('cursor') if not cursor: break params['cursor'] = cursor return devices def filter_by_cidr(device_map, network): """Fetch device IPs and return devices that fall within the target CIDR block.""" matches = [] device_ids = list(device_map.keys()) # API limits IP correlation to batches of 20 for i in range(0, len(device_ids), 20): batch = device_ids[i:i+20] # Construct parameters for the IP endpoint params = {f"device_ids[{idx}]": d_id for idx, d_id in enumerate(batch)} url = f"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/teamnet/devices/ips" res = requests.get(url, headers=headers, params=params).json() if not res.get('success'): print(f"Error fetching IPs: {res.get('errors')}") continue for item in res.get('result', []): d_id = item.get('device_id') ip_data = item.get('device_ips', {}) ipv4_str = ip_data.get('ipv4') if ipv4_str: try: if ipaddress.IPv4Address(ipv4_str) in network: if d_id in device_map: full_data = device_map[d_id] full_data['device_ips'] = ip_data matches.append(full_data) except ValueError: continue return matches if __name__ == "__main__": try: net = ipaddress.IPv4Network(TARGET_CIDR, strict=False) print(f"[*] Fetching registrations (status=all)...") all_devices = get_all_registrations() print(f"[*] Found {len(all_devices)} total registrations.") print(f"[*] Checking IP ranges for match...") filtered_list = filter_by_cidr(all_devices, net) if filtered_list: print(f"\n--- Found {len(filtered_list)} Device(s) in {TARGET_CIDR} ---\n") for dev in filtered_list: print(json.dumps(dev, indent=2)) print("-" * 50) else: print(f"\nNo devices found within the {TARGET_CIDR} range.") except Exception as e: print(f"Script Error: {e}") -
スクリプトの設定セクションに、Cloudflare API の資格情報と IP サブネット範囲を入力します。
-
ターミナルを開き、スクリプトのディレクトリに移動します。スクリプトを実行するには、次を入力します。
python3 filter-device-ips.py
Cloudflare は、既存の IPv4 サブネット定義の編集をサポートしていません。デバイスに別の IPv4 サブネットを割り当てる手順は次のとおりです。
- Cloudflare dashboard ↗ で Zero Trust > Team & Resources > Devices > Device profiles を開きます。
- Device IP profiles で、古いサブネットに関連するデバイスグループを見つけ、Edit を選びます。
- Create new subnet IP range を選んで、新しいサブネットを定義します。
- Save を選びます。
新しいサブネットは Device IP subnets テーブルに表示されます。古いサブネットは削除できます。デバイスが新しいサブネットから IP を取得するのは 再登録 時だけです。既存の登録は 現在の IP を保持します。