Önceden web tabanlı uygulamalar, tarayıcı uzantılarının DANE ve DNS-SD hizmet keşfi gibi gelişmiş DNS özelliklerini kullanması ve hatta MX kayıtları gibi IP adresleri dışında her şeyi çözümlemesi gerektiriyordu. SSHFP kayıtları gibi DNSSEC'ye bağlı özellikleri kullanmak için bu tür uzantıların DNSSEC'yi kendilerinin doğrulaması gerekir. Tarayıcı veya işletim sistemi bunu doğrulamayabilir.
Google Açık DNS, 2016'dan beri DoH için DNSSEC doğrulamasına sahip, tarayıcı veya işletim sistemi yapılandırması ya da uzantısı gerektirmeyen, web dostu bir API sunar. Basit GET sorgu parametreleri ve JSON yanıtları, istemcilerin yaygın web API'lerini kullanarak sonuçları ayrıştırmasına olanak tanır ve alan adları için işaretçi sıkıştırma gibi karmaşık DNS mesaj biçimi ayrıntılarından kaçınmanızı sağlar.
HTTP üstbilgileri, yönlendirme işleme, gizlilikle ilgili en iyi uygulamalar ve HTTP durum kodları gibi genel DoH hakkında bilgi edinmek için genel DoH belgeleri sayfasına bakın.
Güvenli Aktarımlar sayfasında DoH için curl
komut satırı örneğinin yanı sıra TLS desteği ve DNS kesme gibi DoH ve TLS (DoT) üzerinden DNS'de yaygın olan bilgiler bulunur.
JSON API Spesifikasyonu
Tüm API çağrıları HTTP GET istekleridir. Yinelenen parametreler olması durumunda yalnızca ilk değer kullanılır.
Desteklenen parametreler
- ad
string, gerekli
Zorunlu tek parametre. RFC 4343 ters eğik çizgi çıkışları kabul edilir.
- Uzunluk (ters eğik çizgi çıkışları değiştirildikten sonra) 1 ile 253 arasında olmalıdır (varsa isteğe bağlı son nokta göz ardı edilir).
- Tüm etiketler (noktalar arasındaki adın bölümleri) 1 ila 63 bayt uzunluğunda olmalıdır.
.example.com
,example..com
veya boş dize gibi geçersiz adlar 400 Hatalı İstek alır.- ASCII olmayan karakterler punycoded olmalıdır (
ελ
değilxn--qxam
).
- tür
dize, varsayılan:
1
RR türü, [1, 65535] içinde bir sayı veya standart dize (büyük/küçük harfe duyarlı değil,
A
veyaaaaa
gibi) olarak temsil edilebilir. "ANY" sorguları için255
kullanabilirsiniz ancak bunun hem A hem de AAAA veya MX kayıtlarına yönelik sorgu göndermenin yerini almadığını unutmayın. Yetkili alan adı sunucularının bu tür sorgular için tüm kayıtları döndürmesi gerekmez. Bazıları yanıt vermezken bazıları (cloudflare.com gibi) yalnızca HINFO döndürür.- cd
boole, varsayılan:
false
CD (Devre Dışı İşaretleniyor) işareti. DNSSEC doğrulamasını devre dışı bırakmak için
cd=1
veyacd=true
kullanın. DNSSEC doğrulamasını etkinleştirmek içincd=0
veyacd=false
parametresini kullanın ya dacd
parametresi kullanmayın.- adt
dize, varsayılan: boş
İstenen içerik türü seçeneği. Yanıt HTTP gövdesinde JSON metni yerine ikili DNS mesajı almak için
ct=application/dns-message
politikasını kullanın. JSON metnini açıkça istemek içinct=application/x-javascript
kullanın. Diğer içerik türü değerleri yoksayılır ve varsayılan JSON içeriği döndürülür.- do
boole, varsayılan:
false
DO (DNSSEC OK) işareti. DNSSEC kayıtlarını (RRSIG, NSEC, NSEC3) eklemek için
do=1
veyado=true
kullanın; DNSSEC kayıtlarını atlamak içindo=0
veyado=false
parametresini kullanın ya dado
parametresi kullanmayın.Diğer uygulamalar her zaman bunları içerebileceği için uygulamalar JSON yanıtlarındaki DNSSEC kayıtlarını her zaman işlemeli (ve gerekirse yoksaymalıdır). Ayrıca, JSON yanıtları için varsayılan davranışı ileride değiştirebiliriz. (İkili DNS mesajı yanıtları her zaman DO işaretinin değerine uyar.)
- edns_client_subnet
dize, varsayılan: boş
edns0-client-subnet seçeneği. Biçim, alt ağ maskesi olan bir IP adresidir. Örnekler:
1.2.3.4/24
,2001:700:300::/48
.Gizlilikle ilgili endişeler nedeniyle DNS-over-HTTPS kullanıyorsanız ve IP adresinizin hiçbir bölümünün, coğrafi konum doğruluğu için yetkili ad sunucularına gönderilmesini istemiyorsanız
edns_client_subnet=0.0.0.0/0
kullanın. Google Açık DNS, normalde yaklaşık ağ bilgilerini gönderir (genellikle IPv4 adresinizin son kısmını sıfırlar).- random_padding
dize, yoksayıldı
Bu parametrenin değeri yoksayılır. Örnek:
XmkMw~o_mgP2pf.gpw-Oi5dK
.HTTPS GET isteklerinin paket boyutlarını kullanan olası yan kanal gizlilik saldırılarından endişe duyan API istemcileri, istekleri rastgele verilerle doldurarak tüm istekleri tam olarak aynı boyutta yapmak için bunu kullanabilir. URL'nin yanlış yorumlanmasını önlemek için dolgu karakterlerini ayrılmamış URL karakterleriyle sınırlandırın: büyük ve küçük harfler, rakamlar, kısa çizgi, nokta, alt çizgi ve yaklaşık işareti.
JSON'da DNS yanıtı
Başarılı bir yanıt (buraya eklenen yorumlar gerçek yanıtlarda yer almaz):
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "apple.com.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Answer":
[
{
"name": "apple.com.", // Always matches name in the Question section
"type": 1, // A - Standard DNS RR type
"TTL": 3599, // Record's time-to-live in seconds
"data": "17.178.96.59" // Data for A - IP address as text
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.172.224.47"
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.142.160.59"
}
],
"edns_client_subnet": "12.34.56.78/0" // IP address / scope prefix-length
}
"Kapsam önek uzunluğu" ve önbelleğe almayı nasıl etkilediği hakkında ayrıntılı bilgi edinmek için RFC 7871 (EDNS İstemci Alt Ağı) sayfasına bakın.
Teşhis bilgilerini içeren bir hata yanıtı:
{
"Status": 2, // SERVFAIL - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "dnssec-failed.org.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}
Yerleştirilmiş tırnak işaretleri ve ad sunucusu atıflarına sahip SPF ve TXT kayıtları:
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "*.dns-example.info.", // FQDN with trailing dot
"type": 99 // SPF - Standard DNS RR type
}
],
"Answer": [
{
"name": "*.dns-example.info.", // Always matches name in Question
"type": 99, // SPF - Standard DNS RR type
"TTL": 21599, // Record's time-to-live in seconds
"data": "\"v=spf1 -all\"" // Data for SPF - quoted string
}
],
"Comment": "Response from 216.239.38.110"
// Uncached responses are attributed to the authoritative name server
}
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
"type": 16 // TXT - Standard DNS RR type
}
],
"Answer": [
{
"name": "s1024._domainkey.yahoo.com.", // Always matches Question name
"type": 16, // TXT - Standard DNS RR type
"data": "\"k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
// Data for TXT - multiple quoted strings
}
],
}
DNS dizeleri
Tüm TXT kayıtları, RFC 4408 (SPF) veya RFC 4871 (DKIM) gibi daha uzun TXT kaydı biçimlerinin kullanımı dahil olmak üzere tek bir JSON dizesi olarak kodlanır.
EDNS
Genel EDNS uzantı mekanizması desteklenmez. EDNS İstemci Alt Ağı seçeneği (edns-client-subnet), GET isteğindeki bir parametre ve JSON yanıtında üst düzey bir alandır.