Set-OPS-Public/roles/serveur_dns_public/README.md
Daniel Allaire aab1bcc83a doc : rangee par lecteur, trois portes d'entree (architecture, setup, usage) et un index
README reduit au role du projet et au demarrage rapide. docs/architecture.md (schemas
Mermaid), docs/setup.md, docs/usage.md (154 cibles en 13 familles), docs/README.md (index).
Documents ranges en conception/, exploitation/, hebergement/, projet/ ; 598 chemins suivis.
QUICKSTART.md, SOLUTION.md, architecture-set-ops.md et la carte fondus puis retires.

Preuves : P48 lit l'index et conception/mecanismes.md ; les gardes parcourent docs/ sous-
dossiers compris (_documents) ; usage.md suit le Makefile dans les deux sens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:01:54 -04:00

4.4 KiB

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 chaque site
SITE        site-dnspub-01   secondaire public  ◄──────────────┤
SITE PAIR   site-dnspub-01   secondaire public  ◄──────────────┘ par le lien entre les sites
  • 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 (disable-axfr=yes). Le site pair ne copie pas ce serveur : il tire chaque zone du primaire du locataire, par le lien entre les sites (2026-10-14). Un site qui tombe n'emporte pas la copie de l'autre.
  • 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.

Exposé à l'Internet (phase 2)

Le 53 public arrive par la redirection de la frontière vers le frontal (dnsdist, 1053), après DNSSEC signé chez le locataire, CAA, et la limitation de débit — P82 refuse l'inverse. Au site de TechnoLibre, il arrive par le relais et le tunnel opt9 de requin.

Deux sites, deux serveurs

dns_public_pairs (plan du site, déclaré des deux côtés) fait de chaque site le second serveur de noms de l'autre. Chaque zone désigne les deux (dns1.chezlepro.ca, dns1.technolibre.ca). Schémas, flux et ordre de bascule : docs/conception/dns-interne.md, section « Deux sites, deux serveurs de noms ».

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.