移動解析HTTPDNS通過RFC 8484指定的經過TLS加密的HTTP串連提供DNS解析,適用於瀏覽器等接入情境。
擷取DoT/DoH接入地址
在接入配置頁簽下選擇方式三:DoT/DoH接入;
目前DoT/DoH支援2種接入方式:短地址接入方式、自訂加密地址接入方式;
重要為了更高的安全性,建議您啟用加密地址方式。
單擊新增加密地址,在彈框中輸入自訂部分,即可擷取到自訂接入地址。

最後將加密地址的啟用狀態開關開啟。
警告若您決定棄用DoH方式接入移動解析HTTPDNS,可以將啟用狀態設定為關閉。
請謹慎操作停服功能。停服後將降級為免費使用者,即停止計費、停止控制台報表展示和其他功能操作。您的移動解析HTTPDNS服務也將不再有SLA保證,且會被限速和拒絕解析應答。
停服之後支援重啟服務。重啟後,服務恢複原來的配置,並重新開始計費。
普通使用者使用DoH服務
假設使用者的DoH接入地址配置為:https://5***4-2h*****ynx3tls.alidns.com/dns-query。
本文以Chrome為例,介紹如何配置DoH。
開啟Chrome瀏覽器,從 Chrome 功能表列中點擊 【設定】選項。

在搜尋方塊中輸入“DNS”,在下方的檢索結果中,點擊【安全】右側的展開箭頭。

頁面下拉到最下方,在【進階】選項中,開通“使用安全DNS”功能,並在【使用】-【自訂】框中輸入
https://5***4-2h*****ynx3tls.alidns.com/dns-query即可完成配置。
開發人員使用DoH服務
對開發人員,需要按照RFC8484中的標準要求產生DoH的 HTTP request請求發送給DoH服務地址。
DoH可以同時用GET和POST兩種方法。當使用POST方法,DNS查詢訊息被包含在HTTP 請求的message body中。當使用GET方法,唯一的變數"dns"被賦值為base64url編碼的DNS請求內容。
開發人員案例 (附python和Golang程式碼範例)
例如用GET方式發起DoH查詢,先將DNS二進位報文經過base64url的處理得到DNS參數,產生完整的DoH HTTP URL,再發起HTTP請求,獲得DNS應答報文。
下面是一段python的代碼,示範開發人員如何使用DoH查詢網域名稱
alibaba.com。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"}]下面是一段Golang的代碼,示範開發人員如何使用DoH查詢網域名稱
alibaba.com。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