Set-OPS-Public/roles/serveur_dns_public
Daniel Allaire c1d0d9b1a7 frontiere : publier un service du site, port public et redirection
Un flux externe porte port (la machine) et port_public (l'Internet). Le devis emet la
redirection et sa regle WAN, garde qu'elles aillent ensemble ; l'applicateur reconcilie
d_nat et encode les champs imbriques. DNS public : WAN:53 -> site-dnspub-01:1053 (dnsdist).
Plan lu : 4 objets a creer, rien d'autre ; pas encore applique.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 22:38:39 -04:00
..
defaults DNS public : dnsdist devant PowerDNS, debit et refus eprouves 2026-09-16 22:29:19 -04:00
handlers DNS public : dnsdist devant PowerDNS, debit et refus eprouves 2026-09-16 22:29:19 -04:00
meta frontiere : publier un service du site, port public et redirection 2026-09-16 22:38:39 -04:00
tasks DNS public : dnsdist devant PowerDNS, debit et refus eprouves 2026-09-16 22:29:19 -04:00
templates DNS public : dnsdist devant PowerDNS, debit et refus eprouves 2026-09-16 22:29:19 -04:00
README.md DNS public : dnsdist devant PowerDNS, debit et refus eprouves 2026-09-16 22:29:19 -04:00

serveur_dns_public

Pour qui : l'hébergeur qui publie les noms de ses locataires sur Internet.

Le serveur DNS public du site. Il est secondaire de toutes les zones publiques des locataires qu'il héberge. Il ne porte aucune donnée à lui : le locataire écrit sa zone, le site la sert.

Le locataire écrit, le site sert

LOCATAIRE   infra-dns-01     primaire caché de chezlepro.ca  ─┐ NOTIFY
                             (autorite: primaire-cache)        │ AXFR signé TSIG, tiré par le site
SITE        site-dnspub-01   secondaire public  ◄──────────────┘
  • Le primaire reste chez le locataire. Quand il part, il emporte sa zone, et le site n'a qu'à cesser d'être secondaire. Écrire les zones au site ferait de l'hébergeur la source des données du client.
  • La liste des zones se dérive de tous les locataires du site, dans scripts/site_inventaire.py. Jamais une liste tenue à la main.
  • Uniquement autorite: primaire-cache. Le rôle refuse une zone .internal : ce serveur répond à Internet.

Ce que l'épreuve de l'outil a appris (2026-09-16, PowerDNS 4.9.17)

Deux instances jetables, sept vérifications, avant d'écrire une ligne de ce rôle.

Constat Ce que le rôle en fait
allow-axfr-ips et TSIG sont alternatifs, pas cumulatifs : une adresse listée obtient la zone sans signature le primaire n'autorise aucune adresse ; seule la clé ouvre le transfert
allow-axfr-ips autorise la boucle locale par défaut un test négatif depuis la boucle locale n'en est pas un
le backend bind seul ne stocke aucune métadonnée bind-dnssec-db porte les clés TSIG
la syntaxe exige masters { ip:port; }; sans accolades, tout le fichier est refusé
le primaire notifie aussi les adresses de ses NS le primaire restreint ses notifications au seul serveur public du site

Durcissement

  • Secondaire seulement : secondary=yes, primary=no.
  • Aucun transfert sortant en phase 1 (disable-axfr=yes). La réplication vers le site pair passera par le tunnel WireGuard, plus tard.
  • Notifications acceptées des seuls primaires déclarés.
  • version-string=anonymous : la version est la première chose qu'un balayage demande.
  • security-poll-suffix= vide : PowerDNS interroge par défaut un domaine de l'éditeur à chaque démarrage. Un serveur souverain n'appelle pas un tiers.
  • Pas de récursion : PowerDNS Authoritative ne récurse pas — vérifié, il répond REFUSED.

Ce que la phase 1 n'expose pas

Aucun flux depuis Internet. Le port 53 public viendra en phase 2, par la redirection de la frontière — et seulement après DNSSEC signé chez le locataire, CAA, et la limitation de débit des réponses. Le déclarer aujourd'hui dans meta/flux.yml ferait émettre au devis une règle sur le WAN que personne n'aurait décidée.

Le frontal public : dnsdist (2026-09-16, phase 2)

L'Internet ne frappe jamais PowerDNS directement. dnsdist écoute <hôte>:serveur_dns_public_frontal_port (1053) — la frontière y redirige son 53 public — et relaie à PowerDNS, qui garde le 53 de la machine pour les NOTIFY des primaires et le site.

Règle Effet Éprouvé
opcode ≠ QUERY REFUSED (NOTIFY, UPDATE venus de dehors) NOTIFY → REFUSED
AXFR / IXFR REFUSED « Transfer failed »
ANY en UDP tronqué (RFC 8482) dig +notcp → tc
débit UDP > 20 q/s par /24 (/48) tronqué : le client légitime passe en TCP rafale 300 → 70 réponses, 230 tronquées
débit TCP > 40 q/s par /24 (/48) abandon —

Piège de mesure : dig envoie ANY en TCP par défaut. Sans +notcp, la règle semble inopérante. La sonde zones-publiques interroge par le frontal : c'est le chemin de l'Internet, et le seul qui voit PowerDNS et dnsdist ensemble.