コンテンツにスキップ

DNS over HTTPS (DoH)

Cloudflare Gatewayを使用すると、WARPクライアントをデバイスにインストールすることなく、DNSの場所やユーザーによってDNS over HTTPS (DoH)リクエストをフィルタリングできます。

場所ベースのポリシーでは、DNSリクエストを場所特定のDoHエンドポイントに送信する必要があります。一方、アイデンティティベースのポリシーでは、リクエストにユーザー特定のDoHトークンを含める必要があります。

場所によるDoHリクエストのフィルタリング

場所ベースのポリシーでは、DNSリクエストを場所に割り当てられたユニークなDoHエンドポイントに送信する必要があります:

https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query

前提条件

場所のDoHサブドメインを取得します。

ブラウザのDoH設定

ブラウザは任意のDNS over HTTPS (DoH)エンドポイントを使用するように設定できます。ブラウザでDoHを直接設定することを選択した場合、DoHエンドポイントとしてGateway DNSの場所を選択する必要があります。そうしないと、そのブラウザでDNSフィルタリングは行われません。

Mozilla Firefox

  1. In Firefox, go to Settings.
  2. In Privacy & Security, go to DNS over HTTPS.
  3. Under Enable secure DNS using, select Max Protection.
  4. In Choose provider, choose Custom.
  5. In the field, enter https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query.

Firefox is now configured to use your DoH endpoint. For more information on configuring DoH settings in Firefox, refer to Mozilla’s documentation.

Google Chrome

  1. In Chrome, go to Settings > Privacy and security > Security.
  2. Scroll down and turn on Use secure DNS.
  3. Select With Custom.
  4. In the Enter custom provider field, enter https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query.

Read more about enabling DNS over HTTPS on Chrome.

Microsoft Edge

  1. In Microsoft Edge, go to Settings.
  2. Select Privacy, Search, and Services, and scroll down to Security.
  3. Turn on Use secure DNS.
  4. Select Choose a service provider.
  5. In the Enter custom provider field, enter https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query.

Brave

  1. In Brave, go to Settings > Security and Privacy > Security.
  2. Turn on Use secure DNS.
  3. Select With Custom.
  4. In the Enter custom provider field, enter https://<YOUR_DOH_SUBDOMAIN>.cloudflare-gateway.com/dns-query.

Safari

Currently, Safari does not support DNS over HTTPS.

DNSクエリは現在、Gatewayに送信されてフィルタリングされます。これらのリクエストをフィルタリングするには、DNSの場所セレクターを使用してDNSポリシーを構築します。

オペレーティングシステムのDoH設定

Windows 11

  1. 場所のDoHエンドポイントに関連付けられたAおよびAAAAレコードの値を取得します。

    1. 次のコマンドを実行してAレコードの値を取得します:
    Terminal window
    nslookup -type=A <your-subdomain>.cloudflare-gateway.com
    1. AAAAレコードの値を取得します。
    Terminal window
    nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com
    1. 結果として得られたIPアドレスをコピーします。
  2. アドレスを既知のDoHサーバーのリストに追加します。

    1. 各アドレスについて次のコマンドを実行します:
    Terminal window
    Add-DnsClientDohServerAddress -ServerAddress <IP-address> -DohTemplate https://<your-subdomain>.cloudflare-gateway.com/dns-query -AllowFallbackToUdp $False -AutoUpgrade $False
    1. アドレスが追加されたことを確認します。
    Terminal window
    Get-DnsClientDohServerAddress
  3. Windowsで、設定 > ネットワークとインターネット > アクティブなインターネット接続に移動します。このオプションはイーサネットまたはWi-Fiのいずれかです。

  4. DNSサーバーの割り当ての下で、編集を選択します。

  5. ドロップダウンメニューで手動を選択します。

  6. IPv4を有効にします。

  7. 優先DNSおよび代替DNSに、AレコードコマンドからのIPv4アドレスを入力します。DNS over HTTPSを*オン(自動テンプレート)*に設定します。

  8. IPv6を有効にします。

  9. 優先DNSおよび代替DNSに、AAAAレコードコマンドからのIPv6アドレスを入力します。DNS over HTTPSを*オン(自動テンプレート)*に設定します。

Windows Server 2022

場所のDoHエンドポイントに関連付けられたAおよびAAAAレコードの値を取得します。

  1. 次のコマンドを実行してAレコードの値を取得します:
Terminal window
nslookup -type=A <your-subdomain>.cloudflare-gateway.com
  1. AAAAレコードの値を取得します。
