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>
62 lines
3.3 KiB
Markdown
62 lines
3.3 KiB
Markdown
# Rôle `serveur_powerdns`
|
|
|
|
> **Pour qui :** le mainteneur du DNS d'un écosystème. La vue d'ensemble, avec ses schémas,
|
|
> est dans `docs/conception/dns-interne.md`.
|
|
|
|
PowerDNS Authoritative, backend BIND, zones générées par Ansible depuis l'inventaire et le
|
|
plan. Pas de dépendance à PostgreSQL. Le rôle porte **deux instances**, qui ne se voient pas.
|
|
|
|
| Instance | Ce qu'elle sert | Écoute | Qui l'interroge |
|
|
|---|---|---|---|
|
|
| `pdns` (principale) | la zone interne (`.internal`) et ses zones inverses | `5300` sur la boucle locale quand le résolveur partage l'hôte, `53` sinon (port `derive`) | le résolveur de l'écosystème, seul |
|
|
| `pdns@public` | les zones `autorite: primaire-cache` du plan — primaire **caché** | `<hôte>:5300` | le serveur DNS public de chaque site, en TSIG |
|
|
|
|
**Une instance à part pour le public** : faire écouter la principale sur l'adresse de l'hôte
|
|
aurait permis au serveur public du site d'interroger la zone `.internal`.
|
|
|
|
## La zone interne
|
|
|
|
- Chaque hôte actif qui porte `ansible_host` reçoit son A, sans déclaration.
|
|
- Les noms exposés (`serveur_powerdns_expositions`) mènent au service ou à l'edge selon
|
|
`resolution_interne` du domaine.
|
|
- Les enregistrements en plus : `serveur_powerdns_records`.
|
|
|
|
## Les zones publiques (`tasks/zones-publiques.yml`)
|
|
|
|
Joué seulement là où le site a un serveur public à servir (`dns_public_site` non vide).
|
|
|
|
- **SOA et NS** : le serveur du site (`serveur_powerdns_dns_public_nom`) **et celui de
|
|
chaque pair** (`serveur_powerdns_dns_public_noms_pairs`). Seule la zone qui contient un de
|
|
ces noms en porte le A, à l'adresse publique de son site. Sans pair, le rendu est identique
|
|
octet pour octet.
|
|
- **Enregistrements** : ceux du plan (`plan/domaines.yml`), déjà passés au crible par
|
|
`valider_domaines`.
|
|
- **Le serial suit le contenu**, et l'état DNSSEC fait partie du contenu.
|
|
- **DNSSEC** : une clé CSK par zone, tenue dans la voûte du locataire
|
|
(`vault_dnssec_<zone>`), jamais créée sur la machine. Servie à l'heure (`SOA-EDIT EPOCH`).
|
|
- **Transfert** : TSIG seul l'ouvre (`allow-axfr-ips` ne garde que la boucle locale, parce
|
|
qu'une adresse listée obtiendrait la zone sans signature).
|
|
- **Notifications** : `only-notify` et `also-notify` limités à `dns_public_site` et
|
|
`dns_public_pairs` — les adresses que le contrat du site dépose dans la fiche.
|
|
- **Gardes** : nom de pair bien formé, adresse publique, distinct du nôtre, jamais
|
|
redéclaré.
|
|
|
|
## Variables
|
|
|
|
Celles qu'on règle, les autres se dérivent :
|
|
|
|
| Variable | Défaut | Source |
|
|
|---|---|---|
|
|
| `serveur_powerdns_zone` | `domaine_interne` | plan |
|
|
| `serveur_powerdns_records` | `[]` | inventaire |
|
|
| `serveur_powerdns_dns_public_site` | `dns_public_site` | contrat du site |
|
|
| `serveur_powerdns_dns_public_pairs` | `dns_public_pairs` | contrat du site |
|
|
| `serveur_powerdns_dns_public_nom` | `dns_public_nom` | contrat du site |
|
|
| `serveur_powerdns_dns_public_noms_pairs` | `dns_public_noms_pairs` | contrat du site |
|
|
| `serveur_powerdns_public_port` | `5300` | — |
|
|
|
|
## Flux
|
|
|
|
`meta/flux.yml` : l'entrée de la zone interne (port `derive`), la résolution sortante de
|
|
l'autoritatif pour ses propres besoins (il est exempté de `client_resolveur`), et l'entrée
|
|
`5300` UDP/TCP depuis le serveur public du site, seulement là où `pdns@public` existe.
|