En mi laboratorio, hay dos servidores de nombres que ejecutan bind9:
el servidor A tiene un archivo de zona para "example.com";
ServerB tiene un archivo de zona para "sub.example.com" que es una subzona de "example.com".
En el archivo de zona del Servidor A, hay dos registros NS sobre la subzona y dos registros adhesivos como se muestra a continuación:
sub IN NS dns1.sub
IN NS dns2.sub
dns1.sub IN A 1.1.1.1
dns2.sub IN A 2.2.2.2
En el archivo de zona del ServidorB, los registros NS se muestran a continuación:
@ IN NS dns1
IN NS dns2
dns1 IN A 1.1.1.1
dns2 IN A 3.3.3.3
El registro A de dns2.sub en el archivo de zona del Servidor A es incorrecto (lo hice a propósito), debería ser 3.3.3.3.
Después de mirar los dos servidores de nombres, el Servidor A carga su archivo de zona en el caché (no sé cómo nombrar este caché, aquí lo llamo "caché de archivos de zona") y también el Servidor B.
Paso 1: ejecuto "dig @ServerA +norecurse sub.example.com":
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> @ServerA +norecurse sub.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64332
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sub.exmample.com. IN A
;; AUTHORITY SECTION:
sub.exmample.com. 60 IN NS dns1.sub.exmample.com.
sub.exmample.com. 60 IN NS dns2.sub.exmample.com.
;; ADDITIONAL SECTION:
dns1.sub.exmample.com. 60 IN A 1.1.1.1
dns2.sub.exmample.com. 60 IN A 2.2.2.2
;; Query time: 1 msec
;; SERVER: 10.82.12.69#53(10.82.12.69)
;; WHEN: 二 5月 28 14:55:50 CST 2019
;; MSG SIZE rcvd: 145
obviamente el RR se devuelve según el caché del archivo de zona.
Paso 2: ejecuto "dig @ServerA +recurse sub.example.com":
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> @ServerA +recurse sub.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43819
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sub.exmample.com. IN A
;; AUTHORITY SECTION:
sub.exmample.com. 30 IN SOA dns1.sub.exmample.com. mail.sub.exmample.com. 2019051501 60 60 60 60
;; Query time: 803 msec
;; SERVER: 10.82.12.69#53(10.82.12.69)
;; WHEN: 二 5月 28 15:00:05 CST 2019
;; MSG SIZE rcvd: 100
Después de volcar el caché del Servidor A, obtuve estas cosas:
sub.exmample.com. 26 \-A ;-$NXRRSET
; sub.exmample.com. SOA dns1.sub.exmample.com. mail.sub.exmample.com. 2019051501 60 60 60 60
Paso 3: Ejecuto "dig @ServerA +recurse c1.sub.example.com": c1.sub.example.com es uno de los hosts en sub.example.com con dirección 4.4.4.4
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> @ServerA +recurse c1.sub.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15260
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;c1.sub.example.com. IN A
;; ANSWER SECTION:
c1.sub.example.com. 30 IN A 4.4.4.4
;; AUTHORITY SECTION:
sub.example.com. 30 IN NS dns1.sub.exmample.com.
sub.example.com. 30 IN NS dns2.sub.exmample.com.
;; ADDITIONAL SECTION:
dns1.sub.exmample.com. 30 IN A 1.1.1.1
dns2.sub.exmample.com. 30 IN A 3.3.3.3
;; Query time: 13 msec
;; SERVER: 10.82.12.69#53(10.82.12.69)
;; WHEN: 二 5月 28 15:05:59 CST 2019
;; MSG SIZE rcvd: 171
Hay algunos puntos que realmente me desconciertan:
1. Después de ejecutar los tres pasos, hay dos registros de recursos en la caché del Servidor A sobre el servidor de nombres dns2 de la zona sub.example.com: el primero es "dns2.sub.exmample.com". " en el caché de archivos de zona, otro es "dns2.sub.exmample.com 2.2.2.2" en el caché dns que obtuvo del ServidorB. Como cliente DNS normal, ¿cuál obtendré? ¿Los registros de recursos DNS en "caché DNS" tienen prioridad sobre los registros en "caché de archivos de zona"? ¿O aleatoriamente?
2. ¿Qué significa "SECCIÓN DE AUTORIDAD"? en mi opinión, 2.2.2.2 no es la respuesta autorizada, ¿por qué tratar 2.2.2.2 como "AUTORIDAD"?
3. ¿Un cliente DNS almacenará en caché todas las respuestas que obtenga o sólo las respuestas "autorizadas"?
4. ¿Cuándo consultará un solucionador de DNS los registros NS? Después del Paso 2, ¿por qué no hay registros NS en la caché del Servidor A?