Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud DNS:DNS over HTTPS (DoH)

Son Güncelleme:Oct 04, 2026

Alibaba Cloud HTTPDNS hizmeti, TLS ile şifrelenmiş bir HTTPS bağlantısı üzerinden RFC 8484 uyumlu DNS çözümlemesi sunar. Bu özellik, tarayıcılar gibi kullanım senaryoları için idealdir.

DoT/DoH uç noktasını alma

  1. Alibaba Cloud DNS - HTTPDNS adresine gidin.

  2. Access Configuration sekmesinde Method 3: DoT/DoH-based access seçeneğini seçin.

  3. DoT/DoH, kısa adres ve özel şifreli adres olmak üzere iki erişim yöntemini destekler.

    Önemli

    Daha yüksek güvenlik için şifreli adres kullanmanızı öneririz.

  4. Add an encrypted URL seçeneğine tıklayın. Açılan iletişim kutusunda benzersiz bir uç nokta oluşturmak için özel bir dize girin.

  5. Şifreli uç noktayı etkinleştirmek için anahtarı açın.

    Uyarı
    • HTTPDNS hizmetine erişmek için DoH kullanımını durdurmak isterseniz anahtarı kapatın.

    • Hizmet askıya alma özelliğini dikkatli kullanın. Hizmet askıya alındığında hesabınız ücretsiz kullanıcı statüsüne düşer. Faturalandırma durur; konsol raporları ve diğer özellikler kullanılamaz hale gelir. HTTPDNS hizmetiniz artık bir SLA kapsamına girmez; sorgu kısıtlamaları ve reddetme işlemleri uygulanabilir.

    • Askıya alınmış bir hizmeti yeniden başlatırsanız önceki yapılandırmanız geri yüklenir ve faturalandırma devam eder.

Son kullanıcılar için DoH

DoH uç noktanızın https://5***4-2h*****ynx3tls.alidns.com/dns-query olduğunu varsayalım.

Bu bölümde Chrome tarayıcısında DoH'nin nasıl yapılandırılacağı gösterilmektedir.

  1. Chrome'u açın ve Settings sayfasına gidin.

  2. Arama kutusuna "DNS" yazın ve arama sonuçlarında Security öğesinin yanındaki genişletme okuna tıklayın.

  3. Sayfanın en altına inin. Advanced bölümünü bulun ve Use secure DNS seçeneğini etkinleştirin. Ardından Custom kutusuna https://5***4-2h*****ynx3tls.alidns.com/dns-query adresini girin.

Geliştiriciler için DoH hizmeti

Geliştiriciler, RFC 8484 standartlarına uygun bir DoH HTTP isteği oluşturup bunu DoH hizmet adresine göndermelidir.

DoH hem GET hem de POST yöntemlerini destekler. POST yöntemi kullanıldığında DNS sorgu mesajı HTTP isteğinin gövdesinde yer alır. GET yöntemi kullanıldığında ise "dns" adlı tek bir değişkene base64url kodlu DNS isteği içeriği atanır.

Kod örnekleri (Python ve Golang)

GET yöntemini kullanarak bir DoH sorgusu başlatmak için ikili DNS mesajı önce base64url ile kodlanarak DNS sorgu parametresi elde edilir. Bu parametre kullanılarak tam DoH HTTP URL'si oluşturulur ve ardından DNS yanıt mesajını almak üzere bir HTTP isteği gönderilir.

  • Aşağıdaki Python kodu, geliştiricilerin alibaba.com alan adını sorgulamak için DoH'yi nasıl kullanabileceğini gösterir.

    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))

    Çıktı aşağıdaki gibidir:

    $ python test_doh.py
    [{"Answer": "106.11.XXX.XXX", "Query": "alibaba.com.", "RR": "A", "TTL": "133"}]
  • Aşağıdaki Go kodu, geliştiricilerin alibaba.com alan adını sorgulamak için DoH'yi nasıl kullanabileceğini gösterir.

    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())
    }

    Çıktı aşağıdaki gibidir:

    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