HTTPDNS は、RFC 8484 で指定されているように、TLS で暗号化された HTTP 接続を介して DNS 名前解決を提供します。これは、ブラウザベースのアクセスシナリオに適しています。
DoT/DoH エンドポイントの取得
Alibaba Cloud DNS - HTTPDNS に移動します。
[統合設定] タブで、[方法 3: DoT/DoH 統合] を選択します。
現在、DoT/DoH は、短縮アドレス統合とカスタム暗号化アドレス統合の 2 つの統合方法をサポートしています。
重要セキュリティ強化のため、[暗号化アドレスを有効にする] 方法をお勧めします。
[暗号化アドレスを追加] をクリックし、ダイアログボックスにカスタム部分を入力して、カスタム統合アドレスを取得します。

最後に、暗号化アドレスの有効ステータススイッチをオンにします。
警告HTTPDNS へのアクセスに DoH の使用を停止する場合は、スイッチをオフにできます。
サービスの一時停止機能は注意して使用してください。サービスを一時停止すると、アカウントは無料ユーザーにスペックダウンされます。これにより、課金が停止し、コンソールレポートが表示されなくなり、その他の機能が無効になります。お客様の HTTPDNS サービスは、サービスレベルアグリーメント (SLA) によって保証されなくなります。また、サービスはスロットリングと DNS クエリの拒否の対象となります。
サービスは停止後に再開できます。再開後、サービスは元の構成に戻り、課金が再開されます。
正規ユーザー DoH サービスの使用
ユーザーの DoH エンドポイントが https://5***4-2h*****ynx3tls.alidns.com/dns-query として構成されていると仮定します。
この Topic では、Chrome を例として、DoH を構成する方法を示します。
Chrome ブラウザを開き、Chrome メニューバーから [設定] をクリックします。

検索ボックスに「DNS」と入力します。下の検索結果で、[セキュリティ] の右にある展開矢印をクリックします。

ページの一番下までスクロールします。 [詳細設定] オプションで、「セキュア DNS を使用する」機能を有効にし、[使用する]-[カスタム] ボックスに
https://5***4-2h*****ynx3tls.alidns.com/dns-queryと入力して構成を完了します。
開発者 DoH サービスの使用
開発者の場合は、RFC8484 の標準要件に従って DoH HTTP リクエストを生成し、DoH エンドポイントに送信する必要があります。
DoH は GET メソッドと POST メソッドの両方を使用できます。POST メソッドを使用する場合、DNS クエリメッセージは HTTP リクエストメッセージ本文に含まれます。GET メソッドを使用する場合、唯一の変数「dns」には、base64url エンコードされた DNS リクエストコンテンツが割り当てられます。
開発者の例(Python および Golang コードサンプル付き)
たとえば、GET メソッドを使用して DoH クエリを開始するには、まず DNS バイナリメッセージを base64url で処理して DNS パラメータを取得し、完全な DoH HTTP URL を生成してから、HTTP リクエストを開始して DNS 応答メッセージを取得します。
以下は、開発者が DoH を使用してドメイン
alibaba.comをクエリする方法を示す Python コードサンプルです。import dns.message import requests import base64 import json doh_url = "https://5***4-2h*****ynx3tls.alidns.com/dns-query" domain = "alibaba.com" rr = "A" result = [] message = dns.message.make_query(domain, rr) dns_req = base64.urlsafe_b64encode(message.to_wire()).decode("UTF8").rstrip("=") r = requests.get(doh_url + "?dns=" + dns_req, headers={"Content-type": "application/dns-message"}) for answer in dns.message.from_wire(r.content).answer: dns = answer.to_text().split() result.append({"Query": dns[0], "TTL": dns[1], "RR": dns[3], "Answer": dns[4]}) print(json.dumps(result))サンプル結果:
$ python test_doh.py [{"Answer": "106.11.XXX.XXX", "Query": "alibaba.com.", "RR": "A", "TTL": "133"}]以下は、開発者が DoH を使用してドメイン
alibaba.comをクエリする方法を示す Golang コードサンプルです。package main import ( "encoding/base64" "fmt" "github.com/miekg/dns" "io/ioutil" "net/http" "os" ) func main() { query := dns.Msg{} query.SetQuestion("www.taobao.com.", dns.TypeA) msg, _ := query.Pack() b64 := base64.RawURLEncoding.EncodeToString(msg) resp, err := http.Get("https://5***4-2h*****ynx3tls.alidns.com/dns-query?dns=" + b64) if err != nil { fmt.Printf("Send query error, err:%v\n", err) os.Exit(1) } defer resp.Body.Close() bodyBytes, _ := ioutil.ReadAll(resp.Body) response := dns.Msg{} response.Unpack(bodyBytes) fmt.Printf("Dns answer is :%v\n", response.String()) }サンプル結果:
Sent Get query https://dns.alidns.com/dns-query?dns=xzEBAAABAAAAAAAAA3d3dwZ0YW9iYW8DY29tAAABAAE Dns answer is :;; opcode: QUERY, status: NOERROR, id: 5***3 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.taobao.com. IN A ;; ANSWER SECTION: www.taobao.com. 15 IN CNAME www.taobao.com.danuoyi.tbcache.com. www.taobao.com.danuoyi.tbcache.com. 15 IN A 221.229.XXX.XXX www.taobao.com.danuoyi.tbcache.com. 15 IN A 221.229.XXX.XXX ;; ADDITIONAL SECTION: ;; OPT PSEUDOSECTION: ; EDNS: version 0; flags: ; udp: 4096