docs/dns-interne.md couvre desormais le DNS public sur deux sites : vue d'ensemble, chemin d'une requete interne, publication d'une zone, requete de l'Internet, NS d'une zone (cinq schemas Mermaid), et les tableaux des flux, des declarations, des gardes et de la bascule. README de serveur_powerdns et de serveur_dns_public a jour ; le wiki y renvoie. 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/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.
|