Terminal window
nslookup -type=AAAA <your-subdomain>.cloudflare-gateway.com
  1. 結果として得られたIPアドレスをコピーします。
  2. アドレスを追加して、既知のDoHサーバーのリストに追加します。
  3. Windows Serverクライアントを設定するか、グループポリシーを設定してDoHを使用します。

詳細については、MicrosoftのDoHガイドを参照してください。Windows Server 2022以降のバージョンに対応しています。

ユーザーによるDoHリクエストのフィルタリング

ユーザーのアイデンティティに基づいてDoHクエリをフィルタリングするには、各クエリにユーザー特定の認証トークンを含める必要があります。ユーザーごとに複数のデバイスがあり、デバイス特定のポリシーを適用したい場合は、各デバイスを異なるメールアドレスにマッピングする必要があります。

現在、認証トークンはAPIを通じてのみ生成できます。このインタラクティブなPythonスクリプトを実行すると、セットアップ手順が自動化されます。または、以下の手順に従ってください。

1. アカウントのサービストークンを作成

Terminal window
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/access/service_tokens" \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "Content-Type: application/json" \
--data '{"name":"ACME Corporation service token"}'

サービストークンのclient_idclient_secret、およびidを保存します。

例の応答

{
"result": {
"client_id": "88bf3b6d86161464f6509f7219099e57.access",
"client_secret": "bdd31cbc4dec990953e39163fbbb194c93313ca9f0a6e420346af9d326b1d2a5",
"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"
},
"success": true,
"errors": [],
"messages": []
}

2. サービストークンのDoH機能を有効にする

Terminal window
curl --request PUT \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/access/organizations/doh/{service_token_id}" \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>"

access.api.error.service_token_not_foundエラーが表示された場合は、{service_token_id}idの値であり、client_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": []
}

3. ユーザーを作成

新しいユーザーを作成し、オプションでグループに追加します。

Terminal window
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/access/users" \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "Content-Type: application/json" \
--data '{
"name": "John Doe",
"email": "jdoe@acme.com",
"custom": {"groups":[{"id": "02fk6b3p3majl10", "email": "finance@acme.com", "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": "jdoe@acme.com",
"custom": {
"groups": [
{
"email": "finance@acme.com",
"id": "02fk6b3p3majl10",
"name": "Finance"
}
]
}
},
"success": true,
"errors": [],
"messages": []
}

4. ユーザーのためのDoHトークンを生成

ユーザーのためにDoHトークンをリクエストし、サービストークンを使用してチームドメインに認証します。

Terminal window
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トークンを生成する代わりに、トークンのリフレッシュフローを設定することをお勧めします。

例の応答

{"token":"y2khbGciOiJSUzI1NiIsImtpZCI6ImJlZjVkYjg4ZTEwMjk3ZDEwNzhkMmEyYjE0MjMxZTljYTQwMjQ2NjAwOTQzNmJhOTQwOGJkODY3ZmI4OWFiOGQifQ.eyJ0eXBlIjoiZG9oIiwiYXVkIjoiY2xvdWRmbGFyZS1nYXRld2F5LmNvbSIsImlhdCI6MTY1NDc1MTg3NSwiZXhwIjoxNjU0ODM4Mjc1LCJhY2NvdW50LWlkIjoiMTA4MDM0OGIyZGYzYmQwN2QxZmI1MjM3Y2Q1ZDU5M2EiLCJ1c2VyLWlkIjoiNTRkNDI1ZGUtN2E3OC00MTg2LTk5NzUtZDQzYzg4ZWU3ODk5In0.I5p4WsH2dPhQ8vwy84zF05PsoBHCsUSXAaMpNhEH36oFZ3tXcs9ksLz7OzpZ_x3HxUfO3n57LlpAF1VehaBt2i94XCkvSgtHpYcwd_qZydLp-BGtcyfU1LbdXQC3m6zxKcIWu5VySi8I-J25UYlpyJhYgZ4DQUZIpqbSSt6WcVRKvA7OBa7xjkTux4OcqWAViO_ZS-GLwl-fqhvolmiwk37seBD3YuV1zG06VeWXfrMkZ5MbhooHD1DZDBHOZpTtmN8MbeKeI4tlY1mb_O3-jE-um6F9Hrl4NQm89MKFzsum-_Rywi5m4PTSlDza7fjdJs7RzFgJd3VWgzG-jgyQKw"}

5. 認証されたDoHクエリを送信

https://<ACCOUNT_ID>.cloudflare-gateway.com/dns-queryのリゾルバーにDoHクエリを送信し、ユーザーのDoHトークンをCF-Authorizationヘッダーに含めることを確認します。

Terminal window
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ポリシーを構築します。