Mesure avant de decider : ~21 Mo de RSS par VM pour 28 a 189 requetes servies. Le gain de cache est negligeable ; ce qu'on recupere, c'est un demon au lieu de cinq et un endroit a regarder au lieu de cinq. Pas sur la frontiere : un resolveur de SITE devrait connaitre la zone interne de chaque tenant, et un tenant dont le resolveur vit chez l'hebergeur ne peut plus s'emanciper avec. La recursion est generique, la zone interne ne l'est pas. L'autoritatif se replie sur 127.0.0.1:5300 -- derive de la colocalisation, pas declare a la main. Son port devient `derive` dans meta/flux.yml : les deux lient 53 mais sur des adresses differentes. Deux pieges. Unbound refuse d'interroger une loopback par defaut : sans lever do-not-query-localhost, toute la zone rendait SERVFAIL. Et le plancher /etc/hosts MASQUAIT la panne -- getent repondait, dig disait SERVFAIL. La tache de validation du role avait raison contre moi. client_unbound n'installant plus Unbound, son nom mentait : client_resolveur. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
65 lines
3.1 KiB
YAML
65 lines
3.1 KiB
YAML
---
|
|
serveur_powerdns_packages:
|
|
- pdns-server
|
|
- pdns-backend-bind
|
|
- bind9-utils
|
|
- dnsutils
|
|
|
|
serveur_powerdns_service_name: "pdns"
|
|
serveur_powerdns_zone_directory: "/etc/powerdns/zones"
|
|
serveur_powerdns_bind_config: "/etc/powerdns/bindbackend.conf"
|
|
serveur_powerdns_zone: "{{ domaine_interne }}"
|
|
serveur_powerdns_nameserver: "ns1"
|
|
serveur_powerdns_contact: "hostmaster.{{ domaine_interne }}"
|
|
serveur_powerdns_ttl: 3600
|
|
serveur_powerdns_serial: 2026062201
|
|
serveur_powerdns_soa_refresh: 3600
|
|
serveur_powerdns_soa_retry: 900
|
|
serveur_powerdns_soa_expire: 1209600
|
|
serveur_powerdns_soa_minimum: 3600
|
|
# L'adresse du tenant SEULEMENT, pas `0.0.0.0` : lier toutes les interfaces occupe aussi
|
|
# `127.0.0.1:53`, ou un resolveur recursif local voudrait s'installer. Ce n'est pas un
|
|
# probleme theorique — c'est la raison pour laquelle `client_resolveur` exempte cet hote.
|
|
# PowerDNS reste autoritatif pur : il repond pour la zone souveraine et REFUSE le reste.
|
|
# LE RESOLVEUR DU TENANT PARTAGE CET HOTE (2026-08-24). Quand c'est le cas, l'autoritatif
|
|
# lui laisse le port 53 de l'adresse LAN et se replie sur la loopback, sur un autre port :
|
|
# le resolveur devient la SEULE porte, et personne n'interroge l'autoritatif directement.
|
|
#
|
|
# Derive de l'inventaire, pas declare a la main : l'exploitant ne doit pas avoir a se
|
|
# souvenir de deplacer un port parce qu'il a ajoute un role.
|
|
serveur_powerdns_colocalise_resolveur: >-
|
|
{{ inventory_hostname in (groups['serveur_resolveur'] | default([])) }}
|
|
serveur_powerdns_listen_port: "{{ 5300 if (serveur_powerdns_colocalise_resolveur | bool) else 53 }}"
|
|
serveur_powerdns_listen_addresses: >-
|
|
{{ ['127.0.0.1'] if (serveur_powerdns_colocalise_resolveur | bool)
|
|
else [ansible_host | default('0.0.0.0')] }}
|
|
serveur_powerdns_allow_axfr_ips: []
|
|
|
|
# Enregistrements additionnels geres explicitement.
|
|
serveur_powerdns_records:
|
|
- name: "dns"
|
|
type: "CNAME"
|
|
value: "ns1.{{ serveur_powerdns_zone }}."
|
|
|
|
# Groupes dont les hotes actifs avec ansible_host seront ajoutes a la zone.
|
|
serveur_powerdns_inventory_groups:
|
|
- hotes_actifs
|
|
|
|
# Publier des A pour les FQDN d'exposition (champ 'expose' des applications) vers l'edge
|
|
# qui les sert (domaines.edge). Ferme la boucle : declarer 'expose' -> vhost + cert + DNS.
|
|
serveur_powerdns_publier_expositions: true
|
|
serveur_powerdns_expositions: []
|
|
|
|
# Zone INVERSE — DERIVEE du supernet, jamais ecrite. Un /16 `10.(10+index).0.0` donne
|
|
# `(10+index).10.in-addr.arpa`. Vide si le supernet n'est pas connu ou n'est pas un /16 :
|
|
# mieux vaut pas de zone inverse qu'une zone fausse.
|
|
#
|
|
# Pourquoi elle manquait. Rien dans le moteur ne touchait `in-addr.arpa` — mesure du
|
|
# 2026-08-08. Un hote pouvait donc etre resolu par son nom et rester anonyme a l'envers,
|
|
# ce que la plupart des services de courriel et de journalisation reprochent en silence.
|
|
serveur_powerdns_zone_inverse: >-
|
|
{{ (setops_supernet | default('') | ansible.utils.ipaddr('prefix') | int == 16)
|
|
| ternary(
|
|
(setops_supernet | default('0.0.0.0/0')).split('.')[1] ~ '.'
|
|
~ (setops_supernet | default('0.0.0.0/0')).split('.')[0] ~ '.in-addr.arpa',
|
|
'') }}
|