Dotychczas aplikacje internetowe wymagały rozszerzeń przeglądarki do korzystania z zaawansowanych funkcji funkcje DNS, takie jak DANE, wykrywanie usług DNS-SD, a nawet w inny sposób niż adresy IP, na przykład rekordy MX. Aby korzystać z funkcji zależnych od DNSSEC, takich jak rekordy SSHFP, wszelkie takie rozszerzenia zweryfikowanie zabezpieczeń DNSSEC samodzielnie, ponieważ przeglądarka lub system operacyjny może tego nie zrobić.
Od 2016 r. Google Public DNS oferuje łatwy w internecie interfejs API dla DoH przy użyciu DNSSEC weryfikację, która nie wymaga konfiguracji ani rozszerzeń przeglądarki lub systemu operacyjnego. Proste parametry zapytania i odpowiedzi JSON metody GET pozwalają klientom analizować za pomocą popularnych internetowych interfejsów API oraz uniknąć złożonych szczegółów formatu komunikatów DNS, takich jak kompresji wskaźników dla nazw domen.
Więcej informacji na temat DoH znajdziesz na ogólnej stronie dokumentacji DoH. takie jak nagłówki HTTP, obsługa przekierowań, sprawdzone metody ochrony prywatności Kody stanu HTTP.
Na stronie Bezpieczne przesyłki
Przykłady wiersza poleceń curl
dla DoH oraz informacje wspólne dla DoH i DNS przez
Protokół TLS (DoT), na przykład obsługa TLS i obcinanie rekordów DNS.
Specyfikacja interfejsu JSON API
Wszystkie wywołania interfejsu API są żądaniami HTTP GET. W przypadku zduplikowanych parametrów używana jest tylko pierwsza wartość.
Obsługiwane parametry
- nazwa
string, wymagany
Jedyny wymagany parametr. Dopuszczalne są znaki ukośnika lewego zgodnie ze standardem RFC 4343.
- Długość (po zastąpieniu ukośnika lewego) musi mieścić się w zakresie od 1 do 253, (ignorując opcjonalną kropkę na końcu, jeśli występuje).
- Wszystkie etykiety (części nazw między kropkami) muszą mieć od 1 do 63 bajtów.
- Uzyskują nieprawidłowe nazwy, np.
.example.com
,example..com
lub pusty ciąg 400 Nieprawidłowe żądanie. - Znaki spoza tabeli znaków ASCII powinny być punycoded (
xn--qxam
, a nieελ
).
- typ
ciąg znaków, domyślnie:
1
Typ RR może być zapisany jako liczba w ciągu [1, 65535] lub jako ciąg kanoniczny. (wielkość liter nie jest rozróżniana, np.
A
lubaaaa
). Możesz użyć255
dla „ANY” ale pamiętaj, że nie jest to do wysyłania zapytań zarówno w przypadku rekordów A, jak i AAAA lub MX. Wiarygodne serwery nazw nie muszą zwracać wszystkich rekordów dla takich zapytań; niektóre nie odpowiadają, a inne (np. cloudflare.com) zwracają tylko HINFO.- cd
wartość logiczna, wartość domyślna:
false
Flaga CD (Sprawdzanie wyłączone). Użyj
cd=1
lubcd=true
, aby wyłączyć weryfikację DNSSEC; użyj parametrucd=0
,cd=false
lub żadnego parametrucd
, aby włączyć weryfikację DNSSEC.- ilość
ciąg znaków, domyślnie: puste
Opcja odpowiedniego typu treści. Użyj
ct=application/dns-message
, aby otrzymać binarny komunikat DNS w treść HTTP odpowiedzi zamiast tekstu JSON. Użyjct=application/x-javascript
, aby jawnie zażądać tekstu JSON. Inne wartości typu treści są ignorowane, a zwracana jest domyślna treść JSON.- jaki
wartość logiczna, wartość domyślna:
false
Flaga DO (DNSSEC OK). Użyj
do=1
lubdo=true
, aby uwzględnić rekordy DNSSEC (RRSIG, NSEC, NSEC3); użyj parametrudo=0
,do=false
lub żadnego parametrudo
, aby pominąć rekordy DNSSEC.Aplikacje zawsze powinny obsługiwać (i ignorować, jeśli to konieczne) wszystkie DNSSEC w odpowiedziach JSON, ponieważ inne implementacje mogą je zawsze uwzględniać, W przyszłości możemy zmienić domyślne zachowanie odpowiedzi JSON. Pliki binarne odpowiedzi komunikatów DNS zawsze uwzględniają wartość flagi DO.
- edns_client_subnet
ciąg znaków, domyślnie: puste
Opcja edns0-client-subnet. Format to adres IP z maską podsieci. Przykłady:
1.2.3.4/24
,2001:700:300::/48
.Jeśli używasz protokołu DNS-over-HTTPS ze względu na kwestie dotyczące prywatności i nie chcesz, jakąkolwiek część Twojego adresu IP, która ma być wysyłana na wiarygodne serwery nazw. aby sprawdzić dokładność lokalizacji geograficznej, użyj
edns_client_subnet=0.0.0.0/0
. Publiczny serwer DNS Google zwykle wysyła przybliżone informacje o sieci (zwykle wyzerowanie ostatniej części adresu IPv4).- random_padding
string, ignorowany
Wartość tego parametru jest ignorowana. Przykład:
XmkMw~o_mgP2pf.gpw-Oi5dK
.klienci interfejsów API zaniepokojeni możliwymi atakami dotyczącymi prywatności po stronie kanału, wykorzystując Rozmiary pakietów żądań HTTPS GET mogą spowodować, że wszystkie żądania będą dokładnie tego samego rozmiaru przez dopełnienie żądań danymi losowymi. Aby zapobiec nieprawidłowej interpretacji adresu URL, ogranicz znaki dopełnienia do niezarezerwowanych znaków adresu URL: dużych i małych liter, cyfr, łączników, kropek, podkreśleń i tyldy.
Odpowiedź DNS w formacie JSON
Pomyślna odpowiedź (dodane tutaj komentarze nie pojawiają się w rzeczywistych odpowiedziach):
{
"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
}
Zapoznaj się z dokumentem RFC 7871 (podsieć klienta EDNS), aby dowiedzieć się więcej. szczegółowe informacje o „długości prefiksu zakresu” i o tym, jak wpływa on na buforowanie.
Odpowiedź dotycząca błędu wraz z informacjami diagnostycznymi:
{
"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/."
}
Rekordy SPF i TXT z osadzonym cudzysłowem i atrybucją serwera nazw:
{
"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
}
],
}
Ciągi znaków DNS
Wszystkie rekordy TXT są zakodowane jako pojedynczy ciąg znaków JSON, w tym użycie dłuższego rekordu TXT. formatów nagrywania, takich jak RFC 4408 (SPF) lub RFC 4871 (DKIM).
protokół EDNS
Ogólny mechanizm rozszerzenia EDNS nie jest obsługiwany. Opcja Podsieć klienta EDNS (edns-client-subnet) to parametr w kluczu Żądanie GET i pole najwyższego poziomu w odpowiedzi JSON.