# 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é** | `: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_`), 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.