Set-OPS-Public/roles/serveur_resolveur/templates/setops.conf.j2
Daniel Allaire db2d6f6bf0 resolveur : un par tenant, et non plus un par machine
Mesure avant de decider : ~21 Mo de RSS par VM pour 28 a 189 requetes servies.
Le gain de cache est negligeable ; ce qu'on recupere, c'est un demon au lieu de
cinq et un endroit a regarder au lieu de cinq.

Pas sur la frontiere : un resolveur de SITE devrait connaitre la zone interne de
chaque tenant, et un tenant dont le resolveur vit chez l'hebergeur ne peut plus
s'emanciper avec. La recursion est generique, la zone interne ne l'est pas.

L'autoritatif se replie sur 127.0.0.1:5300 -- derive de la colocalisation, pas
declare a la main. Son port devient `derive` dans meta/flux.yml : les deux lient
53 mais sur des adresses differentes.

Deux pieges. Unbound refuse d'interroger une loopback par defaut : sans lever
do-not-query-localhost, toute la zone rendait SERVFAIL. Et le plancher
/etc/hosts MASQUAIT la panne -- getent repondait, dig disait SERVFAIL. La tache
de validation du role avait raison contre moi.

client_unbound n'installant plus Unbound, son nom mentait : client_resolveur.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 16:59:34 -04:00

37 lines
1.4 KiB
Django/Jinja

# GÉNÉRÉ par Set-OPS (rôle serveur_resolveur). NE PAS éditer à la main.
server:
{% for a in serveur_resolveur_ecoutes %}
interface: {{ a }}
{% endfor %}
{% for r in serveur_resolveur_reseaux_autorises %}
access-control: {{ r }} allow
{% endfor %}
access-control: 127.0.0.0/8 allow
hide-identity: yes
hide-version: yes
prefetch: yes
do-ip6: no
# La zone souveraine n'est pas signée : on ne la soumet pas à la validation DNSSEC.
domain-insecure: "{{ serveur_resolveur_zone_interne }}"
# UNBOUND REFUSE D'INTERROGER UNE LOOPBACK PAR DÉFAUT (2026-08-24).
#
# `do-not-query-localhost` vaut `yes` d'origine — une protection contre les boucles.
# Or l'autoritatif de l'écosystème vit désormais SUR 127.0.0.1:5300, derrière ce
# résolveur. Sans cette ligne, toute la zone souveraine rend SERVFAIL.
#
# Et la panne était MASQUÉE : le plancher /etc/hosts répondait pour les noms de la
# flotte, si bien qu'un `getent hosts forge.genese.internal` semblait prouver que la
# résolution marchait. Seul un `dig` explicite l'a montrée.
do-not-query-localhost: no
stub-zone:
name: "{{ serveur_resolveur_zone_interne }}"
stub-addr: {{ serveur_resolveur_autoritatif }}@{{ serveur_resolveur_autoritatif_port }}
{% if serveur_resolveur_transitaires %}
forward-zone:
name: "."
{% for f in serveur_resolveur_transitaires %}
forward-addr: {{ f }}
{% endfor %}
{% endif %}