Set-OPS-Public/roles/serveur_powerdns
Daniel Allaire cdac6d0ea5 doc dns : l'interne et le public, deux sites, avec les schemas des processus et des flux
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>
2026-10-14 21:16:11 -04:00
..
defaults dns public : chaque zone designe aussi le serveur de noms du site pair 2026-10-14 04:44:24 -04:00
handlers DNS public en production : cinq fautes que seule la production montrait 2026-09-16 18:35:36 -04:00
meta vigie : vues métier par clientèle interne, dérivées du plan 2026-10-04 02:26:11 -04:00
tasks dns public : chaque zone designe aussi le serveur de noms du site pair 2026-10-14 04:44:24 -04:00
templates dns public : chaque zone designe aussi le serveur de noms du site pair 2026-10-14 04:44:24 -04:00
README.md doc dns : l'interne et le public, deux sites, avec les schemas des processus et des flux 2026-10-14 21:16:11 -04:00

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.