Set-OPS-Public/roles/serveur_resolveur/defaults/main.yml
Daniel Allaire aab1bcc83a doc : rangee par lecteur, trois portes d'entree (architecture, setup, usage) et un index
README reduit au role du projet et au demarrage rapide. docs/architecture.md (schemas
Mermaid), docs/setup.md, docs/usage.md (154 cibles en 13 familles), docs/README.md (index).
Documents ranges en conception/, exploitation/, hebergement/, projet/ ; 598 chemins suivis.
QUICKSTART.md, SOLUTION.md, architecture-set-ops.md et la carte fondus puis retires.

Preuves : P48 lit l'index et conception/mecanismes.md ; les gardes parcourent docs/ sous-
dossiers compris (_documents) ; usage.md suit le Makefile dans les deux sens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:01:54 -04:00

85 lines
4.4 KiB
YAML

---
# LE RÉSOLVEUR DE L'ÉCOSYSTÈME — un seul, pour tout le tenant.
#
# Avant : un Unbound sur CHAQUE VM, écoutant sur 127.0.0.1. Ça marchait, et c'était
# parfaitement étanche — mais c'était N démons identiques pour un service unique.
#
# MESURE DU 2026-08-24, avant de décider : ~21 Mo de RSS par VM, et entre 28 et 189
# requêtes servies depuis le démarrage. Le gain de cache mutualisé est donc négligeable ;
# ce qu'on récupère, c'est un démon au lieu de quatorze, et un endroit à regarder au lieu
# de quatorze.
#
# POURQUOI PAS SUR LA FRONTIÈRE (OPNsense), qui aurait été le geste le plus économe : un
# résolveur partagé par tout le SITE devrait connaître la zone interne de CHAQUE tenant.
# Sans vues par réseau soigneusement réglées, le tenant A résoudrait les noms du tenant B
# — l'étanchéité qu'on protège partout ailleurs. Et un tenant dont le résolveur vit chez
# l'hébergeur ne peut plus s'émanciper avec (docs/conception/filiation-emancipation.md).
#
# La récursion est générique ; la ZONE INTERNE ne l'est pas. C'est ce qui fait du
# résolveur un service de TENANT, et non de fabric.
serveur_resolveur_paquets:
- unbound
serveur_resolveur_service: "unbound"
# Il écoute pour toute la flotte du tenant — plus seulement pour lui-même.
serveur_resolveur_ecoutes:
- "127.0.0.1"
- "{{ ansible_host }}"
# QUI A LE DROIT DE L'INTERROGER : le supernet du tenant, dérivé du seed comme tout le
# reste. Un résolveur ouvert au monde est un relais d'amplification.
serveur_resolveur_reseaux_autorises:
- "{{ setops_supernet | default('127.0.0.0/8') }}"
# La zone souveraine et son autoritatif. PowerDNS se replie sur la loopback quand il
# partage cet hôte (voir serveur_powerdns/defaults), pour lui laisser le port 53.
serveur_resolveur_zone_interne: "{{ domaine_interne }}"
serveur_resolveur_autoritatif: "127.0.0.1"
serveur_resolveur_autoritatif_port: 5300
# LE RESOLVEUR DELEGUE A L'AUTORITATIF CE QUE L'AUTORITATIF SERT (2026-08-25).
#
# La zone souveraine lui etait deleguee par une `stub-zone` ; les zones INVERSES ne
# l'etaient pas. PowerDNS servait donc les PTR sur son port, et personne ne les lui
# demandait : `dig -x` rendait vide depuis les cinq machines alors que la meme requete
# posee directement a l'autoritatif repondait juste.
#
# C'est la panne que le depot connait deja sous une autre forme — un service correct
# derriere un chemin que rien n'emprunte.
#
# MEME DERIVATION QUE `serveur_powerdns`, par le meme filtre : deux calculs separes
# finiraient par diverger, et la divergence ne se verrait qu'au premier PTR interroge.
serveur_resolveur_zones_inverses: >-
{{ (groups.get('hotes_actifs', []) | map('extract', hostvars, 'ansible_host')
| select | list)
| zones_inverses(setops_supernet | default('')) }}
# AUCUN TRANSITAIRE : Unbound récurse depuis les serveurs racine. Poser un transitaire ici
# reviendrait à confier chaque question de l'écosystème à un tiers — ce que la bascule du
# 2026-08-23 avait justement supprimé.
serveur_resolveur_transitaires: []
# LES ZONES QUI NE SONT PAS À NOUS, ET À QUI LES DEMANDER.
#
# Liste de `{nom, adresses}`. Un locataire y trouve la zone de son HÉBERGEUR : il dépend
# de ses services par leur NOM — cache d'artefacts, forge, dépôt de sauvegarde, autorité
# — et doit savoir à quel résolveur les demander.
#
# DÉRIVÉE, PAS DÉCLARÉE : `inventory_host.py` la construit depuis la carte de
# l'hébergeur (le symlink `underlay.yml`) et l'adresse d'amorçage DNS que le locataire
# connaît déjà. Deux déclarations du même fait finiraient par diverger.
#
# VIDE PAR DÉFAUT, ET C'EST LE COMPORTEMENT D'UN ÉMANCIPÉ : un écosystème dont la carte
# de l'hébergeur n'est plus montée ne délègue plus rien. Il ne peut alors plus nommer les
# services du site — ce qui est exactement ce qu'on veut constater d'une émancipation, et
# non une panne à réparer.
serveur_resolveur_zones_deleguees: []
# --- Sonde de supervision -----------------------------------------------------------
# DEUX noms, parce qu'il y a DEUX chemins : l'autoritatif local pour la zone souveraine,
# la recursion pour le reste. Une sonde qui n'en verifierait qu'un laisserait l'autre
# tomber en silence. Variables, donc mises en defaut sans toucher au service.
serveur_resolveur_sonde_nom_interne: "{{ ansible_fqdn | default(ansible_hostname) }}"
serveur_resolveur_sonde_nom_public: "deb.debian.org"
serveur_resolveur_sonde_delai: 3