Set-OPS-Public/roles/client_resolveur/README.md
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

53 lines
2.6 KiB
Markdown

# client_resolveur
**Résolveur local** par nœud (Unbound) : cache + récursion, avec une **stub-zone** vers
l'autoritatif interne (PowerDNS). Rend la résolution *dynamique* sans casser Internet.
Troisième et dernière couche du DNS interne (`docs/conception/dns-interne.md`).
## Les trois couches
1. `hosts_statiques` — plancher `/etc/hosts`, toujours là, indépendant de tout service ;
2. `serveur_powerdns` — autoritatif de la zone interne ;
3. **ce rôle** — résolveur local, **opt-in**, qui rend la résolution dynamique par nœud.
## Rôle
- Installe `unbound` et `bind9-dnsutils` (`dig`, pour valider **avant** de basculer).
- Déploie `setops.conf` : écoute sur `127.0.0.1`, stub-zone vers l'autoritatif interne,
récursion (ou transitaires) pour le reste d'Internet.
- Valide la configuration (`unbound-checkconf`), active le service.
- **Bascule** `/etc/resolv.conf` vers `127.0.0.1` — protégée (voir ci-dessous).
## Garde-fou de bascule (anti-coupure)
Changer le résolveur d'un nœud à distance, c'est risquer de le rendre muet. Le rôle exige
donc **deux** interrupteurs, et vérifie avant d'agir :
```yaml
client_resolveur_apply: true
client_resolveur_confirm: true
```
Sans les deux, le rôle installe et démarre Unbound mais **ne touche pas** à `/etc/resolv.conf`
(refus explicite). Avec les deux, il applique d'abord les redémarrages en attente, puis
**valide qu'Unbound résout réellement** (un nom interne *et* un nom Internet) — et ne bascule
qu'ensuite. Même doctrine que la règle 4 d'`AGENTS.md` : action risquée = confirmation explicite.
## Variables
| Variable | Défaut | Rôle |
| --- | --- | --- |
| `client_resolveur_ecoute` | `127.0.0.1` | Écoute (boucle locale) |
| `client_resolveur_zone_interne` | `{{ domaine_interne }}` | Zone en stub |
| `client_resolveur_dns_autoritatif` | dérivé du groupe `serveur_powerdns` | Cible de la stub-zone |
| `client_resolveur_transitaires` | `[]` | Vide = récursion propre (racine + DNSSEC) |
| `client_resolveur_apply` / `_confirm` | `false` / `false` | Bascule de `/etc/resolv.conf` |
## Flux (`meta/flux.yml`)
`53/udp` entrant en **localhost** · `53/tcp` sortant vers `serveur_powerdns`.
## Notes / limites
- Transitaires vides = Unbound **récurse lui-même** (racine + DNSSEC). Si la récursion
sortante est bloquée par le réseau, renseigner `client_resolveur_transitaires`.
- Le rôle exige l'IP de l'autoritatif interne (assertion) : `serveur_powerdns` doit être
dans l'inventaire avec un `ansible_host`.
- DoT (DNS chiffré) n'est pas encore branché — c'est un des flux restants du zéro-confiance.
## Prérequis
- `serveur_powerdns` actif. Couche **agents**.