docs/dns-interne.md couvre desormais le DNS public sur deux sites : vue d'ensemble, chemin d'une requete interne, publication d'une zone, requete de l'Internet, NS d'une zone (cinq schemas Mermaid), et les tableaux des flux, des declarations, des gardes et de la bascule. README de serveur_powerdns et de serveur_dns_public a jour ; le wiki y renvoie. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.3 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/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.