J'apprends plus sur les systèmes DNS et j'étudie dès maintenant un très bon projet écrit à Go et j'ai remarqué dans le code qu'il demande à certains enregistrements DNS en direction de nowhere/?name=probe-test.dns.nextdns.io
Au départ, je pensais que cela ne peut pas avoir raison, cela ressemble plus à une URL invalide plutôt qu'à un nom de domaine, mais j'ai tiré une console et frappe Dig nowhere/?name=probe-test.dns.nextdns.io
Et cela renvoya un enregistrement.
$ Dig nowhere/?name=probe-test.dns.nextdns.io
; <<>> Dig 9.11.3-1ubuntu1.11-Ubuntu <<>> nowhere/?name=probe-test.dns.nextdns.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53429
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;nowhere/?name=probe-test.dns.nextdns.io. IN A
;; ANSWER SECTION:
nowhere/?name=probe-test.dns.nextdns.io. 300 IN A 45.90.28.0
;; Query time: 26 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Mar 12 18:55:41 EET 2020
;; MSG SIZE rcvd: 84
Quelqu'un peut-il m'expliquer comment est-ce une entrée valide?.
C'est un entrée DNS Wildcard . La zone dns.nextdns.io est configurée pour renvoyer 45.90.28.0 comme une réponse à une requête pour tout ce qui est devant dns.nextdns.io
. Voici quelques exemples, à la recherche de foo
et bar
. Et pour de bonnes mesures, ils pourraient déjà avoir ces deux dans leur zone car ils sont couramment utilisés pour les tests et les démonstrations, alors cherchons quelque chose qu'ils n'auront pas anticipé - NoWayThisExists
.
C:\Users\me>nslookup foo.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: foo.dns.nextdns.io
Address: 45.90.28.0
C:\Users\me>nslookup bar.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: bar.dns.nextdns.io
Address: 45.90.28.0
C:\Users\me>nslookup NoWayThisExists.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: NoWayThisExists.dns.nextdns.io
Address: 45.90.28.0
Ainsi, tant que les éléments que vous avez mis au début n'ont pas de caractères non valides qui trotteraient le résolveur DNS, vous obtiendrez 45.90.28.0 comme réponse. Et dans votre cas, aucun des personnages de nowhere/?name=probe-test
causer un problème. En fait, vous pouvez rechercher un nom composé de rien que les symboles /
, ?
, =
, et -
.
C:\Users\me>nslookup ///???===---.dns.nextdns.io 8.8.8.8
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: ///???===---.dns.nextdns.io
Address: 45.90.28.0
Le nom de domaine supposé dans la question avait en effet semblé inhabituel, alors je suis allé chercher un contexte.
Google m'a conduit ici https://github.com/nextdns/nextdns/blob/91b3c6cc735c779c730c3b93a7b0372c9e11774f/resolver/endpoint/manager.go#L139 qui ressemble à un match parfait pour la chaîne dans la question.
Fragments de code pertinents:
var TestDomain = "probe-test.dns.nextdns.io"
...
req, _ := http.NewRequest("GET", "https://nowhere/?name="+TestDomain, nil)
Si c'est bien cela, et il semble trop bon d'être une bonne correspondance pour être une coïncidence pure, on dirait que le code en question ne rend pas réellement la requête DNS revendiquée dans votre question, cela fait plutôt une demande HTTP basée sur une URL où nowhere
est la partie nom d'hôte (la partie de l'URL qui serait résolue dans le cadre d'une telle demande), chemin /
et un paramètre de chaîne de requête name
avec la valeur probe-test.dns.nextdns.io
.
Quant à ce qu'il y ait une réponse quand vous avez quand même essayé la commande Dig nowhere/?name=probe-test.dns.nextdns.io
Comme dans la question, piquer un peu un peu suggère qu'il existe une entrée de caractères génériques *.dns.nextdns.io
, alors quels que soient les noms étranges que vous montrez cette fin avec .dns.nextdns.io
entraînera la même réponse.
[.____] Essayez par exemple Dig foobar.dns.nextdns.io
, qui donne la même réponse exacte.
Il convient de noter qu'un nom comme nowhere/?name=probe-test.dns.nextdns.io
est soutenu par le protocole DNS lui-même. Il est toutefois difficile de savoir pourquoi quelqu'un a explicitement voulu ajouter un nom comme celui-là (qui s'est révélé ne pas être le cas).
[.____] (Ce nom n'est clairement pas un nom d'hôte valide et ne correspond également à aucun des cas d'utilisation non utilisée de noms d'hostname largement utilisés.)