1) Ce n'est pas le résolveur cache qui détermine l'expiration mais le serveur faisant autorité pour le domaine interrogé via le TTL (Time To Live) des enregistrements DNS.
Si j'interroge example.com pour la première fois :
$ dig example.com
[…]
;; ANSWER SECTION:
example.com. 86400 IN A 93.184.216.34
;; Query time: 400 msec
je vois dans la deuxième colonne le TTL défini sur le serveur faisant autorité pour example.com : 86400 s, soit 24 heures. Le résolveur cache va donc conserve cette réponse pendant 24 heures.
Si je relance plus tard une commande dig :
$ dig example.com
[…]
;; ANSWER SECTION:
example.com. 6938 IN A 93.184.216.34
;; Query time: 0 msec
c'est le résolveur cache qui me répond et me renvoie dans la seconde colonne le TTL restant. On voit bine ici l’efficacité du cache local sur ma machine (systemd-resolved) : la reque prend 400 ms lors de la première interrogation et est instantanée lors de la seconde.
Le résolveur ne garde en cache que les informations pour lesquelles il a déjà effectué une requête.
2) je ne sais pas faire un serveur DNS faisant autorité pour le réseau local avec Unbound, mais c'est possible, par exemple :
https://dnswatch.com/dns-docs/UNBOUND/ Attention à ne pas utiliser n'importe quoi comme noms pour le réseau local.