2026-10-14 21:16:11 -04:00
# Rôle `serveur_powerdns`
2026-06-24 20:17:46 -04:00
2026-10-14 21:16:11 -04:00
> **Pour qui :** le mainteneur du DNS d'un écosystème. La vue d'ensemble, avec ses schémas,
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:34 -04:00
> est dans `docs/conception/dns-interne.md`.
2026-06-24 20:17:46 -04:00
2026-10-14 21:16:11 -04:00
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.
2026-06-24 20:17:46 -04:00
2026-10-14 21:16:11 -04:00
| 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 |
2026-06-24 20:17:46 -04:00
2026-10-14 21:16:11 -04:00
**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` .
2026-06-24 20:17:46 -04:00
2026-10-14 21:16:11 -04:00
## 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.