DNS-over-HTTPS (DoH) JSON API は、TLS API と非 TLS API の両方の URL エンドポイントを提供します。
エンドポイント
https://223.5.5.5/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
http://223.5.5.5/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
https://223.6.6.6/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
http://223.6.6.6/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
リクエストパラメーター
リクエストメソッド: GET。 リクエストパラメーターは以下のとおりです。
パラメーター | タイプ | 説明 | 例 | 使用方法とデフォルト値 |
name | 文字列 | リクエスト内のドメイン名 | name=www.taobao.com | 必須、デフォルト値なし |
type | 文字列 | type=A | オプション、デフォルト値なし | |
edns_client_subnet | IP | ECS IP | edns_client_subnet=1.2.XX.XX/24 | DNS プロキシ用、通常のクライアントには適用されません |
short | boolean | short=true または short=1 | オプション、デフォルトでは無効 | |
uid | 文字列 | uid はコンソール内のアカウント ID であり、Alibaba Cloud アカウント ID ではありません | uid=9**9 | 必須、デフォルト値なし |
ak | 文字列 | ak はコンソール内の AccessKey ID です | ak=test | 必須、デフォルト値なし |
ts | 文字列 | タイムスタンプ | 符号なし整数、1970 年 1 月 1 日からの経過秒数 | ts=1614927253 必須、デフォルト値なし |
key | 文字列 | 認証用ハッシュ文字列 | AccessKey Secret を使用して生成された署名 | key=fb321ab77496a89c04de0a1e979bfee4b4678a0dcd57f4da1da83****490f64b 必須、デフォルト値なし |
did | 文字列 | デバイス ID | did=afck0100 | オプション |
edns_client_subnet パラメーターについて
edns_client_subnet パラメーターは、DNS ECS 機能 (RFC7871) をサポートしています。これは、より正確な DNS 名前解決とトラフィックの再ルーティングのために、ユーザーのサブネット情報を権威 DNS サーバーに渡します。長いサブネットマスクはより正確なアドレス情報を提供しますが、短いマスクはより良いユーザー プライバシーを提供します。サブネットマスクの長さは「/24」を推奨します。
このパラメーターは、DNS プロキシが DoH JSON API を使用するシナリオ向けに設計されています。 これらのシナリオでは、ユーザーは DNS クエリを DNS プロキシに送信します。 次に、プロキシはこのパラメーターを使用してユーザーのサブネット情報を HTTPDNS に送信し、HTTPDNS はその情報を権威サーバーに渡します。
たとえば、withsubnet=1.2.XX.XX/24 を使用すると、権威サーバーはユーザーの DNS パスを選択するために 1.2.XX.XX/24 アドレスプレフィックス情報を受信します。
type パラメーターでサポートされているタイプについて
レコードタイプ | ID | 備考 |
A | 1 | IPv4 アドレス |
NS | 2 | NS レコード |
CNAME | 5 | ドメイン CNAME レコード |
SOA | 6 | ZONE SOA レコード |
TXT | 16 | TXT レコード |
AAAA | 28 | IPv6 アドレス |
PTR | 12 | PTR レコード、逆 DNS ルックアップに使用 |
MX | 15 | メール交換レコード |
SRV | 33 | SRV レコードは、特定のサービスのホストとポートを指定します |
CAA | 257 | CAA レコードは、HTTPS 証明書の誤発行を防ぐためのセキュリティ対策です |
認証パラメーター key を生成するためのアルゴリズム
key = sha256(AccountID+AccessKey Secret+ts+qname+AccessKey ID)
// 注: プラス記号 (+) は文字列の連結を表し、実際の「+」文字ではありません。
この数式では、アカウント ID はアカウント ID の文字列値です。 たとえば、アカウント ID が 9**9 の場合、文字列は "9**9" です。 ts は、現在のリクエストのタイムスタンプです。 qname は、リクエストされたドメイン名です。 AccessKey ID と AccessKey Secret の生成方法の詳細については、「キーの作成」をご参照ください。
key 生成例
仮定:
アカウント ID=5***4
AccessKey Secret=12345**
qname=aliyun.com
ts=1614927253
AccessKey ID=5***4_2155917885567****
key=sha256(5***412345**1614927253aliyun.com5***4_2155917885567****)
生成された key は次のとおりです。
key=*****ab77496a89c04de0a1e979bfee4b4678a0dcd57f4da1da83***a490f64b
リクエスト例
https://223.5.5.5/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
レスポンス例
{
"Status":0,
"TC":false,
"RD":true,
"RA":true,
"AD":false,
"CD":false,
"Question":{ // リクエストセクション
"name":"www.taobao.com.",
"type":1
},
"Answer":[ // レスポンスセクション
{
"name":"www.taobao.com.",
"TTL":45,
"type":5,
"data":"www.taobao.com.danuoyi.tbcache.com."
},
{
"name":"www.taobao.com.danuoyi.tbcache.com.",
"TTL":45,
"type":1,
"data":"47.246.XX.XX"
},
{
"name":"www.taobao.com.danuoyi.tbcache.com.",
"TTL":45,
"type":1,
"data":"47.246.XX.XX"
}
]
//"Authority" Authority セクション。データが存在する場合、フォーマットは Answer フィールドと同じです
//"Additional" Additional セクション。データが存在する場合、フォーマットは Answer フィールドと同じです
// オプション "edns_client_subnet":"1.2.XX.XX/24"
}レスポンス値の説明
フィールド名 | 説明 | 例 |
Status | DNS メッセージヘッダーの rcode | 0: noerror 1: formerr 2: servfail 3: nxdomain |
TC | DNS メッセージヘッダーの TC。切り捨てが可能かどうかを示します | 通常は false |
RD | DNS メッセージヘッダーの RD。再帰が望ましいかどうかを示します | 通常は true |
RA | DNS メッセージヘッダーの RA。再帰が可能かどうかを示します | 通常は true |
AD/CD | DNS メッセージヘッダーの対応するフラグ | 通常は false |
Question | DNS リクエストフィールド | なし |
Answer | DNS レスポンスフィールド | なし |
name | ドメイン名。Question と Answer の両方に含まれます | www.taobao.com |
type | リクエストタイプ。上記の「type パラメーターでサポートされているタイプについて」を参照してください | 例: A、AAAA、TXT、CNAME、NS、SOA |
TTL | サーバー上のレスポンス値の最大キャッシュ時間 (秒) | 3600 |
data | レスポンス結果。type に関連しています | なし |
短縮モードのレスポンス例:
www.taobao.com を例として使用すると、A レコードをリクエストする場合、リクエスト URL は次のようになります。
https://223.5.5.5/resolve?name=domain&type=A&uid=AccountID&short=1&ak=AccessKey ID&key=****&ts=timestampレスポンスは次のようになります。
["221.229.XX.XX","61.155.XX.XX","221.229.XX.XX"]CNAME レコードをリクエストする場合、URL は次のようになります。
https://223.5.5.5/resolve?name=domain&type=CNAME&uid=AccountID&short=1&ak=AccessKey ID&key=****&ts=timestampレスポンスは次のようになります。
["www.taobao.com.danuoyi.tbcache.com."]失敗したレスポンス
リクエストが失敗した場合、HTTP レスポンス ステータスコードは 4xx/5xx で、デバッグまたは問題報告のために特定のエラーコードが返されます。結果は JSON 形式で表されます。
失敗レスポンスの例:
{
"code":"UrlParameterError"
}エラーコードリスト
エラーコード | HTTP ステータスコード | 説明 |
UrlParameterError | 400 | リクエストパラメーターの形式エラー |
NoPermission | 401 | 認証に失敗しました |
UrlPathError | 404 | URL エラー |
NoResponse | 500 | リクエストタイムアウト、レスポンスなし |
DoH JSON API を使用して HTTPDNS にアクセスし、名前解決を行う方法の詳細については、「DoH JSON API のベストプラクティス」をご参照ください。
SDK には署名コードが含まれており、手動で実装する必要がないため、アクセスには SDK を使用することをお勧めします。 SDK アクセスの詳細については、「Android SDK 開発ガイド」および「iOS SDK 開発ガイド」をご参照ください。