コンテンツにスキップ

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_id、client_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ポリシーを構築します。