全部產品
Search
文件中心

Alibaba Cloud DNS:DNS over HTTPs (DoH)

更新時間:Aug 15, 2025

移動解析HTTPDNS通過RFC 8484指定的經過TLS加密的HTTP串連提供DNS解析,適用於瀏覽器等接入情境。

擷取DoT/DoH接入地址

  1. 訪問Alibaba Cloud DNS-移動解析HTTPDNS

  2. 接入配置頁簽下選擇方式三:DoT/DoH接入

  3. 目前DoT/DoH支援2種接入方式:短地址接入方式、自訂加密地址接入方式;

    重要

    為了更高的安全性,建議您啟用加密地址方式。

  4. 單擊新增加密地址,在彈框中輸入自訂部分,即可擷取到自訂接入地址。image

  5. 最後將加密地址的啟用狀態開關開啟。

    警告
    • 若您決定棄用DoH方式接入移動解析HTTPDNS,可以將啟用狀態設定為關閉。

    • 請謹慎操作停服功能。停服後將降級為免費使用者,即停止計費、停止控制台報表展示和其他功能操作。您的移動解析HTTPDNS服務也將不再有SLA保證,且會被限速和拒絕解析應答。

    • 停服之後支援重啟服務。重啟後,服務恢複原來的配置,並重新開始計費。

普通使用者使用DoH服務

假設使用者的DoH接入地址配置為:https://5***4-2h*****ynx3tls.alidns.com/dns-query

本文以Chrome為例,介紹如何配置DoH。

  1. 開啟Chrome瀏覽器,從 Chrome 功能表列中點擊 【設定】選項。

    1599813826622-5e23172a-3595-42ee-b1be-8359ad781892

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

    1599813913378-46376364-4ff3-40d1-8da0-f0909f4ba1c6

  3. 頁面下拉到最下方,在【進階】選項中,開通“使用安全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