Cloudflare Gateway とは
Cloudflare Gateway | セキュアなWebゲートウェイ & DNSフィルタリング | Cloudflare
Cloudflare の DNS を利用して名前解決するだけでなく、 DNS / HTTP ポリシーを設定することで DNS フィルタリングやセキュア Web ゲートウェイとして機能するサービスです。
どのように機能するか
アカウント内に「Location」を設定することができますが、DNS クエリが
- DNS over HTTPS (DoH) / DNS over TLS (DoT) の場合、「Location」ごとに払い出されるユニークなホスト名
- Normal DNS over IPv4 の場合、自分で登録したユニークな送信元 IPv4 アドレス
- 自宅用回線の通信で用いられるグローバル IP は共有されているので、どなたかが登録していると登録できない場合があります
- Normal DNS over IPv6 の場合、「Location」ごとに払い出されるユニークな宛先 IPv6 アドレス
でどのアカウントのポリシーが適用されるかが判断されます。
テスト設定
以下のような簡単な設定で DNS クエリがブロックされることを確認します。
以下の例では「youtube.com」と付くものはブロックします。(正規表現は regex101 などのサイトで確認できます。)
DNS over IPv4
以下のコマンドで登録 IP と、DNS クエリのソース IP が確認できます。
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
% curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/locations" \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
-H "Content-Type: application/json" | jq -r '.result[] | select (.name == "Nuro") | .networks[0].network'
YOUR_IPV4/32
% dig -4 @172.64.36.1 whoami.cloudflare ch txt +short | sed "s/\"//g"
YOUR_IPV4
「172.64.36.1」「172.64.36.2」への問い合わせでブロックされることが確認できます。
% dig -4 @172.64.36.1 www.youtube.com A +short
0.0.0.0
DNS over IPv6
以下のコマンドで自アカウント専用の宛先 IPv6 が確認できます。
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
MY_IPV6=$(curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/locations" \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
-H "Content-Type: application/json" | jq -r '.result[] | select (.name == "Nuro") | .ip')
echo $MY_IPV6
自アカウント専用の宛先 IPv6 への問い合わせでブロックされることが確認できます。
% dig -6 @$MY_IPV6 www.youtube.com A +short
0.0.0.0
DNS over HTTPS (DoH)
以下のコマンドで自アカウント専用のユニークホスト名が確認できます。
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
MY_DOH_SUBDOMAIN=$(curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/locations" \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
-H "Content-Type: application/json" | jq -r '.result[] | select (.name == "Nuro") | .doh_subdomain')
echo $MY_DOH_SUBDOMAIN
自アカウント専用のユニークホスト名への問い合わせでブロックされることが確認できます。
% curl -s -H 'accept: application/dns-json' \
'https://'$MY_DOH_SUBDOMAIN'.cloudflare-gateway.com/dns-query?name=www.youtube.com&type=A' | jq
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": false,
"CD": false,
"Question": [
{
"name": "www.youtube.com",
"type": 1
}
],
"Answer": [
{
"name": "www.youtube.com",
"type": 1,
"TTL": 60,
"data": "0.0.0.0"
}
]
}
DNS over TLS (DoT)
以下のコマンドで自アカウント専用のユニークホスト名が確認できます。
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
MY_DOH_SUBDOMAIN=$(curl -s -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/locations" \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
-H "Content-Type: application/json" | jq -r '.result[] | select (.name == "Nuro") | .doh_subdomain')
# echo $MY_DOH_SUBDOMAIN
自アカウント専用のユニークホスト名への問い合わせでブロックされることが確認できます。
% kdig @$MY_DOH_SUBDOMAIN.cloudflare-gateway.com +tls-ca +tls-host=cloudflare-gateway.com +tls-sni=$MY_DOH_SUBDOMAIN.cloudflare-gateway.com www.youtube.com A +short
0.0.0.0
参考
- Cloudflare に対する DNS コマンドメモ - Qiita
- https://api.cloudflare.com/#teams-locations-list-teams-locations
参考:Block Page 有効時
こちらの Block Page を有効にすると、0.0.0.0
ではなく 162.159.36.12
のような Block Page の IP アドレスが応答されます。
% dig @172.64.36.1 example.net A +short
162.159.36.12