全部产品
Search
文档中心

Alibaba Cloud DNS:DNS over HTTPS (DoH)

更新时间:Nov 10, 2025

HTTPDNS menyediakan resolusi DNS melalui koneksi HTTP yang dienkripsi TLS sesuai spesifikasi RFC 8484, cocok untuk skenario akses berbasis browser.

Memperoleh Titik Akhir DoT/DoH

  1. Buka Alibaba Cloud DNS - HTTPDNS.

  2. Pada tab Integration Configuration, pilih Method 3: DoT/DoH Integration.

  3. Saat ini, DoT/DoH mendukung dua metode integrasi: alamat pendek dan alamat terenkripsi kustom.

    Penting

    Untuk keamanan yang lebih baik, kami sarankan Anda Enable Encrypted Address.

  4. Klik Add Encrypted Address, masukkan bagian kustom dalam kotak dialog untuk mendapatkan alamat integrasi kustom.image

  5. Terakhir, aktifkan sakelar status untuk alamat terenkripsi.

    Peringatan
    • Jika Anda memutuskan untuk berhenti menggunakan DoH untuk mengakses HTTPDNS, Anda dapat mematikan sakelar tersebut.

    • Gunakan fitur penangguhan layanan dengan hati-hati. Jika Anda menangguhkan layanan, akun Anda akan diturunkan menjadi pengguna gratis. Artinya, penagihan akan berhenti, laporan konsol tidak lagi ditampilkan, dan fitur-fitur lain dinonaktifkan. Layanan HTTPDNS Anda tidak lagi dijamin oleh Perjanjian Tingkat Layanan (SLA). Layanan juga akan dikenai pembatasan laju dan penolakan kueri DNS.

    • Layanan dapat diaktifkan kembali setelah penangguhan. Setelah diaktifkan kembali, layanan akan mengembalikan konfigurasi aslinya dan penagihan akan dilanjutkan.

Penggunaan layanan DoH untuk pengguna reguler

Misalkan titik akhir DoH pengguna dikonfigurasi sebagai: https://5***4-2h*****ynx3tls.alidns.com/dns-query.

Topik ini menggunakan Chrome sebagai contoh untuk menunjukkan cara mengonfigurasi DoH.

  1. Buka browser Chrome dan klik Pengaturan dari bilah menu Chrome.

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

  2. Masukkan "DNS" di kotak pencarian. Di hasil pencarian di bawah, klik panah ekspansi di sebelah kanan [Keamanan].

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

  3. Gulir ke bawah hingga ke bagian bawah halaman. Di opsi [Lanjutan], aktifkan fitur "Gunakan DNS Aman", dan masukkan https://5***4-2h*****ynx3tls.alidns.com/dns-query di kotak [Gunakan]-[Kustom] untuk menyelesaikan konfigurasi.

Penggunaan layanan DoH untuk pengembang

Untuk pengembang, Anda perlu membuat permintaan HTTP DoH sesuai dengan persyaratan standar di RFC8484 dan mengirimkannya ke titik akhir DoH.

DoH dapat menggunakan metode GET dan POST. Saat menggunakan metode POST, pesan kueri DNS disertakan dalam badan pesan permintaan HTTP. Saat menggunakan metode GET, variabel tunggal "dns" diberi nilai konten permintaan DNS yang dienkripsi base64url.

Contoh pengembang (dengan sampel kode Python dan Golang)

Sebagai contoh, untuk memulai kueri DoH menggunakan metode GET, pertama-tama proses pesan biner DNS melalui base64url untuk mendapatkan parameter DNS, buat URL HTTP DoH lengkap, lalu mulai permintaan HTTP untuk mendapatkan pesan respons DNS.

  • Di bawah ini adalah sampel kode Python yang menunjukkan bagaimana pengembang dapat menggunakan DoH untuk menanyakan domain 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))

    Hasil contoh:

    $ python test_doh.py
    [{"Answer": "106.11.XXX.XXX", "Query": "alibaba.com.", "RR": "A", "TTL": "133"}]
  • Di bawah ini adalah sampel kode Golang yang menunjukkan bagaimana pengembang dapat menggunakan DoH untuk menanyakan domain 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())
    }

    Hasil contoh:

    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