- underlay.py : sites pairs lus dans leur depot frere (sites_pairs_actifs, sur_le_site, dns_public_des_pairs). - Contrat du site : dns_public_pairs ; serveur_powerdns notifie et admet le pair ; resoudre_flux l'admet sur 5300. - devis_opnsense : opnsense_liens_sites (regles et routes selon ou vit chaque locataire) ; P24 juge les routes du lien a part ; noms d'alias < 32 caracteres gardes ; le refus du groupe wireguard ne tranche plus (quick=0), et la garde le verifie. - appliquer_opnsense : quick=0 transmis et dans l'identite d'une regle. - proxmox_api : SETOPS_PROXMOX_API pour joindre l'API par un rebond. Temoin depuis l'Internet : les deux zones repondent sur 51.79.45.193, signees. 95 preuves (make verifier), make test passe. CHANGELOG 149. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
54 lines
2.8 KiB
Django/Jinja
54 lines
2.8 KiB
Django/Jinja
# GENERE par Set-OPS (role serveur_powerdns). Ne pas editer a la main.
|
|
#
|
|
# L'INSTANCE PUBLIQUE DU LOCATAIRE — `pdns@public`, primaire cache de ses zones publiques.
|
|
#
|
|
# Elle ne sert QUE les zones `autorite: primaire-cache`. La zone `.internal` reste a
|
|
# l'instance principale, sur la boucle locale : le serveur public du site peut interroger
|
|
# celle-ci, jamais celle-la.
|
|
#
|
|
# Une instance nommee ne lit pas `pdns.d/` : tout ce dont elle a besoin est dit ici.
|
|
launch=bind
|
|
bind-config={{ serveur_powerdns_public_bind_config }}
|
|
bind-dnssec-db={{ serveur_powerdns_public_dnssec_db }}
|
|
|
|
# LE SOCKET DE CONTROLE VIT OU L'UNITE LE MET (mesure le 2026-09-16, en production).
|
|
#
|
|
# `pdns@.service` cree `RuntimeDirectory=pdns-%i`, soit `/run/pdns-public`. Sans ce reglage,
|
|
# `pdns_control --config-name=public` cherchait `/var/run/pdns/pdns-public.controlsocket`,
|
|
# ne le trouvait pas — et la notification du site echouait. Le handler l'avalait en silence.
|
|
socket-dir=/run/pdns-public
|
|
|
|
# LA SEULE INSTANCE QUI ECOUTE L'ADRESSE DE L'HOTE. Le pare-feu de la machine ne laisse
|
|
# frapper que le serveur public du site (flux `dns_public_site`).
|
|
local-address={{ ansible_host }}
|
|
local-port={{ serveur_powerdns_public_port }}
|
|
|
|
primary=yes
|
|
secondary=no
|
|
|
|
# LE TRANSFERT S'OUVRE A LA CLE, PAS A L'ADRESSE (eprouve le 2026-09-16).
|
|
#
|
|
# `allow-axfr-ips` et TSIG sont ALTERNATIFS : une adresse listee obtient la zone sans
|
|
# signature. Seule la boucle locale y figure — le serveur public du site n'y est jamais,
|
|
# et ne recoit la zone que signee par `TSIG-ALLOW-AXFR`.
|
|
#
|
|
# MESURE EN PRODUCTION (2026-09-17) : une fois `TSIG-ALLOW-AXFR` pose sur la zone, meme la
|
|
# boucle locale est refusee (« Transfer failed »). Pour imprimer la zone depuis la machine,
|
|
# signer la demande avec la cle en place :
|
|
# K=$(sudo -u pdns pdnsutil --config-name=public list-tsig-keys | awk '/^tsig-/{sub(/\.$/,"",$1); print $1":"$3; exit}')
|
|
# dig -y "hmac-sha256:$K" @{{ ansible_host }} -p {{ serveur_powerdns_public_port }} <zone> AXFR
|
|
disable-axfr=no
|
|
allow-axfr-ips=127.0.0.1/32
|
|
|
|
# NOTIFIER LE SEUL SERVEUR PUBLIC DU SITE (decouvert le 2026-09-16, dans les journaux).
|
|
#
|
|
# Par defaut, un primaire notifie AUSSI les adresses de ses enregistrements NS. Ici, ce
|
|
# sont les adresses PUBLIQUES des serveurs de noms : le primaire enverrait des
|
|
# notifications vers Internet depuis l'interieur du locataire. `only-notify` les borne.
|
|
# ET CEUX DES SITES PAIRS (2026-10-14) : le second serveur de noms tire la zone par le tunnel
|
|
# entre les sites, et doit apprendre qu'elle a change comme le premier.
|
|
only-notify={{ ([serveur_powerdns_dns_public_site] + serveur_powerdns_dns_public_pairs) | map('regex_replace', '$', '/32') | join(',') }}
|
|
also-notify={{ ([serveur_powerdns_dns_public_site] + serveur_powerdns_dns_public_pairs) | join(',') }}
|
|
|
|
version-string=anonymous
|
|
security-poll-suffix=
|