Cloudflare Gateway では、デバイスに Cloudflare One Client をインストールしなくても、DNS ロケーション またはユーザー単位で DNS over HTTPS(DoH)リクエストをフィルタできます。
ロケーションベースのポリシーでは、DNS リクエストを ロケーション固有の DoH エンドポイント へ送ります。アイデンティティベースのポリシーでは、リクエストに ユーザー固有の DoH トークン を含めます。
ロケーションベースのポリシーでは、そのロケーションに割り当てられた固有の DoH エンドポイント へ DNS クエリを送ります。
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-queryロケーションの DoH サブドメイン を取得します。
ブラウザーは任意の DNS over HTTPS(DoH)エンドポイントを使うよう設定できます。ブラウザーで直接 DoH を設定する場合は、DoH エンドポイントとして Gateway の DNS ロケーションを選んでください。選ばないと、そのブラウザーでは DNS フィルタが働きません。
Mozilla Firefox
- Firefox で 設定 を開きます。
- プライバシーとセキュリティ で DNS over HTTPS を開きます。
- 次を使用してセキュア DNS を有効化: で 最大限の保護 を選びます。
- プロバイダーを選択 で カスタム を選びます。
- 入力欄に
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-queryを入力します。
これで Firefox は、DoH エンドポイントを使う設定になりました。Firefox の DoH 設定の詳細は、Mozilla のドキュメント ↗ を参照してください。
Google Chrome
- Chrome で 設定 > プライバシーとセキュリティ > セキュリティ を開きます。
- 下にスクロールし、セキュア DNS を使用する を有効にします。
- カスタムを使用 を選びます。
- カスタム プロバイダーを入力 欄に
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-queryを入力します。
Chrome で DNS over HTTPS を有効にする ↗ 方法の詳細を参照してください。
Microsoft Edge
- Microsoft Edge で 設定 を開きます。
- プライバシー、検索、サービス を選び、セキュリティ までスクロールします。
- セキュア DNS を使用する を有効にします。
- サービス プロバイダーを選択する を選びます。
- カスタム プロバイダーを入力 欄に
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-queryを入力します。
Brave
- Brave で 設定 > セキュリティとプライバシー > セキュリティ を開きます。
- セキュア DNS を使用する を有効にします。
- カスタムを使用 を選びます。
- カスタム プロバイダーを入力 欄に
https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-queryを入力します。
Safari
現在、Safari は DNS over HTTPS に対応していません。
DNS クエリは Gateway へ送られ、フィルタ対象になります。これらのリクエストをフィルタするには、DNS Location セレクターを使う DNS ポリシーを作成します。
Windows 11
-
ロケーションの DoH エンドポイントに紐づく
AレコードとAAAAレコードの値を取得します。- 次のコマンドを実行し、
Aレコードの値を取得します。
nslookup -type=A <your-subdomain>.cloudflare-gateway.comAAAAレコードの値を取得します。
nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com- 得られた IP アドレスをコピーします。
- 次のコマンドを実行し、
-
既知の DoH サーバー一覧にアドレスを追加します。
- 各アドレスに対して次のコマンドを実行します。
Add-DnsClientDohServerAddress -ServerAddress <IP-address> -DohTemplate https://<your-subdomain>.cloudflare-gateway.com/dns-query -AllowFallbackToUdp $False -AutoUpgrade $False- アドレスが追加されたことを確認します。
Get-DnsClientDohServerAddress -
Windows で Settings > Network & internet > 使用中のインターネット接続を開きます。Ethernet または Wi-Fi です。
-
DNS server assignment で Edit を選びます。
-
ドロップダウンで Manual を選びます。
-
IPv4 を有効にします。
-
Preferred DNS と Alternate DNS に、
Aレコードコマンドで得た IPv4 アドレスを入力します。DNS over HTTPS を On (automatic template) にします。 -
IPv6 を有効にします。
-
Preferred DNS と Alternate DNS に、
AAAAレコードコマンドで得た IPv6 アドレスを入力します。DNS over HTTPS を On (automatic template) にします。
Windows Server 2022
ロケーションの DoH エンドポイントに紐づく A レコードと AAAA レコードの値を取得します。
- 次のコマンドを実行し、
Aレコードの値を取得します。
nslookup -type=A <your-subdomain>.cloudflare-gateway.comAAAAレコードの値を取得します。
nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com- 得られた IP アドレスをコピーします。
- 既知の DoH サーバー一覧に アドレスを追加 ↗ します。
- DoH を使うよう Windows Server クライアントを設定 ↗ するか、グループポリシーを設定 ↗ します。
詳細は、Windows Server 2022 以降向けの Microsoft の DoH ガイド ↗ を参照してください。
汎用の Cloudflare DoH エンドポイント dns.cloudflare-gateway.com へ DoH リクエストを送れます。リクエストでロケーションを指定するには、cf-dns-location ヘッダーにロケーションの DoH サブドメインを含めます。例:
GET /dns-query?name=example.com&type=A HTTP/2
Host: dns.cloudflare-gateway.com
cf-dns-location: 9y65g5srsm
Accept: application/dns-messageユーザーのアイデンティティに基づいて DoH クエリをフィルタするには、各クエリにユーザー固有の認証トークンを含めます。ユーザーあたり複数デバイスがあり、デバイス単位のポリシーを適用したい場合は、各デバイスを別のメールアドレスに対応付けてください。
現時点では、認証トークンは API でのみ生成できます。セットアップを自動化するこの 対話型 Python スクリプト を実行するか、次の手順に従ってください。
各 Cloudflare アカウントで、DNS over HTTPS(DoH)向けに認可できる有効な Access サービストークン は、同時に 1 つだけです。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/service_tokens" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{"name":"ACME Corporation service token"}'サービストークンの client_id、client_secret、id を保存します。
応答例
{
"result": {
"client_id": "88bf3b6d86161464f6509f7219099e57.access",
"client_secret": "cfast_EqN8f9vx3sKOSY4mwCMCbZYb02L4OvfAkacLAqTZ63a435a7",
"created_at": "2022-06-09T01:59:17Z",
"enabled": true,
"expires_at": "2023-06-09T01:59:17Z",
"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
"name": "ACME Corporation service token",
"updated_at": "2022-06-09T01:59:17Z"
},
"success": true,
"errors": [],
"messages": []
}curl --request PUT \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations/doh/$SERVICE_TOKEN_ID" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"access.api.error.service_token_not_found エラーが出た場合は、$SERVICE_TOKEN_ID が client_id ではなく id の値になっているか確認してください。
応答例
{
"result": {
"client_id": "88bf3b6d86161464f6509f7219099e57.access",
"created_at": "2022-06-09T01:59:17Z",
"expires_at": "2023-06-09T01:59:17Z",
"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
"name": "ACME Corporation service token",
"updated_at": "2022-06-09T01:59:17Z",
"duration": "8760h"
},
"success": true,
"errors": [],
"messages": []
}新しいユーザーを作成し、任意でグループに追加します。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/users" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"name": "John Doe",
"email": "[email protected]",
"custom": {"groups":[{"id": "02fk6b3p3majl10", "email": "[email protected]", "name": "Finance"}]}
}'応答で返ったユーザーの id を保存します。
応答例
{
"result": {
"id": "54d425de-7a78-4186-9975-d43c88ee7899",
"created_at": "2022-03-16T21:18:39.93598Z",
"updated_at": "2022-05-17T23:50:39.598345Z",
"uid": "54d425de-7a78-4186-9975-d43c88ee7899",
"name": "John Doe",
"email": "[email protected]",
"custom": {
"groups": [
{
"email": "[email protected]",
"id": "02fk6b3p3majl10",
"name": "Finance"
}
]
}
},
"success": true,
"errors": [],
"messages": []
}サービストークンで チームドメイン に認証し、ユーザーの DoH トークンをリクエストします。
curl "https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/doh-token?account-id=<ACCOUNT_ID>&user-id=<USER_ID>&auth-domain=<TEAM_NAME>.cloudflareaccess.com" \
--header "Cf-Access-Client-Id: <CLIENT_ID>" \
--header "Cf-Access-Client-Secret: <CLIENT_SECRET>"応答には、そのユーザーに紐づく固有の DoH トークンが含まれます。このトークンは 24 時間で期限切れになります。DoH クエリごとに新しく生成するのではなく、DoH トークンのリフレッシュフローを用意することを推奨します。
応答例
{
"token": "y2khbGciOiJSUzI1NiIsImtpZCI6ImJlZjVkYjg4ZTEwMjk3ZDEwNzhkMmEyYjE0MjMxZTljYTQwMjQ2NjAwOTQzNmJhOTQwOGJkODY3ZmI4OWFiOGQifQ.eyJ0eXBlIjoiZG9oIiwiYXVkIjoiY2xvdWRmbGFyZS1nYXRld2F5LmNvbSIsImlhdCI6MTY1NDc1MTg3NSwiZXhwIjoxNjU0ODM4Mjc1LCJhY2NvdW50LWlkIjoiMTA4MDM0OGIyZGYzYmQwN2QxZmI1MjM3Y2Q1ZDU5M2EiLCJ1c2VyLWlkIjoiNTRkNDI1ZGUtN2E3OC00MTg2LTk5NzUtZDQzYzg4ZWU3ODk5In0.I5p4WsH2dPhQ8vwy84zF05PsoBHCsUSXAaMpNhEH36oFZ3tXcs9ksLz7OzpZ_x3HxUfO3n57LlpAF1VehaBt2i94XCkvSgtHpYcwd_qZydLp-BGtcyfU1LbdXQC3m6zxKcIWu5VySi8I-J25UYlpyJhYgZ4DQUZIpqbSSt6WcVRKvA7OBa7xjkTux4OcqWAViO_ZS-GLwl-fqhvolmiwk37seBD3YuV1zG06VeWXfrMkZ5MbhooHD1DZDBHOZpTtmN8MbeKeI4tlY1mb_O3-jE-um6F9Hrl4NQm89MKFzsum-_Rywi5m4PTSlDza7fjdJs7RzFgJd3VWgzG-jgyQKw"
}https://<ACCOUNT_ID>.cloudflare-gateway.com/dns-query のリゾルバーへ DoH クエリを送ります。CF-Authorization ヘッダーにユーザーの DoH トークンを含めてください。
curl --silent "https://<ACCOUNT_ID>.cloudflare-gateway.com/dns-query?name=example.com" \
--header "accept: application/dns-json" \
--header "CF-Authorization: <USER_DOH_TOKEN>" | jqサイトがブロックされ、ポリシーで ブロックページ を有効にしている場合、クエリは 162.159.36.12(Gateway ブロックページの IP アドレス)を返します。ブロックページが無効なら、応答は 0.0.0.0 です。
応答例
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": false,
"CD": false,
"Question": [
{
"name": "example.com",
"type": 1
}
],
"Answer": [
{
"name": "example.com",
"type": 1,
"TTL": 60,
"data": "162.159.36.12"
}
]
}リクエストが正しいユーザーメールに紐づいているかは、Gateway DNS ログ で確認できます。これらのリクエストをフィルタするには、Gateway の アイデンティティベースセレクター のいずれかを使う DNS ポリシーを作成します。