Recursive queries are sent to roots when a root zone is defined
FreeBSD's BIND config suggests caching the root zone locally by AXFR'ing from ICANN (https://svnweb.freebsd.org/ports/head/dns/bind916/files/named.conf.in?revision=526548&view=markup#l101) but this doesn't actually appear to be doing what they expect. With the same snippet in my config (tested on both 9.16.3-Debian and 9.11.5-P4-5.1+deb10u1-Debian), I see delays querying for roots.
root@sfo-router:/etc/bind# rndc flush
root@sfo-router:/etc/bind# dig @localhost mx. ns
; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> @localhost mx. ns
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37308
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1432
; COOKIE: 17a4fb0d408598d6010000005eec09496e5246607410e24e (good)
;; QUESTION SECTION:
;mx. IN NS
;; ANSWER SECTION:
mx. 86400 IN NS i.mx-ns.mx.
mx. 86400 IN NS e.mx-ns.mx.
mx. 86400 IN NS o.mx-ns.mx.
mx. 86400 IN NS x.mx-ns.mx.
mx. 86400 IN NS c.mx-ns.mx.
mx. 86400 IN NS m.mx-ns.mx.
;; Query time: 235 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Jun 18 17:39:37 PDT 2020
;; MSG SIZE rcvd: 163
root@sfo-router:/etc/bind# dig @localhost mx. ns
; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> @localhost mx. ns
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43887
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1432
; COOKIE: 968a02a271ff4861010000005eec094aaea36118ea3c1275 (good)
;; QUESTION SECTION:
;mx. IN NS
;; ANSWER SECTION:
mx. 86399 IN NS i.mx-ns.mx.
mx. 86399 IN NS e.mx-ns.mx.
mx. 86399 IN NS o.mx-ns.mx.
mx. 86399 IN NS x.mx-ns.mx.
mx. 86399 IN NS c.mx-ns.mx.
mx. 86399 IN NS m.mx-ns.mx.
;; Query time: 1 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Jun 18 17:39:38 PDT 2020
;; MSG SIZE rcvd: 163